👩🚒 Paper-inspired typography for elegant reading on screen. Good content deserves good paper.
This report summarizes scanner evidence for tw93/Kami, a HTML project with 11,934 GitHub stars. SynthScan examined 92,944 lines of code across 306 source files, recording 437 pattern matches distributed across 13 syntactic categories. The legacy adjusted pattern signal is 6.0 (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? 277 finding(s).
Are imports declared and package/API names verified? 61 finding(s).
Are wrappers, guards, and repeated structures necessary? 308 finding(s).
Which changes need focused human review? 437 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 437 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 |
|---|---|---|---|---|
| LOW | plugins/kami/skills/kami/scripts/mermaid_normalize.py | 266 | def _assert_beautiful_mermaid(svg: str) -> None: | CODE |
| LOW | plugins/kami/skills/kami/scripts/site_facts.py | 168 | def _drop_language_redirect_script(rows: list[str]) -> list[str]: | CODE |
| LOW | plugins/kami/skills/kami/scripts/shared.py | 62 | def configure_weasyprint_runtime() -> None: | CODE |
| LOW | plugins/kami/skills/kami/scripts/shared.py | 211 | def public_document_template_kinds() -> set[str]: | CODE |
| LOW | plugins/kami/skills/kami/scripts/shared.py | 224 | def public_document_template_count() -> int: | CODE |
| LOW | plugins/kami/skills/kami/scripts/content.py | 207 | def _handle_ambiguous_starttag( | CODE |
| LOW | plugins/kami/skills/kami/scripts/content.py | 418 | def _changelog_contract_issues(content: dict) -> list[str]: | CODE |
| LOW | plugins/kami/skills/kami/scripts/html_visibility.py | 283 | def _document_custom_properties(raw: str) -> dict[str, str]: | CODE |
| LOW | plugins/kami/skills/kami/scripts/html_visibility.py | 858 | def _implicitly_closed_by_start(open_tag: str, new_tag: str) -> bool: | CODE |
| LOW | plugins/kami/skills/kami/scripts/html_visibility.py | 884 | def _implicitly_closed_by_end(open_tag: str, end_tag: str) -> bool: | CODE |
| LOW | plugins/kami/skills/kami/scripts/html_visibility.py | 898 | def _implicit_start_boundaries(new_tag: str) -> set[str]: | CODE |
| LOW | plugins/kami/skills/kami/scripts/html_visibility.py | 1096 | def _handle_ambiguous_starttag( | CODE |
| LOW | plugins/kami/skills/kami/scripts/lint.py | 83 | def _strip_css_block_comments(text: str) -> str: | CODE |
| LOW | plugins/kami/skills/kami/scripts/lint.py | 445 | def _emphasis_container_findings(path: Path) -> list[Finding]: | CODE |
| LOW | plugins/kami/skills/kami/scripts/lint.py | 576 | def _undefined_token_findings( | CODE |
| LOW | plugins/kami/skills/kami/scripts/lint.py | 699 | def check_cross_template_consistency(verbose: bool = False) -> int: | CODE |
| LOW | scripts/build_metadata.py | 510 | def should_include_skill_mirror_file(path: Path) -> bool: | CODE |
| LOW | scripts/tests/test_package.py | 92 | def test_render_examples_are_ignored_and_untracked() -> None: | CODE |
| LOW | scripts/tests/test_package.py | 111 | def test_dist_package_contents() -> None: | CODE |
| LOW | scripts/tests/test_package.py | 174 | def test_package_failure_preserves_last_good_archive() -> None: | CODE |
| LOW | scripts/tests/test_package.py | 197 | def test_plugin_metadata_generated() -> None: | CODE |
| LOW | scripts/tests/test_package.py | 214 | def test_claude_plugin_marketplace_version_matches_version_file() -> None: | CODE |
| LOW | scripts/tests/test_package.py | 250 | def test_build_metadata_reads_tokens_from_root_argument() -> None: | CODE |
| LOW | scripts/tests/test_package.py | 265 | def test_catalog_lists_pptx_for_slides() -> None: | CODE |
| LOW | scripts/tests/test_package.py | 344 | def test_check_update_defaults_to_latest_published_release() -> None: | CODE |
| LOW | scripts/tests/test_package.py | 374 | def test_check_update_uses_codex_plugin_update_command() -> None: | CODE |
| LOW | scripts/tests/test_package.py | 413 | def test_check_update_uses_claude_plugin_update_command() -> None: | CODE |
| LOW | scripts/tests/test_package.py | 447 | def test_release_gate_rejects_identity_mismatches() -> None: | CODE |
| LOW | scripts/tests/test_package.py | 460 | def test_release_gate_resolves_only_the_tag_namespace() -> None: | CODE |
| LOW | scripts/tests/test_package.py | 476 | def test_release_gate_requires_main_push_provenance() -> None: | CODE |
| LOW | scripts/tests/test_package.py | 499 | def test_release_gate_requires_mainline_reachability() -> None: | CODE |
| LOW | scripts/tests/test_package.py | 517 | def test_release_gate_compares_zip_payloads_not_container_bytes() -> None: | CODE |
| LOW | scripts/tests/test_package.py | 554 | def test_release_workflow_reads_back_required_reactions() -> None: | CODE |
| LOW | scripts/tests/test_package.py | 565 | def test_release_workflow_preserves_published_version_payloads() -> None: | CODE |
| LOW | scripts/tests/test_package.py | 580 | def test_release_note_help_matches_placeholder_flow() -> None: | CODE |
| LOW | scripts/tests/test_package.py | 593 | def test_release_note_scaffold_matches_published_shape() -> None: | CODE |
| LOW | scripts/tests/test_package.py | 614 | def test_plugin_mirror_follows_tracked_files() -> None: | CODE |
| LOW | scripts/tests/test_package.py | 636 | def test_mcp_server_card_install_path_matches_developer_docs() -> None: | CODE |
| LOW⚡ | scripts/tests/test_templates.py | 978 | def test_check_placeholders_passes_clean() -> None: | CODE |
| LOW⚡ | scripts/tests/test_templates.py | 988 | def test_markdown_residue_flags_raw_markers() -> None: | CODE |
| LOW | scripts/tests/test_templates.py | 32 | def test_long_doc_templates_use_rendered_toc_pages_and_chapter_headers() -> None: | CODE |
| LOW | scripts/tests/test_templates.py | 78 | def test_chinese_html_templates_keep_single_serif_stack() -> None: | CODE |
| LOW | scripts/tests/test_templates.py | 124 | def test_korean_templates_carry_resolvable_serif_name() -> None: | CODE |
| LOW | scripts/tests/test_templates.py | 162 | def test_sibling_placeholder_hints_stay_in_parity() -> None: | CODE |
| LOW | scripts/tests/test_templates.py | 190 | def test_font_fallback_markers_recognize_pt_serif() -> None: | CODE |
| LOW | scripts/tests/test_templates.py | 202 | def test_print_surfaces_have_no_ornamental_brand_lines() -> None: | CODE |
| LOW | scripts/tests/test_templates.py | 234 | def test_shipped_surfaces_keep_subtractive_defaults() -> None: | CODE |
| LOW | scripts/tests/test_templates.py | 312 | def test_print_radius_guidance_matches_shipped_range() -> None: | CODE |
| LOW | scripts/tests/test_templates.py | 323 | def test_reviewed_demo_details_keep_quiet_hierarchy() -> None: | CODE |
| LOW | scripts/tests/test_templates.py | 369 | def test_table_components_keep_one_quiet_rule_system() -> None: | CODE |
| LOW | scripts/tests/test_templates.py | 455 | def test_documented_snippets_answer_to_template_rules() -> None: | CODE |
| LOW | scripts/tests/test_templates.py | 515 | def test_emphasis_container_mix_counts_distinct_fills() -> None: | CODE |
| LOW | scripts/tests/test_templates.py | 559 | def test_templates_declare_jetbrains_mono_exactly_where_used() -> None: | CODE |
| LOW | scripts/tests/test_templates.py | 575 | def test_template_web_fonts_resolve_from_kami_cdn() -> None: | CODE |
| LOW | scripts/tests/test_templates.py | 589 | def test_brand_logo_slot_matches_across_locale_variants() -> None: | CODE |
| LOW | scripts/tests/test_templates.py | 832 | def test_off_palette_scans_site_demos_and_rejects_empty_checkout_scope() -> None: | CODE |
| LOW | scripts/tests/test_templates.py | 876 | def test_scan_file_ignores_block_comment_rgba() -> None: | CODE |
| LOW | scripts/tests/test_templates.py | 944 | def test_emphasis_exemption_matches_whole_class_names() -> None: | CODE |
| LOW | scripts/tests/test_templates.py | 1011 | def test_check_markdown_residue_skips_html_code_blocks() -> None: | CODE |
| LOW | scripts/tests/test_templates.py | 1058 | def test_pair_names_includes_known_pairs() -> None: | CODE |
| 147 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | plugins/kami/skills/kami/scripts/mermaid_normalize.py | 73 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | plugins/kami/skills/kami/scripts/mermaid_normalize.py | 75 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | plugins/kami/skills/kami/scripts/mermaid_normalize.py | 101 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | plugins/kami/skills/kami/scripts/mermaid_normalize.py | 103 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | plugins/kami/skills/kami/scripts/mermaid_normalize.py | 203 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | plugins/kami/skills/kami/scripts/mermaid_normalize.py | 205 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | plugins/kami/skills/kami/scripts/shared.py | 105 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | plugins/kami/skills/kami/scripts/shared.py | 110 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | plugins/kami/skills/kami/assets/templates/slides-en.py | 21 | # ═══════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | plugins/kami/skills/kami/assets/templates/slides-en.py | 23 | # ═══════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | plugins/kami/skills/kami/assets/templates/slides-en.py | 44 | # ═══════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | plugins/kami/skills/kami/assets/templates/slides-en.py | 46 | # ═══════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | plugins/kami/skills/kami/assets/templates/slides-en.py | 93 | # ═══════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | plugins/kami/skills/kami/assets/templates/slides-en.py | 95 | # ═══════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | plugins/kami/skills/kami/assets/templates/slides-en.py | 278 | # ═══════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | plugins/kami/skills/kami/assets/templates/slides-en.py | 280 | # ═══════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | plugins/kami/skills/kami/assets/templates/slides.py | 21 | # ═══════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | plugins/kami/skills/kami/assets/templates/slides.py | 23 | # ═══════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | plugins/kami/skills/kami/assets/templates/slides.py | 50 | # ═══════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | plugins/kami/skills/kami/assets/templates/slides.py | 52 | # ═══════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | plugins/kami/skills/kami/assets/templates/slides.py | 102 | # ═══════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | plugins/kami/skills/kami/assets/templates/slides.py | 104 | # ═══════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | plugins/kami/skills/kami/assets/templates/slides.py | 315 | # ═══════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | plugins/kami/skills/kami/assets/templates/slides.py | 317 | # ═══════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | skills/kami/scripts/mermaid_normalize.py | 73 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | skills/kami/scripts/mermaid_normalize.py | 75 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | skills/kami/scripts/mermaid_normalize.py | 101 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | skills/kami/scripts/mermaid_normalize.py | 103 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | skills/kami/scripts/mermaid_normalize.py | 203 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | skills/kami/scripts/mermaid_normalize.py | 205 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | skills/kami/scripts/shared.py | 105 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | skills/kami/scripts/shared.py | 110 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | skills/kami/assets/templates/slides-en.py | 21 | # ═══════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | skills/kami/assets/templates/slides-en.py | 23 | # ═══════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | skills/kami/assets/templates/slides-en.py | 44 | # ═══════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | skills/kami/assets/templates/slides-en.py | 46 | # ═══════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | skills/kami/assets/templates/slides-en.py | 93 | # ═══════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | skills/kami/assets/templates/slides-en.py | 95 | # ═══════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | skills/kami/assets/templates/slides-en.py | 278 | # ═══════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | skills/kami/assets/templates/slides-en.py | 280 | # ═══════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | skills/kami/assets/templates/slides.py | 21 | # ═══════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | skills/kami/assets/templates/slides.py | 23 | # ═══════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | skills/kami/assets/templates/slides.py | 50 | # ═══════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | skills/kami/assets/templates/slides.py | 52 | # ═══════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | skills/kami/assets/templates/slides.py | 102 | # ═══════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | skills/kami/assets/templates/slides.py | 104 | # ═══════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | skills/kami/assets/templates/slides.py | 315 | # ═══════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | skills/kami/assets/templates/slides.py | 317 | # ═══════════════════════════════════════════════════════════ | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | evals/score.py | 14 | CODE | |
| LOW | evals/score.py | 19 | CODE | |
| LOW | plugins/kami/skills/kami/scripts/build.py | 43 | CODE | |
| LOW | plugins/kami/skills/kami/scripts/mermaid_normalize.py | 32 | CODE | |
| LOW | plugins/kami/skills/kami/scripts/render.py | 10 | CODE | |
| LOW | plugins/kami/skills/kami/scripts/render.py | 21 | CODE | |
| LOW | plugins/kami/skills/kami/scripts/site_facts.py | 7 | CODE | |
| LOW | plugins/kami/skills/kami/scripts/checks.py | 14 | CODE | |
| LOW | plugins/kami/skills/kami/scripts/tokens.py | 7 | CODE | |
| LOW | plugins/kami/skills/kami/scripts/diagram_geometry.py | 6 | CODE | |
| LOW | plugins/kami/skills/kami/scripts/shared.py | 2 | CODE | |
| LOW | plugins/kami/skills/kami/scripts/content.py | 17 | CODE | |
| LOW | plugins/kami/skills/kami/scripts/content.py | 22 | CODE | |
| LOW | plugins/kami/skills/kami/scripts/visual.py | 13 | CODE | |
| LOW | plugins/kami/skills/kami/scripts/highlight.py | 7 | CODE | |
| LOW | plugins/kami/skills/kami/scripts/highlight.py | 168 | CODE | |
| LOW | plugins/kami/skills/kami/scripts/verify.py | 9 | CODE | |
| LOW | plugins/kami/skills/kami/scripts/math_render.py | 12 | CODE | |
| LOW | plugins/kami/skills/kami/scripts/deliver.py | 20 | CODE | |
| LOW | plugins/kami/skills/kami/scripts/html_visibility.py | 7 | CODE | |
| LOW | plugins/kami/skills/kami/scripts/optional_deps.py | 8 | CODE | |
| LOW | plugins/kami/skills/kami/scripts/mcp_server.py | 25 | CODE | |
| LOW | plugins/kami/skills/kami/scripts/lint.py | 13 | CODE | |
| LOW | scripts/build_metadata.py | 33 | CODE | |
| LOW | scripts/draft-release-notes.py | 20 | CODE | |
| LOW | scripts/release_gate.py | 3 | CODE | |
| LOW | scripts/tests/test_package.py | 2 | CODE | |
| LOW | scripts/tests/support.py | 2 | CODE | |
| LOW | scripts/tests/test_templates.py | 2 | CODE | |
| LOW | scripts/tests/test_build.py | 2 | CODE | |
| LOW | scripts/tests/test_site.py | 2 | CODE | |
| LOW | scripts/tests/test_content.py | 2 | CODE | |
| LOW | scripts/tests/test_render.py | 2 | CODE | |
| LOW | scripts/tests/test_render.py | 359 | CODE | |
| LOW | scripts/tests/test_render.py | 360 | CODE | |
| LOW | scripts/tests/test_deliver.py | 2 | CODE | |
| LOW | scripts/tests/test_mcp.py | 2 | CODE | |
| LOW | scripts/tests/test_diagrams.py | 2 | CODE | |
| LOW | scripts/tests/test_math.py | 2 | CODE | |
| LOW | skills/kami/scripts/build.py | 43 | CODE | |
| LOW | skills/kami/scripts/mermaid_normalize.py | 32 | CODE | |
| LOW | skills/kami/scripts/render.py | 10 | CODE | |
| LOW | skills/kami/scripts/render.py | 21 | CODE | |
| LOW | skills/kami/scripts/site_facts.py | 7 | CODE | |
| LOW | skills/kami/scripts/checks.py | 14 | CODE | |
| LOW | skills/kami/scripts/tokens.py | 7 | CODE | |
| LOW | skills/kami/scripts/diagram_geometry.py | 6 | CODE | |
| LOW | skills/kami/scripts/shared.py | 2 | CODE | |
| LOW | skills/kami/scripts/content.py | 17 | CODE | |
| LOW | skills/kami/scripts/content.py | 22 | CODE | |
| LOW | skills/kami/scripts/visual.py | 13 | CODE | |
| LOW | skills/kami/scripts/highlight.py | 7 | CODE | |
| LOW | skills/kami/scripts/highlight.py | 168 | CODE | |
| LOW | skills/kami/scripts/verify.py | 9 | CODE | |
| LOW | skills/kami/scripts/math_render.py | 12 | CODE | |
| LOW | skills/kami/scripts/deliver.py | 20 | CODE | |
| LOW | skills/kami/scripts/html_visibility.py | 7 | CODE | |
| LOW | skills/kami/scripts/optional_deps.py | 8 | CODE | |
| LOW | skills/kami/scripts/mcp_server.py | 25 | CODE | |
| LOW | skills/kami/scripts/lint.py | 13 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | evals/score.py | 127 | CODE | |
| LOW | plugins/kami/skills/kami/scripts/mermaid_normalize.py | 105 | CODE | |
| LOW | plugins/kami/skills/kami/scripts/mermaid_normalize.py | 118 | CODE | |
| LOW | plugins/kami/skills/kami/scripts/mermaid_normalize.py | 217 | CODE | |
| LOW | plugins/kami/skills/kami/scripts/mermaid_normalize.py | 151 | CODE | |
| LOW | plugins/kami/skills/kami/scripts/site_facts.py | 208 | CODE | |
| LOW | plugins/kami/skills/kami/scripts/checks.py | 193 | CODE | |
| LOW | plugins/kami/skills/kami/scripts/checks.py | 262 | CODE | |
| LOW | plugins/kami/skills/kami/scripts/checks.py | 312 | CODE | |
| LOW | plugins/kami/skills/kami/scripts/diagram_geometry.py | 79 | CODE | |
| LOW | plugins/kami/skills/kami/scripts/diagram_geometry.py | 147 | CODE | |
| LOW | plugins/kami/skills/kami/scripts/content.py | 237 | CODE | |
| LOW | plugins/kami/skills/kami/scripts/content.py | 297 | CODE | |
| LOW | plugins/kami/skills/kami/scripts/content.py | 536 | CODE | |
| LOW | plugins/kami/skills/kami/scripts/content.py | 576 | CODE | |
| LOW | plugins/kami/skills/kami/scripts/verify.py | 101 | CODE | |
| LOW | plugins/kami/skills/kami/scripts/verify.py | 160 | CODE | |
| LOW | plugins/kami/skills/kami/scripts/verify.py | 357 | CODE | |
| LOW | plugins/kami/skills/kami/scripts/verify.py | 521 | CODE | |
| LOW | plugins/kami/skills/kami/scripts/deliver.py | 146 | CODE | |
| LOW | plugins/kami/skills/kami/scripts/html_visibility.py | 105 | CODE | |
| LOW | plugins/kami/skills/kami/scripts/html_visibility.py | 152 | CODE | |
| LOW | plugins/kami/skills/kami/scripts/html_visibility.py | 232 | CODE | |
| LOW | plugins/kami/skills/kami/scripts/html_visibility.py | 283 | CODE | |
| LOW | plugins/kami/skills/kami/scripts/html_visibility.py | 563 | CODE | |
| LOW | plugins/kami/skills/kami/scripts/lint.py | 97 | CODE | |
| LOW | scripts/tests/test_package.py | 111 | CODE | |
| LOW | scripts/tests/test_templates.py | 162 | CODE | |
| LOW | scripts/tests/test_content.py | 85 | CODE | |
| LOW | scripts/tests/test_render.py | 244 | CODE | |
| LOW | scripts/tests/test_render.py | 788 | CODE | |
| LOW | scripts/tests/test_render.py | 807 | CODE | |
| LOW | skills/kami/scripts/mermaid_normalize.py | 105 | CODE | |
| LOW | skills/kami/scripts/mermaid_normalize.py | 118 | CODE | |
| LOW | skills/kami/scripts/mermaid_normalize.py | 217 | CODE | |
| LOW | skills/kami/scripts/mermaid_normalize.py | 151 | CODE | |
| LOW | skills/kami/scripts/site_facts.py | 208 | CODE | |
| LOW | skills/kami/scripts/checks.py | 193 | CODE | |
| LOW | skills/kami/scripts/checks.py | 262 | CODE | |
| LOW | skills/kami/scripts/checks.py | 312 | CODE | |
| LOW | skills/kami/scripts/diagram_geometry.py | 79 | CODE | |
| LOW | skills/kami/scripts/diagram_geometry.py | 147 | CODE | |
| LOW | skills/kami/scripts/content.py | 237 | CODE | |
| LOW | skills/kami/scripts/content.py | 297 | CODE | |
| LOW | skills/kami/scripts/content.py | 536 | CODE | |
| LOW | skills/kami/scripts/content.py | 576 | CODE | |
| LOW | skills/kami/scripts/verify.py | 101 | CODE | |
| LOW | skills/kami/scripts/verify.py | 160 | CODE | |
| LOW | skills/kami/scripts/verify.py | 357 | CODE | |
| LOW | skills/kami/scripts/verify.py | 521 | CODE | |
| LOW | skills/kami/scripts/deliver.py | 146 | CODE | |
| LOW | skills/kami/scripts/html_visibility.py | 105 | CODE | |
| LOW | skills/kami/scripts/html_visibility.py | 152 | CODE | |
| LOW | skills/kami/scripts/html_visibility.py | 232 | CODE | |
| LOW | skills/kami/scripts/html_visibility.py | 283 | CODE | |
| LOW | skills/kami/scripts/html_visibility.py | 563 | CODE | |
| LOW | skills/kami/scripts/lint.py | 97 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | plugins/kami/skills/kami/scripts/mermaid_normalize.py | 68 | except (OSError, ValueError): | CODE |
| HIGH | plugins/kami/skills/kami/scripts/render.py | 51 | except FileNotFoundError: | CODE |
| HIGH | plugins/kami/skills/kami/scripts/verify.py | 97 | except FileNotFoundError: | CODE |
| HIGH | plugins/kami/skills/kami/scripts/deliver.py | 170 | except (json.JSONDecodeError, OSError): | CODE |
| HIGH | plugins/kami/skills/kami/scripts/mcp_server.py | 222 | except OSError: | CODE |
| HIGH | skills/kami/scripts/mermaid_normalize.py | 68 | except (OSError, ValueError): | CODE |
| HIGH | skills/kami/scripts/render.py | 51 | except FileNotFoundError: | CODE |
| HIGH | skills/kami/scripts/verify.py | 97 | except FileNotFoundError: | CODE |
| HIGH | skills/kami/scripts/deliver.py | 170 | except (json.JSONDecodeError, OSError): | CODE |
| HIGH | skills/kami/scripts/mcp_server.py | 222 | except OSError: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | evals/score.py | 49 | except Exception as exc: # a crashing gate is a failed gate, not a crashed scorer | CODE |
| LOW | plugins/kami/skills/kami/scripts/build.py | 105 | except Exception as exc: # WeasyPrint / pypdf / OS errors: report, keep the sweep going | CODE |
| LOW | plugins/kami/skills/kami/scripts/checks.py | 98 | except Exception as exc: | CODE |
| LOW | plugins/kami/skills/kami/scripts/checks.py | 222 | except Exception as exc: | CODE |
| LOW | plugins/kami/skills/kami/scripts/checks.py | 357 | except Exception as exc: | CODE |
| LOW | plugins/kami/skills/kami/scripts/checks.py | 462 | except Exception as exc: | CODE |
| LOW | plugins/kami/skills/kami/scripts/visual.py | 130 | except Exception as exc: | CODE |
| LOW | plugins/kami/skills/kami/scripts/highlight.py | 139 | except Exception: | CODE |
| LOW | plugins/kami/skills/kami/scripts/verify.py | 107 | except Exception: | CODE |
| LOW | plugins/kami/skills/kami/scripts/verify.py | 129 | except Exception as exc: | CODE |
| LOW | plugins/kami/skills/kami/scripts/verify.py | 261 | except Exception as exc: | CODE |
| LOW | plugins/kami/skills/kami/scripts/verify.py | 449 | except Exception as exc: # WeasyPrint / pypdf / OS errors: report, keep the sweep going | CODE |
| LOW | plugins/kami/skills/kami/scripts/math_render.py | 435 | except Exception as exc: | CODE |
| LOW | plugins/kami/skills/kami/scripts/math_render.py | 598 | except Exception as exc: | CODE |
| LOW | plugins/kami/skills/kami/scripts/deliver.py | 110 | except Exception as exc: # a crashing gate must not cost the verdict | CODE |
| LOW | plugins/kami/skills/kami/scripts/deliver.py | 229 | except Exception as exc: # WeasyPrint and math failures both block delivery | CODE |
| LOW | plugins/kami/skills/kami/scripts/deliver.py | 247 | except Exception as exc: | CODE |
| LOW | plugins/kami/skills/kami/scripts/optional_deps.py | 110 | except Exception as exc: | CODE |
| LOW | plugins/kami/skills/kami/scripts/mcp_server.py | 423 | except Exception as exc: | CODE |
| LOW | plugins/kami/skills/kami/scripts/mcp_server.py | 448 | except Exception: | CODE |
| LOW | skills/kami/scripts/build.py | 105 | except Exception as exc: # WeasyPrint / pypdf / OS errors: report, keep the sweep going | CODE |
| LOW | skills/kami/scripts/checks.py | 98 | except Exception as exc: | CODE |
| LOW | skills/kami/scripts/checks.py | 222 | except Exception as exc: | CODE |
| LOW | skills/kami/scripts/checks.py | 357 | except Exception as exc: | CODE |
| LOW | skills/kami/scripts/checks.py | 462 | except Exception as exc: | CODE |
| LOW | skills/kami/scripts/visual.py | 130 | except Exception as exc: | CODE |
| LOW | skills/kami/scripts/highlight.py | 139 | except Exception: | CODE |
| LOW | skills/kami/scripts/verify.py | 107 | except Exception: | CODE |
| LOW | skills/kami/scripts/verify.py | 129 | except Exception as exc: | CODE |
| LOW | skills/kami/scripts/verify.py | 261 | except Exception as exc: | CODE |
| LOW | skills/kami/scripts/verify.py | 449 | except Exception as exc: # WeasyPrint / pypdf / OS errors: report, keep the sweep going | CODE |
| LOW | skills/kami/scripts/math_render.py | 435 | except Exception as exc: | CODE |
| LOW | skills/kami/scripts/math_render.py | 598 | except Exception as exc: | CODE |
| LOW | skills/kami/scripts/deliver.py | 110 | except Exception as exc: # a crashing gate must not cost the verdict | CODE |
| LOW | skills/kami/scripts/deliver.py | 229 | except Exception as exc: # WeasyPrint and math failures both block delivery | CODE |
| LOW | skills/kami/scripts/deliver.py | 247 | except Exception as exc: | CODE |
| LOW | skills/kami/scripts/optional_deps.py | 110 | except Exception as exc: | CODE |
| LOW | skills/kami/scripts/mcp_server.py | 423 | except Exception as exc: | CODE |
| LOW | skills/kami/scripts/mcp_server.py | 448 | except Exception: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | plugins/kami/skills/kami/references/design.md | 1354 | ### Multilingual SEO scaffolding | COMMENT |
| MEDIUM | site/assets/demos/demo-waza.html | 414 | <text x="360" y="78" fill="#141413" font-size="13" font-weight="500" font-family="'TsangerJinKai02', 'Source Han S | CODE |
| MEDIUM | skills/kami/references/design.md | 1354 | ### Multilingual SEO scaffolding | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | plugins/kami/skills/kami/scripts/ensure-fonts.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | plugins/kami/skills/kami/scripts/lint.py | 241 | return 1 | COMMENT |
| LOW | plugins/kami/skills/kami/scripts/lint.py | 541 | # with the same rules the templates answer to, and every var() it names must | COMMENT |
| LOW | skills/kami/scripts/ensure-fonts.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | skills/kami/scripts/lint.py | 241 | return 1 | COMMENT |
| LOW | skills/kami/scripts/lint.py | 541 | # with the same rules the templates answer to, and every var() it names must | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | evals/score.py | 59 | # The harness seals the run tree with mode 000; the scorer runs as its owner. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | plugins/kami/skills/kami/scripts/mermaid_normalize.py | 325 | CODE | |
| LOW | skills/kami/scripts/mermaid_normalize.py | 325 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | plugins/kami/skills/kami/scripts/render.py | 60 | def set_pdf_metadata(pdf_path: Path, author: str | None = None) -> None: | CODE |
| LOW | skills/kami/scripts/render.py | 60 | def set_pdf_metadata(pdf_path: Path, author: str | None = None) -> None: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/tests/test_render.py | 342 | def helper(): | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/tests/test_mcp.py | 156 | and "placeholder" in broken_result["report"].lower(), | CODE |