Editorial diagram design for Claude Code, Codex, GitHub Copilot, Cursor, Factory Droid, Qoder, and Pi. 45 diagram types. Self-contained HTML + SVG. No shadows. No Mermaid slop.
This report summarizes scanner evidence for cathrynlavery/diagram-design, a HTML project with 63,564 GitHub stars. SynthScan examined 116,596 lines of code across 445 source files, recording 769 pattern matches distributed across 13 syntactic categories. The legacy adjusted pattern signal is 10.8 (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.
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? 496 finding(s).
Are imports declared and package/API names verified? 120 finding(s).
Are wrappers, guards, and repeated structures necessary? 460 finding(s).
Which changes need focused human review? 769 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 769 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-heatmap.py | 0 | (?p<name>[\w:-]+)\s*=\s*(?p<quote>["'])(?p<value>.*?)(?p=quote) | 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-treemap.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-box-plot.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 |
|---|---|---|---|---|
| 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 | 80 | def render_skill_metadata_version(root: Path, version: str) -> tuple[Path, str]: | CODE |
| LOW⚡ | scripts/test-verify-architecture-containment.py | 137 | def test_managed_must_not_sit_inside_traffic(self): | CODE |
| LOW⚡ | scripts/test-verify-architecture-containment.py | 140 | def test_managed_must_parent_to_admin(self): | CODE |
| LOW⚡ | scripts/test-verify-architecture-containment.py | 145 | def test_endpoint_must_parent_to_traffic_and_target_managed(self): | CODE |
| LOW⚡ | scripts/test-verify-architecture-containment.py | 152 | def test_peering_must_join_traffic_scopes(self): | CODE |
| LOW⚡ | scripts/test-verify-architecture-containment.py | 158 | def test_sibling_axis_and_overlap(self): | CODE |
| LOW⚡ | scripts/test-verify-architecture-containment.py | 207 | def test_transform_attribute_on_node_group(self): | CODE |
| LOW⚡ | scripts/test-verify-architecture-containment.py | 211 | def test_inline_style_transform_on_node_group(self): | CODE |
| LOW⚡ | scripts/test-verify-architecture-containment.py | 215 | def test_ancestor_group_transform(self): | CODE |
| LOW⚡ | scripts/test-verify-architecture-containment.py | 220 | def test_transform_attribute_on_scope_bounds(self): | CODE |
| LOW⚡ | scripts/test-verify-architecture-containment.py | 225 | def test_positional_inline_css_on_bounds(self): | CODE |
| LOW⚡ | scripts/test-verify-architecture-containment.py | 232 | def test_nested_svg_viewport_ancestor(self): | CODE |
| LOW⚡ | scripts/test-verify-architecture-containment.py | 237 | def test_stylesheet_rule_transforming_checked_element(self): | CODE |
| LOW⚡ | scripts/test-verify-architecture-containment.py | 322 | def test_missing_parent_on_enclosed_scope(self): | CODE |
| LOW⚡ | scripts/test-verify-architecture-containment.py | 325 | def test_parent_must_be_innermost_enclosing_scope(self): | CODE |
| LOW⚡ | scripts/test-verify-architecture-containment.py | 333 | def test_shipped_missing_parent_cannot_hide_misaligned_sibling(self): | CODE |
| LOW⚡ | scripts/test-verify-architecture-containment.py | 515 | def test_nested_siblings_take_perpendicular_axis(self): | CODE |
| LOW⚡ | scripts/test-verify-architecture-containment.py | 519 | def test_nested_siblings_on_parent_axis_rejected(self): | CODE |
| LOW⚡ | scripts/test-verify-architecture-containment.py | 522 | def test_all_shipped_variants(self): | CODE |
| LOW | scripts/test-verify-architecture-containment.py | 81 | def test_files_without_grammar_are_skipped(self): | CODE |
| LOW | scripts/test-verify-architecture-containment.py | 86 | def test_comments_entities_and_unquoted_attributes(self): | CODE |
| LOW | scripts/test-verify-architecture-containment.py | 98 | def test_scope_and_node_share_one_namespace(self): | CODE |
| LOW | scripts/test-verify-architecture-containment.py | 104 | def test_blank_parent_on_nested_scope(self): | CODE |
| LOW | scripts/test-verify-architecture-containment.py | 115 | def test_child_outside_parent(self): | CODE |
| LOW | scripts/test-verify-architecture-containment.py | 175 | def test_unknown_kinds_and_duplicate_attributes(self): | CODE |
| LOW | scripts/test-verify-architecture-containment.py | 181 | def test_empty_and_invalid_ids(self): | CODE |
| LOW | scripts/test-verify-architecture-containment.py | 249 | def test_harmless_page_css_is_clean(self): | CODE |
| LOW | scripts/test-verify-architecture-containment.py | 253 | def test_page_only_style_rules_are_clean(self): | CODE |
| LOW | scripts/test-verify-architecture-containment.py | 267 | def test_style_rule_through_page_ancestor(self): | CODE |
| LOW | scripts/test-verify-architecture-containment.py | 292 | def test_omitted_html_and_body_still_anchor_style_rules(self): | CODE |
| LOW | scripts/test-verify-architecture-containment.py | 304 | def test_omitted_tag_pages_keep_page_only_rules_clean(self): | CODE |
| LOW | scripts/test-verify-architecture-containment.py | 311 | def test_child_combinator_outside_svg_survives_implied_end_tags(self): | CODE |
| LOW | scripts/test-verify-architecture-containment.py | 346 | def test_dasharray_none_is_solid(self): | CODE |
| LOW | scripts/test-verify-architecture-containment.py | 359 | def test_important_dasharray_wins_over_later_normal_declaration(self): | CODE |
| LOW | scripts/test-verify-architecture-containment.py | 376 | def test_equal_dasharray_priority_keeps_later_declaration(self): | CODE |
| LOW | scripts/test-verify-architecture-containment.py | 393 | def test_invalid_literal_values_do_not_acquire_declaration_priority(self): | CODE |
| LOW | scripts/test-verify-architecture-containment.py | 410 | def test_unresolved_dash_values_fail_closed_only_when_they_win(self): | CODE |
| LOW | scripts/test-verify-architecture-containment.py | 422 | def test_css_wide_dash_keywords_are_retained_in_priority_resolution(self): | CODE |
| LOW | scripts/test-verify-architecture-containment.py | 429 | def test_css_wide_dash_priority_matches_attribute_and_parent_inheritance(self): | CODE |
| LOW | scripts/test-verify-architecture-containment.py | 451 | def test_comments_do_not_fabricate_dash_keywords_units_or_priority(self): | CODE |
| LOW | scripts/test-verify-architecture-containment.py | 478 | def test_comment_scanning_preserves_quoted_strings_escapes_and_rule_bodies(self): | CODE |
| LOW | scripts/test-verify-architecture-containment.py | 488 | def test_dasharray_resolves_style_and_inheritance(self): | CODE |
| LOW | scripts/test-verify-architecture-containment.py | 500 | def test_scope_bounds_must_be_rect(self): | CODE |
| LOW | scripts/test-verify-architecture-containment.py | 504 | def test_node_bounds_must_be_rect(self): | CODE |
| LOW | scripts/test-verify-architecture-containment.py | 534 | def test_shipped_boundary_labels_use_soft(self): | CODE |
| LOW | scripts/test-verify-architecture-containment.py | 547 | def test_cli_discovery_and_failures(self): | CODE |
| LOW | scripts/verify-mermaid-import.py | 68 | def check_legacy_stdout_encoding(tmp: Path) -> None: | CODE |
| LOW | scripts/verify-mermaid-import.py | 220 | def check_flowchart_header_statements(tmp: Path) -> None: | CODE |
| LOW | scripts/verify-mermaid-import.py | 265 | def check_shape_and_edge_vocabulary(tmp: Path) -> None: | CODE |
| LOW | scripts/verify-mermaid-import.py | 612 | def check_outer_markdown_fences(tmp: Path) -> None: | CODE |
| LOW | scripts/verify-mermaid-import.py | 662 | def check_markdown_and_grammars(tmp: Path) -> None: | CODE |
| LOW | scripts/verify-mermaid-import.py | 828 | def check_named_composite_states(tmp: Path) -> None: | CODE |
| LOW | scripts/verify-mermaid-import.py | 850 | def check_selection_before_parse(tmp: Path) -> None: | CODE |
| LOW | scripts/verify-mermaid-import.py | 940 | def check_sequence_highlight_nesting_regression(tmp: Path) -> None: | CODE |
| LOW | scripts/verify-mermaid-import.py | 994 | def check_sequence_digest_regions(tmp: Path) -> None: | CODE |
| 243 more matches not shown… | ||||
| 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 | 203 | # ── 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 | 1117 | # ── Loop station origin (#443) ─────────────────────────────────────────── | COMMENT |
| MEDIUM | scripts/test-verify-docs-sync.py | 1186 | # ── type-ramp contract tests ───────────────────────────────────────────── | COMMENT |
| MEDIUM | scripts/test-verify-docs-sync.py | 1320 | # ── registered legacy sizes ────────────────────────────────────────────── | COMMENT |
| MEDIUM | scripts/test-verify-docs-sync.py | 1990 | # ── 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 | 356 | # ── Positive half: each lie must be named as itself ─────────────────── | COMMENT |
| MEDIUM | scripts/test-verify-streamgraph.py | 960 | # ── 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 |
| 13 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 | 134 | let blockedBy = null; | CODE |
| HIGH⚡ | scripts/lint-render.py | 138 | const scrolls = el.scrollWidth > el.clientWidth + 1 || el.scrollHeight > el.clientHeight + 1; | CODE |
| HIGH⚡ | scripts/lint-render.py | 140 | chain.push(`${label(el)} (overflow: ${overflow})`); | CODE |
| HIGH⚡ | scripts/lint-render.py | 204 | for (let el = svg.parentElement; el && taken < depth; el = el.parentElement) { | CODE |
| HIGH⚡ | scripts/lint-render.py | 206 | targets.push(el); | CODE |
| HIGH⚡ | scripts/lint-render.py | 213 | rects.push([r.left, r.top, r.right, r.bottom]); | CODE |
| HIGH⚡ | scripts/lint-render.py | 242 | if (before.width !== after.width || before.height !== after.height) { | CODE |
| HIGH⚡ | scripts/lint-render.py | 250 | if (x >= interior.left - g && x < interior.right + g && | CODE |
| HIGH⚡ | scripts/lint-render.py | 251 | y >= interior.top - g && y < interior.bottom + g) continue; | CODE |
| HIGH | scripts/lint-render.py | 160 | const remember = (el) => window.__lintSnapshots.push([el, el.getAttribute('style')]); | CODE |
| HIGH | scripts/lint-render.py | 168 | if (style === null) el.removeAttribute('style'); | CODE |
| HIGH | scripts/lint-render.py | 1594 | " pip install playwright && playwright install chromium", | CODE |
| HIGH | scripts/lint-render.py | 78 | pip install playwright && playwright install chromium | STRING |
| HIGH | scripts/lint-render.py | 871 | while (ancestor && ancestor !== document.body) { | STRING |
| HIGH | scripts/lint-render.py | 927 | const overflow = scroller && getComputedStyle(scroller).overflowX; | STRING |
| HIGH | scripts/lint-render.py | 986 | while (ancestor && ancestor !== document.body) { | STRING |
| HIGH | scripts/lint-render.py | 1061 | while (ancestor && ancestor !== document.body) { | STRING |
| HIGH | scripts/verify-excalidraw-import.py | 754 | const scroller = svg && svg.parentElement; | STRING |
| HIGH | scripts/verify-excalidraw-import.py | 755 | const overflow = scroller && getComputedStyle(scroller).overflowX; | STRING |
| HIGH | scripts/test-maintainer-policy.py | 363 | "python3 scripts/build-icons.py && git diff --ignore-space-at-eol --exit-code -- " | CODE |
| HIGH | scripts/test-maintainer-policy.py | 447 | if ! git rev-parse -q --verify HEAD^2 >/dev/null; then | CODE |
| HIGH | scripts/test-maintainer-policy.py | 519 | "python scripts/test-lint-a11y.py && make lint": """ | STRING |
| HIGH | scripts/test-maintainer-policy.py | 521 | run: python scripts/test-lint-a11y.py && make lint | CODE |
| HIGH | scripts/test-maintainer-policy.py | 602 | "python3 scripts/build-icons.py && git diff --exit-code", | CODE |
| 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/verify-mermaid-import.py | 1354 | CODE | |
| LOW | scripts/test-verify-heatmap.py | 124 | CODE | |
| LOW | scripts/test-verify-waterfall.py | 67 | CODE | |
| LOW | scripts/verify-waterfall.py | 135 | CODE | |
| LOW | scripts/verify-exploded.py | 53 | CODE | |
| LOW | scripts/verify-exploded.py | 224 | CODE | |
| LOW | scripts/test-verify-docs-sync.py | 385 | CODE | |
| LOW | scripts/test-verify-docs-sync.py | 915 | CODE | |
| LOW | scripts/verify-docs-sync.py | 227 | CODE | |
| LOW | scripts/verify-docs-sync.py | 765 | CODE | |
| LOW | scripts/verify-docs-sync.py | 1187 | CODE | |
| LOW | scripts/verify-docs-sync.py | 1514 | CODE | |
| LOW | scripts/verify-docs-sync.py | 1531 | CODE | |
| LOW | scripts/verify-doctor.py | 70 | CODE | |
| LOW | scripts/verify-heatmap.py | 259 | 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 | 790 | 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 | 421 | CODE | |
| LOW | scripts/lint-render.py | 723 | CODE | |
| LOW | scripts/lint-render.py | 1587 | 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 | 366 | CODE | |
| LOW | scripts/verify-motion.py | 147 | CODE | |
| LOW | scripts/verify-motion.py | 193 | CODE | |
| LOW | scripts/test-export-svg-standalone.py | 151 | CODE | |
| LOW | scripts/test-export-svg-standalone.py | 165 | CODE | |
| LOW | scripts/test-export-svg-standalone.py | 278 | CODE | |
| LOW | scripts/test-export-svg-standalone.py | 292 | CODE | |
| LOW | scripts/test-export-svg-standalone.py | 823 | CODE | |
| LOW | scripts/test-export-svg-standalone.py | 885 | CODE | |
| LOW | scripts/test-export-svg-standalone.py | 1442 | CODE | |
| LOW | scripts/test-export-svg-standalone.py | 1671 | CODE | |
| LOW | scripts/test-export-svg-standalone.py | 1812 | CODE | |
| LOW | scripts/test-verify-polar.py | 78 | CODE | |
| LOW | scripts/test-verify-axonometric-plan.py | 57 | CODE | |
| LOW | scripts/verify-treemap.py | 154 | CODE | |
| LOW | scripts/verify-bubble.py | 280 | CODE | |
| LOW | scripts/build-axonometric-plan-examples.py | 301 | CODE | |
| LOW | scripts/verify-streamgraph.py | 443 | CODE | |
| LOW | scripts/verify-streamgraph.py | 276 | CODE | |
| LOW | scripts/verify-beeswarm.py | 355 | CODE | |
| LOW | scripts/build-exploded-examples.py | 48 | CODE | |
| LOW | scripts/build-exploded-examples.py | 190 | CODE | |
| 72 more matches not shown… | ||||
| 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/test-verify-architecture-containment.py | 9 | CODE | |
| LOW | scripts/verify-ridgeline.py | 99 | CODE | |
| LOW | scripts/verify-mermaid-import.py | 9 | CODE | |
| LOW | scripts/test-export-wait.py | 18 | CODE | |
| LOW | scripts/test-export-wait.py | 386 | 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 | 54 | CODE | |
| LOW | scripts/verify-doctor.py | 8 | CODE | |
| LOW | scripts/test-verify-box-plot.py | 21 | 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-install-scan.py | 12 | 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 | |
| 35 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/verify-doctor.py | 101 | except ProcessLookupError: | CODE |
| HIGH | scripts/test-plugin-package.py | 849 | except VERSION_HISTORY.VersionHistoryError: | CODE |
| HIGH | scripts/test-plugin-package.py | 859 | 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 | 638 | 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 | 701 | for line in block.splitlines() | COMMENT |
| LOW | scripts/verify-docs-sync.py | 721 | # appendix` remains valid while the README's stale phrases stay covered. | COMMENT |
| LOW | scripts/verify-sankey.py | 121 | # Every element that can paint, or be inherited from. One list, because splitting | COMMENT |
| LOW | scripts/verify-sankey.py | 141 | # the same figure a different way, which is a gate failing at its actual job - | COMMENT |
| LOW | scripts/verify-sankey.py | 161 | r"^(?P<number>" + SVG_NUMBER + r")\s*(?P<unit>[a-z%]*)$", | COMMENT |
| LOW | scripts/verify-sankey.py | 721 | host.values.append((value, body)) | COMMENT |
| LOW | scripts/lint-render.py | 101 | # ponytail: 2px guard band around a released box absorbs boundary re-antialiasing; | 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 |
| LOW | .github/workflows/ci.yml | 501 | 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 | 323 | except Exception as exc: | STRING |
| LOW | scripts/test-export-wait.py | 345 | except Exception as exc: | STRING |
| LOW | scripts/test-verify-box-plot.py | 209 | except Exception as error: # pragma: no cover - the checker must not raise | CODE |
| LOW | scripts/lint-render.py | 847 | except Exception as error: | CODE |
| LOW | scripts/lint-render.py | 1609 | except Exception as error: | CODE |
| LOW | scripts/lint-render.py | 1630 | 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 | 257 | 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-verify-box-plot.py | 60 | 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 | 173 | 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 |