Editorial diagram design for Claude Code, Codex, GitHub Copilot, Cursor, Factory Droid, and Pi. 44 diagram types. Self-contained HTML + SVG. No shadows. No Mermaid slop.
This report summarizes scanner evidence for cathrynlavery/diagram-design, a HTML project with 50,045 GitHub stars. SynthScan examined 102,298 lines of code across 414 source files, recording 531 pattern matches distributed across 13 syntactic categories. The legacy adjusted pattern signal is 10.3 (Moderate 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.
Can maintainers explain intent, assumptions, and trade-offs? 272 finding(s).
Are imports declared and package/API names verified? 113 finding(s).
Are wrappers, guards, and repeated structures necessary? 285 finding(s).
Which changes need focused human review? 531 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 531 distinct pattern matches across 13 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 |
|---|---|---|---|---|
| HIGH | scripts/test-verify-ridgeline.py | 0 | run one mutation: it must be a real edit, and it must be rejected. | STRING |
| HIGH | scripts/test-verify-bump.py | 0 | run one mutation: it must be a real edit, and it must be rejected. | STRING |
| HIGH | scripts/test-verify-sankey.py | 0 | run one mutation: it must be a real edit, and it must be rejected. | STRING |
| HIGH | scripts/verify-marimekko.py | 0 | one start tag this checker cares about, as the browser tokenized it. | STRING |
| HIGH | scripts/verify-ridgeline.py | 0 | one start tag this checker cares about, as the browser tokenized it. | STRING |
| HIGH | scripts/verify-slopegraph.py | 0 | one start tag this checker cares about, as the browser tokenized it. | STRING |
| HIGH | scripts/verify-bubble.py | 0 | one start tag this checker cares about, as the browser tokenized it. | STRING |
| HIGH | scripts/verify-streamgraph.py | 0 | one start tag this checker cares about, as the browser tokenized it. | STRING |
| HIGH | scripts/verify-marimekko.py | 0 | attributes as the browser keeps them: on a repeat, the first wins. html parsing drops a duplicate attribute rather than | STRING |
| HIGH | scripts/verify-ridgeline.py | 0 | attributes as the browser keeps them: on a repeat, the first wins. html parsing drops a duplicate attribute rather than | STRING |
| HIGH | scripts/verify-slopegraph.py | 0 | attributes as the browser keeps them: on a repeat, the first wins. html parsing drops a duplicate attribute rather than | STRING |
| HIGH | scripts/verify-bubble.py | 0 | attributes as the browser keeps them: on a repeat, the first wins. html parsing drops a duplicate attribute rather than | STRING |
| HIGH | scripts/verify-marimekko.py | 0 | collect paths, texts, title/desc and style elements with ancestry. htmlparser already lowercases tag and attribute names | STRING |
| HIGH | scripts/verify-ridgeline.py | 0 | collect paths, texts, title/desc and style elements with ancestry. htmlparser already lowercases tag and attribute names | STRING |
| HIGH | scripts/verify-slopegraph.py | 0 | collect paths, texts, title/desc and style elements with ancestry. htmlparser already lowercases tag and attribute names | STRING |
| HIGH | scripts/verify-bubble.py | 0 | collect paths, texts, title/desc and style elements with ancestry. htmlparser already lowercases tag and attribute names | STRING |
| HIGH | scripts/verify-streamgraph.py | 0 | collect paths, texts, title/desc and style elements with ancestry. htmlparser already lowercases tag and attribute names | STRING |
| HIGH | scripts/verify-marimekko.py | 0 | how this element carries a transform, phrased for the finding, or none. a transform reaches the renderer by three carrie | STRING |
| HIGH | scripts/verify-ridgeline.py | 0 | how this element carries a transform, phrased for the finding, or none. a transform reaches the renderer by three carrie | STRING |
| HIGH | scripts/verify-slopegraph.py | 0 | how this element carries a transform, phrased for the finding, or none. a transform reaches the renderer by three carrie | STRING |
| HIGH | scripts/verify-bubble.py | 0 | how this element carries a transform, phrased for the finding, or none. a transform reaches the renderer by three carrie | STRING |
| HIGH | scripts/verify-streamgraph.py | 0 | how this element carries a transform, phrased for the finding, or none. a transform reaches the renderer by three carrie | STRING |
| HIGH | scripts/verify-marimekko.py | 0 | findings for one file on disk, or [] if it is not a beeswarm. | STRING |
| HIGH | scripts/verify-slopegraph.py | 0 | findings for one file on disk, or [] if it is not a beeswarm. | STRING |
| HIGH | scripts/verify-streamgraph.py | 0 | findings for one file on disk, or [] if it is not a beeswarm. | STRING |
| HIGH | scripts/verify-beeswarm.py | 0 | findings for one file on disk, or [] if it is not a beeswarm. | STRING |
| HIGH | scripts/test-verify-marimekko.py | 0 | a single defect must produce a single finding, not a cascade. | STRING |
| HIGH | scripts/test-verify-bubble.py | 0 | a single defect must produce a single finding, not a cascade. | STRING |
| HIGH | scripts/test-verify-slopegraph.py | 0 | a single defect must produce a single finding, not a cascade. | STRING |
| HIGH | scripts/test-verify-beeswarm.py | 0 | a single defect must produce a single finding, not a cascade. | STRING |
| HIGH | scripts/test-verify-streamgraph.py | 0 | a single defect must produce a single finding, not a cascade. | STRING |
| HIGH | scripts/verify-ridgeline.py | 0 | first-wins attributes of one tag's raw attribute text, via the parser. | STRING |
| HIGH | scripts/verify-slopegraph.py | 0 | first-wins attributes of one tag's raw attribute text, via the parser. | STRING |
| HIGH | scripts/verify-bubble.py | 0 | first-wins attributes of one tag's raw attribute text, via the parser. | STRING |
| HIGH | scripts/verify-streamgraph.py | 0 | first-wins attributes of one tag's raw attribute text, via the parser. | STRING |
| HIGH | scripts/verify-ridgeline.py | 0 | the first mark-moving declaration in css text, read past comments, or none. every carrier goes through here - an inline | STRING |
| HIGH | scripts/verify-slopegraph.py | 0 | the first mark-moving declaration in css text, read past comments, or none. every carrier goes through here - an inline | STRING |
| HIGH | scripts/verify-bubble.py | 0 | the first mark-moving declaration in css text, read past comments, or none. every carrier goes through here - an inline | STRING |
| HIGH | scripts/verify-ridgeline.py | 0 | no transform may move verified geometry or a bound label. all three carriers are held to that rule - the `transform` att | STRING |
| HIGH | scripts/verify-slopegraph.py | 0 | no transform may move verified geometry or a bound label. all three carriers are held to that rule - the `transform` att | STRING |
| HIGH | scripts/verify-bubble.py | 0 | no transform may move verified geometry or a bound label. all three carriers are held to that rule - the `transform` att | STRING |
| HIGH | scripts/verify-bump.py | 0 | (?p<name>[\w:-]+)\s*=\s*(?p<quote>["'])(?p<value>.*?)(?p=quote) | STRING |
| HIGH | scripts/verify-skin-polarity.py | 0 | (?p<name>[\w:-]+)\s*=\s*(?p<quote>["'])(?p<value>.*?)(?p=quote) | STRING |
| HIGH | scripts/verify-beeswarm.py | 0 | (?p<name>[\w:-]+)\s*=\s*(?p<quote>["'])(?p<value>.*?)(?p=quote) | STRING |
| HIGH | scripts/verify-slopegraph.py | 0 | a finite float from a numeric token, or none. `float("nan")` succeeds and then every `abs(x) > tolerance` comparison is | STRING |
| HIGH | scripts/verify-bubble.py | 0 | a finite float from a numeric token, or none. `float("nan")` succeeds and then every `abs(x) > tolerance` comparison is | STRING |
| HIGH | scripts/verify-beeswarm.py | 0 | a finite float from a numeric token, or none. `float("nan")` succeeds and then every `abs(x) > tolerance` comparison is | STRING |
| HIGH | scripts/verify-slopegraph.py | 0 | (value, reason) for a label's visible text. returns a value only when the text carries exactly one complete numeric toke | STRING |
| HIGH | scripts/verify-bubble.py | 0 | (value, reason) for a label's visible text. returns a value only when the text carries exactly one complete numeric toke | STRING |
| HIGH | scripts/verify-beeswarm.py | 0 | (value, reason) for a label's visible text. returns a value only when the text carries exactly one complete numeric toke | STRING |
| HIGH | scripts/verify-slopegraph.py | 0 | the accessible name and description, where a figure says what it is. | STRING |
| HIGH | scripts/verify-bubble.py | 0 | the accessible name and description, where a figure says what it is. | STRING |
| HIGH | scripts/verify-beeswarm.py | 0 | the accessible name and description, where a figure says what it is. | STRING |
| HIGH | skills/diagram-design/scripts/mermaid_extract.py | 0 | emit digests as utf-8 even when windows selects a legacy codepage. | STRING |
| HIGH | skills/diagram-design/scripts/drawio_extract.py | 0 | emit digests as utf-8 even when windows selects a legacy codepage. | STRING |
| HIGH | skills/diagram-design/scripts/excalidraw_extract.py | 0 | emit digests as utf-8 even when windows selects a legacy codepage. | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | scripts/test-verify-marimekko.py | 260 | # ── Shipped examples and the honest fixture ─────────────────────────── | COMMENT |
| MEDIUM | scripts/test-verify-marimekko.py | 281 | # ── The parser reads what the browser reads ─────────────────────────── | COMMENT |
| MEDIUM | scripts/test-verify-marimekko.py | 312 | # ── Width is category share ─────────────────────────────────────────── | COMMENT |
| MEDIUM | scripts/test-verify-marimekko.py | 322 | # ── Segments tile the column; height is within-column share ────────── | COMMENT |
| MEDIUM⚡ | scripts/test-verify-marimekko.py | 336 | # ── Area is joint share ─────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | scripts/test-verify-marimekko.py | 344 | # ── Columns tile the plot ───────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | scripts/test-verify-marimekko.py | 352 | # ── One series order ────────────────────────────────────────────────── | COMMENT |
| MEDIUM | scripts/test-verify-marimekko.py | 363 | # ── One accent ──────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | scripts/test-verify-marimekko.py | 374 | # ── Unpositioned geometry: three carriers, element and ancestor ────── | COMMENT |
| MEDIUM | scripts/test-verify-marimekko.py | 404 | # ── CSS width/height resize a rect behind its attributes (SVG 2) ───── | COMMENT |
| MEDIUM | scripts/test-verify-marimekko.py | 435 | # ── A CSS comment is whitespace to the browser, so it is here too ───── | COMMENT |
| MEDIUM | scripts/test-verify-marimekko.py | 453 | # ── Labels bound to meaning ─────────────────────────────────────────── | COMMENT |
| MEDIUM | scripts/test-verify-marimekko.py | 523 | # ── Declarations ────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | scripts/test-verify-marimekko.py | 548 | # ── Fail closed ─────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | scripts/test-verify-marimekko.py | 561 | # ── Scope is read the way the browser reads, not by a tag regex ─────── | COMMENT |
| MEDIUM | scripts/test-verify-marimekko.py | 604 | # ── Scope treaty with the parent and the siblings ───────────────────── | COMMENT |
| MEDIUM | scripts/test-verify-marimekko.py | 659 | # ── The CLI ─────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | scripts/test-verify-marimekko.py | 676 | # ── The fixture-isolation guarantees, held in place ─────────────────── | COMMENT |
| MEDIUM | scripts/test-verify-heatmap.py | 131 | # ── Positive: shipped examples must pass ────────────────────────────── | COMMENT |
| MEDIUM | scripts/test-verify-heatmap.py | 142 | # ── Negative: mutations that must be rejected ───────────────────────── | COMMENT |
| MEDIUM | scripts/test-verify-bubble.py | 231 | # ── Positive polarity: honest figures pass ──────────────────────────── | COMMENT |
| MEDIUM | scripts/test-verify-bubble.py | 285 | # ── Axis scale lies ─────────────────────────────────────────────────── | COMMENT |
| MEDIUM | scripts/test-verify-bubble.py | 328 | # ── Area lies ───────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | scripts/test-verify-bubble.py | 359 | # ── Focal discipline ────────────────────────────────────────────────── | COMMENT |
| MEDIUM | scripts/test-verify-bubble.py | 375 | # ── Label lies ──────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | scripts/test-verify-bubble.py | 405 | # ── Tick lies ───────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | scripts/test-verify-bubble.py | 437 | # ── Transforms ──────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | scripts/test-verify-bubble.py | 475 | # ── Malformed markup: findings, never tracebacks, never silence ─────── | COMMENT |
| MEDIUM | scripts/test-verify-bubble.py | 505 | # ── Markup is read as the browser reads it ──────────────────────────── | COMMENT |
| MEDIUM | scripts/test-verify-bubble.py | 651 | # ── CSS comments are whitespace to the browser ──────────────────────── | COMMENT |
| MEDIUM | scripts/test-verify-bubble.py | 734 | # ── Fail closed ─────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | scripts/test-verify-bubble.py | 755 | # ── Scope: the neighbours stay unclaimed ────────────────────────────── | COMMENT |
| MEDIUM | scripts/test-verify-bubble.py | 773 | # ── The fixture-isolation guarantees, held in place ─────────────────── | COMMENT |
| MEDIUM | scripts/test-verify-docs-sync.py | 911 | # ── type-ramp contract tests ───────────────────────────────────────────── | COMMENT |
| MEDIUM | scripts/test-verify-docs-sync.py | 1045 | # ── registered legacy sizes ────────────────────────────────────────────── | COMMENT |
| MEDIUM | scripts/test-verify-docs-sync.py | 1715 | # ── gallery guard tests ─────────────────────────────────────────────────── | STRING |
| MEDIUM | scripts/test-verify-slopegraph.py | 237 | # ── Negative half: honest figures must stay silent ──────────────────── | COMMENT |
| MEDIUM | scripts/test-verify-slopegraph.py | 292 | # ── Positive half: each lie must be named as itself ─────────────────── | COMMENT |
| MEDIUM | scripts/test-verify-slopegraph.py | 647 | # ── 7. Markup is read as the browser reads it ───────────────────────── | COMMENT |
| MEDIUM | scripts/test-verify-slopegraph.py | 820 | # ── 8. CSS comments are whitespace to the browser ───────────────────── | COMMENT |
| MEDIUM | scripts/test-verify-slopegraph.py | 924 | # ── The fixture-isolation fix, held in place ────────────────────────── | COMMENT |
| MEDIUM | scripts/test-verify-beeswarm.py | 241 | # ── Positive polarity: honest figures pass ──────────────────────────── | COMMENT |
| MEDIUM | scripts/test-verify-beeswarm.py | 274 | # ── Value-scale lies ────────────────────────────────────────────────── | COMMENT |
| MEDIUM | scripts/test-verify-beeswarm.py | 292 | # ── Overprint ───────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | scripts/test-verify-beeswarm.py | 303 | # ── Radius and ink discipline ───────────────────────────────────────── | COMMENT |
| MEDIUM | scripts/test-verify-beeswarm.py | 332 | # ── Label lies ──────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | scripts/test-verify-beeswarm.py | 395 | # ── Tick lies ───────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | scripts/test-verify-beeswarm.py | 427 | # ── Transforms ──────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | scripts/test-verify-beeswarm.py | 570 | # ── Malformed markup: findings, never tracebacks, never silence ─────── | COMMENT |
| MEDIUM | scripts/test-verify-beeswarm.py | 593 | # ── Budgets, both ends ──────────────────────────────────────────────── | COMMENT |
| MEDIUM | scripts/test-verify-beeswarm.py | 605 | # ── Fail closed ─────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | scripts/test-verify-beeswarm.py | 625 | # ── Scope: the treaty, in both directions ───────────────────────────── | COMMENT |
| MEDIUM | scripts/test-verify-beeswarm.py | 681 | # ── The fixture-isolation guarantees, held in place ─────────────────── | COMMENT |
| MEDIUM | scripts/test-verify-streamgraph.py | 247 | # ── Negative half: honest figures must stay silent ──────────────────── | COMMENT |
| MEDIUM | scripts/test-verify-streamgraph.py | 328 | # ── Positive half: each lie must be named as itself ─────────────────── | COMMENT |
| MEDIUM | scripts/test-verify-streamgraph.py | 932 | # ── The fixture-isolation fix, held in place ────────────────────────── | COMMENT |
| MEDIUM | skills/diagram-design/scripts/drawio_extract.py | 38 | # -------------------------------------------------------------------------- | COMMENT |
| MEDIUM | skills/diagram-design/scripts/drawio_extract.py | 40 | # -------------------------------------------------------------------------- | COMMENT |
| MEDIUM | skills/diagram-design/scripts/drawio_extract.py | 193 | # -------------------------------------------------------------------------- | COMMENT |
| MEDIUM | skills/diagram-design/scripts/drawio_extract.py | 195 | # -------------------------------------------------------------------------- | COMMENT |
| 12 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/verify-polar.py | 112 | def _contains_stylesheet_loading(css: str) -> bool: | CODE |
| LOW | scripts/verify-polar.py | 132 | def _selector_can_target_chart(selector: str) -> bool: | CODE |
| LOW | scripts/verify-polar.py | 145 | def _stylesheet_can_target_chart(css: str) -> bool: | CODE |
| LOW | scripts/verify-polar.py | 411 | def _stylesheet_can_hide_ancestors(css: str) -> bool: | CODE |
| LOW | scripts/verify-polar.py | 803 | def _check_variants_with_paths(paths: Sequence[Path]) -> list[tuple[Path, str]]: | CODE |
| LOW | scripts/bump-plugin-version.py | 79 | def render_skill_metadata_version(root: Path, version: str) -> tuple[Path, str]: | CODE |
| LOW | scripts/verify-mermaid-import.py | 68 | def check_legacy_stdout_encoding(tmp: Path) -> None: | CODE |
| LOW | scripts/verify-mermaid-import.py | 205 | def check_shape_and_edge_vocabulary(tmp: Path) -> None: | CODE |
| LOW | scripts/verify-mermaid-import.py | 541 | def check_markdown_and_grammars(tmp: Path) -> None: | CODE |
| LOW | scripts/verify-mermaid-import.py | 707 | def check_named_composite_states(tmp: Path) -> None: | CODE |
| LOW | scripts/verify-mermaid-import.py | 729 | def check_selection_before_parse(tmp: Path) -> None: | CODE |
| LOW | scripts/verify-mermaid-import.py | 819 | def check_sequence_grammar_forms(tmp: Path) -> None: | CODE |
| LOW | scripts/test-export-wait.py | 212 | def require_stalled_font_fallback(snippet: str, tmp: Path) -> None: | CODE |
| LOW | scripts/test-export-wait.py | 305 | def require_other_errors_propagate(snippet: str, tmp: Path) -> None: | CODE |
| LOW | scripts/test-export-wait.py | 322 | def require_static_motion_frame(snippet: str, tmp: Path) -> None: | CODE |
| LOW | scripts/test-verify-contrast.py | 78 | def test_shipped_palette_passes() -> None: | CODE |
| LOW | scripts/test-verify-contrast.py | 84 | def test_retired_palette_fails_on_each_token() -> None: | CODE |
| LOW | scripts/test-verify-contrast.py | 101 | def test_alpha_is_composited_over_paper() -> None: | CODE |
| LOW | scripts/test-verify-contrast.py | 113 | def test_text_use_is_held_to_text_bar() -> None: | CODE |
| LOW | scripts/test-verify-contrast.py | 126 | def test_ink_strong_is_measured_on_accent_fill() -> None: | CODE |
| LOW | scripts/test-verify-docs-sync.py | 586 | def check_style_guide_anchors(verify) -> None: | CODE |
| LOW | scripts/test-verify-docs-sync.py | 671 | def check_size_preset_surfaces(verify) -> None: | CODE |
| LOW | scripts/test-verify-docs-sync.py | 728 | def check_architecture_delta_discovery(verify) -> None: | CODE |
| LOW | scripts/test-verify-dumbbell.py | 74 | def test_zero_touching_domains(): | CODE |
| LOW | scripts/test-verify-dumbbell.py | 96 | def test_identical_and_tiny_values(): | CODE |
| LOW | scripts/test-verify-dumbbell.py | 104 | def test_small_domains_round_outward(): | CODE |
| LOW | scripts/test-verify-dumbbell.py | 119 | def test_empty_and_non_finite_rejected(): | CODE |
| LOW | scripts/test-verify-dumbbell.py | 132 | def test_truncated_bounds_are_detected(): | CODE |
| LOW | scripts/test-verify-dumbbell.py | 142 | def test_scaling_preserves_gap_ratios(): | CODE |
| LOW | scripts/test-verify-dumbbell.py | 154 | def test_documented_marks_clear_the_threshold(): | CODE |
| LOW | scripts/test-verify-dumbbell.py | 163 | def test_rejected_treatments_are_caught(): | CODE |
| LOW | scripts/test-verify-dumbbell.py | 174 | def test_checker_fails_closed_on_a_stripped_reference(tmp_path: Path): | CODE |
| LOW | scripts/test-verify-dumbbell.py | 192 | def test_shipped_reference_passes(): | CODE |
| LOW | scripts/verify-docs-sync.py | 141 | def check_onboarding_trust_boundary(errors: list[str], markdown: str) -> None: | CODE |
| LOW | scripts/verify-docs-sync.py | 348 | def check_gallery_type_parity(errors: list[str], gallery: Path, references: Path) -> None: | CODE |
| LOW | scripts/verify-docs-sync.py | 437 | def check_skill_reference_links( | CODE |
| LOW | scripts/verify-docs-sync.py | 456 | def check_reference_asset_links( | CODE |
| LOW | scripts/verify-docs-sync.py | 478 | def scanner_visible_support_references(markdown: str) -> list[str]: | CODE |
| LOW | scripts/verify-docs-sync.py | 488 | def check_packaged_support_references( | CODE |
| LOW | scripts/verify-docs-sync.py | 551 | def check_size_preset_surfaces(errors: list[str], root: Path) -> None: | CODE |
| LOW | scripts/verify-docs-sync.py | 580 | def check_factory_install_surface(errors: list[str], root: Path) -> None: | CODE |
| LOW | scripts/verify-docs-sync.py | 710 | def check_high_level_reference(errors: list[str], markdown: str) -> None: | CODE |
| LOW | scripts/verify-docs-sync.py | 1447 | def check_manifest_descriptions(errors: list[str], root: Path) -> None: | CODE |
| LOW | scripts/verify-docs-sync.py | 1507 | def optional_font_link_surfaces(root: Path) -> list[Path]: | CODE |
| LOW | scripts/verify-docs-sync.py | 1636 | def check_title_fallback_order(errors: list[str], root: Path) -> None: | CODE |
| LOW | scripts/verify-doctor.py | 320 | def check_common_path_mistakes(root: Path, cwd: Path) -> CheckResult: | CODE |
| LOW | scripts/test-plugin-package.py | 562 | def test_auto_bump_workflow_allowlists() -> None: | CODE |
| LOW | scripts/test-plugin-package.py | 615 | def test_pull_request_merge_base() -> None: | CODE |
| LOW | scripts/test-plugin-package.py | 659 | def test_ci_version_gate_wiring() -> None: | CODE |
| LOW | scripts/test-plugin-package.py | 697 | def test_ci_version_gate_executes() -> None: | CODE |
| LOW | scripts/lint-render.py | 724 | def waterfall_mobile_failures(context, waterfall_paths=None): | CODE |
| LOW | scripts/lint-render.py | 783 | def excalidraw_mobile_failures(context, example_path=None): | CODE |
| LOW | scripts/lint-render.py | 833 | def marimekko_mobile_failures(context, marimekko_paths=None): | CODE |
| LOW | scripts/lint-render.py | 1003 | def output_spec_widest_preset(): | CODE |
| LOW | scripts/lint-render.py | 631 | def network_isolation_failures(context): | STRING |
| LOW | scripts/verify-plugin-package.py | 310 | def valid_double_quoted_yaml_scalar(value: str) -> bool: | CODE |
| LOW | scripts/verify-plugin-package.py | 339 | def parse_frontmatter_metadata_version(text: str) -> str | None: | CODE |
| LOW | scripts/verify-plugin-package.py | 437 | def verify_skill_metadata_version(root: Path, manifests: dict[str, dict[str, Any]], errors: list[str]) -> None: | CODE |
| LOW | scripts/verify-motion.py | 211 | def hidden_unscoped_motion_selectors(source: str) -> list[str]: | CODE |
| LOW | scripts/verify-motion.py | 231 | def infinite_unscoped_selectors(source: str) -> list[str]: | CODE |
| 76 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | scripts/fix-mojibake.py | 20 | # CP1252 leaves byte 0x90 undefined, so spell the left-arrow corruption | COMMENT |
| HIGH⚡ | scripts/lint-render.py | 135 | let blockedBy = null; | CODE |
| HIGH⚡ | scripts/lint-render.py | 139 | const scrolls = el.scrollWidth > el.clientWidth + 1 || el.scrollHeight > el.clientHeight + 1; | CODE |
| HIGH⚡ | scripts/lint-render.py | 141 | chain.push(`${label(el)} (overflow: ${overflow})`); | CODE |
| HIGH⚡ | scripts/lint-render.py | 205 | for (let el = svg.parentElement; el && taken < depth; el = el.parentElement) { | CODE |
| HIGH⚡ | scripts/lint-render.py | 207 | targets.push(el); | CODE |
| HIGH⚡ | scripts/lint-render.py | 214 | rects.push([r.left, r.top, r.right, r.bottom]); | CODE |
| HIGH⚡ | scripts/lint-render.py | 243 | if (before.width !== after.width || before.height !== after.height) { | CODE |
| HIGH⚡ | scripts/lint-render.py | 251 | if (x >= interior.left - g && x < interior.right + g && | CODE |
| HIGH⚡ | scripts/lint-render.py | 252 | y >= interior.top - g && y < interior.bottom + g) continue; | CODE |
| HIGH | scripts/lint-render.py | 161 | const remember = (el) => window.__lintSnapshots.push([el, el.getAttribute('style')]); | CODE |
| HIGH | scripts/lint-render.py | 169 | if (style === null) el.removeAttribute('style'); | CODE |
| HIGH | scripts/lint-render.py | 1476 | " pip install playwright && playwright install chromium", | CODE |
| HIGH | scripts/lint-render.py | 79 | pip install playwright && playwright install chromium | STRING |
| HIGH | scripts/lint-render.py | 741 | while (ancestor && ancestor !== document.body) { | STRING |
| HIGH | scripts/lint-render.py | 797 | const overflow = scroller && getComputedStyle(scroller).overflowX; | STRING |
| HIGH | scripts/lint-render.py | 856 | while (ancestor && ancestor !== document.body) { | STRING |
| HIGH | scripts/lint-render.py | 931 | while (ancestor && ancestor !== document.body) { | STRING |
| HIGH | scripts/verify-excalidraw-import.py | 704 | const scroller = svg && svg.parentElement; | STRING |
| HIGH | scripts/verify-excalidraw-import.py | 705 | const overflow = scroller && getComputedStyle(scroller).overflowX; | STRING |
| HIGH | scripts/test-maintainer-policy.py | 313 | "python3 scripts/build-icons.py && git diff --ignore-space-at-eol --exit-code -- " | CODE |
| HIGH | scripts/test-maintainer-policy.py | 397 | if ! git rev-parse -q --verify HEAD^2 >/dev/null; then | CODE |
| HIGH | scripts/test-maintainer-policy.py | 457 | "python scripts/test-lint-a11y.py && make lint": """ | STRING |
| HIGH | scripts/test-maintainer-policy.py | 459 | run: python scripts/test-lint-a11y.py && make lint | CODE |
| HIGH | scripts/test-maintainer-policy.py | 540 | "python3 scripts/build-icons.py && git diff --exit-code", | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/test-verify-ridgeline.py | 34 | CODE | |
| LOW | scripts/verify-marimekko.py | 96 | CODE | |
| LOW | scripts/test-verify-marimekko.py | 30 | CODE | |
| LOW | scripts/verify-polar.py | 4 | CODE | |
| LOW | scripts/bump-plugin-version.py | 4 | CODE | |
| LOW | scripts/verify-ridgeline.py | 99 | CODE | |
| LOW | scripts/verify-mermaid-import.py | 9 | CODE | |
| LOW | scripts/test-export-wait.py | 17 | CODE | |
| LOW | scripts/test-export-wait.py | 356 | CODE | |
| LOW | scripts/test-verify-heatmap.py | 33 | CODE | |
| LOW | scripts/test-verify-waterfall.py | 13 | CODE | |
| LOW | scripts/test-verify-contrast.py | 26 | CODE | |
| LOW | scripts/axonometry.py | 10 | CODE | |
| LOW | scripts/test-verify-bubble.py | 15 | CODE | |
| LOW | scripts/verify-waterfall.py | 47 | CODE | |
| LOW | scripts/test-self-check.py | 4 | CODE | |
| LOW | scripts/verify-exploded.py | 23 | CODE | |
| LOW | scripts/screenshot_catalog.py | 3 | CODE | |
| LOW | scripts/test-verify-docs-sync.py | 4 | CODE | |
| LOW | scripts/test-verify-dumbbell.py | 20 | CODE | |
| LOW | scripts/test-verify-motion.py | 4 | CODE | |
| LOW | scripts/verify-docs-sync.py | 50 | CODE | |
| LOW | scripts/verify-doctor.py | 8 | CODE | |
| LOW | scripts/verify-doctor.py | 12 | CODE | |
| LOW | scripts/test-plugin-package.py | 4 | CODE | |
| LOW | scripts/verify-heatmap.py | 49 | CODE | |
| LOW | scripts/verify-bump.py | 68 | CODE | |
| LOW | scripts/test-verify-sequence-oauth.py | 13 | CODE | |
| LOW | scripts/verify-sankey.py | 108 | CODE | |
| LOW | scripts/verify-skin-polarity.py | 72 | CODE | |
| LOW | scripts/verify-slopegraph.py | 89 | CODE | |
| LOW | scripts/test-verify-sankey.py | 27 | CODE | |
| LOW | scripts/test-verify-treemap.py | 13 | CODE | |
| LOW | scripts/test-verify-geometry.py | 4 | CODE | |
| LOW | scripts/verify-plugin-package.py | 17 | CODE | |
| LOW | scripts/verify-block-registry.py | 43 | CODE | |
| LOW | scripts/test-verify-drawio-import.py | 4 | CODE | |
| LOW | scripts/verify-motion.py | 4 | CODE | |
| LOW | scripts/test-export-svg-standalone.py | 8 | CODE | |
| LOW | scripts/test-verify-architecture-delta.py | 9 | CODE | |
| LOW | scripts/test-verify-polar.py | 2 | CODE | |
| LOW | scripts/test-verify-doctor.py | 4 | CODE | |
| LOW | scripts/test-verify-axonometric-plan.py | 13 | CODE | |
| LOW | scripts/test-fix-mojibake.py | 4 | CODE | |
| LOW | scripts/plugin_version_history.py | 4 | CODE | |
| LOW | scripts/verify-treemap.py | 37 | CODE | |
| LOW | scripts/verify-bubble.py | 102 | CODE | |
| LOW | scripts/build-axonometric-plan-examples.py | 15 | CODE | |
| LOW | scripts/test-build-openai-plugin-zip.py | 13 | CODE | |
| LOW | scripts/verify-streamgraph.py | 95 | CODE | |
| LOW | scripts/test-build-readme-thumbs.py | 4 | CODE | |
| LOW | scripts/verify-beeswarm.py | 112 | CODE | |
| LOW | scripts/build-exploded-examples.py | 15 | CODE | |
| LOW | scripts/test-build-icons-quoted-attributes.py | 4 | CODE | |
| LOW | scripts/test-verify-screenshot-freshness.py | 10 | CODE | |
| LOW | scripts/verify-geometry.py | 56 | CODE | |
| LOW | scripts/build-openai-plugin-zip.py | 24 | CODE | |
| LOW | scripts/lint-skin.py | 8 | CODE | |
| LOW | scripts/test-verify-slopegraph.py | 21 | CODE | |
| LOW | scripts/test-verify-beeswarm.py | 21 | CODE | |
| 28 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/test-verify-ridgeline.py | 165 | CODE | |
| LOW | scripts/verify-marimekko.py | 794 | CODE | |
| LOW | scripts/verify-marimekko.py | 825 | CODE | |
| LOW | scripts/verify-marimekko.py | 318 | CODE | |
| LOW | scripts/verify-polar.py | 444 | CODE | |
| LOW | scripts/verify-polar.py | 221 | CODE | |
| LOW | scripts/verify-ridgeline.py | 451 | CODE | |
| LOW | scripts/verify-ridgeline.py | 960 | CODE | |
| LOW | scripts/verify-ridgeline.py | 285 | CODE | |
| LOW | scripts/test-verify-heatmap.py | 124 | CODE | |
| LOW | scripts/test-verify-waterfall.py | 66 | CODE | |
| LOW | scripts/verify-waterfall.py | 135 | CODE | |
| LOW | scripts/verify-exploded.py | 150 | CODE | |
| LOW | scripts/test-verify-docs-sync.py | 374 | CODE | |
| LOW | scripts/test-verify-docs-sync.py | 759 | CODE | |
| LOW | scripts/verify-docs-sync.py | 681 | CODE | |
| LOW | scripts/verify-docs-sync.py | 1103 | CODE | |
| LOW | scripts/verify-docs-sync.py | 1430 | CODE | |
| LOW | scripts/verify-docs-sync.py | 1447 | CODE | |
| LOW | scripts/verify-heatmap.py | 242 | CODE | |
| LOW | scripts/verify-bump.py | 316 | CODE | |
| LOW | scripts/verify-bump.py | 495 | CODE | |
| LOW | scripts/verify-bump.py | 569 | CODE | |
| LOW | scripts/verify-sankey.py | 779 | CODE | |
| LOW | scripts/verify-skin-polarity.py | 288 | CODE | |
| LOW | scripts/verify-skin-polarity.py | 405 | CODE | |
| LOW | scripts/verify-skin-polarity.py | 515 | CODE | |
| LOW | scripts/lint-render.py | 422 | CODE | |
| LOW | scripts/lint-render.py | 1469 | CODE | |
| LOW | scripts/verify-slopegraph.py | 732 | CODE | |
| LOW | scripts/verify-slopegraph.py | 271 | CODE | |
| LOW | scripts/test-verify-sankey.py | 117 | CODE | |
| LOW | scripts/test-verify-treemap.py | 50 | CODE | |
| LOW | scripts/verify-plugin-package.py | 339 | CODE | |
| LOW | scripts/verify-motion.py | 147 | CODE | |
| LOW | scripts/verify-motion.py | 193 | CODE | |
| LOW | scripts/test-export-svg-standalone.py | 559 | CODE | |
| LOW | scripts/test-verify-polar.py | 78 | CODE | |
| LOW | scripts/test-verify-axonometric-plan.py | 57 | CODE | |
| LOW | scripts/verify-treemap.py | 150 | CODE | |
| LOW | scripts/verify-bubble.py | 280 | CODE | |
| LOW | scripts/build-axonometric-plan-examples.py | 301 | CODE | |
| LOW | scripts/verify-streamgraph.py | 431 | CODE | |
| LOW | scripts/verify-streamgraph.py | 273 | CODE | |
| LOW | scripts/verify-beeswarm.py | 355 | CODE | |
| LOW | scripts/build-exploded-examples.py | 48 | CODE | |
| LOW | scripts/build-exploded-examples.py | 190 | CODE | |
| LOW | scripts/verify-geometry.py | 236 | CODE | |
| LOW | scripts/verify-geometry.py | 323 | CODE | |
| LOW | scripts/verify-geometry.py | 458 | CODE | |
| LOW | scripts/build-openai-plugin-zip.py | 202 | CODE | |
| LOW | scripts/lint-skin.py | 334 | CODE | |
| LOW | scripts/lint-skin.py | 559 | CODE | |
| LOW | scripts/lint-skin.py | 734 | CODE | |
| LOW | scripts/lint-skin.py | 264 | CODE | |
| LOW | scripts/verify-axonometric-plan.py | 93 | CODE | |
| LOW | scripts/verify-architecture-delta.py | 259 | CODE | |
| LOW | scripts/verify-contrast.py | 154 | CODE | |
| LOW | scripts/test-verify-exploded.py | 66 | CODE | |
| LOW | scripts/test-maintainer-policy.py | 144 | CODE | |
| 17 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | skills/diagram-design/assets/example-pyramid.html | 110 | <text x="64" y="474" fill="#4f5d75" font-size="8.5" font-family="'Geist', sans-serif">Apex — rarest, highest lev | CODE |
| MEDIUM | skills/diagram-design/assets/example-layers.html | 94 | <text x="260" y="182" fill="#2d3142" font-size="16" font-weight="600" font-family="'Geist', sans-serif">Agent ha | CODE |
| MEDIUM | skills/diagram-design/assets/example-layers.html | 119 | <text x="240" y="456" fill="#4f5d75" font-size="8.5" font-family="'Geist', sans-serif" font-style="italic">The h | CODE |
| MEDIUM | skills/diagram-design/assets/example-pyramid-full.html | 91 | <text x="64" y="474" fill="#4f5d75" font-size="8.5" font-family="'Geist', sans-serif">Apex — rarest, highest lev | CODE |
| MEDIUM | …-design/assets/example-exploded-ai-stack-animated.html | 220 | <g data-part="harness" data-name="Agent harness" data-rect="0 0 160 160 10" data-z="410" data-t="16" data-level= | CODE |
| MEDIUM | …-design/assets/example-exploded-ai-stack-animated.html | 224 | <text x="296" y="780" fill="#4f5d75" font-size="8.5" font-family="'Geist', sans-serif" font-style="italic">Skill | CODE |
| MEDIUM | …gram-design/assets/example-exploded-ai-stack-dark.html | 76 | <g data-part="harness" data-name="Agent harness" data-rect="0 0 160 160 10" data-z="410" data-t="16" data-level= | CODE |
| MEDIUM | …gram-design/assets/example-exploded-ai-stack-dark.html | 80 | <text x="296" y="780" fill="#bfc0c0" font-size="8.5" font-family="'Geist', sans-serif" font-style="italic">Skill | CODE |
| MEDIUM⚡ | …diagram-design/assets/example-quadrant-consultant.html | 86 | <text x="156" y="248" fill="#4f5d75" font-size="11" font-family="'Geist', sans-serif">workflows, low AI leverage | CODE |
| MEDIUM⚡ | …diagram-design/assets/example-quadrant-consultant.html | 94 | <text x="576" y="248" fill="#4f5d75" font-size="11" font-family="'Geist', sans-serif">Small, high-leverage teams | CODE |
| MEDIUM | …gram-design/assets/example-exploded-ai-stack-full.html | 52 | <g data-part="harness" data-name="Agent harness" data-rect="0 0 160 160 10" data-z="410" data-t="16" data-level= | CODE |
| MEDIUM | …gram-design/assets/example-exploded-ai-stack-full.html | 56 | <text x="296" y="780" fill="#4f5d75" font-size="8.5" font-family="'Geist', sans-serif" font-style="italic">Skill | CODE |
| MEDIUM | skills/diagram-design/assets/example-pyramid-dark.html | 110 | <text x="64" y="474" fill="#bfc0c0" font-size="8.5" font-family="'Geist', sans-serif">Apex — rarest, highest lev | CODE |
| MEDIUM | skills/diagram-design/assets/example-wardley.html | 121 | <text x="220" y="176" fill="#2d3142" font-size="12" font-weight="600" font-family="'Geist', sans-serif" text-ancho | CODE |
| MEDIUM | skills/diagram-design/assets/example-layers-full.html | 75 | <text x="260" y="182" fill="#2d3142" font-size="16" font-weight="600" font-family="'Geist', sans-serif">Agent ha | CODE |
| MEDIUM | skills/diagram-design/assets/example-layers-full.html | 100 | <text x="240" y="456" fill="#4f5d75" font-size="8.5" font-family="'Geist', sans-serif" font-style="italic">The h | CODE |
| MEDIUM | skills/diagram-design/assets/example-wardley-full.html | 95 | <text x="220" y="176" fill="#2d3142" font-size="12" font-weight="600" font-family="'Geist', sans-serif" text-anc | CODE |
| MEDIUM | …s/diagram-design/assets/example-exploded-ai-stack.html | 76 | <g data-part="harness" data-name="Agent harness" data-rect="0 0 160 160 10" data-z="410" data-t="16" data-level= | CODE |
| MEDIUM | …s/diagram-design/assets/example-exploded-ai-stack.html | 80 | <text x="296" y="780" fill="#4f5d75" font-size="8.5" font-family="'Geist', sans-serif" font-style="italic">Skill | CODE |
| MEDIUM | skills/diagram-design/assets/example-wardley-dark.html | 121 | <text x="220" y="176" fill="#f5f5f5" font-size="12" font-weight="600" font-family="'Geist', sans-serif" text-ancho | CODE |
| MEDIUM | skills/diagram-design/assets/example-layers-dark.html | 94 | <text x="260" y="182" fill="#f5f5f5" font-size="16" font-weight="600" font-family="'Geist', sans-serif">Agent ha | CODE |
| MEDIUM | skills/diagram-design/assets/example-layers-dark.html | 119 | <text x="240" y="456" fill="#bfc0c0" font-size="8.5" font-family="'Geist', sans-serif" font-style="italic">The h | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | scripts/test-export-wait.py | 96 | except AssertionError: | CODE |
| HIGH | scripts/test-plugin-package.py | 775 | except VERSION_HISTORY.VersionHistoryError: | CODE |
| HIGH | scripts/test-plugin-package.py | 785 | except VERSION_HISTORY.VersionHistoryError: | CODE |
| HIGH | scripts/test-build-openai-plugin-zip.py | 492 | except OSError: | CODE |
| HIGH | scripts/lint-skin.py | 379 | except ValueError: | CODE |
| HIGH | scripts/verify-drawio-import.py | 517 | except extractor.PayloadTooLarge: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | docs/superpowers/plans/2026-08-18-polar-chart.md | 221 | - [ ] **Step 2: Write `type-polar.md` from the approved contract** | COMMENT |
| LOW | scripts/verify-marimekko.py | 101 | import sys | COMMENT |
| LOW | scripts/verify-marimekko.py | 141 | # detection reads raw text and must refuse the same way, or a commented-out | COMMENT |
| LOW | scripts/verify-ridgeline.py | 101 | import argparse | COMMENT |
| LOW | scripts/verify-ridgeline.py | 121 | # replaces the very outline that was verified, and x/y do the same to a | COMMENT |
| LOW | scripts/verify-ridgeline.py | 141 | r"\s*:", | COMMENT |
| LOW | scripts/verify-docs-sync.py | 621 | f"README architecture tree must list Factory's native {native_directory} path" | COMMENT |
| LOW | scripts/verify-sankey.py | 121 | # it - geometry may not carry style/class, containers may not carry the paint | COMMENT |
| LOW | scripts/verify-sankey.py | 141 | # and worse, a leading-dot coordinate read by "-?\\d+" silently becomes a | COMMENT |
| LOW | scripts/verify-sankey.py | 161 | re.IGNORECASE, | COMMENT |
| LOW | scripts/verify-sankey.py | 721 | # about is certified - and SVG has far more ways to render differently than any | COMMENT |
| LOW | scripts/verify-sankey.py | 941 | # a transform, a clip, a mask, or a hidden element. Each of those lets every | COMMENT |
| LOW | scripts/verify-sankey.py | 981 | # constructs above so that a transform is reported as a transform, not as an | COMMENT |
| LOW | scripts/verify-slopegraph.py | 101 | # Every CSS property that can move or reshape a verified mark WITHOUT touching | COMMENT |
| LOW | scripts/verify-slopegraph.py | 121 | # Anchored to a declaration start, so `text-transform:` (the editorial skin | COMMENT |
| LOW | scripts/verify-slopegraph.py | 141 | # is exactly what a broken quote defeats (see declares_series). Scoped to a | COMMENT |
| LOW | scripts/test-verify-sankey.py | 461 | # the seam between Flaked (bottom 140) and Passed (top 148), where | COMMENT |
| LOW | scripts/test-verify-sankey.py | 521 | case( | COMMENT |
| LOW | scripts/test-verify-sankey.py | 601 | # dash at all and is not the form the reference permits. | COMMENT |
| LOW | scripts/test-verify-sankey.py | 801 | "may set only", "a comment between a property and its colon"), | COMMENT |
| LOW | scripts/test-verify-sankey.py | 901 | COMMENT | |
| LOW | scripts/verify-bubble.py | 121 | # transform / translate / rotate / scale the four transform properties; | COMMENT |
| LOW | scripts/verify-bubble.py | 141 | re.IGNORECASE, | COMMENT |
| LOW | scripts/verify-streamgraph.py | 101 | from html.parser import HTMLParser | COMMENT |
| LOW | scripts/verify-streamgraph.py | 121 | # CSS motion path, which places the element somewhere else entirely | COMMENT |
| LOW | scripts/verify-streamgraph.py | 141 | # through the guard. Non-greedy and DOTALL: a comment may span lines and | COMMENT |
| LOW | scripts/verify-beeswarm.py | 141 | # cx / cy / r / x / y SVG geometry properties. CSS wins | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | skills/diagram-design/assets/example-layers.html | 102 | <text x="940" y="246" fill="#4f5d75" font-size="10" font-family="'Geist Mono', monospace" text-anchor="end" lett | CODE |
| MEDIUM⚡ | …diagram-design/assets/example-quadrant-consultant.html | 92 | <text x="576" y="216" fill="#4f5d75" font-size="11" font-family="'Geist', sans-serif">Humans orchestrate; AI</te | CODE |
| MEDIUM | skills/diagram-design/assets/example-wardley.html | 118 | <text x="420" y="144" fill="#2d3142" font-size="12" font-weight="600" font-family="'Geist', sans-serif" text-ancho | CODE |
| MEDIUM | skills/diagram-design/assets/example-layers-full.html | 83 | <text x="940" y="246" fill="#4f5d75" font-size="10" font-family="'Geist Mono', monospace" text-anchor="end" lett | CODE |
| MEDIUM | skills/diagram-design/assets/example-wardley-full.html | 92 | <text x="420" y="144" fill="#2d3142" font-size="12" font-weight="600" font-family="'Geist', sans-serif" text-anc | CODE |
| MEDIUM | skills/diagram-design/assets/example-wardley-dark.html | 118 | <text x="420" y="144" fill="#f5f5f5" font-size="12" font-weight="600" font-family="'Geist', sans-serif" text-ancho | CODE |
| MEDIUM | skills/diagram-design/assets/example-layers-dark.html | 102 | <text x="940" y="246" fill="#bfc0c0" font-size="10" font-family="'Geist Mono', monospace" text-anchor="end" lett | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/verify-marimekko.py | 303 | except Exception as exc: # noqa: BLE001 - any parser failure fails closed | CODE |
| LOW | scripts/verify-ridgeline.py | 266 | except Exception as exc: # noqa: BLE001 - any parser failure fails closed | CODE |
| LOW | scripts/test-export-wait.py | 310 | except Exception as exc: | CODE |
| LOW | scripts/lint-render.py | 1491 | except Exception as error: | CODE |
| LOW | scripts/lint-render.py | 1512 | except Exception as error: | CODE |
| LOW | scripts/verify-slopegraph.py | 252 | except Exception as exc: # noqa: BLE001 - any parser failure fails closed | CODE |
| LOW | scripts/verify-bubble.py | 261 | except Exception as exc: # noqa: BLE001 - any parser failure fails closed | CODE |
| LOW | scripts/verify-streamgraph.py | 254 | except Exception as exc: # noqa: BLE001 - any parser failure fails closed | CODE |
| LOW | skills/diagram-design/scripts/drawio_extract.py | 100 | except Exception: | CODE |
| LOW | skills/diagram-design/scripts/drawio_extract.py | 109 | except Exception: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/test-verify-marimekko.py | 124 | CODE | |
| LOW | scripts/test-build-openai-plugin-zip.py | 83 | CODE | |
| LOW | scripts/test-verify-beeswarm.py | 62 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/test-plugin-package.py | 159 | def set_existing_versions(root: Path, version: str) -> None: | CODE |
| LOW | scripts/test-build-readme-thumbs.py | 83 | def update_thumb_digest(manifest: Path, thumb: Path) -> None: | CODE |