{"version": "2.1.0", "$schema": "https://json.schemastore.org/sarif-2.1.0.json", "runs": [{"tool": {"driver": {"name": "Repobility", "informationUri": "https://repobility.com", "rules": [{"id": "scanner-9329138ab98aef2c", "name": "Possibly dead Python function: check_core_files", "shortDescription": {"text": "Possibly dead Python function: check_core_files"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-76b8e0f509b3a180", "name": "Possibly dead Python function: check_figures", "shortDescription": {"text": "Possibly dead Python function: check_figures"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2426640407abef00", "name": "Possibly dead Python function: check_figures_yaml_html", "shortDescription": {"text": "Possibly dead Python function: check_figures_yaml_html"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1cc24978115d3208", "name": "Possibly dead Python function: check_no_placeholders", "shortDescription": {"text": "Possibly dead Python function: check_no_placeholders"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b95a3845fc76dad1", "name": "Possibly dead Python function: check_wordcount", "shortDescription": {"text": "Possibly dead Python function: check_wordcount"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-165cd1eac1ef38ab", "name": "Possibly dead Python function: check_tags", "shortDescription": {"text": "Possibly dead Python function: check_tags"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a624b5adbc02642b", "name": "Possibly dead Python function: check_claims_audit", "shortDescription": {"text": "Possibly dead Python function: check_claims_audit"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-03aaa62da4a6c098", "name": "Possibly dead Python function: check_sources", "shortDescription": {"text": "Possibly dead Python function: check_sources"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-dbd1f347b0967c6c", "name": "Possibly dead Python function: check_scenarios", "shortDescription": {"text": "Possibly dead Python function: check_scenarios"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f73e3769daebf15d", "name": "Possibly dead Python function: check_amendment", "shortDescription": {"text": "Possibly dead Python function: check_amendment"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d7fc697d755647cc", "name": "Possibly dead Python function: check_map_disclaimers", "shortDescription": {"text": "Possibly dead Python function: check_map_disclaimers"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0a778a1c00b5a48b", "name": "Possibly dead Python function: check_html_images_resolve", "shortDescription": {"text": "Possibly dead Python function: check_html_images_resolve"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9f82f9c16fbc38c5", "name": "Possibly dead Python function: check_pdf", "shortDescription": {"text": "Possibly dead Python function: check_pdf"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3d60d4d0e278623d", "name": "Possibly dead Python function: check_git_tag", "shortDescription": {"text": "Possibly dead Python function: check_git_tag"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3e3ff3788f6242c9", "name": "Possibly dead Python function: check_review_pass", "shortDescription": {"text": "Possibly dead Python function: check_review_pass"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5354bc270c4758fa", "name": "Possibly dead Python function: check_v2_games", "shortDescription": {"text": "Possibly dead Python function: check_v2_games"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-92b641fd28310842", "name": "Possibly dead Python function: check_v2_endstate_schema", "shortDescription": {"text": "Possibly dead Python function: check_v2_endstate_schema"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-10917b63c08a6020", "name": "Possibly dead Python function: check_v2_chapters", "shortDescription": {"text": "Possibly dead Python function: check_v2_chapters"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-42ee4c28120ca8f0", "name": "Possibly dead Python function: check_v2_structure", "shortDescription": {"text": "Possibly dead Python function: check_v2_structure"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d08de9bc3f014ba3", "name": "Possibly dead Python function: check_v2_probability_update", "shortDescription": {"text": "Possibly dead Python function: check_v2_probability_update"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e240105c5e1de830", "name": "Possibly dead Python function: check_v2_robustness", "shortDescription": {"text": "Possibly dead Python function: check_v2_robustness"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8c3327b84dab6516", "name": "Possibly dead Python function: check_v2_intro", "shortDescription": {"text": "Possibly dead Python function: check_v2_intro"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5b8e1f97018b837f", "name": "Possibly dead Python function: check_v2_seizure_valve", "shortDescription": {"text": "Possibly dead Python function: check_v2_seizure_valve"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-494f56112f15b062", "name": "Possibly dead Python function: check_v3_diff_guard", "shortDescription": {"text": "Possibly dead Python function: check_v3_diff_guard"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-eb262a85987e7083", "name": "Possibly dead Python function: check_v3_exempt_list", "shortDescription": {"text": "Possibly dead Python function: check_v3_exempt_list"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2535ecdd271e200f", "name": "Possibly dead Python function: check_v3_tokens", "shortDescription": {"text": "Possibly dead Python function: check_v3_tokens"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f6fadd9f961ec11c", "name": "Possibly dead Python function: check_v3_ladder", "shortDescription": {"text": "Possibly dead Python function: check_v3_ladder"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-930df79822cb337f", "name": "Possibly dead Python function: check_v3_de_floor", "shortDescription": {"text": "Possibly dead Python function: check_v3_de_floor"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-031dbd2738d9124b", "name": "Possibly dead Python function: check_v3_oneliners", "shortDescription": {"text": "Possibly dead Python function: check_v3_oneliners"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4bb6b53f5fc20c53", "name": "Possibly dead Python function: check_v3_rubric", "shortDescription": {"text": "Possibly dead Python function: check_v3_rubric"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-eb0c3b018dd4d36e", "name": "Privileged port 52 in use", "shortDescription": {"text": "Privileged port 52 in use"}, "fullDescription": {"text": "Port 52 is privileged (<1024). Make sure the service runs with the right caps or front it with a non-privileged port via a load balancer."}, "properties": {"scanner": "scanner-primary", "layer": "network", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-609fa30271995e01", "name": "Privileged port 30 in use", "shortDescription": {"text": "Privileged port 30 in use"}, "fullDescription": {"text": "Port 30 is privileged (<1024). Make sure the service runs with the right caps or front it with a non-privileged port via a load balancer."}, "properties": {"scanner": "scanner-primary", "layer": "network", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3947e5746061b545", "name": "Privileged port 58 in use", "shortDescription": {"text": "Privileged port 58 in use"}, "fullDescription": {"text": "Port 58 is privileged (<1024). Make sure the service runs with the right caps or front it with a non-privileged port via a load balancer."}, "properties": {"scanner": "scanner-primary", "layer": "network", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-eb9afbc3163a0a4b", "name": "Privileged port 91 in use", "shortDescription": {"text": "Privileged port 91 in use"}, "fullDescription": {"text": "Port 91 is privileged (<1024). Make sure the service runs with the right caps or front it with a non-privileged port via a load balancer."}, "properties": {"scanner": "scanner-primary", "layer": "network", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d57db64e175430ca", "name": "Privileged port 529 in use", "shortDescription": {"text": "Privileged port 529 in use"}, "fullDescription": {"text": "Port 529 is privileged (<1024). Make sure the service runs with the right caps or front it with a non-privileged port via a load balancer."}, "properties": {"scanner": "scanner-primary", "layer": "network", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e473af4019a6ef4d", "name": "Privileged port 115 in use", "shortDescription": {"text": "Privileged port 115 in use"}, "fullDescription": {"text": "Port 115 is privileged (<1024). Make sure the service runs with the right caps or front it with a non-privileged port via a load balancer."}, "properties": {"scanner": "scanner-primary", "layer": "network", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-7ae6d03285a1e05b", "name": "Privileged port 10 in use", "shortDescription": {"text": "Privileged port 10 in use"}, "fullDescription": {"text": "Port 10 is privileged (<1024). Make sure the service runs with the right caps or front it with a non-privileged port via a load balancer."}, "properties": {"scanner": "scanner-primary", "layer": "network", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e8ff34cd06f23064", "name": "Privileged port 49 in use", "shortDescription": {"text": "Privileged port 49 in use"}, "fullDescription": {"text": "Port 49 is privileged (<1024). Make sure the service runs with the right caps or front it with a non-privileged port via a load balancer."}, "properties": {"scanner": "scanner-primary", "layer": "network", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e66ab3227087686d", "name": "Privileged port 17 in use", "shortDescription": {"text": "Privileged port 17 in use"}, "fullDescription": {"text": "Port 17 is privileged (<1024). Make sure the service runs with the right caps or front it with a non-privileged port via a load balancer."}, "properties": {"scanner": "scanner-primary", "layer": "network", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a4fabdcb37dfcd67", "name": "Privileged port 11 in use", "shortDescription": {"text": "Privileged port 11 in use"}, "fullDescription": {"text": "Port 11 is privileged (<1024). Make sure the service runs with the right caps or front it with a non-privileged port via a load balancer."}, "properties": {"scanner": "scanner-primary", "layer": "network", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-427832886dd10e94", "name": "Privileged port 14 in use", "shortDescription": {"text": "Privileged port 14 in use"}, "fullDescription": {"text": "Port 14 is privileged (<1024). Make sure the service runs with the right caps or front it with a non-privileged port via a load balancer."}, "properties": {"scanner": "scanner-primary", "layer": "network", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9710c8d059e53154", "name": "No frontend routes/components detected", "shortDescription": {"text": "No frontend routes/components detected"}, "fullDescription": {"text": "No React/Vue/Next routes were found. This is fine for backend-only repos."}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6372cebde0220094", "name": "No auth library detected", "shortDescription": {"text": "No auth library detected"}, "fullDescription": {"text": "The scanner did not find any standard auth library (JWT, OAuth, NextAuth, Auth0, etc.). The repo has auth/admin/session surface indicators, so auth may live in custom code, in a separate service, or be missing."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4601e3ad3bb28677", "name": "No CI/CD pipelines detected", "shortDescription": {"text": "No CI/CD pipelines detected"}, "fullDescription": {"text": "No GitHub Actions, GitLab CI, or CircleCI configs found. Without CI you can't gate deploys on tests/lints."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6893a6c8b0861585", "name": "Very low test-to-source ratio", "shortDescription": {"text": "Very low test-to-source ratio"}, "fullDescription": {"text": "0 test file(s) for 53 source file(s) (ratio 0.00). Consider adding integration or unit tests for critical paths."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3ab5d313dda8e5f9", "name": "Debug logging residue appears in source files", "shortDescription": {"text": "Debug logging residue appears in source files"}, "fullDescription": {"text": "Found 67 console/debugger/print-style debug statements in non-test source. This is a common fast-generation residue before production cleanup."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9d79c4077342a7d0", "name": "Runtime service client appears to use placeholder configuration", "shortDescription": {"text": "Runtime service client appears to use placeholder configuration"}, "fullDescription": {"text": "A runtime source file appears to wire Supabase/Firebase/AI/payment-style clients to placeholder URLs, keys, or fallback values. In the Fable corpus this often means the UI/API shape is present while the backend service is not actually configured."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2d0c7b7ab8f8aacf", "name": "Critical user flow still appears backed by mock or placeholder data", "shortDescription": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "fullDescription": {"text": "A payment/auth/admin/order/billing-style flow contains mock, fake, TODO, dummy, or placeholder markers in runtime source. In the Fable corpus this is a high-leverage completeness smell: the app can look finished while the money, identity, or tenant flow is still scaffolded."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b9088664ace7f748", "name": "Composite production-readiness gap", "shortDescription": {"text": "Composite production-readiness gap"}, "fullDescription": {"text": "Multiple low-cost hardening controls are missing together: ci, tests. Opus verification showed these co-occurring gaps are a better readiness signal than reading each flag in isolation."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-749d4bc1bd66df5f", "name": "Agent instructions exist but release-hardening basics are missing", "shortDescription": {"text": "Agent instructions exist but release-hardening basics are missing"}, "fullDescription": {"text": "AI-coder instruction files were found, but the repo is missing ci, tests. Treat this as a contract gap: the agent is guided, but the generated output is not yet guarded by the controls that make it repeatable."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ea8f3013f588db25", "name": "Shallow git history limits provenance confidence", "shortDescription": {"text": "Shallow git history limits provenance confidence"}, "fullDescription": {"text": "The repository is a shallow clone. Origin/evolution analysis cannot distinguish fresh generation, imported legacy code, or long-lived human code with high confidence."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8424db9c75e04ba4", "name": "Very short observed git history", "shortDescription": {"text": "Very short observed git history"}, "fullDescription": {"text": "The repo has multiple source files but two or fewer visible commits. This is not a failure by itself, but it lowers confidence in evolution-based diagnosis."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3fcce895c58f3fd8", "name": "Commented-code block (5 lines) in verify.py:597", "shortDescription": {"text": "Commented-code block (5 lines) in verify.py:597"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-41cc68399748b89e", "name": "Network/subprocess call without timeout or try/except \u2014 verify.py:737", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 verify.py:737"}, "fullDescription": {"text": "`subprocess.run(...)` here lacks both a `timeout=` arg and an enclosing try/except. This is exactly the class of bug that took down our git-clone earlier (HTTP/2 stream cancel surfaced as a fatal). Add a `timeout=` and wrap in try/except, or use a wrapper that retries."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b932effb1a2d407c", "name": "Legacy-named symbol `probability_v1` in charts/v3_divergence.py:14", "shortDescription": {"text": "Legacy-named symbol `probability_v1` in charts/v3_divergence.py:14"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-62e76732c8f3cb58", "name": "Legacy-named symbol `probability_v1` in charts/v3_scorecards.py:23", "shortDescription": {"text": "Legacy-named symbol `probability_v1` in charts/v3_scorecards.py:23"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c6c5ceb8a2c2a1c2", "name": "Network/subprocess call without timeout or try/except \u2014 tools/page_fill.py:36", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 tools/page_fill.py:36"}, "fullDescription": {"text": "`subprocess.run(...)` here lacks both a `timeout=` arg and an enclosing try/except. This is exactly the class of bug that took down our git-clone earlier (HTTP/2 stream cancel surfaced as a fatal). Add a `timeout=` and wrap in try/except, or use a wrapper that retries."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-69b01cf87e25446b", "name": "Network/subprocess call without timeout or try/except \u2014 tools/stamp_ledger.py:76", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 tools/stamp_ledger.py:76"}, "fullDescription": {"text": "`subprocess.run(...)` here lacks both a `timeout=` arg and an enclosing try/except. This is exactly the class of bug that took down our git-clone earlier (HTTP/2 stream cancel surfaced as a fatal). Add a `timeout=` and wrap in try/except, or use a wrapper that retries."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d0782f7988dd1341", "name": "Legacy-named symbol `assemble_v2` in tools/export_chapter_md.py:19", "shortDescription": {"text": "Legacy-named symbol `assemble_v2` in tools/export_chapter_md.py:19"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-36b90d4ea6002484", "name": "Legacy-named symbol `assemble_v2` in tools/assemble_v2.py:2", "shortDescription": {"text": "Legacy-named symbol `assemble_v2` in tools/assemble_v2.py:2"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e4b00bc246c4f7a2", "name": "Legacy-named symbol `assemble_v2` in tools/gen_tokens.py:6", "shortDescription": {"text": "Legacy-named symbol `assemble_v2` in tools/gen_tokens.py:6"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1ee5e7977a924913", "name": "Legacy-named symbol `assemble_v2` in tools/assemble_v4.py:4", "shortDescription": {"text": "Legacy-named symbol `assemble_v2` in tools/assemble_v4.py:4"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0d32ef4b8a679ae8", "name": "Near-duplicate function bodies in 24 places", "shortDescription": {"text": "Near-duplicate function bodies in 24 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nverify.py:fn, verify.py:fn, verify.py:fn, verify.py:fn\n\nThis is *the* AI-coder failure mode (4\u00d7 more duplication in vibe-coded repos \u2014 see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2c04133e54348533", "name": "Near-duplicate function bodies in 2 places", "shortDescription": {"text": "Near-duplicate function bodies in 2 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\ntools/assemble_v2.py:render, tools/assemble_v4.py:render\n\nThis is *the* AI-coder failure mode (4\u00d7 more duplication in vibe-coded repos \u2014 see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}]}}, "automationDetails": {"id": "repobility/21308"}, "properties": {"repository": "timothyfehr-creator/Iran-War-Games", "repoUrl": "https://github.com/timothyfehr-creator/Iran-War-Games", "branch": "main"}, "results": [{"ruleId": "scanner-9329138ab98aef2c", "level": "note", "message": {"text": "Possibly dead Python function: check_core_files"}, "properties": {"repobilityId": "75818084993299fa", "scanner": "scanner-primary", "fingerprint": "9329138ab98aef2c", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "verify.py:73"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-76b8e0f509b3a180", "level": "note", "message": {"text": "Possibly dead Python function: check_figures"}, "properties": {"repobilityId": "304ceab6fbf91a06", "scanner": "scanner-primary", "fingerprint": "76b8e0f509b3a180", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "verify.py:98"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-2426640407abef00", "level": "note", "message": {"text": "Possibly dead Python function: check_figures_yaml_html"}, "properties": {"repobilityId": "560815b0524d9f18", "scanner": "scanner-primary", "fingerprint": "2426640407abef00", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "verify.py:116"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-1cc24978115d3208", "level": "note", "message": {"text": "Possibly dead Python function: check_no_placeholders"}, "properties": {"repobilityId": "e499bf8db20bdc27", "scanner": "scanner-primary", "fingerprint": "1cc24978115d3208", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "verify.py:142"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-b95a3845fc76dad1", "level": "note", "message": {"text": "Possibly dead Python function: check_wordcount"}, "properties": {"repobilityId": "81d987d179fae4cf", "scanner": "scanner-primary", "fingerprint": "b95a3845fc76dad1", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "verify.py:151"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-165cd1eac1ef38ab", "level": "note", "message": {"text": "Possibly dead Python function: check_tags"}, "properties": {"repobilityId": "40a8e00022b98b80", "scanner": "scanner-primary", "fingerprint": "165cd1eac1ef38ab", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "verify.py:167"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-a624b5adbc02642b", "level": "note", "message": {"text": "Possibly dead Python function: check_claims_audit"}, "properties": {"repobilityId": "25d1c29c6597a166", "scanner": "scanner-primary", "fingerprint": "a624b5adbc02642b", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "verify.py:190"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-03aaa62da4a6c098", "level": "note", "message": {"text": "Possibly dead Python function: check_sources"}, "properties": {"repobilityId": "afc9e04d514b3445", "scanner": "scanner-primary", "fingerprint": "03aaa62da4a6c098", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "verify.py:202"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-dbd1f347b0967c6c", "level": "note", "message": {"text": "Possibly dead Python function: check_scenarios"}, "properties": {"repobilityId": "c33c4af78b3022b1", "scanner": "scanner-primary", "fingerprint": "dbd1f347b0967c6c", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "verify.py:232"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-f73e3769daebf15d", "level": "note", "message": {"text": "Possibly dead Python function: check_amendment"}, "properties": {"repobilityId": "881076606da0e45a", "scanner": "scanner-primary", "fingerprint": "f73e3769daebf15d", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "verify.py:259"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-d7fc697d755647cc", "level": "note", "message": {"text": "Possibly dead Python function: check_map_disclaimers"}, "properties": {"repobilityId": "828bd71b99cda47c", "scanner": "scanner-primary", "fingerprint": "d7fc697d755647cc", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "verify.py:288"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-0a778a1c00b5a48b", "level": "note", "message": {"text": "Possibly dead Python function: check_html_images_resolve"}, "properties": {"repobilityId": "c0e88c2b013ff667", "scanner": "scanner-primary", "fingerprint": "0a778a1c00b5a48b", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "verify.py:299"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-9f82f9c16fbc38c5", "level": "note", "message": {"text": "Possibly dead Python function: check_pdf"}, "properties": {"repobilityId": "b1eab1a555d6d858", "scanner": "scanner-primary", "fingerprint": "9f82f9c16fbc38c5", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "verify.py:312"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3d60d4d0e278623d", "level": "note", "message": {"text": "Possibly dead Python function: check_git_tag"}, "properties": {"repobilityId": "9fe1b30e0266aefd", "scanner": "scanner-primary", "fingerprint": "3d60d4d0e278623d", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "verify.py:320"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3e3ff3788f6242c9", "level": "note", "message": {"text": "Possibly dead Python function: check_review_pass"}, "properties": {"repobilityId": "64c510d17bb2d955", "scanner": "scanner-primary", "fingerprint": "3e3ff3788f6242c9", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "verify.py:332"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-5354bc270c4758fa", "level": "note", "message": {"text": "Possibly dead Python function: check_v2_games"}, "properties": {"repobilityId": "291cf1fec7b94619", "scanner": "scanner-primary", "fingerprint": "5354bc270c4758fa", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "verify.py:358"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-92b641fd28310842", "level": "note", "message": {"text": "Possibly dead Python function: check_v2_endstate_schema"}, "properties": {"repobilityId": "fad1bf62acaca70c", "scanner": "scanner-primary", "fingerprint": "92b641fd28310842", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "verify.py:407"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-10917b63c08a6020", "level": "note", "message": {"text": "Possibly dead Python function: check_v2_chapters"}, "properties": {"repobilityId": "6120bcfa6aa472f6", "scanner": "scanner-primary", "fingerprint": "10917b63c08a6020", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "verify.py:425"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-42ee4c28120ca8f0", "level": "note", "message": {"text": "Possibly dead Python function: check_v2_structure"}, "properties": {"repobilityId": "25fd37f62e34079d", "scanner": "scanner-primary", "fingerprint": "42ee4c28120ca8f0", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "verify.py:456"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-d08de9bc3f014ba3", "level": "note", "message": {"text": "Possibly dead Python function: check_v2_probability_update"}, "properties": {"repobilityId": "3cab9d7a65ed1216", "scanner": "scanner-primary", "fingerprint": "d08de9bc3f014ba3", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "verify.py:474"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-e240105c5e1de830", "level": "note", "message": {"text": "Possibly dead Python function: check_v2_robustness"}, "properties": {"repobilityId": "86f56af0e92f9bbb", "scanner": "scanner-primary", "fingerprint": "e240105c5e1de830", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "verify.py:484"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-8c3327b84dab6516", "level": "note", "message": {"text": "Possibly dead Python function: check_v2_intro"}, "properties": {"repobilityId": "852d719a8443858c", "scanner": "scanner-primary", "fingerprint": "8c3327b84dab6516", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "verify.py:492"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-5b8e1f97018b837f", "level": "note", "message": {"text": "Possibly dead Python function: check_v2_seizure_valve"}, "properties": {"repobilityId": "2b691bf5badd6c9c", "scanner": "scanner-primary", "fingerprint": "5b8e1f97018b837f", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "verify.py:501"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-494f56112f15b062", "level": "note", "message": {"text": "Possibly dead Python function: check_v3_diff_guard"}, "properties": {"repobilityId": "2389cc6242d7eb7b", "scanner": "scanner-primary", "fingerprint": "494f56112f15b062", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "verify.py:550"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-eb262a85987e7083", "level": "note", "message": {"text": "Possibly dead Python function: check_v3_exempt_list"}, "properties": {"repobilityId": "00f67dc3e1a59fdb", "scanner": "scanner-primary", "fingerprint": "eb262a85987e7083", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "verify.py:558"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-2535ecdd271e200f", "level": "note", "message": {"text": "Possibly dead Python function: check_v3_tokens"}, "properties": {"repobilityId": "155b7956bd8e1077", "scanner": "scanner-primary", "fingerprint": "2535ecdd271e200f", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "verify.py:568"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-f6fadd9f961ec11c", "level": "note", "message": {"text": "Possibly dead Python function: check_v3_ladder"}, "properties": {"repobilityId": "ffc1e48b68030b63", "scanner": "scanner-primary", "fingerprint": "f6fadd9f961ec11c", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "verify.py:580"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-930df79822cb337f", "level": "note", "message": {"text": "Possibly dead Python function: check_v3_de_floor"}, "properties": {"repobilityId": "906a6e7adb642030", "scanner": "scanner-primary", "fingerprint": "930df79822cb337f", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "verify.py:596"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-031dbd2738d9124b", "level": "note", "message": {"text": "Possibly dead Python function: check_v3_oneliners"}, "properties": {"repobilityId": "41bf325b89adedd9", "scanner": "scanner-primary", "fingerprint": "031dbd2738d9124b", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "verify.py:622"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-4bb6b53f5fc20c53", "level": "note", "message": {"text": "Possibly dead Python function: check_v3_rubric"}, "properties": {"repobilityId": "b9ad0098a0f9ac73", "scanner": "scanner-primary", "fingerprint": "4bb6b53f5fc20c53", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "verify.py:654"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-eb0c3b018dd4d36e", "level": "warning", "message": {"text": "Privileged port 52 in use"}, "properties": {"repobilityId": "2b6877fa37212075", "scanner": "scanner-primary", "fingerprint": "eb0c3b018dd4d36e", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "games/scenario_3/episode_07.yaml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-609fa30271995e01", "level": "warning", "message": {"text": "Privileged port 30 in use"}, "properties": {"repobilityId": "54f172e7d16fc662", "scanner": "scanner-primary", "fingerprint": "609fa30271995e01", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "games/scenario_3/episode_07.yaml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3947e5746061b545", "level": "warning", "message": {"text": "Privileged port 58 in use"}, "properties": {"repobilityId": "6d9ae83ac6aad676", "scanner": "scanner-primary", "fingerprint": "3947e5746061b545", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "factbase/coa_inputs.yaml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-eb9afbc3163a0a4b", "level": "warning", "message": {"text": "Privileged port 91 in use"}, "properties": {"repobilityId": "b7ec732454da1e68", "scanner": "scanner-primary", "fingerprint": "eb9afbc3163a0a4b", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "factbase/theater_tradeoffs.yaml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-d57db64e175430ca", "level": "warning", "message": {"text": "Privileged port 529 in use"}, "properties": {"repobilityId": "29a20513e4b59f87", "scanner": "scanner-primary", "fingerprint": "d57db64e175430ca", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "factbase/theater_tradeoffs.yaml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-e473af4019a6ef4d", "level": "warning", "message": {"text": "Privileged port 115 in use"}, "properties": {"repobilityId": "2087ba4d6ed87551", "scanner": "scanner-primary", "fingerprint": "e473af4019a6ef4d", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "factbase/theater_tradeoffs.yaml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-7ae6d03285a1e05b", "level": "warning", "message": {"text": "Privileged port 10 in use"}, "properties": {"repobilityId": "735372d6b5594915", "scanner": "scanner-primary", "fingerprint": "7ae6d03285a1e05b", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "factbase/munitions.yaml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-e8ff34cd06f23064", "level": "warning", "message": {"text": "Privileged port 49 in use"}, "properties": {"repobilityId": "6108a3341973dcab", "scanner": "scanner-primary", "fingerprint": "e8ff34cd06f23064", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "factbase/munitions.yaml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-e66ab3227087686d", "level": "warning", "message": {"text": "Privileged port 17 in use"}, "properties": {"repobilityId": "0bf38fb8f89ec589", "scanner": "scanner-primary", "fingerprint": "e66ab3227087686d", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "factbase/posture.yaml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-a4fabdcb37dfcd67", "level": "warning", "message": {"text": "Privileged port 11 in use"}, "properties": {"repobilityId": "5b3038c67fabb4c8", "scanner": "scanner-primary", "fingerprint": "a4fabdcb37dfcd67", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "factbase/posture.yaml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-427832886dd10e94", "level": "warning", "message": {"text": "Privileged port 14 in use"}, "properties": {"repobilityId": "2dbd4b719a1412ff", "scanner": "scanner-primary", "fingerprint": "427832886dd10e94", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "factbase/posture.yaml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-9710c8d059e53154", "level": "none", "message": {"text": "No frontend routes/components detected"}, "properties": {"repobilityId": "44ca61485762e494", "scanner": "scanner-primary", "fingerprint": "9710c8d059e53154", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["coverage"]}}, {"ruleId": "scanner-6372cebde0220094", "level": "warning", "message": {"text": "No auth library detected"}, "properties": {"repobilityId": "a5b6035a5bbf8054", "scanner": "scanner-primary", "fingerprint": "6372cebde0220094", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["coverage", "auth"]}}, {"ruleId": "scanner-4601e3ad3bb28677", "level": "warning", "message": {"text": "No CI/CD pipelines detected"}, "properties": {"repobilityId": "c3ee439bce2bc51e", "scanner": "scanner-primary", "fingerprint": "4601e3ad3bb28677", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["coverage"]}}, {"ruleId": "scanner-6893a6c8b0861585", "level": "warning", "message": {"text": "Very low test-to-source ratio"}, "properties": {"repobilityId": "54a7de3f06314bf0", "scanner": "scanner-primary", "fingerprint": "6893a6c8b0861585", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["tests", "coverage"]}}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "6ca87224b2aabaa8", "scanner": "scanner-primary", "fingerprint": "3ab5d313dda8e5f9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["debug", "cleanup", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-9d79c4077342a7d0", "level": "warning", "message": {"text": "Runtime service client appears to use placeholder configuration"}, "properties": {"repobilityId": "5b62dd57a98ee30f", "scanner": "scanner-primary", "fingerprint": "9d79c4077342a7d0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "runtime-config", "service-client", "generated-repo-pattern"]}}, {"ruleId": "scanner-2d0c7b7ab8f8aacf", "level": "warning", "message": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "properties": {"repobilityId": "d99c1246fd4d6981", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-b9088664ace7f748", "level": "note", "message": {"text": "Composite production-readiness gap"}, "properties": {"repobilityId": "7324fd48bccbceac", "scanner": "scanner-primary", "fingerprint": "b9088664ace7f748", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["production-readiness", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-749d4bc1bd66df5f", "level": "warning", "message": {"text": "Agent instructions exist but release-hardening basics are missing"}, "properties": {"repobilityId": "61d6d7c396908006", "scanner": "scanner-primary", "fingerprint": "749d4bc1bd66df5f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-ea8f3013f588db25", "level": "note", "message": {"text": "Shallow git history limits provenance confidence"}, "properties": {"repobilityId": "fbde30320b64335e", "scanner": "scanner-primary", "fingerprint": "ea8f3013f588db25", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-8424db9c75e04ba4", "level": "none", "message": {"text": "Very short observed git history"}, "properties": {"repobilityId": "8ceafcb2fe03ab3e", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-3fcce895c58f3fd8", "level": "none", "message": {"text": "Commented-code block (5 lines) in verify.py:597"}, "properties": {"repobilityId": "c0ef7eee44fb88ff", "scanner": "scanner-primary", "fingerprint": "3fcce895c58f3fd8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-41cc68399748b89e", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 verify.py:737"}, "properties": {"repobilityId": "66a1bad2bdc9893c", "scanner": "scanner-primary", "fingerprint": "41cc68399748b89e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b932effb1a2d407c", "level": "note", "message": {"text": "Legacy-named symbol `probability_v1` in charts/v3_divergence.py:14"}, "properties": {"repobilityId": "02e1ca4a4e5a7d4f", "scanner": "scanner-primary", "fingerprint": "b932effb1a2d407c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-62e76732c8f3cb58", "level": "note", "message": {"text": "Legacy-named symbol `probability_v1` in charts/v3_scorecards.py:23"}, "properties": {"repobilityId": "12ee190baef4f348", "scanner": "scanner-primary", "fingerprint": "62e76732c8f3cb58", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-c6c5ceb8a2c2a1c2", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 tools/page_fill.py:36"}, "properties": {"repobilityId": "88877b9b7b59184b", "scanner": "scanner-primary", "fingerprint": "c6c5ceb8a2c2a1c2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-69b01cf87e25446b", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 tools/stamp_ledger.py:76"}, "properties": {"repobilityId": "21a376914dee3c69", "scanner": "scanner-primary", "fingerprint": "69b01cf87e25446b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d0782f7988dd1341", "level": "note", "message": {"text": "Legacy-named symbol `assemble_v2` in tools/export_chapter_md.py:19"}, "properties": {"repobilityId": "6d861e6f851c1618", "scanner": "scanner-primary", "fingerprint": "d0782f7988dd1341", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-36b90d4ea6002484", "level": "note", "message": {"text": "Legacy-named symbol `assemble_v2` in tools/assemble_v2.py:2"}, "properties": {"repobilityId": "debe64c1d2958ebe", "scanner": "scanner-primary", "fingerprint": "36b90d4ea6002484", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-e4b00bc246c4f7a2", "level": "note", "message": {"text": "Legacy-named symbol `assemble_v2` in tools/gen_tokens.py:6"}, "properties": {"repobilityId": "25d4a33ed72ea825", "scanner": "scanner-primary", "fingerprint": "e4b00bc246c4f7a2", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-1ee5e7977a924913", "level": "note", "message": {"text": "Legacy-named symbol `assemble_v2` in tools/assemble_v4.py:4"}, "properties": {"repobilityId": "ab6500b44908539e", "scanner": "scanner-primary", "fingerprint": "1ee5e7977a924913", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-0d32ef4b8a679ae8", "level": "note", "message": {"text": "Near-duplicate function bodies in 24 places"}, "properties": {"repobilityId": "0b67847e07aa39c3", "scanner": "scanner-primary", "fingerprint": "0d32ef4b8a679ae8", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "5b614bb77f729ba4", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "238076d775195135", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}]}]}