{"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-cbb4368177fcda06", "name": "Possibly dead Python function: apply_shift", "shortDescription": {"text": "Possibly dead Python function: apply_shift"}, "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-74ddd99e613477b3", "name": "Possibly dead Python function: read_habits", "shortDescription": {"text": "Possibly dead Python function: read_habits"}, "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-f71bc8a2e8113d26", "name": "Possibly dead Python function: upsert_feedback", "shortDescription": {"text": "Possibly dead Python function: upsert_feedback"}, "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-9454167d71a24c82", "name": "Possibly dead Python function: repo_path", "shortDescription": {"text": "Possibly dead Python function: repo_path"}, "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-5058c7687658096e", "name": "Possibly dead Python function: load_memory", "shortDescription": {"text": "Possibly dead Python function: load_memory"}, "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-8958db6cd82f7a7f", "name": "Possibly dead Python function: save_memory", "shortDescription": {"text": "Possibly dead Python function: save_memory"}, "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-ae840c8c35822b27", "name": "Possibly dead Python function: append_memory", "shortDescription": {"text": "Possibly dead Python function: append_memory"}, "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-4747f471486ca75a", "name": "Possibly dead Python function: clear_memory", "shortDescription": {"text": "Possibly dead Python function: clear_memory"}, "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-1571c49301a7472c", "name": "Possibly dead Python function: memory_as_system_block", "shortDescription": {"text": "Possibly dead Python function: memory_as_system_block"}, "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-3b1af8bea049f764", "name": "Possibly dead Python function: search_memory", "shortDescription": {"text": "Possibly dead Python function: search_memory"}, "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-b92e5769b0f2bded", "name": "Possibly dead Python function: consume", "shortDescription": {"text": "Possibly dead Python function: consume"}, "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-0b371efaced1d42e", "name": "Possibly dead Python function: peek", "shortDescription": {"text": "Possibly dead Python function: peek"}, "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-590ab28bfaa25464", "name": "Possibly dead Python function: search_memory", "shortDescription": {"text": "Possibly dead Python function: search_memory"}, "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-69ccfd5bde49faef", "name": "Possibly dead Python function: list_memories", "shortDescription": {"text": "Possibly dead Python function: list_memories"}, "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-7a1ec0e306cb7cac", "name": "Possibly dead Python function: cmd_run", "shortDescription": {"text": "Possibly dead Python function: cmd_run"}, "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-478c15420e2a0053", "name": "Possibly dead Python function: cmd_report", "shortDescription": {"text": "Possibly dead Python function: cmd_report"}, "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-f59f27346944b743", "name": "Possibly dead Python function: verify_one", "shortDescription": {"text": "Possibly dead Python function: verify_one"}, "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-9e3d8275ce261a0a", "name": "Possibly dead Python function: review_one", "shortDescription": {"text": "Possibly dead Python function: review_one"}, "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-7d873233fec2a064", "name": "Possibly dead Python function: cmd_decay", "shortDescription": {"text": "Possibly dead Python function: cmd_decay"}, "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-dab1f25e02fbbf9a", "name": "Possibly dead Python function: cmd_prune", "shortDescription": {"text": "Possibly dead Python function: cmd_prune"}, "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-b83b22140744fc99", "name": "Possibly dead Python function: beat_output_path", "shortDescription": {"text": "Possibly dead Python function: beat_output_path"}, "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-4e327c10f11b9d02", "name": "Possibly dead Python function: flatten", "shortDescription": {"text": "Possibly dead Python function: flatten"}, "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-0c9d57d39a7c3960", "name": "Possibly dead Python function: package_context", "shortDescription": {"text": "Possibly dead Python function: package_context"}, "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-9956412c63c57306", "name": "Possibly dead Python function: build_seo_block", "shortDescription": {"text": "Possibly dead Python function: build_seo_block"}, "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-f9e2bf54f105c0a8", "name": "Possibly dead Python function: narrow_to_topic", "shortDescription": {"text": "Possibly dead Python function: narrow_to_topic"}, "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-339bc9ea3b4574e7", "name": "Possibly dead Python function: channel_artifact_path", "shortDescription": {"text": "Possibly dead Python function: channel_artifact_path"}, "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-615ef14ac7b676d3", "name": "Possibly dead Python function: channel_approved", "shortDescription": {"text": "Possibly dead Python function: channel_approved"}, "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-b10e8855b8261c98", "name": "Stray `console.log` in TS/JS \u2014 extensions/news-coo/src/content/contentScript.ts:9", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 extensions/news-coo/src/content/contentScript.ts:9"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-734c34821514cba4", "name": "Dockerfile runs as root: docs/runbooks/sandcastle-templates/Dockerfile", "shortDescription": {"text": "Dockerfile runs as root: docs/runbooks/sandcastle-templates/Dockerfile"}, "fullDescription": {"text": "No non-root USER set. Containers running as root expand the blast radius of any vulnerability inside the image."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-79d0190e12f3c14b", "name": "Docker base image is tag-pinned but not digest-pinned: node:22-bookworm", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: node:22-bookworm"}, "fullDescription": {"text": "Container tags can be retagged upstream. Pin production base images to a reviewed digest (`image@sha256:...`) when reproducibility and supply-chain integrity matter."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-fe03f2d98dbabc84", "name": "Dockerfile pipes a remote installer into a shell", "shortDescription": {"text": "Dockerfile pipes a remote installer into a shell"}, "fullDescription": {"text": "Executing downloaded code during image build gives the remote endpoint build-time code execution. Prefer pinned packages or verify downloaded installers by checksum/signature."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "high", "confidence": 1.0}}, {"id": "scanner-aa5acaa49eb8315b", "name": "Containers defined but no K8s/orchestration manifest found", "shortDescription": {"text": "Containers defined but no K8s/orchestration manifest found"}, "fullDescription": {"text": "Repo has Dockerfiles/compose but no Kubernetes/Nomad manifests. If the target deployment is K8s, the manifests may live in a separate ops repo."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "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-b9a3582660ec766e", "name": "Insecure pattern 'direct_innerhtml_assignment' in docs/plans/centaur-zettelkasten/centaur-kb-prototype-v2.html:592", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in docs/plans/centaur-zettelkasten/centaur-kb-prototype-v2.html:592"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-8524a4c1891d2600", "name": "Insecure pattern 'direct_innerhtml_assignment' in docs/plans/centaur-zettelkasten/centaur-canvas-prototype-v4.html:311", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in docs/plans/centaur-zettelkasten/centaur-canvas-prototype-v4.html:311"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-82cb8cca3846b29e", "name": "Insecure pattern 'direct_innerhtml_assignment' in extensions/news-coo/src/content/extract.ts:14", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in extensions/news-coo/src/content/extract.ts:14"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9ab46f2cca0c8a30", "name": "Insecure pattern 'direct_innerhtml_assignment' in extensions/news-coo/src/content/siteCleaners/atypon.ts:194", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in extensions/news-coo/src/content/siteCleaners/atypon.ts:194"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d8621d9d9dba2d29", "name": "Insecure pattern 'direct_innerhtml_assignment' in thousand_sunny/static/kb_canvas.js:85", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in thousand_sunny/static/kb_canvas.js:85"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-47c21af10efeb94d", "name": "Insecure pattern 'direct_innerhtml_assignment' in thousand_sunny/static/kb_review.js:234", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in thousand_sunny/static/kb_review.js:234"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2950be12b7243a7d", "name": "Insecure pattern 'direct_innerhtml_assignment' in thousand_sunny/static/book_reader.js:138", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in thousand_sunny/static/book_reader.js:138"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-16c4e56391647e7c", "name": "Insecure pattern 'direct_innerhtml_assignment' in thousand_sunny/static/foundry/foundry.js:38", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in thousand_sunny/static/foundry/foundry.js:38"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-8842edd19d6ca718", "name": "Insecure pattern 'direct_innerhtml_assignment' in thousand_sunny/static/crew/index.html:1122", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in thousand_sunny/static/crew/index.html:1122"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-bebefc040f5595f2", "name": "Insecure pattern 'direct_innerhtml_assignment' in thousand_sunny/static/shosho/bridge-projects.js:435", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in thousand_sunny/static/shosho/bridge-projects.js:435"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a7453a9f67abe385", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/cache/restore@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-858d687acfbb3007", "name": "Very large file: tests/test_transcriber.py (1494 lines)", "shortDescription": {"text": "Very large file: tests/test_transcriber.py (1494 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-da8eb7825a94617c", "name": "Very large file: tests/test_bridge_weekly.py (1719 lines)", "shortDescription": {"text": "Very large file: tests/test_bridge_weekly.py (1719 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6779a894b105b762", "name": "Very large file: tests/test_gateway_handlers.py (2427 lines)", "shortDescription": {"text": "Very large file: tests/test_gateway_handlers.py (2427 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6ac8d6074655e0d0", "name": "Very large file: gateway/handlers/nami.py (2731 lines)", "shortDescription": {"text": "Very large file: gateway/handlers/nami.py (2731 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8f989398a79531b2", "name": "Very large file: thousand_sunny/static/book_reader.js (1728 lines)", "shortDescription": {"text": "Very large file: thousand_sunny/static/book_reader.js (1728 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b301c5dba178d704", "name": "Very large file: thousand_sunny/routers/bridge_projects.py (2023 lines)", "shortDescription": {"text": "Very large file: thousand_sunny/routers/bridge_projects.py (2023 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-858fdc19c2b0c60a", "name": "Very large file: thousand_sunny/routers/bridge_weekly.py (1391 lines)", "shortDescription": {"text": "Very large file: thousand_sunny/routers/bridge_weekly.py (1391 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-93dd823cb9f45232", "name": "Very large file: thousand_sunny/routers/robin.py (2264 lines)", "shortDescription": {"text": "Very large file: thousand_sunny/routers/robin.py (2264 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9970ba6cf75a5fdb", "name": "Very large file: thousand_sunny/routers/bridge.py (1829 lines)", "shortDescription": {"text": "Very large file: thousand_sunny/routers/bridge.py (1829 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e53f7889f27cbf46", "name": "Very large file: thousand_sunny/routers/bridge_project_thumbnails.py (1586 lines)", "shortDescription": {"text": "Very large file: thousand_sunny/routers/bridge_project_thumbnails.py (1586 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "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 690 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-72b2a6250083a784", "name": "Placeholder or mock-heavy implementation detected", "shortDescription": {"text": "Placeholder or mock-heavy implementation detected"}, "fullDescription": {"text": "Found 73 placeholder/mock markers across 40 source files. This often means the repo looks complete while core flows still use generated scaffolding or fake data."}, "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-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-572aa50f93c232fc", "name": "Agent authority lacks a verifier contract: CODEX.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: CODEX.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ec075f671ffed520", "name": "Agent authority lacks a verifier contract: .claude/skills/seo-audit-post/SKILL.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/skills/seo-audit-post/SKILL.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a7dbb9baec395b0c", "name": "Agent authority lacks a verifier contract: .claude/skills/kb-search/SKILL.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/skills/kb-search/SKILL.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-932ddb4cbf1184db", "name": "Agent instruction/config may expose a secret: .claude/skills/seo-keyword-enrich/SKILL.md", "shortDescription": {"text": "Agent instruction/config may expose a secret: .claude/skills/seo-keyword-enrich/SKILL.md"}, "fullDescription": {"text": "Agent-facing files are routinely pasted into LLM/tool contexts. Move literal tokens, keys, and passwords into a secret manager or document them as placeholders only."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-25b307f0d361e4fe", "name": "Agent authority lacks a verifier contract: .claude/skills/foundry-replan/SKILL.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/skills/foundry-replan/SKILL.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c6c79355084ee8cb", "name": "Agent authority lacks a verifier contract: .claude/skills/transcribe/references/cost-estimation.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/skills/transcribe/references/cost-estimation.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-7170daca609da14d", "name": "Agent authority lacks a verifier contract: .claude/skills/transcribe/references/error-recovery.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/skills/transcribe/references/error-recovery.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e50ed20143b9dde7", "name": "Agent authority lacks a verifier contract: .claude/skills/transcribe/references/pipeline-overview.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/skills/transcribe/references/pipeline-overview.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b0259231476c8b5f", "name": "Agent authority lacks a verifier contract: .claude/skills/transcribe/references/qc-report-format.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/skills/transcribe/references/qc-report-format.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e5dff73efd398ef4", "name": "Agent authority lacks a verifier contract: .claude/skills/keyword-research/references/cost-estimation.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/skills/keyword-research/references/cost-estimation.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c86c77e69ab305df", "name": "Agent authority lacks a verifier contract: .claude/skills/keyword-research/references/data-sources.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/skills/keyword-research/references/data-sources.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4beb62af6e9f85e3", "name": "Agent authority lacks a verifier contract: .claude/skills/keyword-research/references/pipeline-overview.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/skills/keyword-research/references/pipeline-overview.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c95db998c2db3e5c", "name": "Agent authority lacks a verifier contract: .claude/skills/github-triage/AGENT-BRIEF.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/skills/github-triage/AGENT-BRIEF.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ce64fc2e1591afd4", "name": "Legacy-named symbol `_frames_v1` in tests/test_thumbnail_worker.py:46", "shortDescription": {"text": "Legacy-named symbol `_frames_v1` in tests/test_thumbnail_worker.py:46"}, "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-e29323ebd0a7f9dd", "name": "Legacy-named symbol `playbook_data_v1` in tests/test_thumbnail_playbook.py:4", "shortDescription": {"text": "Legacy-named symbol `playbook_data_v1` in tests/test_thumbnail_playbook.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-4c3523a846eee383", "name": "Commented-code block (5 lines) in tests/test_bridge_router.py:623", "shortDescription": {"text": "Commented-code block (5 lines) in tests/test_bridge_router.py:623"}, "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-9a0e1158d73a4d4c", "name": "Legacy-named symbol `host_v1` in tests/test_bridge_project_thumbnails.py:741", "shortDescription": {"text": "Legacy-named symbol `host_v1` in tests/test_bridge_project_thumbnails.py:741"}, "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-0b3266c8f6c9bd8a", "name": "Commented-code block (6 lines) in tests/test_bridge_digests.py:12", "shortDescription": {"text": "Commented-code block (6 lines) in tests/test_bridge_digests.py:12"}, "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-f5a0884dbb4dad78", "name": "Legacy-named symbol `guest_v1` in tests/test_cutout_library.py:36", "shortDescription": {"text": "Legacy-named symbol `guest_v1` in tests/test_cutout_library.py:36"}, "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-605ca238a262abb0", "name": "Legacy-named symbol `TestMigrateLegacy` in tests/test_adr041_v3.py:142", "shortDescription": {"text": "Legacy-named symbol `TestMigrateLegacy` in tests/test_adr041_v3.py:142"}, "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-4d16d727a3db4931", "name": "Legacy-named symbol `test_calls_llm_and_writes_backup` in tests/test_kb_writer.py:421", "shortDescription": {"text": "Legacy-named symbol `test_calls_llm_and_writes_backup` in tests/test_kb_writer.py:421"}, "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-fc46b78ef67b2131", "name": "Commented-code block (5 lines) in tests/test_bridge_zoro.py:66", "shortDescription": {"text": "Commented-code block (5 lines) in tests/test_bridge_zoro.py:66"}, "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-ab9cee6ad1faef09", "name": "Legacy-named symbol `h_v1` in tests/foundry/test_export_hash.py:142", "shortDescription": {"text": "Legacy-named symbol `h_v1` in tests/foundry/test_export_hash.py:142"}, "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-332fd7bb83d9782c", "name": "Legacy-named symbol `model_copy` in tests/shared/test_schema_roundtrip.py:352", "shortDescription": {"text": "Legacy-named symbol `model_copy` in tests/shared/test_schema_roundtrip.py:352"}, "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-73de581d4ca7fbc2", "name": "Legacy-named symbol `list_objects_v2` in tests/shared/test_r2_client.py:6", "shortDescription": {"text": "Legacy-named symbol `list_objects_v2` in tests/shared/test_r2_client.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-66abf80a95cb7ccd", "name": "Legacy-named symbol `make_backup` in tests/shared/test_promotion_acceptance_gate.py:57", "shortDescription": {"text": "Legacy-named symbol `make_backup` in tests/shared/test_promotion_acceptance_gate.py:57"}, "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-207f8edbecf4c97e", "name": "Legacy-named symbol `list_objects_v2` in tests/shared/test_secondary_storage.py:62", "shortDescription": {"text": "Legacy-named symbol `list_objects_v2` in tests/shared/test_secondary_storage.py:62"}, "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-85a55e62840ccddf", "name": "Legacy-named symbol `test_propose_create_global_evidence_meets_v1` in tests/shared/test_concept_promotion_engine.py:967", "shortDescription": {"text": "Legacy-named symbol `test_propose_create_global_evidence_meets_v1` in tests/shared/test_concept_promotion_engine.py:967"}, "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-958c14c6eb335c79", "name": "Legacy-named symbol `outline_v1` in tests/shared/test_writing_assist_surface.py:83", "shortDescription": {"text": "Legacy-named symbol `outline_v1` in tests/shared/test_writing_assist_surface.py:83"}, "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-65983e699b14f2ef", "name": "Commented-code block (6 lines) in tests/shared/test_writing_assist_surface.py:262", "shortDescription": {"text": "Commented-code block (6 lines) in tests/shared/test_writing_assist_surface.py:262"}, "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-c0851465574b965b", "name": "Legacy-named symbol `m_old` in tests/shared/test_promotion_manifest.py:430", "shortDescription": {"text": "Legacy-named symbol `m_old` in tests/shared/test_promotion_manifest.py:430"}, "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-5972ab1f7a72aa5d", "name": "Legacy-named symbol `ann_v2` in tests/shared/test_annotation_store.py:426", "shortDescription": {"text": "Legacy-named symbol `ann_v2` in tests/shared/test_annotation_store.py:426"}, "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-3e9ca72d82accb36", "name": "Legacy-named symbol `test_returns_draft_compliance_v1` in tests/shared/test_compliance.py:350", "shortDescription": {"text": "Legacy-named symbol `test_returns_draft_compliance_v1` in tests/shared/test_compliance.py:350"}, "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-2b7490bdaece6a92", "name": "Commented-code block (5 lines) in tests/shared/test_wp_post_lister.py:352", "shortDescription": {"text": "Commented-code block (5 lines) in tests/shared/test_wp_post_lister.py:352"}, "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-a842088cf3871632", "name": "Commented-code block (5 lines) in tests/shared/test_entity_promotion_engine.py:39", "shortDescription": {"text": "Commented-code block (5 lines) in tests/shared/test_entity_promotion_engine.py:39"}, "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-9405a416dd9ad21a", "name": "Legacy-named symbol `test_run_yt_dlp_uses_throwaway_cookie_copy` in tests/shared/test_youtube_ingest.py:95", "shortDescription": {"text": "Legacy-named symbol `test_run_yt_dlp_uses_throwaway_cookie_copy` in tests/shared/test_youtube_ingest.py:95"}, "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-8f2f3414b6f20fb7", "name": "Legacy-named symbol `project_old` in tests/shared/test_doc_index.py:43", "shortDescription": {"text": "Legacy-named symbol `project_old` in tests/shared/test_doc_index.py:43"}, "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-547056bd4b9fcaad", "name": "Legacy-named symbol `test_store_still_reads_legacy_v1` in tests/shared/test_annotation_v3.py:189", "shortDescription": {"text": "Legacy-named symbol `test_store_still_reads_legacy_v1` in tests/shared/test_annotation_v3.py:189"}, "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-fda21fc2c7bd459c", "name": "Legacy-named symbol `test_v13_timestamp_anchor_rejected_in_schema_v1` in tests/shared/schemas/test_video_reader_schema.p", "shortDescription": {"text": "Legacy-named symbol `test_v13_timestamp_anchor_rejected_in_schema_v1` in tests/shared/schemas/test_video_reader_schema.py:88"}, "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-2bc878ccfd71387e", "name": "Legacy-named symbol `feedback_old` in tests/scripts/test_prune_old_memories.py:113", "shortDescription": {"text": "Legacy-named symbol `feedback_old` in tests/scripts/test_prune_old_memories.py:113"}, "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-3e157718e6587807", "name": "Legacy-named symbol `test_cmd_restore_apply_replaces_target_and_keeps_backup` in tests/scripts/test_restore_from_r2.py:2", "shortDescription": {"text": "Legacy-named symbol `test_cmd_restore_apply_replaces_target_and_keeps_backup` in tests/scripts/test_restore_from_r2.py:284"}, "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-5da4b3bf5f6b7a87", "name": "Commented-code block (5 lines) in tests/brook/script_video/test_fcpxml_emitter.py:279", "shortDescription": {"text": "Commented-code block (5 lines) in tests/brook/script_video/test_fcpxml_emitter.py:279"}, "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-9f152f3aa7b385f4", "name": "Legacy-named symbol `overall_v1` in tests/agents/franky/test_score_shadow_mode.py:7", "shortDescription": {"text": "Legacy-named symbol `overall_v1` in tests/agents/franky/test_score_shadow_mode.py:7"}, "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-279da8b98fe828fa", "name": "Legacy-named symbol `summarise_backup` in tests/agents/franky/test_weekly_digest.py:7", "shortDescription": {"text": "Legacy-named symbol `summarise_backup` in tests/agents/franky/test_weekly_digest.py:7"}, "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-3923eb9dd47fa2aa", "name": "Legacy-named symbol `test_execute_plan_dispatches_v2` in tests/agents/robin/test_ingest.py:887", "shortDescription": {"text": "Legacy-named symbol `test_execute_plan_dispatches_v2` in tests/agents/robin/test_ingest.py:887"}, "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-3a1461803c489efc", "name": "Legacy-named symbol `_ask_merger_llm_v2` in tests/agents/robin/test_annotation_merger_v3.py:10", "shortDescription": {"text": "Legacy-named symbol `_ask_merger_llm_v2` in tests/agents/robin/test_annotation_merger_v3.py:10"}, "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-426758bea2e44c74", "name": "Legacy-named symbol `kb_backup` in tests/agents/robin/test_ingest_route_c.py:43", "shortDescription": {"text": "Legacy-named symbol `kb_backup` in tests/agents/robin/test_ingest_route_c.py:43"}, "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-fb5124ef1e81c51e", "name": "Legacy-named symbol `_ask_merger_llm_v2` in tests/agents/robin/test_annotation_merger_v2.py:137", "shortDescription": {"text": "Legacy-named symbol `_ask_merger_llm_v2` in tests/agents/robin/test_annotation_merger_v2.py:137"}, "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-98509bdcf18a1b7d", "name": "Commented-code block (6 lines) in tests/thousand_sunny/test_books_annotations_api.py:341", "shortDescription": {"text": "Commented-code block (6 lines) in tests/thousand_sunny/test_books_annotations_api.py:341"}, "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-deb5b26b24cab965", "name": "Legacy-named symbol `model_copy` in tests/thousand_sunny/test_projects_synthesize_api.py:220", "shortDescription": {"text": "Legacy-named symbol `model_copy` in tests/thousand_sunny/test_projects_synthesize_api.py:220"}, "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-ab37807cb4b53adc", "name": "Legacy-named symbol `raw_copy` in tests/e2e/test_agent_robin_e2e.py:76", "shortDescription": {"text": "Legacy-named symbol `raw_copy` in tests/e2e/test_agent_robin_e2e.py:76"}, "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-228ba129b53fd9c7", "name": "Commented-code block (5 lines) in tests/e2e/test_agent_robin_e2e.py:80", "shortDescription": {"text": "Commented-code block (5 lines) in tests/e2e/test_agent_robin_e2e.py:80"}, "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-43d4ab19e7bb52f5", "name": "Commented-code block (5 lines) in qa/seed_ebooks.py:33", "shortDescription": {"text": "Commented-code block (5 lines) in qa/seed_ebooks.py:33"}, "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-f61c2a9ecfd47901", "name": "Legacy-named symbol `t_old` in shared/srt_align.py:6", "shortDescription": {"text": "Legacy-named symbol `t_old` in shared/srt_align.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-bbce1428564bcff5", "name": "Commented-code block (5 lines) in shared/project_reviews.py:178", "shortDescription": {"text": "Commented-code block (5 lines) in shared/project_reviews.py:178"}, "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-ef41072317eaa1f0", "name": "Commented-code block (5 lines) in shared/doc_index.py:46", "shortDescription": {"text": "Commented-code block (5 lines) in shared/doc_index.py:46"}, "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-0bffbca559e1de29", "name": "Commented-code block (5 lines) in shared/llm_router.py:179", "shortDescription": {"text": "Commented-code block (5 lines) in shared/llm_router.py:179"}, "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-dc876f8803492943", "name": "Commented-code block (6 lines) in shared/thumbnail_idea.py:50", "shortDescription": {"text": "Commented-code block (6 lines) in shared/thumbnail_idea.py:50"}, "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-f592ab0fbfeaeab7", "name": "Commented-code block (5 lines) in shared/wp_post_raw_fetcher.py:61", "shortDescription": {"text": "Commented-code block (5 lines) in shared/wp_post_raw_fetcher.py:61"}, "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-a0ffb5130ae5d9b3", "name": "Commented-code block (5 lines) in shared/claude_cli_client.py:172", "shortDescription": {"text": "Commented-code block (5 lines) in shared/claude_cli_client.py:172"}, "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-246e96879826fd78", "name": "Legacy-named symbol `list_objects_v2` in shared/secondary_storage.py:123", "shortDescription": {"text": "Legacy-named symbol `list_objects_v2` in shared/secondary_storage.py:123"}, "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-da63342c18f22a27", "name": "Network/subprocess call without timeout or try/except \u2014 shared/discard_service.py:89", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 shared/discard_service.py:89"}, "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-b0311d6a77fce06a", "name": "Commented-code block (5 lines) in shared/weekly_indexer.py:44", "shortDescription": {"text": "Commented-code block (5 lines) in shared/weekly_indexer.py:44"}, "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-861720e0000a8b0a", "name": "Commented-code block (7 lines) in shared/book_storage.py:33", "shortDescription": {"text": "Commented-code block (7 lines) in shared/book_storage.py:33"}, "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-b2bca7c78a9627dc", "name": "Commented-code block (5 lines) in shared/promotion_renderer.py:39", "shortDescription": {"text": "Commented-code block (5 lines) in shared/promotion_renderer.py:39"}, "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-a8b9ceefe74a1bf7", "name": "Commented-code block (5 lines) in shared/entity_promotion_engine.py:458", "shortDescription": {"text": "Commented-code block (5 lines) in shared/entity_promotion_engine.py:458"}, "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-e45ebe20a46ed749", "name": "Commented-code block (6 lines) in shared/wordpress_client.py:69", "shortDescription": {"text": "Commented-code block (6 lines) in shared/wordpress_client.py:69"}, "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-a813e79ca2539ec3", "name": "Commented-code block (6 lines) in shared/source_ingest.py:26", "shortDescription": {"text": "Commented-code block (6 lines) in shared/source_ingest.py:26"}, "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-6c4f97d63bf75a22", "name": "Commented-code block (5 lines) in shared/blob_loader.py:82", "shortDescription": {"text": "Commented-code block (5 lines) in shared/blob_loader.py:82"}, "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-49100157d733b9b2", "name": "Network/subprocess call without timeout or try/except \u2014 shared/auphonic.py:140", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 shared/auphonic.py:140"}, "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-2607cceb20315d12", "name": "Commented-code block (6 lines) in shared/calendar_scheduler.py:167", "shortDescription": {"text": "Commented-code block (6 lines) in shared/calendar_scheduler.py:167"}, "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-4100a2f505c987eb", "name": "Commented-code block (5 lines) in shared/concept_canonicalize.py:70", "shortDescription": {"text": "Commented-code block (5 lines) in shared/concept_canonicalize.py:70"}, "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-ecd03881552de8b1", "name": "Commented-code block (8 lines) in shared/reading_source_registry.py:203", "shortDescription": {"text": "Commented-code block (8 lines) in shared/reading_source_registry.py:203"}, "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-72161b73f6010793", "name": "Commented-code block (9 lines) in shared/youtube_ingest.py:323", "shortDescription": {"text": "Commented-code block (9 lines) in shared/youtube_ingest.py:323"}, "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-966afcf4df7e15bc", "name": "Legacy-named symbol `playbook_data_v1` in shared/thumbnail_playbook.py:7", "shortDescription": {"text": "Legacy-named symbol `playbook_data_v1` in shared/thumbnail_playbook.py:7"}, "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-8b9527b5ab51d9d0", "name": "Legacy-named symbol `kb_backup` in shared/kb_writer.py:14", "shortDescription": {"text": "Legacy-named symbol `kb_backup` in shared/kb_writer.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-4e66238380b922ad", "name": "Commented-code block (5 lines) in shared/kb_writer.py:70", "shortDescription": {"text": "Commented-code block (5 lines) in shared/kb_writer.py:70"}, "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-4d695b7e1a9a1a8d", "name": "Network/subprocess call without timeout or try/except \u2014 shared/audio_clip.py:25", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 shared/audio_clip.py:25"}, "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-7f211007b2966819", "name": "Commented-code block (5 lines) in shared/log.py:71", "shortDescription": {"text": "Commented-code block (5 lines) in shared/log.py:71"}, "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-afa591ed1aab4245", "name": "Commented-code block (6 lines) in shared/source_map_builder.py:317", "shortDescription": {"text": "Commented-code block (6 lines) in shared/source_map_builder.py:317"}, "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-68236688d4dcc142", "name": "Legacy-named symbol `make_backup` in shared/promotion_commit.py:15", "shortDescription": {"text": "Legacy-named symbol `make_backup` in shared/promotion_commit.py:15"}, "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-a7ec4f7e9b9899d0", "name": "Commented-code block (5 lines) in shared/promotion_commit.py:360", "shortDescription": {"text": "Commented-code block (5 lines) in shared/promotion_commit.py:360"}, "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-7e1ae461b8287606", "name": "Legacy-named symbol `is_v2` in shared/annotation_store.py:434", "shortDescription": {"text": "Legacy-named symbol `is_v2` in shared/annotation_store.py:434"}, "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-6c4672df32423467", "name": "Commented-code block (6 lines) in shared/annotation_store.py:233", "shortDescription": {"text": "Commented-code block (6 lines) in shared/annotation_store.py:233"}, "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-7ccb3573f11e1d83", "name": "Commented-code block (6 lines) in shared/alerts.py:71", "shortDescription": {"text": "Commented-code block (6 lines) in shared/alerts.py:71"}, "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-43d46d36c42500a2", "name": "Commented-code block (6 lines) in shared/promotion_review_service.py:348", "shortDescription": {"text": "Commented-code block (6 lines) in shared/promotion_review_service.py:348"}, "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-dbea3880975a24f7", "name": "Commented-code block (7 lines) in shared/writing_assist_surface.py:312", "shortDescription": {"text": "Commented-code block (7 lines) in shared/writing_assist_surface.py:312"}, "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-e9b0e7ea26f33d22", "name": "Commented-code block (5 lines) in shared/approval_queue.py:251", "shortDescription": {"text": "Commented-code block (5 lines) in shared/approval_queue.py:251"}, "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-f36164aedf2f056c", "name": "Commented-code block (5 lines) in shared/thumbnail_funnel.py:164", "shortDescription": {"text": "Commented-code block (5 lines) in shared/thumbnail_funnel.py:164"}, "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-6424b17edc13273e", "name": "Legacy-named symbol `has_legacy` in shared/weekly_writer.py:589", "shortDescription": {"text": "Legacy-named symbol `has_legacy` in shared/weekly_writer.py:589"}, "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-50f50e620b6c0ea6", "name": "Commented-code block (9 lines) in shared/weekly_writer.py:171", "shortDescription": {"text": "Commented-code block (9 lines) in shared/weekly_writer.py:171"}, "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-a293300b03c6124c", "name": "Commented-code block (5 lines) in shared/kb_hybrid_search.py:83", "shortDescription": {"text": "Commented-code block (5 lines) in shared/kb_hybrid_search.py:83"}, "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-694123a99d3d9120", "name": "Legacy-named symbol `__v2` in shared/state.py:437", "shortDescription": {"text": "Legacy-named symbol `__v2` in shared/state.py:437"}, "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-1894c7c8852e534e", "name": "Commented-code block (5 lines) in shared/state.py:523", "shortDescription": {"text": "Commented-code block (5 lines) in shared/state.py:523"}, "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-9347783c74387c7b", "name": "Legacy-named symbol `model_copy` in shared/audit_results_store.py:346", "shortDescription": {"text": "Legacy-named symbol `model_copy` in shared/audit_results_store.py:346"}, "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-032a7d71d8d29236", "name": "Commented-code block (7 lines) in shared/translator.py:80", "shortDescription": {"text": "Commented-code block (7 lines) in shared/translator.py:80"}, "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-12ff66c1d6cec7c6", "name": "Legacy-named symbol `list_objects_v2` in shared/r2_client.py:173", "shortDescription": {"text": "Legacy-named symbol `list_objects_v2` in shared/r2_client.py:173"}, "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-eb7d6b173d13aa0c", "name": "Commented-code block (6 lines) in shared/concept_promotion_engine.py:492", "shortDescription": {"text": "Commented-code block (6 lines) in shared/concept_promotion_engine.py:492"}, "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-c4f11bed8ab42bd6", "name": "Legacy-named symbol `model_copy` in shared/brook_synthesize_store.py:166", "shortDescription": {"text": "Legacy-named symbol `model_copy` in shared/brook_synthesize_store.py:166"}, "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-605f348d97b3b4ad", "name": "Commented-code block (5 lines) in shared/promotion_preflight.py:321", "shortDescription": {"text": "Commented-code block (5 lines) in shared/promotion_preflight.py:321"}, "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-84f3d38e391a542e", "name": "Legacy-named symbol `_hard_invariant_timestamp_anchor_requires_v2` in shared/schemas/source_map.py:204", "shortDescription": {"text": "Legacy-named symbol `_hard_invariant_timestamp_anchor_requires_v2` in shared/schemas/source_map.py:204"}, "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-9305492508377895", "name": "Legacy-named symbol `__v2` in shared/schemas/proposal_metrics.py:5", "shortDescription": {"text": "Legacy-named symbol `__v2` in shared/schemas/proposal_metrics.py:5"}, "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-cafb584c0a155503", "name": "Legacy-named symbol `_validate_cast_requires_v2` in shared/schemas/reading_source.py:241", "shortDescription": {"text": "Legacy-named symbol `_validate_cast_requires_v2` in shared/schemas/reading_source.py:241"}, "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-1261ee03ef62bbcf", "name": "Commented-code block (5 lines) in shared/schemas/reading_context_package.py:79", "shortDescription": {"text": "Commented-code block (5 lines) in shared/schemas/reading_context_package.py:79"}, "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-5d4af87a5f00c5a9", "name": "Commented-code block (5 lines) in shared/schemas/ingest_result.py:37", "shortDescription": {"text": "Commented-code block (5 lines) in shared/schemas/ingest_result.py:37"}, "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-6040ba681d46bbba", "name": "Commented-code block (5 lines) in shared/schemas/seo.py:34", "shortDescription": {"text": "Commented-code block (5 lines) in shared/schemas/seo.py:34"}, "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-63bf665d22034015", "name": "Legacy-named symbol `_has_legacy` in scripts/backfill_adr041_v3.py:30", "shortDescription": {"text": "Legacy-named symbol `_has_legacy` in scripts/backfill_adr041_v3.py:30"}, "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-271e02268449c47e", "name": "Legacy-named symbol `t_old` in scripts/align_srt.py:8", "shortDescription": {"text": "Legacy-named symbol `t_old` in scripts/align_srt.py:8"}, "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-5f47cac95b941864", "name": "Legacy-named symbol `playbook_v1` in scripts/dispatch_gemini_playbook_audit.py:4", "shortDescription": {"text": "Legacy-named symbol `playbook_v1` in scripts/dispatch_gemini_playbook_audit.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-6e8924b5f387507f", "name": "Legacy-named symbol `playbook_v1` in scripts/compose_playbook_v1.py:1", "shortDescription": {"text": "Legacy-named symbol `playbook_v1` in scripts/compose_playbook_v1.py:1"}, "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-284120be3801f5e3", "name": "Commented-code block (6 lines) in scripts/iter4_1_test.py:35", "shortDescription": {"text": "Commented-code block (6 lines) in scripts/iter4_1_test.py:35"}, "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-af40c7f1f9d769f3", "name": "Commented-code block (6 lines) in scripts/iter4_test.py:42", "shortDescription": {"text": "Commented-code block (6 lines) in scripts/iter4_test.py:42"}, "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-1fd74a7082692329", "name": "Commented-code block (5 lines) in scripts/vault_layout_audit.py:243", "shortDescription": {"text": "Commented-code block (5 lines) in scripts/vault_layout_audit.py:243"}, "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-493c050ff7fb193b", "name": "Network/subprocess call without timeout or try/except \u2014 scripts/iter_test.py:253", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 scripts/iter_test.py:253"}, "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-4ca582f086cf13cd", "name": "Legacy-named symbol `thumbnail_reference_extraction_v1` in scripts/cluster_thumbnail_patterns.py:3", "shortDescription": {"text": "Legacy-named symbol `thumbnail_reference_extraction_v1` in scripts/cluster_thumbnail_patterns.py:3"}, "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-297f11298ee7f1d4", "name": "Legacy-named symbol `playbook_v1` in scripts/dispatch_codex_playbook_audit.py:4", "shortDescription": {"text": "Legacy-named symbol `playbook_v1` in scripts/dispatch_codex_playbook_audit.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-65cdba832ba9a8d7", "name": "Network/subprocess call without timeout or try/except \u2014 scripts/dispatch_codex_playbook_audit.py:152", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 scripts/dispatch_codex_playbook_audit.py:152"}, "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-1ab5d564e19d0930", "name": "Legacy-named symbol `thumbnail_reference_extraction_v1` in scripts/extract_thumbnail_features.py:6", "shortDescription": {"text": "Legacy-named symbol `thumbnail_reference_extraction_v1` in scripts/extract_thumbnail_features.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-89cb5e2db4d26822", "name": "Legacy-named symbol `no_backup` in scripts/migrate_broken_concept_frontmatter.py:146", "shortDescription": {"text": "Legacy-named symbol `no_backup` in scripts/migrate_broken_concept_frontmatter.py:146"}, "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-daf319556cb0764f", "name": "Legacy-named symbol `playbook_v1` in scripts/splice_playbook_v1.py:4", "shortDescription": {"text": "Legacy-named symbol `playbook_v1` in scripts/splice_playbook_v1.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-eb87e7c25ff8f88d", "name": "Legacy-named symbol `playbook_v1` in scripts/fix_playbook_v1_to_v1_1.py:1", "shortDescription": {"text": "Legacy-named symbol `playbook_v1` in scripts/fix_playbook_v1_to_v1_1.py:1"}, "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-9cdb8a2014ee8624", "name": "Legacy-named symbol `pre_restore_backup` in scripts/restore_from_r2.py:71", "shortDescription": {"text": "Legacy-named symbol `pre_restore_backup` in scripts/restore_from_r2.py:71"}, "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-82d31e5ab3270066", "name": "Commented-code block (11 lines) in extensions/news-coo/src/content/siteCleaners/sciencedirect.ts:5", "shortDescription": {"text": "Commented-code block (11 lines) in extensions/news-coo/src/content/siteCleaners/sciencedirect.ts:5"}, "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-b54ddd36b3f6e841", "name": "Commented-code block (12 lines) in extensions/news-coo/src/content/siteCleaners/jama.ts:9", "shortDescription": {"text": "Commented-code block (12 lines) in extensions/news-coo/src/content/siteCleaners/jama.ts:9"}, "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-c5a934692dcd40dc", "name": "Commented-code block (11 lines) in extensions/news-coo/src/content/siteCleaners/bmj.ts:8", "shortDescription": {"text": "Commented-code block (11 lines) in extensions/news-coo/src/content/siteCleaners/bmj.ts:8"}, "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-8eb675c4bb2b8038", "name": "Commented-code block (5 lines) in extensions/news-coo/src/content/siteCleaners/nature.ts:5", "shortDescription": {"text": "Commented-code block (5 lines) in extensions/news-coo/src/content/siteCleaners/nature.ts:5"}, "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-8d3238847780c0c8", "name": "Commented-code block (5 lines) in extensions/news-coo/src/content/siteCleaners/figureAnchors.ts:3", "shortDescription": {"text": "Commented-code block (5 lines) in extensions/news-coo/src/content/siteCleaners/figureAnchors.ts:3"}, "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-beef3e774a8cf6ae", "name": "Commented-code block (6 lines) in extensions/news-coo/src/content/siteCleaners/atypon.ts:7", "shortDescription": {"text": "Commented-code block (6 lines) in extensions/news-coo/src/content/siteCleaners/atypon.ts:7"}, "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-843c827300ec9a94", "name": "Network/subprocess call without timeout or try/except \u2014 agents/foundry/fcpxml_emitter.py:39", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 agents/foundry/fcpxml_emitter.py:39"}, "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-b0cbb1fa834de58c", "name": "Commented-code block (5 lines) in agents/foundry/beat_editor.py:348", "shortDescription": {"text": "Commented-code block (5 lines) in agents/foundry/beat_editor.py:348"}, "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-0e25b625d15e0f01", "name": "Network/subprocess call without timeout or try/except \u2014 agents/foundry/lib/web_highlight_record.py:438", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 agents/foundry/lib/web_highlight_record.py:438"}, "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-c106dbd9a40f0a80", "name": "Legacy-named symbol `summarise_backup` in agents/franky/weekly_digest.py:198", "shortDescription": {"text": "Legacy-named symbol `summarise_backup` in agents/franky/weekly_digest.py:198"}, "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-ca21c1b6a288c542", "name": "Commented-code block (19 lines) in agents/franky/health_check.py:72", "shortDescription": {"text": "Commented-code block (19 lines) in agents/franky/health_check.py:72"}, "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-47ca2f7f9cc314c1", "name": "Legacy-named symbol `overall_v1` in agents/franky/news_digest.py:446", "shortDescription": {"text": "Legacy-named symbol `overall_v1` in agents/franky/news_digest.py:446"}, "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-93d20f5f2026b0ad", "name": "Commented-code block (5 lines) in agents/franky/anomaly_daemon.py:69", "shortDescription": {"text": "Commented-code block (5 lines) in agents/franky/anomaly_daemon.py:69"}, "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-b22a8306e74c3587", "name": "Legacy-named symbol `r2_backup` in agents/franky/r2_backup_verify.py:189", "shortDescription": {"text": "Legacy-named symbol `r2_backup` in agents/franky/r2_backup_verify.py:189"}, "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-42e064be8eb865b4", "name": "Legacy-named symbol `__v2` in agents/franky/state/proposal_metrics.py:333", "shortDescription": {"text": "Legacy-named symbol `__v2` in agents/franky/state/proposal_metrics.py:333"}, "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-bc2e928ccae162a9", "name": "Legacy-named symbol `model_copy` in agents/brook/line1b_extractor.py:197", "shortDescription": {"text": "Legacy-named symbol `model_copy` in agents/brook/line1b_extractor.py:197"}, "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-a4699ea4bef9e5a5", "name": "Commented-code block (10 lines) in agents/brook/audit_runner.py:227", "shortDescription": {"text": "Commented-code block (10 lines) in agents/brook/audit_runner.py:227"}, "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-657d6472f0bf4d41", "name": "Network/subprocess call without timeout or try/except \u2014 agents/brook/audit_runner.py:32", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 agents/brook/audit_runner.py:32"}, "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-3e2c92e15f09ed64", "name": "Commented-code block (6 lines) in agents/brook/repurpose_engine.py:359", "shortDescription": {"text": "Commented-code block (6 lines) in agents/brook/repurpose_engine.py:359"}, "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-36e365cfea5706b7", "name": "Legacy-named symbol `model_copy` in agents/brook/seo_narrow.py:137", "shortDescription": {"text": "Legacy-named symbol `model_copy` in agents/brook/seo_narrow.py:137"}, "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-decb53bf48928b07", "name": "Network/subprocess call without timeout or try/except \u2014 agents/brook/script_video/pipeline.py:107", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 agents/brook/script_video/pipeline.py:107"}, "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-2443f2d9eb981d77", "name": "Commented-code block (6 lines) in agents/brook/synthesize/__init__.py:123", "shortDescription": {"text": "Commented-code block (6 lines) in agents/brook/synthesize/__init__.py:123"}, "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-f76dc087cc870b5f", "name": "Legacy-named symbol `model_copy` in agents/brook/synthesize/_store_writer.py:48", "shortDescription": {"text": "Legacy-named symbol `model_copy` in agents/brook/synthesize/_store_writer.py:48"}, "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-202989c69f270e15", "name": "Legacy-named symbol `model_copy` in agents/brook/synthesize/_reject_discount.py:101", "shortDescription": {"text": "Legacy-named symbol `model_copy` in agents/brook/synthesize/_reject_discount.py:101"}, "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-32f6fd90543cc254", "name": "Commented-code block (5 lines) in agents/brook/synthesize/_finalize.py:114", "shortDescription": {"text": "Commented-code block (5 lines) in agents/brook/synthesize/_finalize.py:114"}, "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-a076d50ba8c68355", "name": "Legacy-named symbol `_ask_merger_llm_v2` in agents/robin/annotation_merger.py:20", "shortDescription": {"text": "Legacy-named symbol `_ask_merger_llm_v2` in agents/robin/annotation_merger.py:20"}, "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-4210ddd11e55c88d", "name": "Commented-code block (7 lines) in agents/robin/ingest.py:310", "shortDescription": {"text": "Commented-code block (7 lines) in agents/robin/ingest.py:310"}, "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-95f9e0df4c2cbac8", "name": "Legacy-named symbol `outline_v1` in agents/robin/reading_context_package.py:648", "shortDescription": {"text": "Legacy-named symbol `outline_v1` in agents/robin/reading_context_package.py:648"}, "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-5b935f79e6846df2", "name": "Commented-code block (6 lines) in agents/robin/reading_context_package.py:100", "shortDescription": {"text": "Commented-code block (6 lines) in agents/robin/reading_context_package.py:100"}, "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-41f39b7bcaf02268", "name": "Commented-code block (5 lines) in .claude/skills/seo-keyword-enrich/scripts/enrich.py:688", "shortDescription": {"text": "Commented-code block (5 lines) in .claude/skills/seo-keyword-enrich/scripts/enrich.py:688"}, "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-ed132164c8a206ca", "name": "Commented-code block (10 lines) in thousand_sunny/promotion_wiring.py:90", "shortDescription": {"text": "Commented-code block (10 lines) in thousand_sunny/promotion_wiring.py:90"}, "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-bf1f6c6858edcdb0", "name": "Commented-code block (5 lines) in thousand_sunny/auth.py:32", "shortDescription": {"text": "Commented-code block (5 lines) in thousand_sunny/auth.py:32"}, "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-a1c973125d67a6b1", "name": "Commented-code block (5 lines) in thousand_sunny/app.py:11", "shortDescription": {"text": "Commented-code block (5 lines) in thousand_sunny/app.py:11"}, "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-810796f520a2171a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 thousand_sunny/static/kb_canvas.js:800", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 thousand_sunny/static/kb_canvas.js:800"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a893158ac4e483e9", "name": "Commented-code block (6 lines) in thousand_sunny/static/book_reader.js:111", "shortDescription": {"text": "Commented-code block (6 lines) in thousand_sunny/static/book_reader.js:111"}, "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-4bd6c9500312c575", "name": "Commented-code block (5 lines) in thousand_sunny/static/projects/review.js:209", "shortDescription": {"text": "Commented-code block (5 lines) in thousand_sunny/static/projects/review.js:209"}, "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-c11f281c71e689c6", "name": "`fetch()` without try/.catch or AbortSignal \u2014 thousand_sunny/static/shosho/bridge-projects.js:283", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 thousand_sunny/static/shosho/bridge-projects.js:283"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a2a16739b7ddf864", "name": "Commented-code block (7 lines) in thousand_sunny/static/shosho/av-reader.js:8", "shortDescription": {"text": "Commented-code block (7 lines) in thousand_sunny/static/shosho/av-reader.js:8"}, "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-a950823204d304c2", "name": "Commented-code block (5 lines) in thousand_sunny/routers/foundry.py:325", "shortDescription": {"text": "Commented-code block (5 lines) in thousand_sunny/routers/foundry.py:325"}, "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-16e91f1e8d583959", "name": "Commented-code block (5 lines) in thousand_sunny/routers/writing_assist.py:242", "shortDescription": {"text": "Commented-code block (5 lines) in thousand_sunny/routers/writing_assist.py:242"}, "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-6aa09de557bf0c5a", "name": "Commented-code block (6 lines) in thousand_sunny/routers/bridge_projects.py:105", "shortDescription": {"text": "Commented-code block (6 lines) in thousand_sunny/routers/bridge_projects.py:105"}, "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-5d4f97bb753957f3", "name": "Legacy-named symbol `latest_backup` in thousand_sunny/routers/franky.py:244", "shortDescription": {"text": "Legacy-named symbol `latest_backup` in thousand_sunny/routers/franky.py:244"}, "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-0bfeae876eb421f2", "name": "Commented-code block (5 lines) in thousand_sunny/routers/bridge_weekly.py:218", "shortDescription": {"text": "Commented-code block (5 lines) in thousand_sunny/routers/bridge_weekly.py:218"}, "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-487ea47cdd24ff34", "name": "Commented-code block (6 lines) in thousand_sunny/routers/robin.py:66", "shortDescription": {"text": "Commented-code block (6 lines) in thousand_sunny/routers/robin.py:66"}, "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-56d30f53eb67f30a", "name": "Network/subprocess call without timeout or try/except \u2014 thousand_sunny/routers/robin.py:122", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 thousand_sunny/routers/robin.py:122"}, "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-70ed3eeff05f1835", "name": "Commented-code block (5 lines) in thousand_sunny/routers/progress.py:24", "shortDescription": {"text": "Commented-code block (5 lines) in thousand_sunny/routers/progress.py:24"}, "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-ff67e92a38cfd73e", "name": "Commented-code block (12 lines) in thousand_sunny/routers/bridge.py:369", "shortDescription": {"text": "Commented-code block (12 lines) in thousand_sunny/routers/bridge.py:369"}, "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-621d2773ce5998d6", "name": "Legacy-named symbol `brainstorm_youtube_v1` in thousand_sunny/routers/bridge_project_thumbnails.py:110", "shortDescription": {"text": "Legacy-named symbol `brainstorm_youtube_v1` in thousand_sunny/routers/bridge_project_thumbnails.py:110"}, "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-d5205aea6ae18552", "name": "Commented-code block (5 lines) in thousand_sunny/routers/repurpose.py:263", "shortDescription": {"text": "Commented-code block (5 lines) in thousand_sunny/routers/repurpose.py:263"}, "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-9cac7ce15e72817b", "name": "31 env vars used in code but missing from .env.example", "shortDescription": {"text": "31 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `ANTHROPIC_AUTH_TOKEN`, `APPDATA`, `CLAUDE_CODE_OAUTH_TOKEN`, `DB_PATH`, `FRANKY_NAKAMA_BACKUP_STALE_HOURS`, `GEMINI_MAX_WORKERS`, `GITHUB_TOKEN`, `GOOGLE_API_KEY` + 23 more. Add them (with a placeholder/comment) to .env.example so onboarding doesn't break."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-be46ea126aa5d8dc", "name": "Near-duplicate function bodies in 3 places", "shortDescription": {"text": "Near-duplicate function bodies in 3 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nshared/xai_client.py:ask_grok, shared/gemini_client.py:ask_gemini, shared/anthropic_client.py:ask_claude\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:\nshared/weekly_indexer.py:actual_pomodoros_on, shared/weekly_indexer.py:actual_pomodoros\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-02525d39071dd2c7", "name": "Near-duplicate function bodies in 5 places", "shortDescription": {"text": "Near-duplicate function bodies in 5 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nshared/calendar_scheduler.py:schedule_block, shared/calendar_scheduler.py:schedule_entry, shared/calendar_scheduler.py:reschedule_block, shared/weekly_writer.py:schedule_task_block\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-b81ed995921f59c5", "name": "FastAPI POST `models_set` without auth dependency \u2014 thousand_sunny/routers/bridge_models.py:64", "shortDescription": {"text": "FastAPI POST `models_set` without auth dependency \u2014 thousand_sunny/routers/bridge_models.py:64"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-281c7772fba6e3d9", "name": "FastAPI POST `models_reset` without auth dependency \u2014 thousand_sunny/routers/bridge_models.py:81", "shortDescription": {"text": "FastAPI POST `models_reset` without auth dependency \u2014 thousand_sunny/routers/bridge_models.py:81"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-17955f0d78e43d44", "name": "FastAPI POST `create_permanent` without auth dependency \u2014 thousand_sunny/routers/kb_review.py:278", "shortDescription": {"text": "FastAPI POST `create_permanent` without auth dependency \u2014 thousand_sunny/routers/kb_review.py:278"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-cdbf049c1a62a6a2", "name": "FastAPI POST `review_skip` without auth dependency \u2014 thousand_sunny/routers/kb_review.py:556", "shortDescription": {"text": "FastAPI POST `review_skip` without auth dependency \u2014 thousand_sunny/routers/kb_review.py:556"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8e97516872a21dc4", "name": "FastAPI POST `review_later` without auth dependency \u2014 thousand_sunny/routers/kb_review.py:568", "shortDescription": {"text": "FastAPI POST `review_later` without auth dependency \u2014 thousand_sunny/routers/kb_review.py:568"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-39cb98c29ad65d7d", "name": "FastAPI POST `decide_item` without auth dependency \u2014 thousand_sunny/routers/promotion_review.py:268", "shortDescription": {"text": "FastAPI POST `decide_item` without auth dependency \u2014 thousand_sunny/routers/promotion_review.py:268"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a0a4bf5d95a540d4", "name": "FastAPI POST `commit_source` without auth dependency \u2014 thousand_sunny/routers/promotion_review.py:324", "shortDescription": {"text": "FastAPI POST `commit_source` without auth dependency \u2014 thousand_sunny/routers/promotion_review.py:324"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1bedecd1e949629a", "name": "FastAPI POST `start_review` without auth dependency \u2014 thousand_sunny/routers/promotion_review.py:375", "shortDescription": {"text": "FastAPI POST `start_review` without auth dependency \u2014 thousand_sunny/routers/promotion_review.py:375"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-aecff605000d7cf5", "name": "FastAPI POST `start` without auth dependency \u2014 thousand_sunny/routers/robin.py:1131", "shortDescription": {"text": "FastAPI POST `start` without auth dependency \u2014 thousand_sunny/routers/robin.py:1131"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-72f019cc730d93f1", "name": "FastAPI POST `cancel` without auth dependency \u2014 thousand_sunny/routers/robin.py:1173", "shortDescription": {"text": "FastAPI POST `cancel` without auth dependency \u2014 thousand_sunny/routers/robin.py:1173"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f70b4d07f09555f3", "name": "FastAPI POST `submit_guidance` without auth dependency \u2014 thousand_sunny/routers/robin.py:1421", "shortDescription": {"text": "FastAPI POST `submit_guidance` without auth dependency \u2014 thousand_sunny/routers/robin.py:1421"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-17e6b399e24b7b8d", "name": "FastAPI POST `execute` without auth dependency \u2014 thousand_sunny/routers/robin.py:1466", "shortDescription": {"text": "FastAPI POST `execute` without auth dependency \u2014 thousand_sunny/routers/robin.py:1466"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b2b8dda9865cb550", "name": "FastAPI PATCH `memory_update` without auth dependency \u2014 thousand_sunny/routers/bridge.py:1733", "shortDescription": {"text": "FastAPI PATCH `memory_update` without auth dependency \u2014 thousand_sunny/routers/bridge.py:1733"}, "fullDescription": {"text": "`@router.patch` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-437302652a3aacef", "name": "FastAPI DELETE `memory_delete` without auth dependency \u2014 thousand_sunny/routers/bridge.py:1762", "shortDescription": {"text": "FastAPI DELETE `memory_delete` without auth dependency \u2014 thousand_sunny/routers/bridge.py:1762"}, "fullDescription": {"text": "`@router.delete` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7d9d1234e0f5cd34", "name": "FastAPI POST `books_upload` without auth dependency \u2014 thousand_sunny/routers/books.py:286", "shortDescription": {"text": "FastAPI POST `books_upload` without auth dependency \u2014 thousand_sunny/routers/books.py:286"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-aac18dbba3d0e7da", "name": "FastAPI DELETE `delete_book_endpoint` without auth dependency \u2014 thousand_sunny/routers/books.py:499", "shortDescription": {"text": "FastAPI DELETE `delete_book_endpoint` without auth dependency \u2014 thousand_sunny/routers/books.py:499"}, "fullDescription": {"text": "`@router.delete` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d5f7b7435281cba0", "name": "Dangling fetch: POST /kb/api/permanent (thousand_sunny/static/kb_canvas.js:800)", "shortDescription": {"text": "Dangling fetch: POST /kb/api/permanent (thousand_sunny/static/kb_canvas.js:800)"}, "fullDescription": {"text": "`thousand_sunny/static/kb_canvas.js:800` calls `POST /kb/api/permanent` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/kb/api/permanent`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-98fc6863123459eb", "name": "Dangling fetch: GET /robin/api/books/${encodeURIComponent(BOOK_ID)} (thousand_sunny/static/book_reader.js:247)", "shortDescription": {"text": "Dangling fetch: GET /robin/api/books/${encodeURIComponent(BOOK_ID)} (thousand_sunny/static/book_reader.js:247)"}, "fullDescription": {"text": "`thousand_sunny/static/book_reader.js:247` calls `GET /robin/api/books/${encodeURIComponent(BOOK_ID)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/robin/api/books/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-89cefd9401d3e419", "name": "Dangling fetch: GET /robin/api/books/${encodeURIComponent(BOOK_ID)}/annotations (thousand_sunny/static/book_reader.js:26", "shortDescription": {"text": "Dangling fetch: GET /robin/api/books/${encodeURIComponent(BOOK_ID)}/annotations (thousand_sunny/static/book_reader.js:262)"}, "fullDescription": {"text": "`thousand_sunny/static/book_reader.js:262` calls `GET /robin/api/books/${encodeURIComponent(BOOK_ID)}/annotations` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/robin/api/books/<p>/annotations`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-62779bcf1c7e3e46", "name": "Dangling fetch: POST /robin/api/books/${encodeURIComponent(BOOK_ID)}/annotations (thousand_sunny/static/book_reader.js:3", "shortDescription": {"text": "Dangling fetch: POST /robin/api/books/${encodeURIComponent(BOOK_ID)}/annotations (thousand_sunny/static/book_reader.js:305)"}, "fullDescription": {"text": "`thousand_sunny/static/book_reader.js:305` calls `POST /robin/api/books/${encodeURIComponent(BOOK_ID)}/annotations` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/robin/api/books/<p>/annotations`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b3a8ce2349adf040", "name": "Dangling fetch: POST /robin/api/books/${encodeURIComponent(BOOK_ID)}/ingest-request (thousand_sunny/static/book_reader.j", "shortDescription": {"text": "Dangling fetch: POST /robin/api/books/${encodeURIComponent(BOOK_ID)}/ingest-request (thousand_sunny/static/book_reader.js:1003)"}, "fullDescription": {"text": "`thousand_sunny/static/book_reader.js:1003` calls `POST /robin/api/books/${encodeURIComponent(BOOK_ID)}/ingest-request` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/robin/api/books/<p>/ingest-request`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a4aa7976875659bb", "name": "Dangling fetch: DELETE /robin/api/books/${encodeURIComponent(BOOK_ID)}/ingest-request (thousand_sunny/static/book_reader", "shortDescription": {"text": "Dangling fetch: DELETE /robin/api/books/${encodeURIComponent(BOOK_ID)}/ingest-request (thousand_sunny/static/book_reader.js:1030)"}, "fullDescription": {"text": "`thousand_sunny/static/book_reader.js:1030` calls `DELETE /robin/api/books/${encodeURIComponent(BOOK_ID)}/ingest-request` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/robin/api/books/<p>/ingest-request`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-81533cf5991fdbc2", "name": "Dangling fetch: DELETE /robin/api/books/${encodeURIComponent(BOOK_ID)} (thousand_sunny/static/book_reader.js:1069)", "shortDescription": {"text": "Dangling fetch: DELETE /robin/api/books/${encodeURIComponent(BOOK_ID)} (thousand_sunny/static/book_reader.js:1069)"}, "fullDescription": {"text": "`thousand_sunny/static/book_reader.js:1069` calls `DELETE /robin/api/books/${encodeURIComponent(BOOK_ID)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/robin/api/books/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-87c278a2bfb82254", "name": "Dangling fetch: PUT /robin/api/books/${encodeURIComponent(BOOK_ID)}/progress (thousand_sunny/static/book_reader.js:1165)", "shortDescription": {"text": "Dangling fetch: PUT /robin/api/books/${encodeURIComponent(BOOK_ID)}/progress (thousand_sunny/static/book_reader.js:1165)"}, "fullDescription": {"text": "`thousand_sunny/static/book_reader.js:1165` calls `PUT /robin/api/books/${encodeURIComponent(BOOK_ID)}/progress` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/robin/api/books/<p>/progress`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-93af304b1ba73a85", "name": "Dangling fetch: GET /robin/api/books/${encodeURIComponent(BOOK_ID)}/progress (thousand_sunny/static/book_reader.js:1267)", "shortDescription": {"text": "Dangling fetch: GET /robin/api/books/${encodeURIComponent(BOOK_ID)}/progress (thousand_sunny/static/book_reader.js:1267)"}, "fullDescription": {"text": "`thousand_sunny/static/book_reader.js:1267` calls `GET /robin/api/books/${encodeURIComponent(BOOK_ID)}/progress` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/robin/api/books/<p>/progress`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-69176fac800f8bb5", "name": "Dangling fetch: GET /robin/api/books/${encodeURIComponent(BOOK_ID)}/file?lang=bilingual (thousand_sunny/static/book_read", "shortDescription": {"text": "Dangling fetch: GET /robin/api/books/${encodeURIComponent(BOOK_ID)}/file?lang=bilingual (thousand_sunny/static/book_reader.js:1653)"}, "fullDescription": {"text": "`thousand_sunny/static/book_reader.js:1653` calls `GET /robin/api/books/${encodeURIComponent(BOOK_ID)}/file?lang=bilingual` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/robin/api/books/<p>/file`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5ac74200cdf57d78", "name": "Dangling fetch: GET /foundry/${episodeId}/status (thousand_sunny/static/foundry/foundry.js:47)", "shortDescription": {"text": "Dangling fetch: GET /foundry/${episodeId}/status (thousand_sunny/static/foundry/foundry.js:47)"}, "fullDescription": {"text": "`thousand_sunny/static/foundry/foundry.js:47` calls `GET /foundry/${episodeId}/status` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/foundry/<p>/status`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1ef03194927a5485", "name": "Dangling fetch: POST /api/projects/${slug}/synthesize (thousand_sunny/static/projects/review.js:183)", "shortDescription": {"text": "Dangling fetch: POST /api/projects/${slug}/synthesize (thousand_sunny/static/projects/review.js:183)"}, "fullDescription": {"text": "`thousand_sunny/static/projects/review.js:183` calls `POST /api/projects/${slug}/synthesize` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/projects/<p>/synthesize`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-957d74c292d89a28", "name": "Dangling fetch: POST /api/projects/${slug}/synthesize (thousand_sunny/static/projects/review.js:242)", "shortDescription": {"text": "Dangling fetch: POST /api/projects/${slug}/synthesize (thousand_sunny/static/projects/review.js:242)"}, "fullDescription": {"text": "`thousand_sunny/static/projects/review.js:242` calls `POST /api/projects/${slug}/synthesize` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/projects/<p>/synthesize`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e830925be14866cf", "name": "Dangling fetch: POST /robin/watchlist/${encodeURIComponent(videoId)}/annotation (thousand_sunny/static/shosho/av-reader.", "shortDescription": {"text": "Dangling fetch: POST /robin/watchlist/${encodeURIComponent(videoId)}/annotation (thousand_sunny/static/shosho/av-reader.js:380)"}, "fullDescription": {"text": "`thousand_sunny/static/shosho/av-reader.js:380` calls `POST /robin/watchlist/${encodeURIComponent(videoId)}/annotation` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/robin/watchlist/<p>/annotation`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e7720266acc900cc", "name": "Dangling fetch: DELETE /robin/watchlist/${encodeURIComponent(videoId)}/annotation?cue_start=${encodeURIComponent(cue.sta", "shortDescription": {"text": "Dangling fetch: DELETE /robin/watchlist/${encodeURIComponent(videoId)}/annotation?cue_start=${encodeURIComponent(cue.start)} (thousand_sunny/static/shosho/av-reader.js:476)"}, "fullDescription": {"text": "`thousand_sunny/static/shosho/av-reader.js:476` calls `DELETE /robin/watchlist/${encodeURIComponent(videoId)}/annotation?cue_start=${encodeURIComponent(cue.start)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/robin/watchlist/<p>/annotation`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5baa8971ebe192a1", "name": "Unused endpoint: GET /", "shortDescription": {"text": "Unused endpoint: GET /"}, "fullDescription": {"text": "`thousand_sunny/app.py` declares `GET /` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a8ae36cd5eae9d9e", "name": "Unused endpoint: GET /{slug}/synthesize", "shortDescription": {"text": "Unused endpoint: GET /{slug}/synthesize"}, "fullDescription": {"text": "`thousand_sunny/routers/projects.py` declares `GET /{slug}/synthesize` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-11fbd9bb04488df1", "name": "Unused endpoint: POST /{slug}/synthesize", "shortDescription": {"text": "Unused endpoint: POST /{slug}/synthesize"}, "fullDescription": {"text": "`thousand_sunny/routers/projects.py` declares `POST /{slug}/synthesize` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7801d9baf2250c19", "name": "Unused endpoint: GET /projects/{slug}", "shortDescription": {"text": "Unused endpoint: GET /projects/{slug}"}, "fullDescription": {"text": "`thousand_sunny/routers/projects.py` declares `GET /projects/{slug}` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-85f87a270d7acaee", "name": "Unused endpoint: GET /brook/projects/{slug}", "shortDescription": {"text": "Unused endpoint: GET /brook/projects/{slug}"}, "fullDescription": {"text": "`thousand_sunny/routers/projects.py` declares `GET /brook/projects/{slug}` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-bbb45bd1a39c2291", "name": "Unused endpoint: GET /{episode_id}", "shortDescription": {"text": "Unused endpoint: GET /{episode_id}"}, "fullDescription": {"text": "`thousand_sunny/routers/foundry.py` declares `GET /{episode_id}` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-17536ba9403055f8", "name": "Unused endpoint: GET /{episode_id}/status", "shortDescription": {"text": "Unused endpoint: GET /{episode_id}/status"}, "fullDescription": {"text": "`thousand_sunny/routers/foundry.py` declares `GET /{episode_id}/status` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-25fe9d2d4fcf2788", "name": "Unused endpoint: POST /{episode_id}/beat/{beat_id}/approve", "shortDescription": {"text": "Unused endpoint: POST /{episode_id}/beat/{beat_id}/approve"}, "fullDescription": {"text": "`thousand_sunny/routers/foundry.py` declares `POST /{episode_id}/beat/{beat_id}/approve` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-31a38ef14920cc4e", "name": "Unused endpoint: POST /{episode_id}/beat/{beat_id}/edit", "shortDescription": {"text": "Unused endpoint: POST /{episode_id}/beat/{beat_id}/edit"}, "fullDescription": {"text": "`thousand_sunny/routers/foundry.py` declares `POST /{episode_id}/beat/{beat_id}/edit` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0712426a5c9ea8c1", "name": "Unused endpoint: POST /{episode_id}/beat/{beat_id}/replan", "shortDescription": {"text": "Unused endpoint: POST /{episode_id}/beat/{beat_id}/replan"}, "fullDescription": {"text": "`thousand_sunny/routers/foundry.py` declares `POST /{episode_id}/beat/{beat_id}/replan` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6b3cde03ce624a1f", "name": "Unused endpoint: POST /{episode_id}/beat/{beat_id}/visual/approve", "shortDescription": {"text": "Unused endpoint: POST /{episode_id}/beat/{beat_id}/visual/approve"}, "fullDescription": {"text": "`thousand_sunny/routers/foundry.py` declares `POST /{episode_id}/beat/{beat_id}/visual/approve` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f8bb356d78106dd8", "name": "Unused endpoint: POST /{episode_id}/beat/{beat_id}/visual/edit", "shortDescription": {"text": "Unused endpoint: POST /{episode_id}/beat/{beat_id}/visual/edit"}, "fullDescription": {"text": "`thousand_sunny/routers/foundry.py` declares `POST /{episode_id}/beat/{beat_id}/visual/edit` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-94d309c15fc884fd", "name": "Unused endpoint: POST /{episode_id}/beat/{beat_id}/visual/replan", "shortDescription": {"text": "Unused endpoint: POST /{episode_id}/beat/{beat_id}/visual/replan"}, "fullDescription": {"text": "`thousand_sunny/routers/foundry.py` declares `POST /{episode_id}/beat/{beat_id}/visual/replan` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b2a44b64dd84abcf", "name": "Unused endpoint: POST /{episode_id}/batch/approve-all-text", "shortDescription": {"text": "Unused endpoint: POST /{episode_id}/batch/approve-all-text"}, "fullDescription": {"text": "`thousand_sunny/routers/foundry.py` declares `POST /{episode_id}/batch/approve-all-text` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d6a8d7664780ee37", "name": "Unused endpoint: POST /{episode_id}/batch/render-approved", "shortDescription": {"text": "Unused endpoint: POST /{episode_id}/batch/render-approved"}, "fullDescription": {"text": "`thousand_sunny/routers/foundry.py` declares `POST /{episode_id}/batch/render-approved` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3e13446b1810990a", "name": "Unused endpoint: POST /{episode_id}/batch/finalize-passing", "shortDescription": {"text": "Unused endpoint: POST /{episode_id}/batch/finalize-passing"}, "fullDescription": {"text": "`thousand_sunny/routers/foundry.py` declares `POST /{episode_id}/batch/finalize-passing` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-cb6b7ce40cee86e4", "name": "Unused endpoint: POST /{episode_id}/edit-log/{entry_idx}/promote", "shortDescription": {"text": "Unused endpoint: POST /{episode_id}/edit-log/{entry_idx}/promote"}, "fullDescription": {"text": "`thousand_sunny/routers/foundry.py` declares `POST /{episode_id}/edit-log/{entry_idx}/promote` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-39c9b3baaa4e3581", "name": "Unused endpoint: GET /{source_id_b64}", "shortDescription": {"text": "Unused endpoint: GET /{source_id_b64}"}, "fullDescription": {"text": "`thousand_sunny/routers/writing_assist.py` declares `GET /{source_id_b64}` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ceed08ed6dcb3a83", "name": "Unused endpoint: ANY /centaur_zettel", "shortDescription": {"text": "Unused endpoint: ANY /centaur_zettel"}, "fullDescription": {"text": "`thousand_sunny/routers/centaur_zettel.py` declares `ANY /centaur_zettel` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6a4dfcad3eb1618a", "name": "Unused endpoint: GET /login", "shortDescription": {"text": "Unused endpoint: GET /login"}, "fullDescription": {"text": "`thousand_sunny/routers/auth.py` declares `GET /login` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-618721b912bad1c2", "name": "Unused endpoint: POST /login", "shortDescription": {"text": "Unused endpoint: POST /login"}, "fullDescription": {"text": "`thousand_sunny/routers/auth.py` declares `POST /login` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-99fc36db98c134ce", "name": "Unused endpoint: POST /logout", "shortDescription": {"text": "Unused endpoint: POST /logout"}, "fullDescription": {"text": "`thousand_sunny/routers/auth.py` declares `POST /logout` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4ea23196f32aefc7", "name": "Unused endpoint: ANY /crew", "shortDescription": {"text": "Unused endpoint: ANY /crew"}, "fullDescription": {"text": "`thousand_sunny/routers/crew.py` declares `ANY /crew` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c1e1ee09590b0a49", "name": "Unused endpoint: GET /projects", "shortDescription": {"text": "Unused endpoint: GET /projects"}, "fullDescription": {"text": "`thousand_sunny/routers/bridge_projects.py` declares `GET /projects` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f690c297ee9036b3", "name": "Unused endpoint: GET /projects/new", "shortDescription": {"text": "Unused endpoint: GET /projects/new"}, "fullDescription": {"text": "`thousand_sunny/routers/bridge_projects.py` declares `GET /projects/new` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-58666816ba500374", "name": "Unused endpoint: POST /projects", "shortDescription": {"text": "Unused endpoint: POST /projects"}, "fullDescription": {"text": "`thousand_sunny/routers/bridge_projects.py` declares `POST /projects` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a001e69ec496cc65", "name": "Unused endpoint: POST /projects/{slug}/frontmatter", "shortDescription": {"text": "Unused endpoint: POST /projects/{slug}/frontmatter"}, "fullDescription": {"text": "`thousand_sunny/routers/bridge_projects.py` declares `POST /projects/{slug}/frontmatter` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c8c4686872f4b8cb", "name": "Unused endpoint: POST /projects/{slug}/section/{section_slug}", "shortDescription": {"text": "Unused endpoint: POST /projects/{slug}/section/{section_slug}"}, "fullDescription": {"text": "`thousand_sunny/routers/bridge_projects.py` declares `POST /projects/{slug}/section/{section_slug}` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d98ccb67e3d414a0", "name": "Unused endpoint: POST /projects/{slug}/timer/{action}", "shortDescription": {"text": "Unused endpoint: POST /projects/{slug}/timer/{action}"}, "fullDescription": {"text": "`thousand_sunny/routers/bridge_projects.py` declares `POST /projects/{slug}/timer/{action}` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-acda37fcdf6cac99", "name": "Unused endpoint: POST /projects/{slug}/tasks/new", "shortDescription": {"text": "Unused endpoint: POST /projects/{slug}/tasks/new"}, "fullDescription": {"text": "`thousand_sunny/routers/bridge_projects.py` declares `POST /projects/{slug}/tasks/new` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-310f75fab5ea2856", "name": "Unused endpoint: POST /projects/{slug}/tasks/{task_name}/status", "shortDescription": {"text": "Unused endpoint: POST /projects/{slug}/tasks/{task_name}/status"}, "fullDescription": {"text": "`thousand_sunny/routers/bridge_projects.py` declares `POST /projects/{slug}/tasks/{task_name}/status` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-648b2dbd7af01a0e", "name": "Unused endpoint: POST /projects/{slug}/tasks/{task_name}/delete", "shortDescription": {"text": "Unused endpoint: POST /projects/{slug}/tasks/{task_name}/delete"}, "fullDescription": {"text": "`thousand_sunny/routers/bridge_projects.py` declares `POST /projects/{slug}/tasks/{task_name}/delete` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-591dd427ce2845a1", "name": "Unused endpoint: POST /projects/{slug}/tasks/{task_name}/manual-pomodoro", "shortDescription": {"text": "Unused endpoint: POST /projects/{slug}/tasks/{task_name}/manual-pomodoro"}, "fullDescription": {"text": "`thousand_sunny/routers/bridge_projects.py` declares `POST /projects/{slug}/tasks/{task_name}/manual-pomodoro` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7f8370ad63806220", "name": "Unused endpoint: POST /projects/{slug}/tasks/{task_name}/manual-pomodoro/undo", "shortDescription": {"text": "Unused endpoint: POST /projects/{slug}/tasks/{task_name}/manual-pomodoro/undo"}, "fullDescription": {"text": "`thousand_sunny/routers/bridge_projects.py` declares `POST /projects/{slug}/tasks/{task_name}/manual-pomodoro/undo` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-398d6a1fcdb9540a", "name": "Unused endpoint: POST /projects/{slug}/review/{persona}", "shortDescription": {"text": "Unused endpoint: POST /projects/{slug}/review/{persona}"}, "fullDescription": {"text": "`thousand_sunny/routers/bridge_projects.py` declares `POST /projects/{slug}/review/{persona}` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-979d9f4c5e4a188b", "name": "Unused endpoint: POST /projects/{slug}/research/keyword", "shortDescription": {"text": "Unused endpoint: POST /projects/{slug}/research/keyword"}, "fullDescription": {"text": "`thousand_sunny/routers/bridge_projects.py` declares `POST /projects/{slug}/research/keyword` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a5bee9e542e5922b", "name": "Unused endpoint: POST /projects/{slug}/research/kb", "shortDescription": {"text": "Unused endpoint: POST /projects/{slug}/research/kb"}, "fullDescription": {"text": "`thousand_sunny/routers/bridge_projects.py` declares `POST /projects/{slug}/research/kb` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-627b7d0e422af729", "name": "Unused endpoint: POST /projects/{slug}/research/synthesis", "shortDescription": {"text": "Unused endpoint: POST /projects/{slug}/research/synthesis"}, "fullDescription": {"text": "`thousand_sunny/routers/bridge_projects.py` declares `POST /projects/{slug}/research/synthesis` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-56f887fc1ef2d19f", "name": "Unused endpoint: POST /projects/{slug}/research/dr-prompt", "shortDescription": {"text": "Unused endpoint: POST /projects/{slug}/research/dr-prompt"}, "fullDescription": {"text": "`thousand_sunny/routers/bridge_projects.py` declares `POST /projects/{slug}/research/dr-prompt` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-88faf3d39a0d50b9", "name": "Unused endpoint: POST /projects/{slug}/research/dr-report", "shortDescription": {"text": "Unused endpoint: POST /projects/{slug}/research/dr-report"}, "fullDescription": {"text": "`thousand_sunny/routers/bridge_projects.py` declares `POST /projects/{slug}/research/dr-report` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1d32fb626a0e40f6", "name": "Unused endpoint: GET /franky", "shortDescription": {"text": "Unused endpoint: GET /franky"}, "fullDescription": {"text": "`thousand_sunny/routers/franky.py` declares `GET /franky` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d2468b5ee5d372a1", "name": "Unused endpoint: GET /bridge/models", "shortDescription": {"text": "Unused endpoint: GET /bridge/models"}, "fullDescription": {"text": "`thousand_sunny/routers/bridge_models.py` declares `GET /bridge/models` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-26697f896d1e4f7c", "name": "Unused endpoint: POST /bridge/models/set", "shortDescription": {"text": "Unused endpoint: POST /bridge/models/set"}, "fullDescription": {"text": "`thousand_sunny/routers/bridge_models.py` declares `POST /bridge/models/set` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9ef8ceb06edeba29", "name": "Unused endpoint: POST /bridge/models/reset", "shortDescription": {"text": "Unused endpoint: POST /bridge/models/reset"}, "fullDescription": {"text": "`thousand_sunny/routers/bridge_models.py` declares `POST /bridge/models/reset` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7064547eb23ceaa6", "name": "Unused endpoint: POST /api/permanent", "shortDescription": {"text": "Unused endpoint: POST /api/permanent"}, "fullDescription": {"text": "`thousand_sunny/routers/kb_review.py` declares `POST /api/permanent` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2f3e274e6978a2df", "name": "Unused endpoint: POST /api/review/skip", "shortDescription": {"text": "Unused endpoint: POST /api/review/skip"}, "fullDescription": {"text": "`thousand_sunny/routers/kb_review.py` declares `POST /api/review/skip` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c8e1d7c98ef7a933", "name": "Unused endpoint: POST /api/review/later", "shortDescription": {"text": "Unused endpoint: POST /api/review/later"}, "fullDescription": {"text": "`thousand_sunny/routers/kb_review.py` declares `POST /api/review/later` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-dce6d68d65a5d1e2", "name": "Unused endpoint: GET /api/moc/members", "shortDescription": {"text": "Unused endpoint: GET /api/moc/members"}, "fullDescription": {"text": "`thousand_sunny/routers/kb_review.py` declares `GET /api/moc/members` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-db47908e267149c3", "name": "Unused endpoint: GET /api/permanent/peek", "shortDescription": {"text": "Unused endpoint: GET /api/permanent/peek"}, "fullDescription": {"text": "`thousand_sunny/routers/kb_review.py` declares `GET /api/permanent/peek` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-bc8121c4b0d774a7", "name": "Unused endpoint: GET /review", "shortDescription": {"text": "Unused endpoint: GET /review"}, "fullDescription": {"text": "`thousand_sunny/routers/kb_review.py` declares `GET /review` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}]}}, "automationDetails": {"id": "repobility/19545"}, "properties": {"repository": "shosho-chang/nakama", "repoUrl": "https://github.com/shosho-chang/nakama", "branch": "main"}, "results": [{"ruleId": "scanner-cbb4368177fcda06", "level": "note", "message": {"text": "Possibly dead Python function: apply_shift"}, "properties": {"repobilityId": "41b68b4ef9db477d", "scanner": "scanner-primary", "fingerprint": "cbb4368177fcda06", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "shared/srt_align.py:117"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-74ddd99e613477b3", "level": "note", "message": {"text": "Possibly dead Python function: read_habits"}, "properties": {"repobilityId": "b88e2610027761dc", "scanner": "scanner-primary", "fingerprint": "74ddd99e613477b3", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "shared/weekly_indexer.py:601"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-f71bc8a2e8113d26", "level": "note", "message": {"text": "Possibly dead Python function: upsert_feedback"}, "properties": {"repobilityId": "00bbfa84a086acdc", "scanner": "scanner-primary", "fingerprint": "f71bc8a2e8113d26", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "shared/kb_search_feedback_store.py:12"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-9454167d71a24c82", "level": "note", "message": {"text": "Possibly dead Python function: repo_path"}, "properties": {"repobilityId": "a9983e19c9a347f6", "scanner": "scanner-primary", "fingerprint": "9454167d71a24c82", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "shared/repo_writer.py:28"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-5058c7687658096e", "level": "note", "message": {"text": "Possibly dead Python function: load_memory"}, "properties": {"repobilityId": "b1c2aad501ee0606", "scanner": "scanner-primary", "fingerprint": "5058c7687658096e", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "shared/memory.py:88"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-8958db6cd82f7a7f", "level": "note", "message": {"text": "Possibly dead Python function: save_memory"}, "properties": {"repobilityId": "bf6089a638c7cdae", "scanner": "scanner-primary", "fingerprint": "8958db6cd82f7a7f", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "shared/memory.py:101"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-ae840c8c35822b27", "level": "note", "message": {"text": "Possibly dead Python function: append_memory"}, "properties": {"repobilityId": "c87da97d99595226", "scanner": "scanner-primary", "fingerprint": "ae840c8c35822b27", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "shared/memory.py:107"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-4747f471486ca75a", "level": "note", "message": {"text": "Possibly dead Python function: clear_memory"}, "properties": {"repobilityId": "e30abbc7d50a3993", "scanner": "scanner-primary", "fingerprint": "4747f471486ca75a", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "shared/memory.py:117"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-1571c49301a7472c", "level": "note", "message": {"text": "Possibly dead Python function: memory_as_system_block"}, "properties": {"repobilityId": "cafafcf1bf409df0", "scanner": "scanner-primary", "fingerprint": "1571c49301a7472c", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "shared/memory.py:168"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3b1af8bea049f764", "level": "note", "message": {"text": "Possibly dead Python function: search_memory"}, "properties": {"repobilityId": "c923ee9e57620633", "scanner": "scanner-primary", "fingerprint": "3b1af8bea049f764", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "shared/memory.py:212"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-b92e5769b0f2bded", "level": "note", "message": {"text": "Possibly dead Python function: consume"}, "properties": {"repobilityId": "5443ad0ffb8ec88c", "scanner": "scanner-primary", "fingerprint": "b92e5769b0f2bded", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "shared/events.py:43"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-0b371efaced1d42e", "level": "note", "message": {"text": "Possibly dead Python function: peek"}, "properties": {"repobilityId": "278250041363a668", "scanner": "scanner-primary", "fingerprint": "0b371efaced1d42e", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "shared/events.py:91"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-590ab28bfaa25464", "level": "note", "message": {"text": "Possibly dead Python function: search_memory"}, "properties": {"repobilityId": "c923ee9e57620633", "scanner": "scanner-primary", "fingerprint": "590ab28bfaa25464", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "shared/state.py:993"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-69ccfd5bde49faef", "level": "note", "message": {"text": "Possibly dead Python function: list_memories"}, "properties": {"repobilityId": "c1c2d734bee072a1", "scanner": "scanner-primary", "fingerprint": "69ccfd5bde49faef", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "shared/state.py:1050"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-7a1ec0e306cb7cac", "level": "note", "message": {"text": "Possibly dead Python function: cmd_run"}, "properties": {"repobilityId": "4b31cb2b86d846cc", "scanner": "scanner-primary", "fingerprint": "7a1ec0e306cb7cac", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/ab_ingest_bench.py:69"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-478c15420e2a0053", "level": "note", "message": {"text": "Possibly dead Python function: cmd_report"}, "properties": {"repobilityId": "e07177dc4040e77f", "scanner": "scanner-primary", "fingerprint": "478c15420e2a0053", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/ab_ingest_bench.py:169"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-f59f27346944b743", "level": "note", "message": {"text": "Possibly dead Python function: verify_one"}, "properties": {"repobilityId": "7c115a5f25353df1", "scanner": "scanner-primary", "fingerprint": "f59f27346944b743", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/adr_blocker_verification.py:106"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-9e3d8275ce261a0a", "level": "note", "message": {"text": "Possibly dead Python function: review_one"}, "properties": {"repobilityId": "3a3ca293b7f9287b", "scanner": "scanner-primary", "fingerprint": "9e3d8275ce261a0a", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/adr_multi_model_review.py:84"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-7d873233fec2a064", "level": "note", "message": {"text": "Possibly dead Python function: cmd_decay"}, "properties": {"repobilityId": "1f417142a4959e97", "scanner": "scanner-primary", "fingerprint": "7d873233fec2a064", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/maintain_user_memories.py:74"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-dab1f25e02fbbf9a", "level": "note", "message": {"text": "Possibly dead Python function: cmd_prune"}, "properties": {"repobilityId": "315bfa2e92bb9dac", "scanner": "scanner-primary", "fingerprint": "dab1f25e02fbbf9a", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/maintain_user_memories.py:100"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-b83b22140744fc99", "level": "note", "message": {"text": "Possibly dead Python function: beat_output_path"}, "properties": {"repobilityId": "9d5fc2f72e2ebd81", "scanner": "scanner-primary", "fingerprint": "b83b22140744fc99", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "agents/foundry/render_dispatcher.py:30"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-4e327c10f11b9d02", "level": "note", "message": {"text": "Possibly dead Python function: flatten"}, "properties": {"repobilityId": "275014fddfd1b3a8", "scanner": "scanner-primary", "fingerprint": "4e327c10f11b9d02", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "agents/foundry/srt_flattener.py:101"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-0c9d57d39a7c3960", "level": "note", "message": {"text": "Possibly dead Python function: package_context"}, "properties": {"repobilityId": "10c0d40f5f8ab501", "scanner": "scanner-primary", "fingerprint": "0c9d57d39a7c3960", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "agents/brook/context_bridge.py:184"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-9956412c63c57306", "level": "note", "message": {"text": "Possibly dead Python function: build_seo_block"}, "properties": {"repobilityId": "9b046ad026166c4c", "scanner": "scanner-primary", "fingerprint": "9956412c63c57306", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "agents/brook/seo_block.py:34"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-f9e2bf54f105c0a8", "level": "note", "message": {"text": "Possibly dead Python function: narrow_to_topic"}, "properties": {"repobilityId": "52e7c4fd4a924581", "scanner": "scanner-primary", "fingerprint": "f9e2bf54f105c0a8", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "agents/brook/seo_narrow.py:88"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-339bc9ea3b4574e7", "level": "note", "message": {"text": "Possibly dead Python function: channel_artifact_path"}, "properties": {"repobilityId": "65c9565bbc819d1c", "scanner": "scanner-primary", "fingerprint": "339bc9ea3b4574e7", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "agents/brook/repurpose_sentinels.py:75"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-615ef14ac7b676d3", "level": "note", "message": {"text": "Possibly dead Python function: channel_approved"}, "properties": {"repobilityId": "697f95e81f41f213", "scanner": "scanner-primary", "fingerprint": "615ef14ac7b676d3", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "agents/brook/repurpose_sentinels.py:106"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-b10e8855b8261c98", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 extensions/news-coo/src/content/contentScript.ts:9"}, "properties": {"repobilityId": "4cab707302fda29a", "scanner": "scanner-primary", "fingerprint": "b10e8855b8261c98", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-734c34821514cba4", "level": "warning", "message": {"text": "Dockerfile runs as root: docs/runbooks/sandcastle-templates/Dockerfile"}, "properties": {"repobilityId": "4c278912f04b11b4", "scanner": "scanner-primary", "fingerprint": "734c34821514cba4", "layer": "hardware", "severity": "medium", "confidence": 1.0, "tags": ["security", "container"]}}, {"ruleId": "scanner-79d0190e12f3c14b", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: node:22-bookworm"}, "properties": {"repobilityId": "b317bf1060a726c2", "scanner": "scanner-primary", "fingerprint": "79d0190e12f3c14b", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "docs/runbooks/sandcastle-templates/Dockerfile"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-fe03f2d98dbabc84", "level": "error", "message": {"text": "Dockerfile pipes a remote installer into a shell"}, "properties": {"repobilityId": "7a93b6bf6a396e9c", "scanner": "scanner-primary", "fingerprint": "fe03f2d98dbabc84", "layer": "hardware", "severity": "high", "confidence": 1.0, "tags": ["supply-chain", "docker", "remote-installer"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "docs/runbooks/sandcastle-templates/Dockerfile"}, "region": {"startLine": 34}}}]}, {"ruleId": "scanner-aa5acaa49eb8315b", "level": "note", "message": {"text": "Containers defined but no K8s/orchestration manifest found"}, "properties": {"repobilityId": "b230ea9b68736081", "scanner": "scanner-primary", "fingerprint": "aa5acaa49eb8315b", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["coverage", "deployment"]}}, {"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-b9a3582660ec766e", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in docs/plans/centaur-zettelkasten/centaur-kb-prototype-v2.html:592"}, "properties": {"repobilityId": "bd3f9a0940b27ea9", "scanner": "scanner-primary", "fingerprint": "b9a3582660ec766e", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "docs/plans/centaur-zettelkasten/centaur-kb-prototype-v2.html"}, "region": {"startLine": 592}}}]}, {"ruleId": "scanner-8524a4c1891d2600", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in docs/plans/centaur-zettelkasten/centaur-canvas-prototype-v4.html:311"}, "properties": {"repobilityId": "5bc763fdba170684", "scanner": "scanner-primary", "fingerprint": "8524a4c1891d2600", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "docs/plans/centaur-zettelkasten/centaur-canvas-prototype-v4.html"}, "region": {"startLine": 311}}}]}, {"ruleId": "scanner-82cb8cca3846b29e", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in extensions/news-coo/src/content/extract.ts:14"}, "properties": {"repobilityId": "f461ea2832ee65de", "scanner": "scanner-primary", "fingerprint": "82cb8cca3846b29e", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "extensions/news-coo/src/content/extract.ts"}, "region": {"startLine": 14}}}]}, {"ruleId": "scanner-9ab46f2cca0c8a30", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in extensions/news-coo/src/content/siteCleaners/atypon.ts:194"}, "properties": {"repobilityId": "c9dca0cb82da644d", "scanner": "scanner-primary", "fingerprint": "9ab46f2cca0c8a30", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "extensions/news-coo/src/content/siteCleaners/atypon.ts"}, "region": {"startLine": 194}}}]}, {"ruleId": "scanner-d8621d9d9dba2d29", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in thousand_sunny/static/kb_canvas.js:85"}, "properties": {"repobilityId": "bc2432fbe3b3e1d5", "scanner": "scanner-primary", "fingerprint": "d8621d9d9dba2d29", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "thousand_sunny/static/kb_canvas.js"}, "region": {"startLine": 85}}}]}, {"ruleId": "scanner-47c21af10efeb94d", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in thousand_sunny/static/kb_review.js:234"}, "properties": {"repobilityId": "b7241156129d97ba", "scanner": "scanner-primary", "fingerprint": "47c21af10efeb94d", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "thousand_sunny/static/kb_review.js"}, "region": {"startLine": 234}}}]}, {"ruleId": "scanner-2950be12b7243a7d", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in thousand_sunny/static/book_reader.js:138"}, "properties": {"repobilityId": "c26cab6207772959", "scanner": "scanner-primary", "fingerprint": "2950be12b7243a7d", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "thousand_sunny/static/book_reader.js"}, "region": {"startLine": 138}}}]}, {"ruleId": "scanner-16c4e56391647e7c", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in thousand_sunny/static/foundry/foundry.js:38"}, "properties": {"repobilityId": "08396b9b1eb5bf38", "scanner": "scanner-primary", "fingerprint": "16c4e56391647e7c", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "thousand_sunny/static/foundry/foundry.js"}, "region": {"startLine": 38}}}]}, {"ruleId": "scanner-8842edd19d6ca718", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in thousand_sunny/static/crew/index.html:1122"}, "properties": {"repobilityId": "030928ac09be4138", "scanner": "scanner-primary", "fingerprint": "8842edd19d6ca718", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "thousand_sunny/static/crew/index.html"}, "region": {"startLine": 1122}}}]}, {"ruleId": "scanner-bebefc040f5595f2", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in thousand_sunny/static/shosho/bridge-projects.js:435"}, "properties": {"repobilityId": "b61d5f54ee34fb9f", "scanner": "scanner-primary", "fingerprint": "bebefc040f5595f2", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "thousand_sunny/static/shosho/bridge-projects.js"}, "region": {"startLine": 435}}}]}, {"ruleId": "scanner-a7453a9f67abe385", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "9390b64dcce54af0", "scanner": "scanner-primary", "fingerprint": "a7453a9f67abe385", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/external-probe.yml"}, "region": {"startLine": 53}}}]}, {"ruleId": "scanner-a7453a9f67abe385", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "3786b759a1d77379", "scanner": "scanner-primary", "fingerprint": "a7453a9f67abe385", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/external-probe.yml"}, "region": {"startLine": 241}}}]}, {"ruleId": "scanner-858d687acfbb3007", "level": "note", "message": {"text": "Very large file: tests/test_transcriber.py (1494 lines)"}, "properties": {"repobilityId": "77b012c6e831031e", "scanner": "scanner-primary", "fingerprint": "858d687acfbb3007", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-da8eb7825a94617c", "level": "note", "message": {"text": "Very large file: tests/test_bridge_weekly.py (1719 lines)"}, "properties": {"repobilityId": "36280cfe251c4e23", "scanner": "scanner-primary", "fingerprint": "da8eb7825a94617c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-6779a894b105b762", "level": "note", "message": {"text": "Very large file: tests/test_gateway_handlers.py (2427 lines)"}, "properties": {"repobilityId": "43234c5a7520e484", "scanner": "scanner-primary", "fingerprint": "6779a894b105b762", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-6ac8d6074655e0d0", "level": "note", "message": {"text": "Very large file: gateway/handlers/nami.py (2731 lines)"}, "properties": {"repobilityId": "aab6b3dae0508811", "scanner": "scanner-primary", "fingerprint": "6ac8d6074655e0d0", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-8f989398a79531b2", "level": "note", "message": {"text": "Very large file: thousand_sunny/static/book_reader.js (1728 lines)"}, "properties": {"repobilityId": "e21797cc729359d5", "scanner": "scanner-primary", "fingerprint": "8f989398a79531b2", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-b301c5dba178d704", "level": "note", "message": {"text": "Very large file: thousand_sunny/routers/bridge_projects.py (2023 lines)"}, "properties": {"repobilityId": "a8d5c5cd443d79ee", "scanner": "scanner-primary", "fingerprint": "b301c5dba178d704", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-858fdc19c2b0c60a", "level": "note", "message": {"text": "Very large file: thousand_sunny/routers/bridge_weekly.py (1391 lines)"}, "properties": {"repobilityId": "34d24e540a8cdbe3", "scanner": "scanner-primary", "fingerprint": "858fdc19c2b0c60a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-93dd823cb9f45232", "level": "note", "message": {"text": "Very large file: thousand_sunny/routers/robin.py (2264 lines)"}, "properties": {"repobilityId": "f9fbe9ef745e3d3d", "scanner": "scanner-primary", "fingerprint": "93dd823cb9f45232", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-9970ba6cf75a5fdb", "level": "note", "message": {"text": "Very large file: thousand_sunny/routers/bridge.py (1829 lines)"}, "properties": {"repobilityId": "39594936bdb95378", "scanner": "scanner-primary", "fingerprint": "9970ba6cf75a5fdb", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-e53f7889f27cbf46", "level": "note", "message": {"text": "Very large file: thousand_sunny/routers/bridge_project_thumbnails.py (1586 lines)"}, "properties": {"repobilityId": "4d53450668fe19b4", "scanner": "scanner-primary", "fingerprint": "e53f7889f27cbf46", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "ab8cadeb90094272", "scanner": "scanner-primary", "fingerprint": "3ab5d313dda8e5f9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["debug", "cleanup", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-72b2a6250083a784", "level": "warning", "message": {"text": "Placeholder or mock-heavy implementation detected"}, "properties": {"repobilityId": "8025c7fc7f8376d0", "scanner": "scanner-primary", "fingerprint": "72b2a6250083a784", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "incomplete", "generated-repo-pattern"]}}, {"ruleId": "scanner-2d0c7b7ab8f8aacf", "level": "warning", "message": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "properties": {"repobilityId": "a788d10c3c1fc027", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-ea8f3013f588db25", "level": "note", "message": {"text": "Shallow git history limits provenance confidence"}, "properties": {"repobilityId": "2133682e7cc1d8a9", "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": "7c8ba8d344944d27", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-572aa50f93c232fc", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: CODEX.md"}, "properties": {"repobilityId": "95650a0f68504fab", "scanner": "scanner-primary", "fingerprint": "572aa50f93c232fc", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "codex_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "CODEX.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-ec075f671ffed520", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/skills/seo-audit-post/SKILL.md"}, "properties": {"repobilityId": "4c8e63bc367ca9c5", "scanner": "scanner-primary", "fingerprint": "ec075f671ffed520", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/seo-audit-post/SKILL.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-a7dbb9baec395b0c", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/skills/kb-search/SKILL.md"}, "properties": {"repobilityId": "55f7f0f06a726204", "scanner": "scanner-primary", "fingerprint": "a7dbb9baec395b0c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/kb-search/SKILL.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-932ddb4cbf1184db", "level": "error", "message": {"text": "Agent instruction/config may expose a secret: .claude/skills/seo-keyword-enrich/SKILL.md"}, "properties": {"repobilityId": "23f56268288e5a8f", "scanner": "scanner-primary", "fingerprint": "932ddb4cbf1184db", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["agent-instructions", "secrets", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/seo-keyword-enrich/SKILL.md"}, "region": {"startLine": 176}}}]}, {"ruleId": "scanner-25b307f0d361e4fe", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/skills/foundry-replan/SKILL.md"}, "properties": {"repobilityId": "1e062d7bb93439b6", "scanner": "scanner-primary", "fingerprint": "25b307f0d361e4fe", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/foundry-replan/SKILL.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-c6c79355084ee8cb", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/skills/transcribe/references/cost-estimation.md"}, "properties": {"repobilityId": "119ca28501662375", "scanner": "scanner-primary", "fingerprint": "c6c79355084ee8cb", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/transcribe/references/cost-estimation.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-7170daca609da14d", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/skills/transcribe/references/error-recovery.md"}, "properties": {"repobilityId": "3e6c08b17c1ec91d", "scanner": "scanner-primary", "fingerprint": "7170daca609da14d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/transcribe/references/error-recovery.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-e50ed20143b9dde7", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/skills/transcribe/references/pipeline-overview.md"}, "properties": {"repobilityId": "7d1ad2e1af0f707f", "scanner": "scanner-primary", "fingerprint": "e50ed20143b9dde7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/transcribe/references/pipeline-overview.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-b0259231476c8b5f", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/skills/transcribe/references/qc-report-format.md"}, "properties": {"repobilityId": "0873ce1d94496270", "scanner": "scanner-primary", "fingerprint": "b0259231476c8b5f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/transcribe/references/qc-report-format.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-e5dff73efd398ef4", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/skills/keyword-research/references/cost-estimation.md"}, "properties": {"repobilityId": "d39de0400f7e5d2c", "scanner": "scanner-primary", "fingerprint": "e5dff73efd398ef4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/keyword-research/references/cost-estimation.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-c86c77e69ab305df", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/skills/keyword-research/references/data-sources.md"}, "properties": {"repobilityId": "06199d24017c8f77", "scanner": "scanner-primary", "fingerprint": "c86c77e69ab305df", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/keyword-research/references/data-sources.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-4beb62af6e9f85e3", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/skills/keyword-research/references/pipeline-overview.md"}, "properties": {"repobilityId": "a5927d4f20cfd7f7", "scanner": "scanner-primary", "fingerprint": "4beb62af6e9f85e3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/keyword-research/references/pipeline-overview.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-c95db998c2db3e5c", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/skills/github-triage/AGENT-BRIEF.md"}, "properties": {"repobilityId": "97deacdf5d6b037c", "scanner": "scanner-primary", "fingerprint": "c95db998c2db3e5c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/github-triage/AGENT-BRIEF.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-ce64fc2e1591afd4", "level": "note", "message": {"text": "Legacy-named symbol `_frames_v1` in tests/test_thumbnail_worker.py:46"}, "properties": {"repobilityId": "e5542ba08e3ad351", "scanner": "scanner-primary", "fingerprint": "ce64fc2e1591afd4", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-e29323ebd0a7f9dd", "level": "note", "message": {"text": "Legacy-named symbol `playbook_data_v1` in tests/test_thumbnail_playbook.py:4"}, "properties": {"repobilityId": "9755a86510384ed5", "scanner": "scanner-primary", "fingerprint": "e29323ebd0a7f9dd", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-4c3523a846eee383", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/test_bridge_router.py:623"}, "properties": {"repobilityId": "7d17ae3aadc4b910", "scanner": "scanner-primary", "fingerprint": "4c3523a846eee383", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9a0e1158d73a4d4c", "level": "note", "message": {"text": "Legacy-named symbol `host_v1` in tests/test_bridge_project_thumbnails.py:741"}, "properties": {"repobilityId": "bf057766c9cdf780", "scanner": "scanner-primary", "fingerprint": "9a0e1158d73a4d4c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-0b3266c8f6c9bd8a", "level": "none", "message": {"text": "Commented-code block (6 lines) in tests/test_bridge_digests.py:12"}, "properties": {"repobilityId": "7c71382ec3894bdc", "scanner": "scanner-primary", "fingerprint": "0b3266c8f6c9bd8a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f5a0884dbb4dad78", "level": "note", "message": {"text": "Legacy-named symbol `guest_v1` in tests/test_cutout_library.py:36"}, "properties": {"repobilityId": "35f18e16a816d4d1", "scanner": "scanner-primary", "fingerprint": "f5a0884dbb4dad78", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-605ca238a262abb0", "level": "note", "message": {"text": "Legacy-named symbol `TestMigrateLegacy` in tests/test_adr041_v3.py:142"}, "properties": {"repobilityId": "04e34151d111940c", "scanner": "scanner-primary", "fingerprint": "605ca238a262abb0", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-4d16d727a3db4931", "level": "note", "message": {"text": "Legacy-named symbol `test_calls_llm_and_writes_backup` in tests/test_kb_writer.py:421"}, "properties": {"repobilityId": "c28930506d251070", "scanner": "scanner-primary", "fingerprint": "4d16d727a3db4931", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-fc46b78ef67b2131", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/test_bridge_zoro.py:66"}, "properties": {"repobilityId": "d640d88ac72f9980", "scanner": "scanner-primary", "fingerprint": "fc46b78ef67b2131", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ab9cee6ad1faef09", "level": "note", "message": {"text": "Legacy-named symbol `h_v1` in tests/foundry/test_export_hash.py:142"}, "properties": {"repobilityId": "6b539071cec25d1f", "scanner": "scanner-primary", "fingerprint": "ab9cee6ad1faef09", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-332fd7bb83d9782c", "level": "note", "message": {"text": "Legacy-named symbol `model_copy` in tests/shared/test_schema_roundtrip.py:352"}, "properties": {"repobilityId": "96ae59762a246690", "scanner": "scanner-primary", "fingerprint": "332fd7bb83d9782c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-73de581d4ca7fbc2", "level": "note", "message": {"text": "Legacy-named symbol `list_objects_v2` in tests/shared/test_r2_client.py:6"}, "properties": {"repobilityId": "07ca9bc067dd077c", "scanner": "scanner-primary", "fingerprint": "73de581d4ca7fbc2", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-66abf80a95cb7ccd", "level": "note", "message": {"text": "Legacy-named symbol `make_backup` in tests/shared/test_promotion_acceptance_gate.py:57"}, "properties": {"repobilityId": "7fa68d2f4ca10239", "scanner": "scanner-primary", "fingerprint": "66abf80a95cb7ccd", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-207f8edbecf4c97e", "level": "note", "message": {"text": "Legacy-named symbol `list_objects_v2` in tests/shared/test_secondary_storage.py:62"}, "properties": {"repobilityId": "b093aefcaac8c72c", "scanner": "scanner-primary", "fingerprint": "207f8edbecf4c97e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-85a55e62840ccddf", "level": "note", "message": {"text": "Legacy-named symbol `test_propose_create_global_evidence_meets_v1` in tests/shared/test_concept_promotion_engine.py:967"}, "properties": {"repobilityId": "60bfb18d761b7f3b", "scanner": "scanner-primary", "fingerprint": "85a55e62840ccddf", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-958c14c6eb335c79", "level": "note", "message": {"text": "Legacy-named symbol `outline_v1` in tests/shared/test_writing_assist_surface.py:83"}, "properties": {"repobilityId": "c593cf81b4506e86", "scanner": "scanner-primary", "fingerprint": "958c14c6eb335c79", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-65983e699b14f2ef", "level": "none", "message": {"text": "Commented-code block (6 lines) in tests/shared/test_writing_assist_surface.py:262"}, "properties": {"repobilityId": "c9203f5f180ab3ab", "scanner": "scanner-primary", "fingerprint": "65983e699b14f2ef", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c0851465574b965b", "level": "note", "message": {"text": "Legacy-named symbol `m_old` in tests/shared/test_promotion_manifest.py:430"}, "properties": {"repobilityId": "0b6dda898beb8193", "scanner": "scanner-primary", "fingerprint": "c0851465574b965b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-5972ab1f7a72aa5d", "level": "note", "message": {"text": "Legacy-named symbol `ann_v2` in tests/shared/test_annotation_store.py:426"}, "properties": {"repobilityId": "7aeb4fed58b0ea90", "scanner": "scanner-primary", "fingerprint": "5972ab1f7a72aa5d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-3e9ca72d82accb36", "level": "note", "message": {"text": "Legacy-named symbol `test_returns_draft_compliance_v1` in tests/shared/test_compliance.py:350"}, "properties": {"repobilityId": "5ce6e578db25c913", "scanner": "scanner-primary", "fingerprint": "3e9ca72d82accb36", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-2b7490bdaece6a92", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/shared/test_wp_post_lister.py:352"}, "properties": {"repobilityId": "7fd4fcd9ae833a45", "scanner": "scanner-primary", "fingerprint": "2b7490bdaece6a92", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a842088cf3871632", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/shared/test_entity_promotion_engine.py:39"}, "properties": {"repobilityId": "149f039094a73a29", "scanner": "scanner-primary", "fingerprint": "a842088cf3871632", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9405a416dd9ad21a", "level": "note", "message": {"text": "Legacy-named symbol `test_run_yt_dlp_uses_throwaway_cookie_copy` in tests/shared/test_youtube_ingest.py:95"}, "properties": {"repobilityId": "42c5b36b288a771e", "scanner": "scanner-primary", "fingerprint": "9405a416dd9ad21a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-8f2f3414b6f20fb7", "level": "note", "message": {"text": "Legacy-named symbol `project_old` in tests/shared/test_doc_index.py:43"}, "properties": {"repobilityId": "67877bbb46827a64", "scanner": "scanner-primary", "fingerprint": "8f2f3414b6f20fb7", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-547056bd4b9fcaad", "level": "note", "message": {"text": "Legacy-named symbol `test_store_still_reads_legacy_v1` in tests/shared/test_annotation_v3.py:189"}, "properties": {"repobilityId": "53ee642ac81a118f", "scanner": "scanner-primary", "fingerprint": "547056bd4b9fcaad", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-fda21fc2c7bd459c", "level": "note", "message": {"text": "Legacy-named symbol `test_v13_timestamp_anchor_rejected_in_schema_v1` in tests/shared/schemas/test_video_reader_schema.py:88"}, "properties": {"repobilityId": "a9373a233467b287", "scanner": "scanner-primary", "fingerprint": "fda21fc2c7bd459c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-2bc878ccfd71387e", "level": "note", "message": {"text": "Legacy-named symbol `feedback_old` in tests/scripts/test_prune_old_memories.py:113"}, "properties": {"repobilityId": "f2e518b4935fe6ce", "scanner": "scanner-primary", "fingerprint": "2bc878ccfd71387e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-3e157718e6587807", "level": "note", "message": {"text": "Legacy-named symbol `test_cmd_restore_apply_replaces_target_and_keeps_backup` in tests/scripts/test_restore_from_r2.py:284"}, "properties": {"repobilityId": "80ae8fd63cc62db8", "scanner": "scanner-primary", "fingerprint": "3e157718e6587807", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-5da4b3bf5f6b7a87", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/brook/script_video/test_fcpxml_emitter.py:279"}, "properties": {"repobilityId": "0de4f12be6a28b83", "scanner": "scanner-primary", "fingerprint": "5da4b3bf5f6b7a87", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9f152f3aa7b385f4", "level": "note", "message": {"text": "Legacy-named symbol `overall_v1` in tests/agents/franky/test_score_shadow_mode.py:7"}, "properties": {"repobilityId": "8758958e4571d4db", "scanner": "scanner-primary", "fingerprint": "9f152f3aa7b385f4", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-279da8b98fe828fa", "level": "note", "message": {"text": "Legacy-named symbol `summarise_backup` in tests/agents/franky/test_weekly_digest.py:7"}, "properties": {"repobilityId": "c43d78a167987543", "scanner": "scanner-primary", "fingerprint": "279da8b98fe828fa", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-3923eb9dd47fa2aa", "level": "note", "message": {"text": "Legacy-named symbol `test_execute_plan_dispatches_v2` in tests/agents/robin/test_ingest.py:887"}, "properties": {"repobilityId": "0431e23a39ed7221", "scanner": "scanner-primary", "fingerprint": "3923eb9dd47fa2aa", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-3a1461803c489efc", "level": "note", "message": {"text": "Legacy-named symbol `_ask_merger_llm_v2` in tests/agents/robin/test_annotation_merger_v3.py:10"}, "properties": {"repobilityId": "f8e4d9160fc14978", "scanner": "scanner-primary", "fingerprint": "3a1461803c489efc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-426758bea2e44c74", "level": "note", "message": {"text": "Legacy-named symbol `kb_backup` in tests/agents/robin/test_ingest_route_c.py:43"}, "properties": {"repobilityId": "f6481a79aba82769", "scanner": "scanner-primary", "fingerprint": "426758bea2e44c74", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-fb5124ef1e81c51e", "level": "note", "message": {"text": "Legacy-named symbol `_ask_merger_llm_v2` in tests/agents/robin/test_annotation_merger_v2.py:137"}, "properties": {"repobilityId": "ed972e0c4471c86c", "scanner": "scanner-primary", "fingerprint": "fb5124ef1e81c51e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-98509bdcf18a1b7d", "level": "none", "message": {"text": "Commented-code block (6 lines) in tests/thousand_sunny/test_books_annotations_api.py:341"}, "properties": {"repobilityId": "4a5ddd01d6a5719d", "scanner": "scanner-primary", "fingerprint": "98509bdcf18a1b7d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-deb5b26b24cab965", "level": "note", "message": {"text": "Legacy-named symbol `model_copy` in tests/thousand_sunny/test_projects_synthesize_api.py:220"}, "properties": {"repobilityId": "0fe6fb6d2e4ff3b0", "scanner": "scanner-primary", "fingerprint": "deb5b26b24cab965", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-ab37807cb4b53adc", "level": "note", "message": {"text": "Legacy-named symbol `raw_copy` in tests/e2e/test_agent_robin_e2e.py:76"}, "properties": {"repobilityId": "6aaa3589358d3f7b", "scanner": "scanner-primary", "fingerprint": "ab37807cb4b53adc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-228ba129b53fd9c7", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/e2e/test_agent_robin_e2e.py:80"}, "properties": {"repobilityId": "7523b4305841c617", "scanner": "scanner-primary", "fingerprint": "228ba129b53fd9c7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-43d4ab19e7bb52f5", "level": "none", "message": {"text": "Commented-code block (5 lines) in qa/seed_ebooks.py:33"}, "properties": {"repobilityId": "fa109bd7007a3a81", "scanner": "scanner-primary", "fingerprint": "43d4ab19e7bb52f5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f61c2a9ecfd47901", "level": "note", "message": {"text": "Legacy-named symbol `t_old` in shared/srt_align.py:6"}, "properties": {"repobilityId": "b455d80ca3c9aba3", "scanner": "scanner-primary", "fingerprint": "f61c2a9ecfd47901", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-bbce1428564bcff5", "level": "none", "message": {"text": "Commented-code block (5 lines) in shared/project_reviews.py:178"}, "properties": {"repobilityId": "7026685eb940003a", "scanner": "scanner-primary", "fingerprint": "bbce1428564bcff5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ef41072317eaa1f0", "level": "none", "message": {"text": "Commented-code block (5 lines) in shared/doc_index.py:46"}, "properties": {"repobilityId": "26c902de505e6246", "scanner": "scanner-primary", "fingerprint": "ef41072317eaa1f0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0bffbca559e1de29", "level": "none", "message": {"text": "Commented-code block (5 lines) in shared/llm_router.py:179"}, "properties": {"repobilityId": "6cd0ffe9695f0247", "scanner": "scanner-primary", "fingerprint": "0bffbca559e1de29", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-dc876f8803492943", "level": "none", "message": {"text": "Commented-code block (6 lines) in shared/thumbnail_idea.py:50"}, "properties": {"repobilityId": "99881085e6080b7f", "scanner": "scanner-primary", "fingerprint": "dc876f8803492943", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f592ab0fbfeaeab7", "level": "none", "message": {"text": "Commented-code block (5 lines) in shared/wp_post_raw_fetcher.py:61"}, "properties": {"repobilityId": "055e1b277dd64914", "scanner": "scanner-primary", "fingerprint": "f592ab0fbfeaeab7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a0ffb5130ae5d9b3", "level": "none", "message": {"text": "Commented-code block (5 lines) in shared/claude_cli_client.py:172"}, "properties": {"repobilityId": "76edc6a5bda610b9", "scanner": "scanner-primary", "fingerprint": "a0ffb5130ae5d9b3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-246e96879826fd78", "level": "note", "message": {"text": "Legacy-named symbol `list_objects_v2` in shared/secondary_storage.py:123"}, "properties": {"repobilityId": "aceff667b6731524", "scanner": "scanner-primary", "fingerprint": "246e96879826fd78", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-da63342c18f22a27", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 shared/discard_service.py:89"}, "properties": {"repobilityId": "ae4af6ae70f3453f", "scanner": "scanner-primary", "fingerprint": "da63342c18f22a27", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b0311d6a77fce06a", "level": "none", "message": {"text": "Commented-code block (5 lines) in shared/weekly_indexer.py:44"}, "properties": {"repobilityId": "17c787e5b2f6bebd", "scanner": "scanner-primary", "fingerprint": "b0311d6a77fce06a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-861720e0000a8b0a", "level": "none", "message": {"text": "Commented-code block (7 lines) in shared/book_storage.py:33"}, "properties": {"repobilityId": "d0d75502f6866299", "scanner": "scanner-primary", "fingerprint": "861720e0000a8b0a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b2bca7c78a9627dc", "level": "none", "message": {"text": "Commented-code block (5 lines) in shared/promotion_renderer.py:39"}, "properties": {"repobilityId": "7960ab7d0f34e9c7", "scanner": "scanner-primary", "fingerprint": "b2bca7c78a9627dc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a8b9ceefe74a1bf7", "level": "none", "message": {"text": "Commented-code block (5 lines) in shared/entity_promotion_engine.py:458"}, "properties": {"repobilityId": "9a6bfbacd3f20403", "scanner": "scanner-primary", "fingerprint": "a8b9ceefe74a1bf7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e45ebe20a46ed749", "level": "none", "message": {"text": "Commented-code block (6 lines) in shared/wordpress_client.py:69"}, "properties": {"repobilityId": "c0e114bf73b9cc2f", "scanner": "scanner-primary", "fingerprint": "e45ebe20a46ed749", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a813e79ca2539ec3", "level": "none", "message": {"text": "Commented-code block (6 lines) in shared/source_ingest.py:26"}, "properties": {"repobilityId": "e4ca3415308f9acc", "scanner": "scanner-primary", "fingerprint": "a813e79ca2539ec3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6c4f97d63bf75a22", "level": "none", "message": {"text": "Commented-code block (5 lines) in shared/blob_loader.py:82"}, "properties": {"repobilityId": "7ebe8d9f20bc5916", "scanner": "scanner-primary", "fingerprint": "6c4f97d63bf75a22", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-49100157d733b9b2", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 shared/auphonic.py:140"}, "properties": {"repobilityId": "c45fe3dfef534046", "scanner": "scanner-primary", "fingerprint": "49100157d733b9b2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2607cceb20315d12", "level": "none", "message": {"text": "Commented-code block (6 lines) in shared/calendar_scheduler.py:167"}, "properties": {"repobilityId": "60766529bde858c5", "scanner": "scanner-primary", "fingerprint": "2607cceb20315d12", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4100a2f505c987eb", "level": "none", "message": {"text": "Commented-code block (5 lines) in shared/concept_canonicalize.py:70"}, "properties": {"repobilityId": "bbf354a3ce6145ee", "scanner": "scanner-primary", "fingerprint": "4100a2f505c987eb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ecd03881552de8b1", "level": "none", "message": {"text": "Commented-code block (8 lines) in shared/reading_source_registry.py:203"}, "properties": {"repobilityId": "5bd332e9b8389b22", "scanner": "scanner-primary", "fingerprint": "ecd03881552de8b1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-72161b73f6010793", "level": "none", "message": {"text": "Commented-code block (9 lines) in shared/youtube_ingest.py:323"}, "properties": {"repobilityId": "eb7699722056c2ab", "scanner": "scanner-primary", "fingerprint": "72161b73f6010793", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-966afcf4df7e15bc", "level": "note", "message": {"text": "Legacy-named symbol `playbook_data_v1` in shared/thumbnail_playbook.py:7"}, "properties": {"repobilityId": "c1a57b317a56e452", "scanner": "scanner-primary", "fingerprint": "966afcf4df7e15bc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-8b9527b5ab51d9d0", "level": "note", "message": {"text": "Legacy-named symbol `kb_backup` in shared/kb_writer.py:14"}, "properties": {"repobilityId": "3c7965f866510565", "scanner": "scanner-primary", "fingerprint": "8b9527b5ab51d9d0", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-4e66238380b922ad", "level": "none", "message": {"text": "Commented-code block (5 lines) in shared/kb_writer.py:70"}, "properties": {"repobilityId": "c06cbd386a68a350", "scanner": "scanner-primary", "fingerprint": "4e66238380b922ad", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4d695b7e1a9a1a8d", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 shared/audio_clip.py:25"}, "properties": {"repobilityId": "a538bf9b209841f2", "scanner": "scanner-primary", "fingerprint": "4d695b7e1a9a1a8d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-7f211007b2966819", "level": "none", "message": {"text": "Commented-code block (5 lines) in shared/log.py:71"}, "properties": {"repobilityId": "ed4da845281f5094", "scanner": "scanner-primary", "fingerprint": "7f211007b2966819", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-afa591ed1aab4245", "level": "none", "message": {"text": "Commented-code block (6 lines) in shared/source_map_builder.py:317"}, "properties": {"repobilityId": "bb630ab7bb445f94", "scanner": "scanner-primary", "fingerprint": "afa591ed1aab4245", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-68236688d4dcc142", "level": "note", "message": {"text": "Legacy-named symbol `make_backup` in shared/promotion_commit.py:15"}, "properties": {"repobilityId": "42d5c9e8816364d7", "scanner": "scanner-primary", "fingerprint": "68236688d4dcc142", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-a7ec4f7e9b9899d0", "level": "none", "message": {"text": "Commented-code block (5 lines) in shared/promotion_commit.py:360"}, "properties": {"repobilityId": "ad15b85a54b9fc1e", "scanner": "scanner-primary", "fingerprint": "a7ec4f7e9b9899d0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7e1ae461b8287606", "level": "note", "message": {"text": "Legacy-named symbol `is_v2` in shared/annotation_store.py:434"}, "properties": {"repobilityId": "ab0868feb12b4df2", "scanner": "scanner-primary", "fingerprint": "7e1ae461b8287606", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-6c4672df32423467", "level": "none", "message": {"text": "Commented-code block (6 lines) in shared/annotation_store.py:233"}, "properties": {"repobilityId": "c92e83bea3d674d9", "scanner": "scanner-primary", "fingerprint": "6c4672df32423467", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7ccb3573f11e1d83", "level": "none", "message": {"text": "Commented-code block (6 lines) in shared/alerts.py:71"}, "properties": {"repobilityId": "b4f681ebe8154370", "scanner": "scanner-primary", "fingerprint": "7ccb3573f11e1d83", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-43d46d36c42500a2", "level": "none", "message": {"text": "Commented-code block (6 lines) in shared/promotion_review_service.py:348"}, "properties": {"repobilityId": "c1ddd5dd1d375a30", "scanner": "scanner-primary", "fingerprint": "43d46d36c42500a2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-dbea3880975a24f7", "level": "none", "message": {"text": "Commented-code block (7 lines) in shared/writing_assist_surface.py:312"}, "properties": {"repobilityId": "531bcd570c3e94e3", "scanner": "scanner-primary", "fingerprint": "dbea3880975a24f7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e9b0e7ea26f33d22", "level": "none", "message": {"text": "Commented-code block (5 lines) in shared/approval_queue.py:251"}, "properties": {"repobilityId": "091ed7d48e7dcc96", "scanner": "scanner-primary", "fingerprint": "e9b0e7ea26f33d22", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f36164aedf2f056c", "level": "none", "message": {"text": "Commented-code block (5 lines) in shared/thumbnail_funnel.py:164"}, "properties": {"repobilityId": "582cf74da3543a34", "scanner": "scanner-primary", "fingerprint": "f36164aedf2f056c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6424b17edc13273e", "level": "note", "message": {"text": "Legacy-named symbol `has_legacy` in shared/weekly_writer.py:589"}, "properties": {"repobilityId": "be150a73310a471b", "scanner": "scanner-primary", "fingerprint": "6424b17edc13273e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-50f50e620b6c0ea6", "level": "none", "message": {"text": "Commented-code block (9 lines) in shared/weekly_writer.py:171"}, "properties": {"repobilityId": "a7d7d261a1c4b1d2", "scanner": "scanner-primary", "fingerprint": "50f50e620b6c0ea6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a293300b03c6124c", "level": "none", "message": {"text": "Commented-code block (5 lines) in shared/kb_hybrid_search.py:83"}, "properties": {"repobilityId": "a7cb8fd2f8122290", "scanner": "scanner-primary", "fingerprint": "a293300b03c6124c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-694123a99d3d9120", "level": "note", "message": {"text": "Legacy-named symbol `__v2` in shared/state.py:437"}, "properties": {"repobilityId": "67cf2a403e4ef68b", "scanner": "scanner-primary", "fingerprint": "694123a99d3d9120", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-1894c7c8852e534e", "level": "none", "message": {"text": "Commented-code block (5 lines) in shared/state.py:523"}, "properties": {"repobilityId": "ee20dae302f4dfbb", "scanner": "scanner-primary", "fingerprint": "1894c7c8852e534e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9347783c74387c7b", "level": "note", "message": {"text": "Legacy-named symbol `model_copy` in shared/audit_results_store.py:346"}, "properties": {"repobilityId": "8b8545bcd1b0ff53", "scanner": "scanner-primary", "fingerprint": "9347783c74387c7b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-032a7d71d8d29236", "level": "none", "message": {"text": "Commented-code block (7 lines) in shared/translator.py:80"}, "properties": {"repobilityId": "6bb6d839e7ba549d", "scanner": "scanner-primary", "fingerprint": "032a7d71d8d29236", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-12ff66c1d6cec7c6", "level": "note", "message": {"text": "Legacy-named symbol `list_objects_v2` in shared/r2_client.py:173"}, "properties": {"repobilityId": "e8cae653ec1947b2", "scanner": "scanner-primary", "fingerprint": "12ff66c1d6cec7c6", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-eb7d6b173d13aa0c", "level": "none", "message": {"text": "Commented-code block (6 lines) in shared/concept_promotion_engine.py:492"}, "properties": {"repobilityId": "828b6b1f65aaa30b", "scanner": "scanner-primary", "fingerprint": "eb7d6b173d13aa0c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c4f11bed8ab42bd6", "level": "note", "message": {"text": "Legacy-named symbol `model_copy` in shared/brook_synthesize_store.py:166"}, "properties": {"repobilityId": "0ed2ca5bc38093dd", "scanner": "scanner-primary", "fingerprint": "c4f11bed8ab42bd6", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-605f348d97b3b4ad", "level": "none", "message": {"text": "Commented-code block (5 lines) in shared/promotion_preflight.py:321"}, "properties": {"repobilityId": "02d8ee940cb38872", "scanner": "scanner-primary", "fingerprint": "605f348d97b3b4ad", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-84f3d38e391a542e", "level": "note", "message": {"text": "Legacy-named symbol `_hard_invariant_timestamp_anchor_requires_v2` in shared/schemas/source_map.py:204"}, "properties": {"repobilityId": "99916ad4ed4c1281", "scanner": "scanner-primary", "fingerprint": "84f3d38e391a542e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-9305492508377895", "level": "note", "message": {"text": "Legacy-named symbol `__v2` in shared/schemas/proposal_metrics.py:5"}, "properties": {"repobilityId": "ef78f6a364edbd8c", "scanner": "scanner-primary", "fingerprint": "9305492508377895", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-cafb584c0a155503", "level": "note", "message": {"text": "Legacy-named symbol `_validate_cast_requires_v2` in shared/schemas/reading_source.py:241"}, "properties": {"repobilityId": "4a9935eb5171b1d7", "scanner": "scanner-primary", "fingerprint": "cafb584c0a155503", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-1261ee03ef62bbcf", "level": "none", "message": {"text": "Commented-code block (5 lines) in shared/schemas/reading_context_package.py:79"}, "properties": {"repobilityId": "68d6a9eb155176ef", "scanner": "scanner-primary", "fingerprint": "1261ee03ef62bbcf", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5d4af87a5f00c5a9", "level": "none", "message": {"text": "Commented-code block (5 lines) in shared/schemas/ingest_result.py:37"}, "properties": {"repobilityId": "e14372ef38d35c98", "scanner": "scanner-primary", "fingerprint": "5d4af87a5f00c5a9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6040ba681d46bbba", "level": "none", "message": {"text": "Commented-code block (5 lines) in shared/schemas/seo.py:34"}, "properties": {"repobilityId": "e75176a6a9cd8503", "scanner": "scanner-primary", "fingerprint": "6040ba681d46bbba", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-63bf665d22034015", "level": "note", "message": {"text": "Legacy-named symbol `_has_legacy` in scripts/backfill_adr041_v3.py:30"}, "properties": {"repobilityId": "90b7518c37cdd25d", "scanner": "scanner-primary", "fingerprint": "63bf665d22034015", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-271e02268449c47e", "level": "note", "message": {"text": "Legacy-named symbol `t_old` in scripts/align_srt.py:8"}, "properties": {"repobilityId": "b309dee16f9cb3ad", "scanner": "scanner-primary", "fingerprint": "271e02268449c47e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-5f47cac95b941864", "level": "note", "message": {"text": "Legacy-named symbol `playbook_v1` in scripts/dispatch_gemini_playbook_audit.py:4"}, "properties": {"repobilityId": "9b988be22482158d", "scanner": "scanner-primary", "fingerprint": "5f47cac95b941864", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-6e8924b5f387507f", "level": "note", "message": {"text": "Legacy-named symbol `playbook_v1` in scripts/compose_playbook_v1.py:1"}, "properties": {"repobilityId": "0bd8a844cb7828a4", "scanner": "scanner-primary", "fingerprint": "6e8924b5f387507f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-284120be3801f5e3", "level": "none", "message": {"text": "Commented-code block (6 lines) in scripts/iter4_1_test.py:35"}, "properties": {"repobilityId": "ee01db634ce03b99", "scanner": "scanner-primary", "fingerprint": "284120be3801f5e3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-af40c7f1f9d769f3", "level": "none", "message": {"text": "Commented-code block (6 lines) in scripts/iter4_test.py:42"}, "properties": {"repobilityId": "357105f2fa90c1d9", "scanner": "scanner-primary", "fingerprint": "af40c7f1f9d769f3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1fd74a7082692329", "level": "none", "message": {"text": "Commented-code block (5 lines) in scripts/vault_layout_audit.py:243"}, "properties": {"repobilityId": "7231a28dcc046927", "scanner": "scanner-primary", "fingerprint": "1fd74a7082692329", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-493c050ff7fb193b", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 scripts/iter_test.py:253"}, "properties": {"repobilityId": "1945fffe76aa15e6", "scanner": "scanner-primary", "fingerprint": "493c050ff7fb193b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4ca582f086cf13cd", "level": "note", "message": {"text": "Legacy-named symbol `thumbnail_reference_extraction_v1` in scripts/cluster_thumbnail_patterns.py:3"}, "properties": {"repobilityId": "b4d4e7f1e498ba3d", "scanner": "scanner-primary", "fingerprint": "4ca582f086cf13cd", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-297f11298ee7f1d4", "level": "note", "message": {"text": "Legacy-named symbol `playbook_v1` in scripts/dispatch_codex_playbook_audit.py:4"}, "properties": {"repobilityId": "5ce5dec97904f02e", "scanner": "scanner-primary", "fingerprint": "297f11298ee7f1d4", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-65cdba832ba9a8d7", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 scripts/dispatch_codex_playbook_audit.py:152"}, "properties": {"repobilityId": "3089b109705f0cb3", "scanner": "scanner-primary", "fingerprint": "65cdba832ba9a8d7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-1ab5d564e19d0930", "level": "note", "message": {"text": "Legacy-named symbol `thumbnail_reference_extraction_v1` in scripts/extract_thumbnail_features.py:6"}, "properties": {"repobilityId": "f94192175f1497c2", "scanner": "scanner-primary", "fingerprint": "1ab5d564e19d0930", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-89cb5e2db4d26822", "level": "note", "message": {"text": "Legacy-named symbol `no_backup` in scripts/migrate_broken_concept_frontmatter.py:146"}, "properties": {"repobilityId": "df9da1253bc0ff27", "scanner": "scanner-primary", "fingerprint": "89cb5e2db4d26822", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-daf319556cb0764f", "level": "note", "message": {"text": "Legacy-named symbol `playbook_v1` in scripts/splice_playbook_v1.py:4"}, "properties": {"repobilityId": "1707feae7c177de3", "scanner": "scanner-primary", "fingerprint": "daf319556cb0764f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-eb87e7c25ff8f88d", "level": "note", "message": {"text": "Legacy-named symbol `playbook_v1` in scripts/fix_playbook_v1_to_v1_1.py:1"}, "properties": {"repobilityId": "92d93858d1a1726b", "scanner": "scanner-primary", "fingerprint": "eb87e7c25ff8f88d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-9cdb8a2014ee8624", "level": "note", "message": {"text": "Legacy-named symbol `pre_restore_backup` in scripts/restore_from_r2.py:71"}, "properties": {"repobilityId": "ef4ed5327bee015a", "scanner": "scanner-primary", "fingerprint": "9cdb8a2014ee8624", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-82d31e5ab3270066", "level": "none", "message": {"text": "Commented-code block (11 lines) in extensions/news-coo/src/content/siteCleaners/sciencedirect.ts:5"}, "properties": {"repobilityId": "00bcc88b313fdaa3", "scanner": "scanner-primary", "fingerprint": "82d31e5ab3270066", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b54ddd36b3f6e841", "level": "none", "message": {"text": "Commented-code block (12 lines) in extensions/news-coo/src/content/siteCleaners/jama.ts:9"}, "properties": {"repobilityId": "b5bdc7961bea8d5e", "scanner": "scanner-primary", "fingerprint": "b54ddd36b3f6e841", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c5a934692dcd40dc", "level": "none", "message": {"text": "Commented-code block (11 lines) in extensions/news-coo/src/content/siteCleaners/bmj.ts:8"}, "properties": {"repobilityId": "056dca803e9e9193", "scanner": "scanner-primary", "fingerprint": "c5a934692dcd40dc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8eb675c4bb2b8038", "level": "none", "message": {"text": "Commented-code block (5 lines) in extensions/news-coo/src/content/siteCleaners/nature.ts:5"}, "properties": {"repobilityId": "2820cb58e5dc0301", "scanner": "scanner-primary", "fingerprint": "8eb675c4bb2b8038", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8d3238847780c0c8", "level": "none", "message": {"text": "Commented-code block (5 lines) in extensions/news-coo/src/content/siteCleaners/figureAnchors.ts:3"}, "properties": {"repobilityId": "b77e698d2de8e644", "scanner": "scanner-primary", "fingerprint": "8d3238847780c0c8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-beef3e774a8cf6ae", "level": "none", "message": {"text": "Commented-code block (6 lines) in extensions/news-coo/src/content/siteCleaners/atypon.ts:7"}, "properties": {"repobilityId": "ffb3d581a89c9d9f", "scanner": "scanner-primary", "fingerprint": "beef3e774a8cf6ae", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-843c827300ec9a94", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 agents/foundry/fcpxml_emitter.py:39"}, "properties": {"repobilityId": "a670b6fc8271a0dc", "scanner": "scanner-primary", "fingerprint": "843c827300ec9a94", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b0cbb1fa834de58c", "level": "none", "message": {"text": "Commented-code block (5 lines) in agents/foundry/beat_editor.py:348"}, "properties": {"repobilityId": "69b1863927031503", "scanner": "scanner-primary", "fingerprint": "b0cbb1fa834de58c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0e25b625d15e0f01", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 agents/foundry/lib/web_highlight_record.py:438"}, "properties": {"repobilityId": "3ee306311d455520", "scanner": "scanner-primary", "fingerprint": "0e25b625d15e0f01", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c106dbd9a40f0a80", "level": "note", "message": {"text": "Legacy-named symbol `summarise_backup` in agents/franky/weekly_digest.py:198"}, "properties": {"repobilityId": "c6da3de1dab77c0c", "scanner": "scanner-primary", "fingerprint": "c106dbd9a40f0a80", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-ca21c1b6a288c542", "level": "none", "message": {"text": "Commented-code block (19 lines) in agents/franky/health_check.py:72"}, "properties": {"repobilityId": "5d1eba052d2c7470", "scanner": "scanner-primary", "fingerprint": "ca21c1b6a288c542", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-47ca2f7f9cc314c1", "level": "note", "message": {"text": "Legacy-named symbol `overall_v1` in agents/franky/news_digest.py:446"}, "properties": {"repobilityId": "781f44a67f609d0d", "scanner": "scanner-primary", "fingerprint": "47ca2f7f9cc314c1", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-93d20f5f2026b0ad", "level": "none", "message": {"text": "Commented-code block (5 lines) in agents/franky/anomaly_daemon.py:69"}, "properties": {"repobilityId": "97bd923d547f9f79", "scanner": "scanner-primary", "fingerprint": "93d20f5f2026b0ad", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b22a8306e74c3587", "level": "note", "message": {"text": "Legacy-named symbol `r2_backup` in agents/franky/r2_backup_verify.py:189"}, "properties": {"repobilityId": "0f96ec73250c47cd", "scanner": "scanner-primary", "fingerprint": "b22a8306e74c3587", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-42e064be8eb865b4", "level": "note", "message": {"text": "Legacy-named symbol `__v2` in agents/franky/state/proposal_metrics.py:333"}, "properties": {"repobilityId": "f86888d2d269a847", "scanner": "scanner-primary", "fingerprint": "42e064be8eb865b4", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-bc2e928ccae162a9", "level": "note", "message": {"text": "Legacy-named symbol `model_copy` in agents/brook/line1b_extractor.py:197"}, "properties": {"repobilityId": "6e6a529b984b82f0", "scanner": "scanner-primary", "fingerprint": "bc2e928ccae162a9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-a4699ea4bef9e5a5", "level": "none", "message": {"text": "Commented-code block (10 lines) in agents/brook/audit_runner.py:227"}, "properties": {"repobilityId": "c85a58dd274d6c0e", "scanner": "scanner-primary", "fingerprint": "a4699ea4bef9e5a5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-657d6472f0bf4d41", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 agents/brook/audit_runner.py:32"}, "properties": {"repobilityId": "bfaca7e11e66fec7", "scanner": "scanner-primary", "fingerprint": "657d6472f0bf4d41", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3e2c92e15f09ed64", "level": "none", "message": {"text": "Commented-code block (6 lines) in agents/brook/repurpose_engine.py:359"}, "properties": {"repobilityId": "1087aced004a9554", "scanner": "scanner-primary", "fingerprint": "3e2c92e15f09ed64", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-36e365cfea5706b7", "level": "note", "message": {"text": "Legacy-named symbol `model_copy` in agents/brook/seo_narrow.py:137"}, "properties": {"repobilityId": "033a4ac9ae529481", "scanner": "scanner-primary", "fingerprint": "36e365cfea5706b7", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-decb53bf48928b07", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 agents/brook/script_video/pipeline.py:107"}, "properties": {"repobilityId": "5bf6eca1f3771994", "scanner": "scanner-primary", "fingerprint": "decb53bf48928b07", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2443f2d9eb981d77", "level": "none", "message": {"text": "Commented-code block (6 lines) in agents/brook/synthesize/__init__.py:123"}, "properties": {"repobilityId": "6e48e1c009d5bcc4", "scanner": "scanner-primary", "fingerprint": "2443f2d9eb981d77", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f76dc087cc870b5f", "level": "note", "message": {"text": "Legacy-named symbol `model_copy` in agents/brook/synthesize/_store_writer.py:48"}, "properties": {"repobilityId": "dbd26a0848cdee19", "scanner": "scanner-primary", "fingerprint": "f76dc087cc870b5f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-202989c69f270e15", "level": "note", "message": {"text": "Legacy-named symbol `model_copy` in agents/brook/synthesize/_reject_discount.py:101"}, "properties": {"repobilityId": "97d56acc16508c58", "scanner": "scanner-primary", "fingerprint": "202989c69f270e15", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-32f6fd90543cc254", "level": "none", "message": {"text": "Commented-code block (5 lines) in agents/brook/synthesize/_finalize.py:114"}, "properties": {"repobilityId": "b3d9518c5fc6cd00", "scanner": "scanner-primary", "fingerprint": "32f6fd90543cc254", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a076d50ba8c68355", "level": "note", "message": {"text": "Legacy-named symbol `_ask_merger_llm_v2` in agents/robin/annotation_merger.py:20"}, "properties": {"repobilityId": "d83593fb34429f79", "scanner": "scanner-primary", "fingerprint": "a076d50ba8c68355", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-4210ddd11e55c88d", "level": "none", "message": {"text": "Commented-code block (7 lines) in agents/robin/ingest.py:310"}, "properties": {"repobilityId": "11c05c4f919871e1", "scanner": "scanner-primary", "fingerprint": "4210ddd11e55c88d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-95f9e0df4c2cbac8", "level": "note", "message": {"text": "Legacy-named symbol `outline_v1` in agents/robin/reading_context_package.py:648"}, "properties": {"repobilityId": "792b764d8956aa86", "scanner": "scanner-primary", "fingerprint": "95f9e0df4c2cbac8", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-5b935f79e6846df2", "level": "none", "message": {"text": "Commented-code block (6 lines) in agents/robin/reading_context_package.py:100"}, "properties": {"repobilityId": "9820a1b89d1a0659", "scanner": "scanner-primary", "fingerprint": "5b935f79e6846df2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-41f39b7bcaf02268", "level": "none", "message": {"text": "Commented-code block (5 lines) in .claude/skills/seo-keyword-enrich/scripts/enrich.py:688"}, "properties": {"repobilityId": "87fb1d38d6891712", "scanner": "scanner-primary", "fingerprint": "41f39b7bcaf02268", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ed132164c8a206ca", "level": "none", "message": {"text": "Commented-code block (10 lines) in thousand_sunny/promotion_wiring.py:90"}, "properties": {"repobilityId": "8e6a54eb087a53bc", "scanner": "scanner-primary", "fingerprint": "ed132164c8a206ca", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bf1f6c6858edcdb0", "level": "none", "message": {"text": "Commented-code block (5 lines) in thousand_sunny/auth.py:32"}, "properties": {"repobilityId": "fb6a770b42ad6174", "scanner": "scanner-primary", "fingerprint": "bf1f6c6858edcdb0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a1c973125d67a6b1", "level": "none", "message": {"text": "Commented-code block (5 lines) in thousand_sunny/app.py:11"}, "properties": {"repobilityId": "5200017a712ef0b2", "scanner": "scanner-primary", "fingerprint": "a1c973125d67a6b1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-810796f520a2171a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 thousand_sunny/static/kb_canvas.js:800"}, "properties": {"repobilityId": "b6b1a9c1921d1c10", "scanner": "scanner-primary", "fingerprint": "810796f520a2171a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a893158ac4e483e9", "level": "none", "message": {"text": "Commented-code block (6 lines) in thousand_sunny/static/book_reader.js:111"}, "properties": {"repobilityId": "bc64d2477f8bfa25", "scanner": "scanner-primary", "fingerprint": "a893158ac4e483e9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4bd6c9500312c575", "level": "none", "message": {"text": "Commented-code block (5 lines) in thousand_sunny/static/projects/review.js:209"}, "properties": {"repobilityId": "0edec9d0e3758f07", "scanner": "scanner-primary", "fingerprint": "4bd6c9500312c575", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c11f281c71e689c6", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 thousand_sunny/static/shosho/bridge-projects.js:283"}, "properties": {"repobilityId": "ef1ef4ec4f4bc2ec", "scanner": "scanner-primary", "fingerprint": "c11f281c71e689c6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a2a16739b7ddf864", "level": "none", "message": {"text": "Commented-code block (7 lines) in thousand_sunny/static/shosho/av-reader.js:8"}, "properties": {"repobilityId": "e52be0616e883500", "scanner": "scanner-primary", "fingerprint": "a2a16739b7ddf864", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a950823204d304c2", "level": "none", "message": {"text": "Commented-code block (5 lines) in thousand_sunny/routers/foundry.py:325"}, "properties": {"repobilityId": "a3371ec6507ce9f9", "scanner": "scanner-primary", "fingerprint": "a950823204d304c2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-16e91f1e8d583959", "level": "none", "message": {"text": "Commented-code block (5 lines) in thousand_sunny/routers/writing_assist.py:242"}, "properties": {"repobilityId": "ca1073b4332e0d6e", "scanner": "scanner-primary", "fingerprint": "16e91f1e8d583959", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6aa09de557bf0c5a", "level": "none", "message": {"text": "Commented-code block (6 lines) in thousand_sunny/routers/bridge_projects.py:105"}, "properties": {"repobilityId": "c47f79ddb959c622", "scanner": "scanner-primary", "fingerprint": "6aa09de557bf0c5a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5d4f97bb753957f3", "level": "note", "message": {"text": "Legacy-named symbol `latest_backup` in thousand_sunny/routers/franky.py:244"}, "properties": {"repobilityId": "7787a58b60b49b21", "scanner": "scanner-primary", "fingerprint": "5d4f97bb753957f3", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-0bfeae876eb421f2", "level": "none", "message": {"text": "Commented-code block (5 lines) in thousand_sunny/routers/bridge_weekly.py:218"}, "properties": {"repobilityId": "434b95dd8cc162a0", "scanner": "scanner-primary", "fingerprint": "0bfeae876eb421f2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-487ea47cdd24ff34", "level": "none", "message": {"text": "Commented-code block (6 lines) in thousand_sunny/routers/robin.py:66"}, "properties": {"repobilityId": "50c6287d602023dd", "scanner": "scanner-primary", "fingerprint": "487ea47cdd24ff34", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-56d30f53eb67f30a", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 thousand_sunny/routers/robin.py:122"}, "properties": {"repobilityId": "a7e52b7f2cbbf61d", "scanner": "scanner-primary", "fingerprint": "56d30f53eb67f30a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-70ed3eeff05f1835", "level": "none", "message": {"text": "Commented-code block (5 lines) in thousand_sunny/routers/progress.py:24"}, "properties": {"repobilityId": "cf3e4bb338731a1f", "scanner": "scanner-primary", "fingerprint": "70ed3eeff05f1835", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ff67e92a38cfd73e", "level": "none", "message": {"text": "Commented-code block (12 lines) in thousand_sunny/routers/bridge.py:369"}, "properties": {"repobilityId": "f7a765cd436598b5", "scanner": "scanner-primary", "fingerprint": "ff67e92a38cfd73e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-621d2773ce5998d6", "level": "note", "message": {"text": "Legacy-named symbol `brainstorm_youtube_v1` in thousand_sunny/routers/bridge_project_thumbnails.py:110"}, "properties": {"repobilityId": "bcd3db6d06d497b0", "scanner": "scanner-primary", "fingerprint": "621d2773ce5998d6", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-d5205aea6ae18552", "level": "none", "message": {"text": "Commented-code block (5 lines) in thousand_sunny/routers/repurpose.py:263"}, "properties": {"repobilityId": "746777fb38a9533c", "scanner": "scanner-primary", "fingerprint": "d5205aea6ae18552", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9cac7ce15e72817b", "level": "note", "message": {"text": "31 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "1a52e2d4d46a6e40", "scanner": "scanner-primary", "fingerprint": "9cac7ce15e72817b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "config-drift"]}}, {"ruleId": "scanner-be46ea126aa5d8dc", "level": "note", "message": {"text": "Near-duplicate function bodies in 3 places"}, "properties": {"repobilityId": "22724b3b6039383d", "scanner": "scanner-primary", "fingerprint": "be46ea126aa5d8dc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-be46ea126aa5d8dc", "level": "note", "message": {"text": "Near-duplicate function bodies in 3 places"}, "properties": {"repobilityId": "eb28085ee9358d74", "scanner": "scanner-primary", "fingerprint": "be46ea126aa5d8dc", "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": "8a195d0137468a4e", "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": "3e030cd780cbd848", "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": "3c8cff276c67ecc0", "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": "924ecebd9d402008", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-02525d39071dd2c7", "level": "note", "message": {"text": "Near-duplicate function bodies in 5 places"}, "properties": {"repobilityId": "08a8a68e62793eb1", "scanner": "scanner-primary", "fingerprint": "02525d39071dd2c7", "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": "73c8179e78d8471d", "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": "bef77de1ffea43f7", "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": "31a9a0f66a3a0fdd", "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": "ab640eb3290e0863", "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": "03e488922c8d81c9", "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": "70256213ea34bb48", "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": "9b40d380705a0521", "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": "d2ca9d912c3eea57", "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": "45c825e27a54557c", "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": "4a0312e7b0e7be4a", "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": "0c893ddb07649208", "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": "65c2f72adc68d7e2", "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": "29f586c6347f3ffc", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-b81ed995921f59c5", "level": "error", "message": {"text": "FastAPI POST `models_set` without auth dependency \u2014 thousand_sunny/routers/bridge_models.py:64"}, "properties": {"repobilityId": "82f1bdd346398032", "scanner": "scanner-primary", "fingerprint": "b81ed995921f59c5", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "thousand_sunny/routers/bridge_models.py"}, "region": {"startLine": 64}}}]}, {"ruleId": "scanner-281c7772fba6e3d9", "level": "error", "message": {"text": "FastAPI POST `models_reset` without auth dependency \u2014 thousand_sunny/routers/bridge_models.py:81"}, "properties": {"repobilityId": "7d76cc97250a22c3", "scanner": "scanner-primary", "fingerprint": "281c7772fba6e3d9", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "thousand_sunny/routers/bridge_models.py"}, "region": {"startLine": 81}}}]}, {"ruleId": "scanner-17955f0d78e43d44", "level": "error", "message": {"text": "FastAPI POST `create_permanent` without auth dependency \u2014 thousand_sunny/routers/kb_review.py:278"}, "properties": {"repobilityId": "b6c06d050da2cd24", "scanner": "scanner-primary", "fingerprint": "17955f0d78e43d44", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "thousand_sunny/routers/kb_review.py"}, "region": {"startLine": 278}}}]}, {"ruleId": "scanner-cdbf049c1a62a6a2", "level": "error", "message": {"text": "FastAPI POST `review_skip` without auth dependency \u2014 thousand_sunny/routers/kb_review.py:556"}, "properties": {"repobilityId": "78139b80e5b44d1a", "scanner": "scanner-primary", "fingerprint": "cdbf049c1a62a6a2", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "thousand_sunny/routers/kb_review.py"}, "region": {"startLine": 556}}}]}, {"ruleId": "scanner-8e97516872a21dc4", "level": "error", "message": {"text": "FastAPI POST `review_later` without auth dependency \u2014 thousand_sunny/routers/kb_review.py:568"}, "properties": {"repobilityId": "d2f7d3c1d42fb523", "scanner": "scanner-primary", "fingerprint": "8e97516872a21dc4", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "thousand_sunny/routers/kb_review.py"}, "region": {"startLine": 568}}}]}, {"ruleId": "scanner-39cb98c29ad65d7d", "level": "error", "message": {"text": "FastAPI POST `decide_item` without auth dependency \u2014 thousand_sunny/routers/promotion_review.py:268"}, "properties": {"repobilityId": "f7a5f6fb9319882e", "scanner": "scanner-primary", "fingerprint": "39cb98c29ad65d7d", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "thousand_sunny/routers/promotion_review.py"}, "region": {"startLine": 268}}}]}, {"ruleId": "scanner-a0a4bf5d95a540d4", "level": "error", "message": {"text": "FastAPI POST `commit_source` without auth dependency \u2014 thousand_sunny/routers/promotion_review.py:324"}, "properties": {"repobilityId": "01d932bbb8e4e443", "scanner": "scanner-primary", "fingerprint": "a0a4bf5d95a540d4", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "thousand_sunny/routers/promotion_review.py"}, "region": {"startLine": 324}}}]}, {"ruleId": "scanner-1bedecd1e949629a", "level": "error", "message": {"text": "FastAPI POST `start_review` without auth dependency \u2014 thousand_sunny/routers/promotion_review.py:375"}, "properties": {"repobilityId": "06e6d7e7f2b9385f", "scanner": "scanner-primary", "fingerprint": "1bedecd1e949629a", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "thousand_sunny/routers/promotion_review.py"}, "region": {"startLine": 375}}}]}, {"ruleId": "scanner-aecff605000d7cf5", "level": "error", "message": {"text": "FastAPI POST `start` without auth dependency \u2014 thousand_sunny/routers/robin.py:1131"}, "properties": {"repobilityId": "f67bf6c50a78df09", "scanner": "scanner-primary", "fingerprint": "aecff605000d7cf5", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "thousand_sunny/routers/robin.py"}, "region": {"startLine": 1131}}}]}, {"ruleId": "scanner-72f019cc730d93f1", "level": "error", "message": {"text": "FastAPI POST `cancel` without auth dependency \u2014 thousand_sunny/routers/robin.py:1173"}, "properties": {"repobilityId": "ebb284a1e33408b6", "scanner": "scanner-primary", "fingerprint": "72f019cc730d93f1", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "thousand_sunny/routers/robin.py"}, "region": {"startLine": 1173}}}]}, {"ruleId": "scanner-f70b4d07f09555f3", "level": "error", "message": {"text": "FastAPI POST `submit_guidance` without auth dependency \u2014 thousand_sunny/routers/robin.py:1421"}, "properties": {"repobilityId": "cb5ee8e42b44a11e", "scanner": "scanner-primary", "fingerprint": "f70b4d07f09555f3", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "thousand_sunny/routers/robin.py"}, "region": {"startLine": 1421}}}]}, {"ruleId": "scanner-17e6b399e24b7b8d", "level": "error", "message": {"text": "FastAPI POST `execute` without auth dependency \u2014 thousand_sunny/routers/robin.py:1466"}, "properties": {"repobilityId": "c687649bf0f278b8", "scanner": "scanner-primary", "fingerprint": "17e6b399e24b7b8d", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "thousand_sunny/routers/robin.py"}, "region": {"startLine": 1466}}}]}, {"ruleId": "scanner-b2b8dda9865cb550", "level": "error", "message": {"text": "FastAPI PATCH `memory_update` without auth dependency \u2014 thousand_sunny/routers/bridge.py:1733"}, "properties": {"repobilityId": "3689db3743828a0f", "scanner": "scanner-primary", "fingerprint": "b2b8dda9865cb550", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "thousand_sunny/routers/bridge.py"}, "region": {"startLine": 1733}}}]}, {"ruleId": "scanner-437302652a3aacef", "level": "error", "message": {"text": "FastAPI DELETE `memory_delete` without auth dependency \u2014 thousand_sunny/routers/bridge.py:1762"}, "properties": {"repobilityId": "6d4b18cb1c4d3a94", "scanner": "scanner-primary", "fingerprint": "437302652a3aacef", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "thousand_sunny/routers/bridge.py"}, "region": {"startLine": 1762}}}]}, {"ruleId": "scanner-7d9d1234e0f5cd34", "level": "error", "message": {"text": "FastAPI POST `books_upload` without auth dependency \u2014 thousand_sunny/routers/books.py:286"}, "properties": {"repobilityId": "c932397322220afc", "scanner": "scanner-primary", "fingerprint": "7d9d1234e0f5cd34", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "thousand_sunny/routers/books.py"}, "region": {"startLine": 286}}}]}, {"ruleId": "scanner-aac18dbba3d0e7da", "level": "error", "message": {"text": "FastAPI DELETE `delete_book_endpoint` without auth dependency \u2014 thousand_sunny/routers/books.py:499"}, "properties": {"repobilityId": "a7c599935ab4d50d", "scanner": "scanner-primary", "fingerprint": "aac18dbba3d0e7da", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "thousand_sunny/routers/books.py"}, "region": {"startLine": 499}}}]}, {"ruleId": "scanner-d5f7b7435281cba0", "level": "error", "message": {"text": "Dangling fetch: POST /kb/api/permanent (thousand_sunny/static/kb_canvas.js:800)"}, "properties": {"repobilityId": "8616094ee3bda69e", "scanner": "scanner-primary", "fingerprint": "d5f7b7435281cba0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-98fc6863123459eb", "level": "error", "message": {"text": "Dangling fetch: GET /robin/api/books/${encodeURIComponent(BOOK_ID)} (thousand_sunny/static/book_reader.js:247)"}, "properties": {"repobilityId": "e36a36bca50df198", "scanner": "scanner-primary", "fingerprint": "98fc6863123459eb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-89cefd9401d3e419", "level": "error", "message": {"text": "Dangling fetch: GET /robin/api/books/${encodeURIComponent(BOOK_ID)}/annotations (thousand_sunny/static/book_reader.js:262)"}, "properties": {"repobilityId": "0d0078a7c870d3ba", "scanner": "scanner-primary", "fingerprint": "89cefd9401d3e419", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-62779bcf1c7e3e46", "level": "error", "message": {"text": "Dangling fetch: POST /robin/api/books/${encodeURIComponent(BOOK_ID)}/annotations (thousand_sunny/static/book_reader.js:305)"}, "properties": {"repobilityId": "1d49dd746c62a451", "scanner": "scanner-primary", "fingerprint": "62779bcf1c7e3e46", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b3a8ce2349adf040", "level": "error", "message": {"text": "Dangling fetch: POST /robin/api/books/${encodeURIComponent(BOOK_ID)}/ingest-request (thousand_sunny/static/book_reader.js:1003)"}, "properties": {"repobilityId": "967fc160ebae5c93", "scanner": "scanner-primary", "fingerprint": "b3a8ce2349adf040", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a4aa7976875659bb", "level": "error", "message": {"text": "Dangling fetch: DELETE /robin/api/books/${encodeURIComponent(BOOK_ID)}/ingest-request (thousand_sunny/static/book_reader.js:1030)"}, "properties": {"repobilityId": "e673cb7b845a4796", "scanner": "scanner-primary", "fingerprint": "a4aa7976875659bb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-81533cf5991fdbc2", "level": "error", "message": {"text": "Dangling fetch: DELETE /robin/api/books/${encodeURIComponent(BOOK_ID)} (thousand_sunny/static/book_reader.js:1069)"}, "properties": {"repobilityId": "eac956100cdb75c9", "scanner": "scanner-primary", "fingerprint": "81533cf5991fdbc2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-87c278a2bfb82254", "level": "error", "message": {"text": "Dangling fetch: PUT /robin/api/books/${encodeURIComponent(BOOK_ID)}/progress (thousand_sunny/static/book_reader.js:1165)"}, "properties": {"repobilityId": "c9549c9c233bede1", "scanner": "scanner-primary", "fingerprint": "87c278a2bfb82254", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-93af304b1ba73a85", "level": "error", "message": {"text": "Dangling fetch: GET /robin/api/books/${encodeURIComponent(BOOK_ID)}/progress (thousand_sunny/static/book_reader.js:1267)"}, "properties": {"repobilityId": "cb7d15f8c1a413a0", "scanner": "scanner-primary", "fingerprint": "93af304b1ba73a85", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-69176fac800f8bb5", "level": "error", "message": {"text": "Dangling fetch: GET /robin/api/books/${encodeURIComponent(BOOK_ID)}/file?lang=bilingual (thousand_sunny/static/book_reader.js:1653)"}, "properties": {"repobilityId": "ed327556b9ee95f8", "scanner": "scanner-primary", "fingerprint": "69176fac800f8bb5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5ac74200cdf57d78", "level": "error", "message": {"text": "Dangling fetch: GET /foundry/${episodeId}/status (thousand_sunny/static/foundry/foundry.js:47)"}, "properties": {"repobilityId": "d30f1df7d718fdd0", "scanner": "scanner-primary", "fingerprint": "5ac74200cdf57d78", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1ef03194927a5485", "level": "error", "message": {"text": "Dangling fetch: POST /api/projects/${slug}/synthesize (thousand_sunny/static/projects/review.js:183)"}, "properties": {"repobilityId": "9a1ed5e541bbe7e4", "scanner": "scanner-primary", "fingerprint": "1ef03194927a5485", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-957d74c292d89a28", "level": "error", "message": {"text": "Dangling fetch: POST /api/projects/${slug}/synthesize (thousand_sunny/static/projects/review.js:242)"}, "properties": {"repobilityId": "fb050b03c5480754", "scanner": "scanner-primary", "fingerprint": "957d74c292d89a28", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e830925be14866cf", "level": "error", "message": {"text": "Dangling fetch: POST /robin/watchlist/${encodeURIComponent(videoId)}/annotation (thousand_sunny/static/shosho/av-reader.js:380)"}, "properties": {"repobilityId": "bae0937c9f8923c3", "scanner": "scanner-primary", "fingerprint": "e830925be14866cf", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e7720266acc900cc", "level": "error", "message": {"text": "Dangling fetch: DELETE /robin/watchlist/${encodeURIComponent(videoId)}/annotation?cue_start=${encodeURIComponent(cue.start)} (thousand_sunny/static/shosho/av-reader.js:476)"}, "properties": {"repobilityId": "3df4268b945697f8", "scanner": "scanner-primary", "fingerprint": "e7720266acc900cc", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5baa8971ebe192a1", "level": "note", "message": {"text": "Unused endpoint: GET /"}, "properties": {"repobilityId": "5a5d0b82e67f41aa", "scanner": "scanner-primary", "fingerprint": "5baa8971ebe192a1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a8ae36cd5eae9d9e", "level": "note", "message": {"text": "Unused endpoint: GET /{slug}/synthesize"}, "properties": {"repobilityId": "e89727cbe47185d3", "scanner": "scanner-primary", "fingerprint": "a8ae36cd5eae9d9e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-11fbd9bb04488df1", "level": "note", "message": {"text": "Unused endpoint: POST /{slug}/synthesize"}, "properties": {"repobilityId": "e5cb937a7f01ce6b", "scanner": "scanner-primary", "fingerprint": "11fbd9bb04488df1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7801d9baf2250c19", "level": "note", "message": {"text": "Unused endpoint: GET /projects/{slug}"}, "properties": {"repobilityId": "21896c13cd781ecc", "scanner": "scanner-primary", "fingerprint": "7801d9baf2250c19", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-85f87a270d7acaee", "level": "note", "message": {"text": "Unused endpoint: GET /brook/projects/{slug}"}, "properties": {"repobilityId": "83b56f609227c134", "scanner": "scanner-primary", "fingerprint": "85f87a270d7acaee", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-bbb45bd1a39c2291", "level": "note", "message": {"text": "Unused endpoint: GET /{episode_id}"}, "properties": {"repobilityId": "93e7a7cdc68c6460", "scanner": "scanner-primary", "fingerprint": "bbb45bd1a39c2291", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-17536ba9403055f8", "level": "note", "message": {"text": "Unused endpoint: GET /{episode_id}/status"}, "properties": {"repobilityId": "7ffed0fcb1885a5c", "scanner": "scanner-primary", "fingerprint": "17536ba9403055f8", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-25fe9d2d4fcf2788", "level": "note", "message": {"text": "Unused endpoint: POST /{episode_id}/beat/{beat_id}/approve"}, "properties": {"repobilityId": "078ebf14327062f0", "scanner": "scanner-primary", "fingerprint": "25fe9d2d4fcf2788", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-31a38ef14920cc4e", "level": "note", "message": {"text": "Unused endpoint: POST /{episode_id}/beat/{beat_id}/edit"}, "properties": {"repobilityId": "32742a89210ff3d5", "scanner": "scanner-primary", "fingerprint": "31a38ef14920cc4e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-0712426a5c9ea8c1", "level": "note", "message": {"text": "Unused endpoint: POST /{episode_id}/beat/{beat_id}/replan"}, "properties": {"repobilityId": "f27eea01381e06ff", "scanner": "scanner-primary", "fingerprint": "0712426a5c9ea8c1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6b3cde03ce624a1f", "level": "note", "message": {"text": "Unused endpoint: POST /{episode_id}/beat/{beat_id}/visual/approve"}, "properties": {"repobilityId": "5f3efb259b9cd94d", "scanner": "scanner-primary", "fingerprint": "6b3cde03ce624a1f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f8bb356d78106dd8", "level": "note", "message": {"text": "Unused endpoint: POST /{episode_id}/beat/{beat_id}/visual/edit"}, "properties": {"repobilityId": "4a395ce14c31a1b3", "scanner": "scanner-primary", "fingerprint": "f8bb356d78106dd8", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-94d309c15fc884fd", "level": "note", "message": {"text": "Unused endpoint: POST /{episode_id}/beat/{beat_id}/visual/replan"}, "properties": {"repobilityId": "c8297796fffe382e", "scanner": "scanner-primary", "fingerprint": "94d309c15fc884fd", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b2a44b64dd84abcf", "level": "note", "message": {"text": "Unused endpoint: POST /{episode_id}/batch/approve-all-text"}, "properties": {"repobilityId": "9fc5ef41ce58823c", "scanner": "scanner-primary", "fingerprint": "b2a44b64dd84abcf", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d6a8d7664780ee37", "level": "note", "message": {"text": "Unused endpoint: POST /{episode_id}/batch/render-approved"}, "properties": {"repobilityId": "24c1ef4fd0255467", "scanner": "scanner-primary", "fingerprint": "d6a8d7664780ee37", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3e13446b1810990a", "level": "note", "message": {"text": "Unused endpoint: POST /{episode_id}/batch/finalize-passing"}, "properties": {"repobilityId": "3dc2d1c19aa8b29b", "scanner": "scanner-primary", "fingerprint": "3e13446b1810990a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-cb6b7ce40cee86e4", "level": "note", "message": {"text": "Unused endpoint: POST /{episode_id}/edit-log/{entry_idx}/promote"}, "properties": {"repobilityId": "1651df6d982af50a", "scanner": "scanner-primary", "fingerprint": "cb6b7ce40cee86e4", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-39c9b3baaa4e3581", "level": "note", "message": {"text": "Unused endpoint: GET /{source_id_b64}"}, "properties": {"repobilityId": "6c4410bc0f3399c1", "scanner": "scanner-primary", "fingerprint": "39c9b3baaa4e3581", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ceed08ed6dcb3a83", "level": "note", "message": {"text": "Unused endpoint: ANY /centaur_zettel"}, "properties": {"repobilityId": "3552a199447032df", "scanner": "scanner-primary", "fingerprint": "ceed08ed6dcb3a83", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6a4dfcad3eb1618a", "level": "note", "message": {"text": "Unused endpoint: GET /login"}, "properties": {"repobilityId": "4a2a8205b054d39a", "scanner": "scanner-primary", "fingerprint": "6a4dfcad3eb1618a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-618721b912bad1c2", "level": "note", "message": {"text": "Unused endpoint: POST /login"}, "properties": {"repobilityId": "093f4e04ef504591", "scanner": "scanner-primary", "fingerprint": "618721b912bad1c2", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-99fc36db98c134ce", "level": "note", "message": {"text": "Unused endpoint: POST /logout"}, "properties": {"repobilityId": "dbda055f79461b69", "scanner": "scanner-primary", "fingerprint": "99fc36db98c134ce", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-4ea23196f32aefc7", "level": "note", "message": {"text": "Unused endpoint: ANY /crew"}, "properties": {"repobilityId": "9a1995f83537c7cd", "scanner": "scanner-primary", "fingerprint": "4ea23196f32aefc7", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c1e1ee09590b0a49", "level": "note", "message": {"text": "Unused endpoint: GET /projects"}, "properties": {"repobilityId": "b0f86940059a8f40", "scanner": "scanner-primary", "fingerprint": "c1e1ee09590b0a49", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f690c297ee9036b3", "level": "note", "message": {"text": "Unused endpoint: GET /projects/new"}, "properties": {"repobilityId": "a2feb5088956e1c8", "scanner": "scanner-primary", "fingerprint": "f690c297ee9036b3", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-58666816ba500374", "level": "note", "message": {"text": "Unused endpoint: POST /projects"}, "properties": {"repobilityId": "a18c27c92e70566b", "scanner": "scanner-primary", "fingerprint": "58666816ba500374", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a001e69ec496cc65", "level": "note", "message": {"text": "Unused endpoint: POST /projects/{slug}/frontmatter"}, "properties": {"repobilityId": "e6b02cf9a221afb8", "scanner": "scanner-primary", "fingerprint": "a001e69ec496cc65", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c8c4686872f4b8cb", "level": "note", "message": {"text": "Unused endpoint: POST /projects/{slug}/section/{section_slug}"}, "properties": {"repobilityId": "2633811cc592ee0a", "scanner": "scanner-primary", "fingerprint": "c8c4686872f4b8cb", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d98ccb67e3d414a0", "level": "note", "message": {"text": "Unused endpoint: POST /projects/{slug}/timer/{action}"}, "properties": {"repobilityId": "f1b3b439fc34a12e", "scanner": "scanner-primary", "fingerprint": "d98ccb67e3d414a0", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-acda37fcdf6cac99", "level": "note", "message": {"text": "Unused endpoint: POST /projects/{slug}/tasks/new"}, "properties": {"repobilityId": "629a8f8795d251e9", "scanner": "scanner-primary", "fingerprint": "acda37fcdf6cac99", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-310f75fab5ea2856", "level": "note", "message": {"text": "Unused endpoint: POST /projects/{slug}/tasks/{task_name}/status"}, "properties": {"repobilityId": "eb60de9dc1ce8e97", "scanner": "scanner-primary", "fingerprint": "310f75fab5ea2856", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-648b2dbd7af01a0e", "level": "note", "message": {"text": "Unused endpoint: POST /projects/{slug}/tasks/{task_name}/delete"}, "properties": {"repobilityId": "5561ea23af1f1b0f", "scanner": "scanner-primary", "fingerprint": "648b2dbd7af01a0e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-591dd427ce2845a1", "level": "note", "message": {"text": "Unused endpoint: POST /projects/{slug}/tasks/{task_name}/manual-pomodoro"}, "properties": {"repobilityId": "fdf185cb2f4198d0", "scanner": "scanner-primary", "fingerprint": "591dd427ce2845a1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7f8370ad63806220", "level": "note", "message": {"text": "Unused endpoint: POST /projects/{slug}/tasks/{task_name}/manual-pomodoro/undo"}, "properties": {"repobilityId": "ee28bbd608f0f2d6", "scanner": "scanner-primary", "fingerprint": "7f8370ad63806220", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-398d6a1fcdb9540a", "level": "note", "message": {"text": "Unused endpoint: POST /projects/{slug}/review/{persona}"}, "properties": {"repobilityId": "9d45bdca163360c8", "scanner": "scanner-primary", "fingerprint": "398d6a1fcdb9540a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-979d9f4c5e4a188b", "level": "note", "message": {"text": "Unused endpoint: POST /projects/{slug}/research/keyword"}, "properties": {"repobilityId": "13b4ac5b2e628c34", "scanner": "scanner-primary", "fingerprint": "979d9f4c5e4a188b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a5bee9e542e5922b", "level": "note", "message": {"text": "Unused endpoint: POST /projects/{slug}/research/kb"}, "properties": {"repobilityId": "c79c4decd4096f4f", "scanner": "scanner-primary", "fingerprint": "a5bee9e542e5922b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-627b7d0e422af729", "level": "note", "message": {"text": "Unused endpoint: POST /projects/{slug}/research/synthesis"}, "properties": {"repobilityId": "e61f997d7517b8f0", "scanner": "scanner-primary", "fingerprint": "627b7d0e422af729", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-56f887fc1ef2d19f", "level": "note", "message": {"text": "Unused endpoint: POST /projects/{slug}/research/dr-prompt"}, "properties": {"repobilityId": "5ab2a8e3d31804d7", "scanner": "scanner-primary", "fingerprint": "56f887fc1ef2d19f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-88faf3d39a0d50b9", "level": "note", "message": {"text": "Unused endpoint: POST /projects/{slug}/research/dr-report"}, "properties": {"repobilityId": "71e4d561adbf17f4", "scanner": "scanner-primary", "fingerprint": "88faf3d39a0d50b9", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1d32fb626a0e40f6", "level": "note", "message": {"text": "Unused endpoint: GET /franky"}, "properties": {"repobilityId": "596962abe5db9a95", "scanner": "scanner-primary", "fingerprint": "1d32fb626a0e40f6", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d2468b5ee5d372a1", "level": "note", "message": {"text": "Unused endpoint: GET /bridge/models"}, "properties": {"repobilityId": "2f526751e16f4779", "scanner": "scanner-primary", "fingerprint": "d2468b5ee5d372a1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-26697f896d1e4f7c", "level": "note", "message": {"text": "Unused endpoint: POST /bridge/models/set"}, "properties": {"repobilityId": "5aa2aeae24cccdcc", "scanner": "scanner-primary", "fingerprint": "26697f896d1e4f7c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-9ef8ceb06edeba29", "level": "note", "message": {"text": "Unused endpoint: POST /bridge/models/reset"}, "properties": {"repobilityId": "0f33689290b9c634", "scanner": "scanner-primary", "fingerprint": "9ef8ceb06edeba29", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7064547eb23ceaa6", "level": "note", "message": {"text": "Unused endpoint: POST /api/permanent"}, "properties": {"repobilityId": "58ab74b8ab91b4a7", "scanner": "scanner-primary", "fingerprint": "7064547eb23ceaa6", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2f3e274e6978a2df", "level": "note", "message": {"text": "Unused endpoint: POST /api/review/skip"}, "properties": {"repobilityId": "6de5f6caa9124cc9", "scanner": "scanner-primary", "fingerprint": "2f3e274e6978a2df", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c8e1d7c98ef7a933", "level": "note", "message": {"text": "Unused endpoint: POST /api/review/later"}, "properties": {"repobilityId": "2fd15f71bb55b319", "scanner": "scanner-primary", "fingerprint": "c8e1d7c98ef7a933", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-dce6d68d65a5d1e2", "level": "note", "message": {"text": "Unused endpoint: GET /api/moc/members"}, "properties": {"repobilityId": "2755dd312ec951bd", "scanner": "scanner-primary", "fingerprint": "dce6d68d65a5d1e2", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-db47908e267149c3", "level": "note", "message": {"text": "Unused endpoint: GET /api/permanent/peek"}, "properties": {"repobilityId": "13920f844f47721b", "scanner": "scanner-primary", "fingerprint": "db47908e267149c3", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-bc8121c4b0d774a7", "level": "note", "message": {"text": "Unused endpoint: GET /review"}, "properties": {"repobilityId": "3c0100e528010cf2", "scanner": "scanner-primary", "fingerprint": "bc8121c4b0d774a7", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}