Digital logic design tool and simulator
This report summarizes scanner evidence for logisim-evolution/logisim-evolution, a Java project with 7,866 GitHub stars. SynthScan examined 415,638 lines of code across 2680 source files, recording 93 pattern matches distributed across 10 syntactic categories. The legacy adjusted pattern signal is 0.9 (Low pattern signal); it is not an authorship estimate.
Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.
Use each vector to guide manual verification of the underlying findings.
Payload schema: 1.0.0 · Engine: 2.0.0 · Scoring: heuristic-density-v1 · Scan date: 2026-10-31.
Can maintainers explain intent, assumptions, and trade-offs? 48 finding(s).
Are imports declared and package/API names verified? 42 finding(s).
Are wrappers, guards, and repeated structures necessary? 4 finding(s).
Which changes need focused human review? 93 finding(s).
This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.
Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.
This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.
The scanner identified 93 distinct pattern matches across 10 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL | …ch/logisim/circuit/CircuitHdlGeneratorFactoryTest.java | 362 | com.cburch.logisim.fpga.Strings.S.get("HdlUnconnectedOutputPinWarning"); | CODE |
| CRITICAL⚡ | …t/java/com/cburch/logisim/std/io/MatrixKeypadTest.java | 33 | org.junit.jupiter.api.Assertions.assertFalse(keypad.isHDLSupportedComponent(attrs)); | CODE |
| CRITICAL⚡ | …t/java/com/cburch/logisim/std/io/MatrixKeypadTest.java | 36 | org.junit.jupiter.api.Assertions.assertTrue(keypad.isHDLSupportedComponent(attrs)); | CODE |
| CRITICAL⚡ | …t/java/com/cburch/logisim/std/io/MatrixKeypadTest.java | 37 | org.junit.jupiter.api.Assertions.assertNotNull(keypad.getHDLGenerator(attrs)); | CODE |
| CRITICAL⚡ | …c/test/java/com/cburch/logisim/gui/log/SignalTest.java | 48 | org.junit.jupiter.api.Assertions.assertDoesNotThrow(() -> signal.replaceRecent(Value.FALSE, 10)); | CODE |
| CRITICAL⚡ | …c/test/java/com/cburch/logisim/gui/log/SignalTest.java | 51 | org.junit.jupiter.api.Assertions.assertDoesNotThrow(() -> signal.extend(Value.TRUE, 10)); | CODE |
| CRITICAL⚡ | …c/test/java/com/cburch/logisim/gui/log/SignalTest.java | 52 | org.junit.jupiter.api.Assertions.assertNotNull(signal.getValue(signal.getEndTime() - 5)); | CODE |
| CRITICAL⚡ | …c/test/java/com/cburch/logisim/gui/log/SignalTest.java | 62 | org.junit.jupiter.api.Assertions.assertNotNull(it); | CODE |
| CRITICAL⚡ | …c/test/java/com/cburch/logisim/gui/log/SignalTest.java | 63 | org.junit.jupiter.api.Assertions.assertEquals(Value.FALSE, it.value); | CODE |
| CRITICAL⚡ | …c/test/java/com/cburch/logisim/gui/log/SignalTest.java | 77 | org.junit.jupiter.api.Assertions.assertEquals(250, signal.getEndTime()); | CODE |
| CRITICAL⚡ | …c/test/java/com/cburch/logisim/gui/log/SignalTest.java | 78 | org.junit.jupiter.api.Assertions.assertEquals(Value.UNKNOWN, signal.getValue(-50)); | CODE |
| CRITICAL⚡ | …c/test/java/com/cburch/logisim/gui/log/SignalTest.java | 79 | org.junit.jupiter.api.Assertions.assertEquals(Value.UNKNOWN, signal.getValue(249)); | CODE |
| CRITICAL⚡ | …c/test/java/com/cburch/logisim/gui/log/SignalTest.java | 80 | org.junit.jupiter.api.Assertions.assertNull(signal.getValue(250)); | CODE |
| CRITICAL | …c/test/java/com/cburch/logisim/gui/log/SignalTest.java | 116 | org.junit.jupiter.api.Assertions.assertFalse(it.advance()); | CODE |
| CRITICAL | …c/test/java/com/cburch/logisim/gui/log/SignalTest.java | 117 | org.junit.jupiter.api.Assertions.assertFalse(it.advance(10)); | CODE |
| CRITICAL | …urch/logisim/gui/main/AttrTableSelectionModelTest.java | 117 | + com.cburch.logisim.util.Strings.S.get("variableNameNotAcceptable"); | CODE |
| CRITICAL | …urch/logisim/gui/main/AttrTableSelectionModelTest.java | 138 | "\"A\" : " + com.cburch.logisim.circuit.Strings.S.get("UsedLabelNameError"); | CODE |
| CRITICAL | src/main/java/com/cburch/draw/toolbar/Toolbar.java | 40 | com.cburch.logisim.prefs.AppPreferences.UI_ANTIALIASING.addPropertyChangeListener(myListener); | CODE |
| CRITICAL | …ava/com/cburch/logisim/fpga/data/IoComponentTypes.java | 171 | return com.cburch.logisim.std.io.SevenSegment.getOutputLabel(id); | CODE |
| CRITICAL | …ava/com/cburch/logisim/fpga/data/IoComponentTypes.java | 173 | return com.cburch.logisim.std.io.RgbLed.getLabel(id); | CODE |
| CRITICAL | src/main/java/com/cburch/logisim/gui/menu/MenuEdit.java | 345 | return com.cburch.logisim.tools.Strings.S.get("textTool"); | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | .markdownlint.yaml | 201 | COMMENT | |
| LOW | artwork/update_assets.sh | 81 | COMMENT | |
| LOW | .github/stale.yml | 1 | # | COMMENT |
| LOW | .github/workflows/changelog.yml | 1 | # Ensures every pull request that touches the code also documents itself in | COMMENT |
| LOW | .github/workflows/nightly.yml | 1 | # | COMMENT |
| LOW | .github/workflows/nightly.yml | 401 | # # Building for Windows Arm. | COMMENT |
| LOW | .github/workflows/nightly.yml | 421 | # | COMMENT |
| LOW | .github/workflows/post-merge-cleanup.yml | 1 | # Locks the conversation of every merged pull request, and of the ticket(s) that | COMMENT |
| LOW | .github/workflows/ticket.yml | 1 | # Ensures every pull request links the ticket it addresses, using one of GitHub's | COMMENT |
| LOW | src/main/resources/doc/fr/html/guide/jar/incr.html | 181 | // Now compute the output. We've farmed this out to a helper method, | COMMENT |
| LOW | src/main/resources/doc/en/html/guide/jar/incr.html | 181 | // Now compute the output. We've farmed this out to a helper method, | COMMENT |
| LOW | src/main/java/com/cburch/gray/GrayIncrementer.java | 121 | */ | COMMENT |
| LOW | src/main/java/com/cburch/logisim/util/TableSorter.java | 241 | cancelSorting(); | COMMENT |
| LOW | src/main/java/com/cburch/logisim/file/XmlWriter.java | 141 | final var childrenCount = children.getLength(); | COMMENT |
| LOW | src/main/java/com/cburch/logisim/soc/dma/DmaState.java | 201 | COMMENT | |
| LOW | src/main/java/com/cburch/logisim/circuit/Simulator.java | 101 | // propagator.reset() -- clears all signal values | COMMENT |
| LOW | …logisim/circuit/appear/DefaultHolyCrossAppearance.java | 41 | public static final int BOTTOM_MARGIN = 5; // extra space below ports | COMMENT |
| LOW | src/main/java/com/cburch/logisim/std/memory/Mem.java | 41 | // it | COMMENT |
| LOW | src/main/java/com/cburch/logisim/std/ttl/Ttl74381.java | 161 | // | COMMENT |
| LOW | src/main/java/com/cburch/logisim/std/ttl/Ttl74181.java | 181 | // | COMMENT |
| LOW | …ain/java/com/cburch/logisim/std/io/ReptarLocalBus.java | 161 | // Location loc = painter.getLocation(); | COMMENT |
| LOW | …ain/java/com/cburch/logisim/std/io/ReptarLocalBus.java | 181 | // Value[] outs = ReptarLocalBus.computeSum(dataWidth, a, b, c_in); | COMMENT |
| LOW | src/main/java/com/cburch/logisim/std/wiring/Pin.java | 1241 | // Input pin in simple mode: [Behavior=simple] | COMMENT |
| LOW | src/main/java/com/cburch/logisim/gui/hex/HexFile.java | 61 | import javax.swing.filechooser.FileFilter; | COMMENT |
| LOW | src/main/java/com/cburch/logisim/gui/hex/HexFile.java | 81 | // chunks and used to fill the locations of memory. For example, if the memory | COMMENT |
| LOW | src/main/java/com/cburch/logisim/gui/hex/HexFile.java | 101 | // ignored. Anything after two consecutive whitespaces will also be ignored, | COMMENT |
| LOW | src/main/java/com/cburch/logisim/gui/hex/HexFile.java | 121 | // addresses. Each group of hex digits corresponds to one word of memory. Again, | COMMENT |
| LOW | src/main/java/com/cburch/logisim/gui/hex/HexFile.java | 141 | // memory words are 20 bits each, for big-endian the first byte of the file will | COMMENT |
| LOW | src/main/java/com/cburch/logisim/gui/hex/HexFile.java | 161 | // words: |1.|2.|3.|4.|5.|6.|7.|8.|9.|A.|B.|C.|D.|E.|F.|0.|1.|2.| | COMMENT |
| LOW | src/main/java/com/cburch/logisim/gui/hex/HexFile.java | 181 | // corresponds to around 7*8/16 = 3.5 words like so: | COMMENT |
| LOW | src/main/java/com/cburch/logisim/gui/hex/HexFile.java | 201 | // this format, starting with: | COMMENT |
| LOW | …ain/java/com/cburch/logisim/gui/chrono/RightPanel.java | 161 | COMMENT | |
| LOW | …c/main/java/com/cburch/logisim/gui/log/TablePanel.java | 161 | // final var firstRow = Math.max(0, (clip.y - y) / cellHeight - 1); | COMMENT |
| LOW | …main/java/com/cburch/logisim/gui/log/OptionsPanel.java | 61 | // transient signal fluctuations that may happen during propagation. | COMMENT |
| LOW | …c/main/java/com/cburch/logisim/gui/log/SignalInfo.java | 41 | // Led), then that component is one that appears in the top-level circuit. | COMMENT |
| LOW | src/main/java/com/cburch/logisim/gui/log/Signal.java | 221 | // cap -----------------------------------------------| | COMMENT |
| LOW | …om/cburch/logisim/gui/main/CanvasPaintCoordinator.java | 21 | // been updated and needs to be redrawn. This may happen as frequently as | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …a/com/cburch/logisim/file/CustomLibraryImportTest.java | 29 | private static final String RANDOM_FILE_DATA = "Lorem Ipsum"; | STRING |
| LOW | src/main/resources/doc/zh/testhtml/img.html | 22 | <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna | CODE |
| LOW | src/main/resources/doc/zh/testhtml/img.html | 22 | <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna | CODE |
| LOW | src/main/resources/doc/zh/testhtml/img.html | 34 | <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore mag | CODE |
| LOW | src/main/resources/doc/zh/testhtml/img.html | 34 | <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore mag | CODE |
| LOW⚡ | src/main/resources/doc/zh/testhtml/img.html | 47 | <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore mag | CODE |
| LOW⚡ | src/main/resources/doc/zh/testhtml/img.html | 47 | <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore mag | CODE |
| LOW⚡ | src/main/resources/doc/zh/testhtml/img.html | 52 | <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore mag | CODE |
| LOW⚡ | src/main/resources/doc/zh/testhtml/img.html | 52 | <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore mag | CODE |
| LOW⚡ | src/main/resources/doc/zh/testhtml/img.html | 55 | <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore mag | CODE |
| LOW⚡ | src/main/resources/doc/zh/testhtml/img.html | 55 | <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore mag | CODE |
| LOW | src/main/resources/doc/en/testhtml/img.html | 22 | <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna | CODE |
| LOW | src/main/resources/doc/en/testhtml/img.html | 22 | <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna | CODE |
| LOW | src/main/resources/doc/en/testhtml/img.html | 34 | <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore mag | CODE |
| LOW | src/main/resources/doc/en/testhtml/img.html | 34 | <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore mag | CODE |
| LOW⚡ | src/main/resources/doc/en/testhtml/img.html | 47 | <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore mag | CODE |
| LOW⚡ | src/main/resources/doc/en/testhtml/img.html | 47 | <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore mag | CODE |
| LOW⚡ | src/main/resources/doc/en/testhtml/img.html | 52 | <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore mag | CODE |
| LOW⚡ | src/main/resources/doc/en/testhtml/img.html | 52 | <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore mag | CODE |
| LOW⚡ | src/main/resources/doc/en/testhtml/img.html | 55 | <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore mag | CODE |
| LOW⚡ | src/main/resources/doc/en/testhtml/img.html | 55 | <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore mag | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | …com/cburch/logisim/gui/appear/AppearanceEditPopup.java | 44 | // ── Reset to Original Size ────────────────────────────────────────── | COMMENT |
| MEDIUM | …com/cburch/logisim/gui/appear/AppearanceEditPopup.java | 65 | // ── Optimize Image Size ───────────────────────────────────────────── | COMMENT |
| MEDIUM | …com/cburch/logisim/gui/appear/AppearanceEditPopup.java | 115 | // ── Make White Background Transparent ────────────────────────────── | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | …va/com/cburch/logisim/gui/test/TestPanelDebugTest.java | 60 | writer.write("0 0x01 0x00 1 1\n"); // Step 1: row 0 | CODE |
| LOW⚡ | …va/com/cburch/logisim/gui/test/TestPanelDebugTest.java | 61 | writer.write("1 0x01 0x00 1 2\n"); // Step 2: row 1 | CODE |
| LOW⚡ | …va/com/cburch/logisim/gui/test/TestPanelDebugTest.java | 62 | writer.write("0 0x01 0x01 1 3\n"); // Step 3: row 2 (target) | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | …va/com/cburch/logisim/gui/test/TestPanelDebugTest.java | 60 | writer.write("0 0x01 0x00 1 1\n"); // Step 1: row 0 | CODE |
| LOW⚡ | …va/com/cburch/logisim/gui/test/TestPanelDebugTest.java | 61 | writer.write("1 0x01 0x00 1 2\n"); // Step 2: row 1 | CODE |
| LOW⚡ | …va/com/cburch/logisim/gui/test/TestPanelDebugTest.java | 62 | writer.write("0 0x01 0x01 1 3\n"); // Step 3: row 2 (target) | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | …ain/resources/doc/zh/html/guide/subcirc/sub-debug.html | 80 | <img alt="#########" src="../../../img-guide/subcirc-8-delve.png"/> | CODE |
| MEDIUM | …ain/resources/doc/zh/html/guide/subcirc/sub-debug.html | 97 | <img alt="#########" class="notscal" src="../../../../img-guide/subcirc-delve.png"/> | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | .github/workflows/nightly.yml | 49 | # Check if latest commit is less than a day. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | src/main/java/com/cburch/logisim/circuit/Simulator.java | 233 | // smoothFactor = opts.getAttributeSet().getValue(Options.ATTR_SIM_SMOOTH); #TODO: implement smooth factor | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | src/main/java/com/cburch/logisim/tools/SelectTool.java | 119 | private static class MoveRequestHandler implements MoveRequestListener { | CODE |