This report summarizes scanner evidence for storytold/designcraft. SynthScan examined 302,607 lines of code across 756 source files, recording 160 pattern matches distributed across 4 syntactic categories. The legacy adjusted pattern signal is 0.5 (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? 132 finding(s).
Are imports declared and package/API names verified? 28 finding(s).
Are wrappers, guards, and repeated structures necessary? 0 finding(s).
Which changes need focused human review? 160 finding(s).
Run additional scans to build a history of the legacy pattern signal. Score changes are not a measure of AI adoption or code quality.
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 160 distinct pattern matches across 4 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 |
|---|---|---|---|---|
| LOW | packaging/env.sh | 1 | # shellcheck shell=bash | COMMENT |
| LOW | packaging/macos/package.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | packaging/freebsd/package.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | packaging/linux/flatpak-oci.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | packaging/linux/package.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | packaging/linux/flatpak-bundle.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | packaging/linux/flatpak/ai.storyteller.designcraft.yml | 1 | # Flatpak manifest for DesignCraft, ready for a Flathub submission. | COMMENT |
| LOW | packaging/linux/flatpak/ai.storyteller.designcraft.yml | 21 | - --filesystem=xdg-data/ArtCraft/versions:ro | COMMENT |
| LOW | …ng/linux/flatpak/ai.storyteller.designcraft.bundle.yml | 1 | # Flatpak manifest for the single-file bundle attached to every GitHub release | COMMENT |
| LOW | …ng/linux/flatpak/ai.storyteller.designcraft.bundle.yml | 21 | # Display: Wayland first; X11 only when no Wayland compositor is running. | COMMENT |
| LOW | crates/tools/src/snap.rs | 161 | return None; | COMMENT |
| LOW | crates/tools/src/snap.rs | 501 | if !on { | COMMENT |
| LOW | crates/tools/src/select.rs | 1 | //! Selection tool (V) and Direct Selection tool (A). | COMMENT |
| LOW | crates/color/src/cms.rs | 1 | //! Colour management: working spaces, RGB ↔ CMYK ↔ Lab conversions with rendering intents, | COMMENT |
| LOW | crates/color/src/cms/generic.rs | 1 | //! "DesignCraft Generic CMYK (SWOP-like)": our own parametric press model. | COMMENT |
| LOW | crates/textimport/src/lib.rs | 1 | //! Text import (File › Place of text files): plain text, Word documents (`.docx`) and RTF become | COMMENT |
| LOW | crates/textimport/src/docx_numbering.rs | 1 | //! Word lists: `word/numbering.xml` and the `w:numPr` of paragraphs and paragraph styles. | COMMENT |
| LOW | crates/compose/examples/hyphgen.rs | 1 | //! Regenerates the bundled English hyphenation data from the Moby Hyphenator II word list. | COMMENT |
| LOW | crates/compose/src/grep.rs | 1 | //! The GREP dialect of page-layout documents (Perl-style regular expressions with letter-class | COMMENT |
| LOW | crates/compose/src/cache.rs | 1 | //! Composition cache shared by the engine, the renderer and exporters. | COMMENT |
| LOW | crates/compose/src/kenten.rs | 1 | //! Kenten (圏点): emphasis marks set beside each character of a run, over it in horizontal text | COMMENT |
| LOW | crates/compose/src/notes.rs | 1 | //! Footnote layout: numbering, room at the bottom of columns, and placement. | COMMENT |
| LOW | crates/compose/src/shatai.rs | 1 | //! Shatai (斜体): the oblique of Japanese phototypesetting. The character's em box is compressed | COMMENT |
| LOW | crates/compose/src/breaker.rs | 1 | //! Line breaking: the paragraph composer (Knuth–Plass total fit), the single-line composer | COMMENT |
| LOW | crates/compose/src/lib.rs | 1 | //! DesignCraft text composition. | COMMENT |
| LOW | crates/compose/src/lib.rs | 4181 | /// or its first baseline offset at the top of a column) and must not overlap the wrap; it may hang its | COMMENT |
| LOW | crates/compose/src/lib.rs | 5021 | /// Take the drop cap (the glyphs before byte `end`) off the front of a paragraph's glyphs and scale | COMMENT |
| LOW | crates/compose/src/optical.rs | 1 | //! Optical kerning: pair spacing measured from the glyph outlines, for text whose kerning is | COMMENT |
| LOW | crates/compose/src/grid.rs | 1 | //! Grid Settings (グリッド設定) against the baseline grid: which point of a line sits on a grid | COMMENT |
| LOW | crates/compose/src/wrap.rs | 1 | //! Text wrap around anchored objects. | COMMENT |
| LOW | crates/compose/src/hyphen.rs | 1 | //! Hyphenation. English uses the bundled dictionary and patterns below. Other languages use the | COMMENT |
| LOW | crates/pdf/src/lib.rs | 1 | //! DesignCraft PDF export (print), written with `krilla`. | COMMENT |
| LOW | crates/pdf/src/lib.rs | 21 | //! Appearance of Black says so) as `/op` and `/OP` with `/OPM 1`; left out of PDF/A. | COMMENT |
| LOW | crates/pdf/src/lib.rs | 261 | // as the production RandomState used by the integration-test executable. | COMMENT |
| LOW | crates/pdf/src/text.rs | 1 | //! Composed text → PDF text objects with embedded (subsetted) fonts. | COMMENT |
| LOW | crates/render/src/types.rs | 41 | /// Preferences › Composition: yellow behind lines whose word spacing breaks the paragraph's | COMMENT |
| LOW | crates/render/src/types.rs | 61 | /// accurate dark grey. | COMMENT |
| LOW | crates/render/src/fx.rs | 1 | //! Soft object effects (Effects panel): drop shadow, outer glow, inner shadow and basic feather, | COMMENT |
| LOW | crates/render/src/blendspace.rs | 1 | //! CMYK transparency using two passes of the ordinary scene renderer. | COMMENT |
| LOW | crates/mcp/src/lib.rs | 1 | //! DesignCraft's MCP server. | COMMENT |
| LOW | crates/ui-egui/src/control.rs | 1 | //! Programmatic control of the running app (agents, tests, MCP). | COMMENT |
| LOW | crates/ui-egui/src/cursors.rs | 1 | //! Tool cursors drawn in code: black glyphs with a white halo, so they read on any page colour. | COMMENT |
| LOW | crates/ui-egui/src/lib.rs | 81 | pub(crate) const SCREENSHOT_MAX_AGGREGATE_BYTES: usize = 256 * 1024 * 1024; | COMMENT |
| LOW | crates/ui-egui/src/lib.rs | 241 | last_time: f64, | COMMENT |
| LOW | crates/ui-egui/src/lib.rs | 261 | /// Owner/generation/cause bookkeeping for the canvas story's custom IME producer. | COMMENT |
| LOW | crates/ui-egui/src/lib.rs | 301 | COMMENT | |
| LOW | crates/ui-egui/src/state.rs | 201 | /// View › Structure › Show Tag Markers. | COMMENT |
| LOW | crates/ui-egui/src/state.rs | 241 | pub display_quality: designcraft_render::DisplayQuality, | COMMENT |
| LOW | crates/ui-egui/src/state.rs | 261 | /// default layout (`panel_docking::default_layout`). | COMMENT |
| LOW | crates/ui-egui/src/state.rs | 281 | /// One-frame reveal request; z-order is never persisted. | COMMENT |
| LOW | crates/ui-egui/src/state.rs | 341 | /// their text instead of the frames. | COMMENT |
| LOW | crates/ui-egui/src/state.rs | 361 | pub dialog: Option<dialogs::Dialog>, | COMMENT |
| LOW | crates/ui-egui/src/modal_drag.rs | 1 | //! Modal windows (dialogs, About) that the user moves by dragging their title row. | COMMENT |
| LOW | crates/ui-egui/src/shortcuts_dialog.rs | 1 | //! Edit › Keyboard Shortcuts: craft-keymap's shared dialog over DesignCraft's keymap and the user's | COMMENT |
| LOW | crates/ui-egui/src/app/file_dialogs.rs | 1 | //! File and message dialogs that never block the frame (craft-dialogs). | COMMENT |
| LOW | crates/ui-egui/src/app/file_dialogs.rs | 21 | pub(crate) enum Bound { | COMMENT |
| LOW | crates/ui-egui/src/canvas/ime.rs | 341 | } | COMMENT |
| LOW | crates/ui-egui/src/canvas/guides.rs | 81 | /// Where a dragged ruler guide is (#1221). | COMMENT |
| LOW | crates/pptx/src/lib.rs | 1 | //! PowerPoint export (File › Export › PowerPoint). | COMMENT |
| LOW | crates/format/src/lib.rs | 1 | //! The native `.designcraft` format: a zip archive holding | COMMENT |
| 70 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | crates/compose/src/tests.rs | 4286 | let text = "Lorem ipsum dolor sit amet consectetur"; | CODE |
| LOW | crates/compose/src/tests.rs | 4286 | let text = "Lorem ipsum dolor sit amet consectetur"; | CODE |
| LOW | crates/render/src/damage.rs | 336 | let text = "Lorem ipsum dolor sit amet. ".repeat(60); | CODE |
| LOW | crates/render/src/damage.rs | 336 | let text = "Lorem ipsum dolor sit amet. ".repeat(60); | CODE |
| LOW | crates/render/src/damage.rs | 353 | let text = "Lorem ipsum dolor sit amet. ".repeat(40); | CODE |
| LOW | crates/render/src/damage.rs | 353 | let text = "Lorem ipsum dolor sit amet. ".repeat(40); | CODE |
| LOW | crates/engine/src/cmd/place_text/tests.rs | 38 | let para = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. ".repeat(12); | CODE |
| LOW | crates/engine/src/cmd/place_text/tests.rs | 38 | let para = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. ".repeat(12); | CODE |
| LOW | crates/engine/src/cmd/place_text/tests.rs | 81 | std::fs::write(&path, vec!["Lorem ipsum dolor sit amet, consectetur adipiscing elit. ".repeat(12); 40].join("\n")).u | CODE |
| LOW | crates/engine/src/cmd/place_text/tests.rs | 81 | std::fs::write(&path, vec!["Lorem ipsum dolor sit amet, consectetur adipiscing elit. ".repeat(12); 40].join("\n")).u | CODE |
| LOW | crates/engine/src/cmd/place_text/tests.rs | 116 | std::fs::write(&path, vec!["Lorem ipsum dolor sit amet, consectetur adipiscing elit. ".repeat(12); 30].join("\n")).u | CODE |
| LOW | crates/engine/src/cmd/place_text/tests.rs | 116 | std::fs::write(&path, vec!["Lorem ipsum dolor sit amet, consectetur adipiscing elit. ".repeat(12); 30].join("\n")).u | CODE |
| LOW | crates/engine/src/cmd/place_text/tests.rs | 165 | std::fs::write(&path, vec!["Lorem ipsum dolor sit amet, consectetur adipiscing elit. ".repeat(12); 24].join("\n")).u | CODE |
| LOW | crates/engine/src/cmd/place_text/tests.rs | 165 | std::fs::write(&path, vec!["Lorem ipsum dolor sit amet, consectetur adipiscing elit. ".repeat(12); 24].join("\n")).u | CODE |
| LOW | crates/engine/src/cmd/place_text/tests.rs | 191 | std::fs::write(&path, vec!["Lorem ipsum dolor sit amet, consectetur adipiscing elit. ".repeat(12); 60].join("\n")).u | CODE |
| LOW | crates/engine/src/cmd/place_text/tests.rs | 191 | std::fs::write(&path, vec!["Lorem ipsum dolor sit amet, consectetur adipiscing elit. ".repeat(12); 60].join("\n")).u | CODE |
| LOW | crates/engine/src/cmd/place_text/tests.rs | 222 | std::fs::write(&path, vec!["Lorem ipsum dolor sit amet, consectetur adipiscing elit. ".repeat(12); 30].join("\n")).u | CODE |
| LOW | crates/engine/src/cmd/place_text/tests.rs | 222 | std::fs::write(&path, vec!["Lorem ipsum dolor sit amet, consectetur adipiscing elit. ".repeat(12); 30].join("\n")).u | CODE |
| LOW | crates/engine/src/cmd/place_text/tests.rs | 248 | std::fs::write(&path, vec!["Lorem ipsum dolor sit amet, consectetur adipiscing elit. ".repeat(12); 12].join("\n")).u | CODE |
| LOW | crates/engine/src/cmd/place_text/tests.rs | 248 | std::fs::write(&path, vec!["Lorem ipsum dolor sit amet, consectetur adipiscing elit. ".repeat(12); 12].join("\n")).u | CODE |
| LOW | crates/engine/src/cmd/place_text/tests.rs | 317 | let body = [para("Title", "Front"), para("Chapter", "Chapter one"), para("Body", "lorem ipsum dolor sit amet ".repea | CODE |
| LOW | crates/engine/src/cmd/place_text/tests.rs | 317 | let body = [para("Title", "Front"), para("Chapter", "Chapter one"), para("Body", "lorem ipsum dolor sit amet ".repea | CODE |
| LOW | crates/engine/src/cmd/place_text/tests.rs | 355 | st.insert(0, &format!("Front\nGone\nChapter one\n{}", "lorem ipsum dolor sit amet ".repeat(400).trim())); | CODE |
| LOW | crates/engine/src/cmd/place_text/tests.rs | 355 | st.insert(0, &format!("Front\nGone\nChapter one\n{}", "lorem ipsum dolor sit amet ".repeat(400).trim())); | CODE |
| LOW | crates/engine/src/cmd/place_text/tests.rs | 390 | let body = "lorem ipsum dolor sit amet ".repeat(300); | CODE |
| LOW | crates/engine/src/cmd/place_text/tests.rs | 390 | let body = "lorem ipsum dolor sit amet ".repeat(300); | CODE |
| LOW | crates/idml/src/tests/wrap.rs | 25 | "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore m | CODE |
| LOW | crates/idml/src/tests/wrap.rs | 25 | "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore m | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | xtask/src/stats.rs | 104 | println!("\n(#[test] counts source attributes; macro-generated tests count once. Use --exact for harness counts. | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | packaging/linux/flatpak-oci.sh | 5 | # Usage: | COMMENT |