{"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-94f6623a1dc6facd", "name": "Possibly dead Python function: rt", "shortDescription": {"text": "Possibly dead Python function: rt"}, "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-8d89b42c4d18fdb7", "name": "Possibly dead Python function: cmd_status", "shortDescription": {"text": "Possibly dead Python function: cmd_status"}, "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-8ebe6c2884b7347e", "name": "Possibly dead Python function: cmd_build_queue", "shortDescription": {"text": "Possibly dead Python function: cmd_build_queue"}, "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-750881709f4dbdc0", "name": "Possibly dead Python function: cmd_review_summary", "shortDescription": {"text": "Possibly dead Python function: cmd_review_summary"}, "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-82dc0052ade64bc2", "name": "Possibly dead Python function: cmd_build_artifacts", "shortDescription": {"text": "Possibly dead Python function: cmd_build_artifacts"}, "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-7a5c0820866b4345", "name": "Possibly dead Python function: cmd_t30_status", "shortDescription": {"text": "Possibly dead Python function: cmd_t30_status"}, "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-3c7d64110bfeda1a", "name": "Possibly dead Python function: cmd_recap_status", "shortDescription": {"text": "Possibly dead Python function: cmd_recap_status"}, "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-f7e38226e7eb30c3", "name": "Possibly dead Python function: cmd_share_refresh", "shortDescription": {"text": "Possibly dead Python function: cmd_share_refresh"}, "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-ee66357c70e2ff6d", "name": "Possibly dead Python function: cmd_close_day", "shortDescription": {"text": "Possibly dead Python function: cmd_close_day"}, "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-6c36b71693705bae", "name": "Possibly dead Python function: num", "shortDescription": {"text": "Possibly dead Python function: num"}, "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-1769d6f22ac5ffe8", "name": "Possibly dead Python function: cmd_scan", "shortDescription": {"text": "Possibly dead Python function: cmd_scan"}, "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-1df83cf74befc399", "name": "Possibly dead Python function: cmd_prematch", "shortDescription": {"text": "Possibly dead Python function: cmd_prematch"}, "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-a6a7fd4d6e624d2a", "name": "Possibly dead Python function: cmd_watch", "shortDescription": {"text": "Possibly dead Python function: cmd_watch"}, "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-6220a73f75bde06e", "name": "Possibly dead Python function: cmd_recap", "shortDescription": {"text": "Possibly dead Python function: cmd_recap"}, "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-17ddb9161c6805df", "name": "Possibly dead Python function: cmd_bundle", "shortDescription": {"text": "Possibly dead Python function: cmd_bundle"}, "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-03f614a9fec48724", "name": "Possibly dead Python function: cmd_queue", "shortDescription": {"text": "Possibly dead Python function: cmd_queue"}, "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-573ed3521ebc2250", "name": "Possibly dead Python function: cmd_status", "shortDescription": {"text": "Possibly dead Python function: cmd_status"}, "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-1589b6008a6541f2", "name": "Possibly dead Python function: ts", "shortDescription": {"text": "Possibly dead Python function: ts"}, "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-bd1a8d9f4f15d5b7", "name": "Possibly dead Python function: asset_exists", "shortDescription": {"text": "Possibly dead Python function: asset_exists"}, "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-1c6e9fc7166a195f", "name": "Possibly dead Python function: sync_lineups", "shortDescription": {"text": "Possibly dead Python function: sync_lineups"}, "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-4f475911c5c4cdd2", "name": "Stray `console.log` in TS/JS \u2014 frontend/src/lib/freshness.selftest.ts:40", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 frontend/src/lib/freshness.selftest.ts:40"}, "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-80dd397b88d5d163", "name": "Insecure pattern 'direct_innerhtml_assignment' in wc-ai-h5.html:512", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in wc-ai-h5.html:512"}, "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-8cd638e22ad04311", "name": "Insecure pattern 'local_storage_auth_token' in frontend/src/pages/GrowthAdminPage.tsx:45", "shortDescription": {"text": "Insecure pattern 'local_storage_auth_token' in frontend/src/pages/GrowthAdminPage.tsx:45"}, "fullDescription": {"text": "Found a known-risky pattern (local_storage_auth_token). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e43ce1ddfeddeb56", "name": "Possible secret in scripts/check_auto_llm_factory.py", "shortDescription": {"text": "Possible secret in scripts/check_auto_llm_factory.py"}, "fullDescription": {"text": "Detected pattern matching openai_or_anthropic_key. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-d8001f432ea2f281", "name": "Insecure pattern 'node_child_process' in scripts/qa/intel_rewrite_shots.mjs:13", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/qa/intel_rewrite_shots.mjs:13"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a220ec246fc7fb9c", "name": "Insecure pattern 'node_child_process' in scripts/qa/mvp2_evidence_board_shots.mjs:13", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/qa/mvp2_evidence_board_shots.mjs:13"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-203f5ac5a527428d", "name": "Insecure pattern 'node_child_process' in scripts/qa/historical_recap_shots.mjs:7", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/qa/historical_recap_shots.mjs:7"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-17945c03cc30ec5b", "name": "Insecure pattern 'node_child_process' in scripts/qa/mvp2_locale_consolidation_shots.mjs:15", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/qa/mvp2_locale_consolidation_shots.mjs:15"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ed6c6929aef93360", "name": "Insecure pattern 'node_child_process' in scripts/qa/mvp2_scout_pack_shots.mjs:16", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/qa/mvp2_scout_pack_shots.mjs:16"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d4acc5f4ba8428d6", "name": "Insecure pattern 'node_child_process' in scripts/qa/lang_interaction_shots.mjs:17", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/qa/lang_interaction_shots.mjs:17"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c8a31e092bf0532a", "name": "Insecure pattern 'node_child_process' in scripts/qa/mvp2_recap_flow_shots.mjs:13", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/qa/mvp2_recap_flow_shots.mjs:13"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6372cebde0220094", "name": "No auth library detected", "shortDescription": {"text": "No auth library detected"}, "fullDescription": {"text": "The scanner did not find any standard auth library (JWT, OAuth, NextAuth, Auth0, etc.). The repo has auth/admin/session surface indicators, so auth may live in custom code, in a separate service, or be missing."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4601e3ad3bb28677", "name": "No CI/CD pipelines detected", "shortDescription": {"text": "No CI/CD pipelines detected"}, "fullDescription": {"text": "No GitHub Actions, GitLab CI, or CircleCI configs found. Without CI you can't gate deploys on tests/lints."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6893a6c8b0861585", "name": "Very low test-to-source ratio", "shortDescription": {"text": "Very low test-to-source ratio"}, "fullDescription": {"text": "1 test file(s) for 222 source file(s) (ratio 0.00). Consider adding integration or unit tests for critical paths."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-141b30a41e03817b", "name": "No license file detected", "shortDescription": {"text": "No license file detected"}, "fullDescription": {"text": "No LICENSE/COPYING/NOTICE file was found. Generated repositories often omit licensing, which blocks reuse and automated intake."}, "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 401 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 205 placeholder/mock markers across 68 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-b9088664ace7f748", "name": "Composite production-readiness gap", "shortDescription": {"text": "Composite production-readiness gap"}, "fullDescription": {"text": "Multiple low-cost hardening controls are missing together: license, ci, tests. Opus verification showed these co-occurring gaps are a better readiness signal than reading each flag in isolation."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-749d4bc1bd66df5f", "name": "Agent instructions exist but release-hardening basics are missing", "shortDescription": {"text": "Agent instructions exist but release-hardening basics are missing"}, "fullDescription": {"text": "AI-coder instruction files were found, but the repo is missing license, ci, tests. Treat this as a contract gap: the agent is guided, but the generated output is not yet guarded by the controls that make it repeatable."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ea8f3013f588db25", "name": "Shallow git history limits provenance confidence", "shortDescription": {"text": "Shallow git history limits provenance confidence"}, "fullDescription": {"text": "The repository is a shallow clone. Origin/evolution analysis cannot distinguish fresh generation, imported legacy code, or long-lived human code with high confidence."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8424db9c75e04ba4", "name": "Very short observed git history", "shortDescription": {"text": "Very short observed git history"}, "fullDescription": {"text": "The repo has multiple source files but two or fewer visible commits. This is not a failure by itself, but it lowers confidence in evolution-based diagnosis."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2c5f98b152cddb6d", "name": "Agent authority lacks a verifier contract: .claude/launch.json", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/launch.json"}, "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-167f2fc105271ad2", "name": "Commented-code block (5 lines) in frontend/src/i18n/viMapping.ts:312", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/i18n/viMapping.ts: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-2ca5109426336053", "name": "Commented-code block (5 lines) in frontend/src/components/EvidenceBoard.tsx:8", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/components/EvidenceBoard.tsx: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-d014bfa632ed6183", "name": "Commented-code block (5 lines) in frontend/src/components/ArtifactTacticalRoom.tsx:7", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/components/ArtifactTacticalRoom.tsx: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-f07229a7bdf9bf2e", "name": "Commented-code block (7 lines) in frontend/src/components/UpcomingTacticalStrip.tsx:10", "shortDescription": {"text": "Commented-code block (7 lines) in frontend/src/components/UpcomingTacticalStrip.tsx:10"}, "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-6605ec34f51dae8a", "name": "Commented-code block (5 lines) in frontend/src/components/ObservationReceipt.tsx:7", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/components/ObservationReceipt.tsx: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-a5150016c737dc3d", "name": "Legacy-named symbol `operator_copy` in frontend/src/components/NarrativeView.tsx:42", "shortDescription": {"text": "Legacy-named symbol `operator_copy` in frontend/src/components/NarrativeView.tsx:42"}, "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-11fdd260fbf8e104", "name": "Legacy-named symbol `operator_copy` in frontend/src/components/ProductProofViews.tsx:134", "shortDescription": {"text": "Legacy-named symbol `operator_copy` in frontend/src/components/ProductProofViews.tsx:134"}, "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-9598e71f48886ff0", "name": "Commented-code block (8 lines) in frontend/src/components/HomeProductLoop.tsx:24", "shortDescription": {"text": "Commented-code block (8 lines) in frontend/src/components/HomeProductLoop.tsx: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-e1bf173aa3226fd6", "name": "Commented-code block (5 lines) in frontend/src/components/MatchDesk.tsx:5", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/components/MatchDesk.tsx: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-b24417bb5a592acf", "name": "Legacy-named symbol `share_copy` in frontend/src/growth/shareTemplates.ts:63", "shortDescription": {"text": "Legacy-named symbol `share_copy` in frontend/src/growth/shareTemplates.ts:63"}, "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-72452e5ca0621395", "name": "Commented-code block (5 lines) in frontend/src/growth/shareTemplates.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/growth/shareTemplates.ts:1"}, "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-fbe14ef7bec32c8b", "name": "Commented-code block (6 lines) in frontend/src/growth/strongCallProjection.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in frontend/src/growth/strongCallProjection.ts:1"}, "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-caf24adbbd2ef16b", "name": "Commented-code block (5 lines) in frontend/src/pages/TrialDetailGate.tsx:4", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/pages/TrialDetailGate.tsx:4"}, "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-2a6f81c7c62e5ca9", "name": "Commented-code block (5 lines) in frontend/src/pages/GrowthAdminPage.tsx:4", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/pages/GrowthAdminPage.tsx:4"}, "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-469b30d144627336", "name": "Legacy-named symbol `cta_copy` in frontend/src/pages/EvidenceBoardPage.tsx:63", "shortDescription": {"text": "Legacy-named symbol `cta_copy` in frontend/src/pages/EvidenceBoardPage.tsx:63"}, "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-d3d4fecdfbc4cfa5", "name": "Legacy-named symbol `cta_copy` in frontend/src/pages/RecapDetailPage.tsx:220", "shortDescription": {"text": "Legacy-named symbol `cta_copy` in frontend/src/pages/RecapDetailPage.tsx: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-2883decd9ea65417", "name": "Commented-code block (5 lines) in frontend/src/pages/RecapDetailPage.tsx:90", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/pages/RecapDetailPage.tsx: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-659b24fe0e0b60d5", "name": "Legacy-named symbol `share_copy` in frontend/src/pages/DailyStatusPage.tsx:101", "shortDescription": {"text": "Legacy-named symbol `share_copy` in frontend/src/pages/DailyStatusPage.tsx: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-d2990cdc919e59a5", "name": "Commented-code block (5 lines) in frontend/src/pages/DailyStatusPage.tsx:63", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/pages/DailyStatusPage.tsx:63"}, "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-b85f82afca174d86", "name": "Legacy-named symbol `share_copy` in scripts/check_daily_content_flow.py:18", "shortDescription": {"text": "Legacy-named symbol `share_copy` in scripts/check_daily_content_flow.py:18"}, "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-feeaf782184ae5a2", "name": "Legacy-named symbol `share_copy` in scripts/check_prediction_artifact.py:182", "shortDescription": {"text": "Legacy-named symbol `share_copy` in scripts/check_prediction_artifact.py:182"}, "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-770320a6f5b40cf9", "name": "Legacy-named symbol `check_growth_copy` in scripts/mvp2_editorial_agent.py:45", "shortDescription": {"text": "Legacy-named symbol `check_growth_copy` in scripts/mvp2_editorial_agent.py:45"}, "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-21f4fc25d2fac1f8", "name": "Legacy-named symbol `share_copy` in scripts/mvp2_build_daily_prediction_artifact.py:46", "shortDescription": {"text": "Legacy-named symbol `share_copy` in scripts/mvp2_build_daily_prediction_artifact.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-2a66212ced026b72", "name": "Network/subprocess call without timeout or try/except \u2014 scripts/mvp2_daily_autorun.py:52", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 scripts/mvp2_daily_autorun.py:52"}, "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-b01bf9cd962ca638", "name": "Legacy-named symbol `qiuge_v2` in scripts/mvp2_generate_product_proof_narratives.py:183", "shortDescription": {"text": "Legacy-named symbol `qiuge_v2` in scripts/mvp2_generate_product_proof_narratives.py:183"}, "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-2c09c2a542a98df6", "name": "Legacy-named symbol `share_copy` in scripts/mvp2_recommendation_closure.py:104", "shortDescription": {"text": "Legacy-named symbol `share_copy` in scripts/mvp2_recommendation_closure.py:104"}, "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-1fe7cde1612a78b5", "name": "Legacy-named symbol `has_copy` in scripts/mvp2_daily_ops.py:181", "shortDescription": {"text": "Legacy-named symbol `has_copy` in scripts/mvp2_daily_ops.py:181"}, "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-c500c94defe11c7d", "name": "Network/subprocess call without timeout or try/except \u2014 scripts/mvp2_daily_ops.py:249", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 scripts/mvp2_daily_ops.py:249"}, "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-53f93191e28e1058", "name": "Legacy-named symbol `share_copy` in scripts/check_llm_copy_attractiveness.py:7", "shortDescription": {"text": "Legacy-named symbol `share_copy` in scripts/check_llm_copy_attractiveness.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-d9b26e19613334ee", "name": "Legacy-named symbol `tientri_v2` in scripts/mvp2_build_rescore_diff.py:179", "shortDescription": {"text": "Legacy-named symbol `tientri_v2` in scripts/mvp2_build_rescore_diff.py:179"}, "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-7d2eef4e7305e2e6", "name": "Legacy-named symbol `group_join_copy` in scripts/check_mvp2_product_narrative_guard.py:13", "shortDescription": {"text": "Legacy-named symbol `group_join_copy` in scripts/check_mvp2_product_narrative_guard.py:13"}, "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-348037c70d0484f6", "name": "Legacy-named symbol `share_copy` in scripts/check_recap_pipeline.py:30", "shortDescription": {"text": "Legacy-named symbol `share_copy` in scripts/check_recap_pipeline.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-6d709b56a053721c", "name": "Legacy-named symbol `check_customer_visible_copy` in scripts/check_customer_visible_copy.py:29", "shortDescription": {"text": "Legacy-named symbol `check_customer_visible_copy` in scripts/check_customer_visible_copy.py:29"}, "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-4d79d96a555d7f4c", "name": "Legacy-named symbol `share_copy` in scripts/check_recap_generation_flow.py:58", "shortDescription": {"text": "Legacy-named symbol `share_copy` in scripts/check_recap_generation_flow.py:58"}, "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-62e05440a19fbd99", "name": "Legacy-named symbol `share_copy` in scripts/check_auto_llm_factory.py:20", "shortDescription": {"text": "Legacy-named symbol `share_copy` in scripts/check_auto_llm_factory.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-347a092e87054551", "name": "Legacy-named symbol `share_copy` in scripts/check_llm_copy_quality.py:13", "shortDescription": {"text": "Legacy-named symbol `share_copy` in scripts/check_llm_copy_quality.py:13"}, "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-6d49a1dd2d2ae318", "name": "Legacy-named symbol `tientri_v2` in scripts/mvp2_generate_trial_prediction_narratives.py:110", "shortDescription": {"text": "Legacy-named symbol `tientri_v2` in scripts/mvp2_generate_trial_prediction_narratives.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-01b7291067dcbcc0", "name": "Legacy-named symbol `operator_copy` in scripts/mvp2_ops.py:173", "shortDescription": {"text": "Legacy-named symbol `operator_copy` in scripts/mvp2_ops.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-4790c241c6c622ab", "name": "Legacy-named symbol `operator_copy` in scripts/mvp2_generate_scoutscore_narrative.py:201", "shortDescription": {"text": "Legacy-named symbol `operator_copy` in scripts/mvp2_generate_scoutscore_narrative.py:201"}, "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-e4a364a16172aa73", "name": "Legacy-named symbol `check_customer_visible_copy` in scripts/check_fixture_freshness.py:9", "shortDescription": {"text": "Legacy-named symbol `check_customer_visible_copy` in scripts/check_fixture_freshness.py:9"}, "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-a5dae48f3c746088", "name": "Legacy-named symbol `share_copy` in scripts/mvp2_autogen_prediction_draft.py:43", "shortDescription": {"text": "Legacy-named symbol `share_copy` in scripts/mvp2_autogen_prediction_draft.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-4078207b9e905030", "name": "Legacy-named symbol `check_customer_visible_copy` in scripts/check_homepage_product_loop.py:8", "shortDescription": {"text": "Legacy-named symbol `check_customer_visible_copy` in scripts/check_homepage_product_loop.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-d13cb0c7e2012938", "name": "Legacy-named symbol `share_copy` in scripts/check_daily_readiness.py:16", "shortDescription": {"text": "Legacy-named symbol `share_copy` in scripts/check_daily_readiness.py:16"}, "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-a29f11c8de0c6906", "name": "Legacy-named symbol `free_copy` in scripts/mvp2_generate_rescore_models.py:8", "shortDescription": {"text": "Legacy-named symbol `free_copy` in scripts/mvp2_generate_rescore_models.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-759baef844ac40e7", "name": "Legacy-named symbol `check_growth_copy` in scripts/check_growth_copy.py:44", "shortDescription": {"text": "Legacy-named symbol `check_growth_copy` in scripts/check_growth_copy.py:44"}, "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-58b9bc7a4dd95718", "name": "Commented-code block (5 lines) in scripts/check_growth_copy.py:48", "shortDescription": {"text": "Commented-code block (5 lines) in scripts/check_growth_copy.py:48"}, "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-2812c31d2571feb6", "name": "Legacy-named symbol `operator_copy` in scripts/check_mvp2_llm_narrative_guard.py:30", "shortDescription": {"text": "Legacy-named symbol `operator_copy` in scripts/check_mvp2_llm_narrative_guard.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-e46c64ba7628dff5", "name": "Legacy-named symbol `mvp2_evidence_board_v2` in scripts/qa/mvp2_evidence_board_shots.mjs:11", "shortDescription": {"text": "Legacy-named symbol `mvp2_evidence_board_v2` in scripts/qa/mvp2_evidence_board_shots.mjs:11"}, "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-f86796efd6699462", "name": "Commented-code block (5 lines) in scripts/qa/mvp2_evidence_board_shots.mjs:21", "shortDescription": {"text": "Commented-code block (5 lines) in scripts/qa/mvp2_evidence_board_shots.mjs:21"}, "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-3e9aaea006ad3a11", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/qa/historical_recap_shots.mjs:17", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/qa/historical_recap_shots.mjs:17"}, "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-30fd717e62b2b145", "name": "Legacy-named symbol `operator_recap_copy` in backend/app/services/scoutscore/accountability.py:212", "shortDescription": {"text": "Legacy-named symbol `operator_recap_copy` in backend/app/services/scoutscore/accountability.py:212"}, "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-37811a371f90b78b", "name": "Legacy-named symbol `operator_recap_copy` in backend/app/services/scoutscore/recap_view.py:55", "shortDescription": {"text": "Legacy-named symbol `operator_recap_copy` in backend/app/services/scoutscore/recap_view.py:55"}, "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-26dd0f1b070dc390", "name": "Network/subprocess call without timeout or try/except \u2014 backend/app/services/data_sources/api_football.py:65", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 backend/app/services/data_sources/api_football.py:65"}, "fullDescription": {"text": "`requests.get(...)` 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-02e11d4e2de9466c", "name": "Legacy-named symbol `generate_copy` in backend/app/services/llm/copy_service.py:102", "shortDescription": {"text": "Legacy-named symbol `generate_copy` in backend/app/services/llm/copy_service.py:102"}, "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-d5f7f852100868df", "name": "Legacy-named symbol `operator_recap_copy` in backend/app/routers/internal_scout_pack.py:655", "shortDescription": {"text": "Legacy-named symbol `operator_recap_copy` in backend/app/routers/internal_scout_pack.py:655"}, "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-71c4753c07858e7d", "name": "Legacy-named symbol `generate_copy` in backend/app/routers/llm.py:42", "shortDescription": {"text": "Legacy-named symbol `generate_copy` in backend/app/routers/llm.py:42"}, "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-b334d875f2339fa1", "name": "5 env vars used in code but missing from .env.example", "shortDescription": {"text": "5 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `LLM_VERIFY_OUT`, `SHOT_SUFFIX`, `VITE_GROUP_LINK_MY`, `VITE_GROUP_LINK_VI`, `VITE_GROUP_LINK_ZH`. 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-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:\nscripts/check_daily_content_flow.py:main, scripts/check_llm_grounding.py:main\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-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:\nscripts/check_internal_daily_command_center.py:main, scripts/check_operator_console.py:main, scripts/check_critical_ops_view.py:main\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-d8cf4ba94697c056", "name": "Frontend route `join` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `join` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ef4b6b404b391b9e", "name": "Frontend route `internal/growth` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `internal/growth` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c441bb9eb47bf013", "name": "Frontend route `internal/daily` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `internal/daily` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6fc7e9b573a57647", "name": "Frontend route `share/fixture/:fixtureId` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `share/fixture/:fixtureId` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9d73e653a9b47069", "name": "Frontend route `share/recap/:fixtureId` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `share/recap/:fixtureId` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-491bdafbb13abb72", "name": "Frontend route `detail` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `detail` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b14e1b5d4af6d8e4", "name": "Frontend route `report` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `report` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e1d8b53b74a24cf6", "name": "Frontend route `token` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `token` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-01164d2ea34c9c6f", "name": "Frontend route `community` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `community` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-adb5050adbfc8324", "name": "Frontend route `recap/:fixtureId` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `recap/:fixtureId` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d946398e863dbf24", "name": "Frontend route `evidence/:fixtureId` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `evidence/:fixtureId` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9dc1cd52931d6a75", "name": "Frontend route `predict/:slug` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `predict/:slug` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a474b3d3e01cc28b", "name": "FastAPI POST `track_event` without auth dependency \u2014 backend/app/routers/social.py:33", "shortDescription": {"text": "FastAPI POST `track_event` without auth dependency \u2014 backend/app/routers/social.py:33"}, "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-a1fcbc22ac6dd7bf", "name": "FastAPI POST `checkin` without auth dependency \u2014 backend/app/routers/tokens.py:27", "shortDescription": {"text": "FastAPI POST `checkin` without auth dependency \u2014 backend/app/routers/tokens.py:27"}, "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-5a61c6fb356be23d", "name": "FastAPI POST `unlock_report` without auth dependency \u2014 backend/app/routers/tokens.py:36", "shortDescription": {"text": "FastAPI POST `unlock_report` without auth dependency \u2014 backend/app/routers/tokens.py:36"}, "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-ce0589dd0498585e", "name": "FastAPI POST `simulate_correction` without auth dependency \u2014 backend/app/routers/tokens.py:48", "shortDescription": {"text": "FastAPI POST `simulate_correction` without auth dependency \u2014 backend/app/routers/tokens.py:48"}, "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-f0f1b3c5c996b02d", "name": "FastAPI POST `join_challenge` without auth dependency \u2014 backend/app/routers/tokens.py:60", "shortDescription": {"text": "FastAPI POST `join_challenge` without auth dependency \u2014 backend/app/routers/tokens.py:60"}, "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-1c1bf7ffabbe7832", "name": "FastAPI POST `subscribe` without auth dependency \u2014 backend/app/routers/tokens.py:76", "shortDescription": {"text": "FastAPI POST `subscribe` without auth dependency \u2014 backend/app/routers/tokens.py:76"}, "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-f4a74f0b80965f09", "name": "FastAPI POST `track_click` without auth dependency \u2014 backend/app/routers/growth.py:59", "shortDescription": {"text": "FastAPI POST `track_click` without auth dependency \u2014 backend/app/routers/growth.py:59"}, "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-d1667fc502e404d2", "name": "FastAPI POST `join_intent` without auth dependency \u2014 backend/app/routers/growth.py:67", "shortDescription": {"text": "FastAPI POST `join_intent` without auth dependency \u2014 backend/app/routers/growth.py:67"}, "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-c5b6783a95579a02", "name": "FastAPI POST `upload_daily_fixtures` without auth dependency \u2014 backend/app/routers/daily_fixtures.py:47", "shortDescription": {"text": "FastAPI POST `upload_daily_fixtures` without auth dependency \u2014 backend/app/routers/daily_fixtures.py:47"}, "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-d0c1dd6cc2f5a152", "name": "FastAPI POST `refresh_daily_fixtures` without auth dependency \u2014 backend/app/routers/daily_fixtures.py:54", "shortDescription": {"text": "FastAPI POST `refresh_daily_fixtures` without auth dependency \u2014 backend/app/routers/daily_fixtures.py:54"}, "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-8c36d505fc2ce638", "name": "FastAPI POST `refresh_match` without auth dependency \u2014 backend/app/routers/matches.py:47", "shortDescription": {"text": "FastAPI POST `refresh_match` without auth dependency \u2014 backend/app/routers/matches.py:47"}, "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-617ac53cc33f48ea", "name": "Dangling fetch: GET http://localhost:${PORT}/json/version (scripts/qa/intel_rewrite_shots.mjs:30)", "shortDescription": {"text": "Dangling fetch: GET http://localhost:${PORT}/json/version (scripts/qa/intel_rewrite_shots.mjs:30)"}, "fullDescription": {"text": "`scripts/qa/intel_rewrite_shots.mjs:30` calls `GET http://localhost:${PORT}/json/version` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost:/<p>/json/version`\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-c5863918ec8df944", "name": "Dangling fetch: GET http://localhost:${PORT}/json/version (scripts/qa/mvp2_evidence_board_shots.mjs:41)", "shortDescription": {"text": "Dangling fetch: GET http://localhost:${PORT}/json/version (scripts/qa/mvp2_evidence_board_shots.mjs:41)"}, "fullDescription": {"text": "`scripts/qa/mvp2_evidence_board_shots.mjs:41` calls `GET http://localhost:${PORT}/json/version` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost:/<p>/json/version`\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-e634cd577bab77ad", "name": "Dangling fetch: GET http://localhost:${PORT}/json/version (scripts/qa/historical_recap_shots.mjs:17)", "shortDescription": {"text": "Dangling fetch: GET http://localhost:${PORT}/json/version (scripts/qa/historical_recap_shots.mjs:17)"}, "fullDescription": {"text": "`scripts/qa/historical_recap_shots.mjs:17` calls `GET http://localhost:${PORT}/json/version` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost:/<p>/json/version`\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-d0fb1b6009f1f18b", "name": "Dangling fetch: GET http://localhost:${PORT}/json/version (scripts/qa/mvp2_locale_consolidation_shots.mjs:47)", "shortDescription": {"text": "Dangling fetch: GET http://localhost:${PORT}/json/version (scripts/qa/mvp2_locale_consolidation_shots.mjs:47)"}, "fullDescription": {"text": "`scripts/qa/mvp2_locale_consolidation_shots.mjs:47` calls `GET http://localhost:${PORT}/json/version` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost:/<p>/json/version`\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-456ca404af7165ba", "name": "Dangling fetch: GET http://localhost:${PORT}/json/version (scripts/qa/mvp2_scout_pack_shots.mjs:36)", "shortDescription": {"text": "Dangling fetch: GET http://localhost:${PORT}/json/version (scripts/qa/mvp2_scout_pack_shots.mjs:36)"}, "fullDescription": {"text": "`scripts/qa/mvp2_scout_pack_shots.mjs:36` calls `GET http://localhost:${PORT}/json/version` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost:/<p>/json/version`\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-2e934c07079ad9d6", "name": "Dangling fetch: GET http://localhost:${PORT}/json/version (scripts/qa/lang_interaction_shots.mjs:35)", "shortDescription": {"text": "Dangling fetch: GET http://localhost:${PORT}/json/version (scripts/qa/lang_interaction_shots.mjs:35)"}, "fullDescription": {"text": "`scripts/qa/lang_interaction_shots.mjs:35` calls `GET http://localhost:${PORT}/json/version` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost:/<p>/json/version`\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-ae206c37fc33639b", "name": "Dangling fetch: GET http://localhost:${PORT}/json/version (scripts/qa/mvp2_recap_flow_shots.mjs:38)", "shortDescription": {"text": "Dangling fetch: GET http://localhost:${PORT}/json/version (scripts/qa/mvp2_recap_flow_shots.mjs:38)"}, "fullDescription": {"text": "`scripts/qa/mvp2_recap_flow_shots.mjs:38` calls `GET http://localhost:${PORT}/json/version` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost:/<p>/json/version`\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-400d86888d866dea", "name": "Dangling fetch: GET /api/v1/matches (frontend/src/api/client.ts:68)", "shortDescription": {"text": "Dangling fetch: GET /api/v1/matches (frontend/src/api/client.ts:68)"}, "fullDescription": {"text": "`frontend/src/api/client.ts:68` calls `GET /api/v1/matches` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/v1/matches`\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-8dae18fb0dbb312d", "name": "Dangling fetch: GET /api/v1/matches/${id} (frontend/src/api/client.ts:69)", "shortDescription": {"text": "Dangling fetch: GET /api/v1/matches/${id} (frontend/src/api/client.ts:69)"}, "fullDescription": {"text": "`frontend/src/api/client.ts:69` calls `GET /api/v1/matches/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/v1/matches/<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-3a140858f7f1075f", "name": "Dangling fetch: GET /api/v1/reports/${id} (frontend/src/api/client.ts:70)", "shortDescription": {"text": "Dangling fetch: GET /api/v1/reports/${id} (frontend/src/api/client.ts:70)"}, "fullDescription": {"text": "`frontend/src/api/client.ts:70` calls `GET /api/v1/reports/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/v1/reports/<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-f1bcb85bfb5d38e6", "name": "Dangling fetch: GET /api/v1/recap/${fixtureId}?lang=${lang} (frontend/src/api/client.ts:71)", "shortDescription": {"text": "Dangling fetch: GET /api/v1/recap/${fixtureId}?lang=${lang} (frontend/src/api/client.ts:71)"}, "fullDescription": {"text": "`frontend/src/api/client.ts:71` calls `GET /api/v1/recap/${fixtureId}?lang=${lang}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/v1/recap/<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-9773d325a37446b9", "name": "Dangling fetch: GET /api/v1/tokens/wallet/${userId} (frontend/src/api/client.ts:73)", "shortDescription": {"text": "Dangling fetch: GET /api/v1/tokens/wallet/${userId} (frontend/src/api/client.ts:73)"}, "fullDescription": {"text": "`frontend/src/api/client.ts:73` calls `GET /api/v1/tokens/wallet/${userId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/v1/tokens/wallet/<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-be744bd04ccb0c3e", "name": "Dangling fetch: POST /api/v1/tokens/checkin (frontend/src/api/client.ts:74)", "shortDescription": {"text": "Dangling fetch: POST /api/v1/tokens/checkin (frontend/src/api/client.ts:74)"}, "fullDescription": {"text": "`frontend/src/api/client.ts:74` calls `POST /api/v1/tokens/checkin` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/v1/tokens/checkin`\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-431a9dd1c4281313", "name": "Dangling fetch: POST /api/v1/tokens/unlock-report (frontend/src/api/client.ts:75)", "shortDescription": {"text": "Dangling fetch: POST /api/v1/tokens/unlock-report (frontend/src/api/client.ts:75)"}, "fullDescription": {"text": "`frontend/src/api/client.ts:75` calls `POST /api/v1/tokens/unlock-report` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/v1/tokens/unlock-report`\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-d6aea2f5919a4cbc", "name": "Dangling fetch: POST /api/v1/corrections/${matchId}/simulate (frontend/src/api/client.ts:77)", "shortDescription": {"text": "Dangling fetch: POST /api/v1/corrections/${matchId}/simulate (frontend/src/api/client.ts:77)"}, "fullDescription": {"text": "`frontend/src/api/client.ts:77` calls `POST /api/v1/corrections/${matchId}/simulate` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/v1/corrections/<p>/simulate`\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-de65fc153cbb1a0b", "name": "Dangling fetch: POST /api/v1/challenges/${challengeId}/join (frontend/src/api/client.ts:78)", "shortDescription": {"text": "Dangling fetch: POST /api/v1/challenges/${challengeId}/join (frontend/src/api/client.ts:78)"}, "fullDescription": {"text": "`frontend/src/api/client.ts:78` calls `POST /api/v1/challenges/${challengeId}/join` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/v1/challenges/<p>/join`\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-7955711d4066a49d", "name": "Dangling fetch: POST /api/v1/community/subscribe (frontend/src/api/client.ts:79)", "shortDescription": {"text": "Dangling fetch: POST /api/v1/community/subscribe (frontend/src/api/client.ts:79)"}, "fullDescription": {"text": "`frontend/src/api/client.ts:79` calls `POST /api/v1/community/subscribe` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/v1/community/subscribe`\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-085de746d290048c", "name": "Dangling fetch: GET /api/v1/assets/status (frontend/src/api/client.ts:82)", "shortDescription": {"text": "Dangling fetch: GET /api/v1/assets/status (frontend/src/api/client.ts:82)"}, "fullDescription": {"text": "`frontend/src/api/client.ts:82` calls `GET /api/v1/assets/status` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/v1/assets/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-685d1642a6d7a9c7", "name": "Dangling fetch: GET /api/v1/social/channels (frontend/src/api/client.ts:85)", "shortDescription": {"text": "Dangling fetch: GET /api/v1/social/channels (frontend/src/api/client.ts:85)"}, "fullDescription": {"text": "`frontend/src/api/client.ts:85` calls `GET /api/v1/social/channels` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/v1/social/channels`\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-e1f4dc7c33a1e61e", "name": "Dangling fetch: GET /api/v1/community/heat (frontend/src/api/client.ts:86)", "shortDescription": {"text": "Dangling fetch: GET /api/v1/community/heat (frontend/src/api/client.ts:86)"}, "fullDescription": {"text": "`frontend/src/api/client.ts:86` calls `GET /api/v1/community/heat` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/v1/community/heat`\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-acade6f015a9086f", "name": "Dangling fetch: GET /api/v1/users/${userId}/streak (frontend/src/api/client.ts:87)", "shortDescription": {"text": "Dangling fetch: GET /api/v1/users/${userId}/streak (frontend/src/api/client.ts:87)"}, "fullDescription": {"text": "`frontend/src/api/client.ts:87` calls `GET /api/v1/users/${userId}/streak` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/v1/users/<p>/streak`\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-620937a3d03cd27d", "name": "Dangling fetch: GET /api/v1/rankings (frontend/src/api/client.ts:88)", "shortDescription": {"text": "Dangling fetch: GET /api/v1/rankings (frontend/src/api/client.ts:88)"}, "fullDescription": {"text": "`frontend/src/api/client.ts:88` calls `GET /api/v1/rankings` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/v1/rankings`\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-982d0b56c3409643", "name": "Dangling fetch: POST /api/v1/events/track (frontend/src/api/client.ts:90)", "shortDescription": {"text": "Dangling fetch: POST /api/v1/events/track (frontend/src/api/client.ts:90)"}, "fullDescription": {"text": "`frontend/src/api/client.ts:90` calls `POST /api/v1/events/track` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/v1/events/track`\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": "`backend/app/main.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-d9589236551f1156", "name": "Unused endpoint: GET /scout-pack", "shortDescription": {"text": "Unused endpoint: GET /scout-pack"}, "fullDescription": {"text": "`backend/app/routers/internal_scout_pack.py` declares `GET /scout-pack` 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-a436691337284d03", "name": "Unused endpoint: GET /api/v1/health", "shortDescription": {"text": "Unused endpoint: GET /api/v1/health"}, "fullDescription": {"text": "`backend/app/routers/health.py` declares `GET /api/v1/health` 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-b609bed0fa392346", "name": "Unused endpoint: GET /api/v1/health/data-source", "shortDescription": {"text": "Unused endpoint: GET /api/v1/health/data-source"}, "fullDescription": {"text": "`backend/app/routers/health.py` declares `GET /api/v1/health/data-source` 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-c2f7e3b713cf197a", "name": "Unused endpoint: GET /users/{user_id}/streak", "shortDescription": {"text": "Unused endpoint: GET /users/{user_id}/streak"}, "fullDescription": {"text": "`backend/app/routers/rankings.py` declares `GET /users/{user_id}/streak` 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-e738ffd9fc26accf", "name": "Unused endpoint: GET /rankings", "shortDescription": {"text": "Unused endpoint: GET /rankings"}, "fullDescription": {"text": "`backend/app/routers/rankings.py` declares `GET /rankings` 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-2c70cd16d09c56ef", "name": "Unused endpoint: POST /admin/challenges/settle", "shortDescription": {"text": "Unused endpoint: POST /admin/challenges/settle"}, "fullDescription": {"text": "`backend/app/routers/rankings.py` declares `POST /admin/challenges/settle` 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-01d44ef6a9019d04", "name": "Unused endpoint: GET /assets/status", "shortDescription": {"text": "Unused endpoint: GET /assets/status"}, "fullDescription": {"text": "`backend/app/routers/assets.py` declares `GET /assets/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-0039828ce11ad937", "name": "Unused endpoint: POST /admin/assets/upload", "shortDescription": {"text": "Unused endpoint: POST /admin/assets/upload"}, "fullDescription": {"text": "`backend/app/routers/assets.py` declares `POST /admin/assets/upload` 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-7aa39f714cc9854e", "name": "Unused endpoint: GET /assets/{asset_id}", "shortDescription": {"text": "Unused endpoint: GET /assets/{asset_id}"}, "fullDescription": {"text": "`backend/app/routers/assets.py` declares `GET /assets/{asset_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-417c15146c960192", "name": "Unused endpoint: DELETE /admin/assets/{asset_id}", "shortDescription": {"text": "Unused endpoint: DELETE /admin/assets/{asset_id}"}, "fullDescription": {"text": "`backend/app/routers/assets.py` declares `DELETE /admin/assets/{asset_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-e4674a8047d8a1a7", "name": "Unused endpoint: GET /data-source/status", "shortDescription": {"text": "Unused endpoint: GET /data-source/status"}, "fullDescription": {"text": "`backend/app/routers/data_source.py` declares `GET /data-source/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-5d02a1a85451051f", "name": "Unused endpoint: GET /performance/daily", "shortDescription": {"text": "Unused endpoint: GET /performance/daily"}, "fullDescription": {"text": "`backend/app/routers/performance.py` declares `GET /performance/daily` 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-48a0659fa61cd052", "name": "Unused endpoint: GET /performance/summary", "shortDescription": {"text": "Unused endpoint: GET /performance/summary"}, "fullDescription": {"text": "`backend/app/routers/performance.py` declares `GET /performance/summary` 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-0d42733030608f96", "name": "Unused endpoint: GET /social/channels", "shortDescription": {"text": "Unused endpoint: GET /social/channels"}, "fullDescription": {"text": "`backend/app/routers/social.py` declares `GET /social/channels` 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-41e91e49b4e58946", "name": "Unused endpoint: POST /admin/social/channels/upsert", "shortDescription": {"text": "Unused endpoint: POST /admin/social/channels/upsert"}, "fullDescription": {"text": "`backend/app/routers/social.py` declares `POST /admin/social/channels/upsert` 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-5d9be324e6d4cba7", "name": "Unused endpoint: POST /events/track", "shortDescription": {"text": "Unused endpoint: POST /events/track"}, "fullDescription": {"text": "`backend/app/routers/social.py` declares `POST /events/track` 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-d38b0c45098a7d87", "name": "Unused endpoint: GET /community/heat", "shortDescription": {"text": "Unused endpoint: GET /community/heat"}, "fullDescription": {"text": "`backend/app/routers/social.py` declares `GET /community/heat` 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-5b036cfabdae267d", "name": "Unused endpoint: POST /generate-copy", "shortDescription": {"text": "Unused endpoint: POST /generate-copy"}, "fullDescription": {"text": "`backend/app/routers/llm.py` declares `POST /generate-copy` 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-b5fd07c8776b6862", "name": "Unused endpoint: GET /recap/{fixture_id}", "shortDescription": {"text": "Unused endpoint: GET /recap/{fixture_id}"}, "fullDescription": {"text": "`backend/app/routers/recap.py` declares `GET /recap/{fixture_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-166c1584c9b8e94b", "name": "Unused endpoint: POST /sync/fixtures", "shortDescription": {"text": "Unused endpoint: POST /sync/fixtures"}, "fullDescription": {"text": "`backend/app/routers/admin.py` declares `POST /sync/fixtures` 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-9b53ddb091c9f07f", "name": "Unused endpoint: POST /sync/results", "shortDescription": {"text": "Unused endpoint: POST /sync/results"}, "fullDescription": {"text": "`backend/app/routers/admin.py` declares `POST /sync/results` 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-90ccf256ae3c6310", "name": "Unused endpoint: GET /tokens/wallet/{user_id}", "shortDescription": {"text": "Unused endpoint: GET /tokens/wallet/{user_id}"}, "fullDescription": {"text": "`backend/app/routers/tokens.py` declares `GET /tokens/wallet/{user_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-2f3f20e6b8b08fcb", "name": "Unused endpoint: POST /tokens/checkin", "shortDescription": {"text": "Unused endpoint: POST /tokens/checkin"}, "fullDescription": {"text": "`backend/app/routers/tokens.py` declares `POST /tokens/checkin` 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-be8b5d06c7bdab12", "name": "Unused endpoint: POST /tokens/unlock-report", "shortDescription": {"text": "Unused endpoint: POST /tokens/unlock-report"}, "fullDescription": {"text": "`backend/app/routers/tokens.py` declares `POST /tokens/unlock-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-fb7010db9e247dcc", "name": "Unused endpoint: POST /corrections/{match_id}/simulate", "shortDescription": {"text": "Unused endpoint: POST /corrections/{match_id}/simulate"}, "fullDescription": {"text": "`backend/app/routers/tokens.py` declares `POST /corrections/{match_id}/simulate` 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-1bad048227a4ad82", "name": "Unused endpoint: POST /challenges/{challenge_id}/join", "shortDescription": {"text": "Unused endpoint: POST /challenges/{challenge_id}/join"}, "fullDescription": {"text": "`backend/app/routers/tokens.py` declares `POST /challenges/{challenge_id}/join` 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-a4b69b1c5e547fe6", "name": "Unused endpoint: POST /community/subscribe", "shortDescription": {"text": "Unused endpoint: POST /community/subscribe"}, "fullDescription": {"text": "`backend/app/routers/tokens.py` declares `POST /community/subscribe` 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-09e75e7e4adfd9c0", "name": "Unused endpoint: POST /click", "shortDescription": {"text": "Unused endpoint: POST /click"}, "fullDescription": {"text": "`backend/app/routers/growth.py` declares `POST /click` 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-bdca846e5d697a0b", "name": "Unused endpoint: POST /join-intent", "shortDescription": {"text": "Unused endpoint: POST /join-intent"}, "fullDescription": {"text": "`backend/app/routers/growth.py` declares `POST /join-intent` 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-4eb75f799cc0b0d7", "name": "Unused endpoint: POST /admin/ambassadors", "shortDescription": {"text": "Unused endpoint: POST /admin/ambassadors"}, "fullDescription": {"text": "`backend/app/routers/growth.py` declares `POST /admin/ambassadors` 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-0d9c9bb4753bd9ce", "name": "Unused endpoint: PATCH /admin/ambassadors/{code}", "shortDescription": {"text": "Unused endpoint: PATCH /admin/ambassadors/{code}"}, "fullDescription": {"text": "`backend/app/routers/growth.py` declares `PATCH /admin/ambassadors/{code}` 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-98bf724e39396970", "name": "Unused endpoint: GET /admin/dashboard", "shortDescription": {"text": "Unused endpoint: GET /admin/dashboard"}, "fullDescription": {"text": "`backend/app/routers/growth.py` declares `GET /admin/dashboard` 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-111b9a786f66d3cc", "name": "Unused endpoint: POST /admin/intents/{intent_id}/confirm", "shortDescription": {"text": "Unused endpoint: POST /admin/intents/{intent_id}/confirm"}, "fullDescription": {"text": "`backend/app/routers/growth.py` declares `POST /admin/intents/{intent_id}/confirm` 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-256a0bc652eb573e", "name": "Unused endpoint: POST /admin/contributions", "shortDescription": {"text": "Unused endpoint: POST /admin/contributions"}, "fullDescription": {"text": "`backend/app/routers/growth.py` declares `POST /admin/contributions` 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-d642e884953b6c8d", "name": "Unused endpoint: POST /admin/contributions/{contribution_id}/review", "shortDescription": {"text": "Unused endpoint: POST /admin/contributions/{contribution_id}/review"}, "fullDescription": {"text": "`backend/app/routers/growth.py` declares `POST /admin/contributions/{contribution_id}/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}}, {"id": "scanner-616c69deffb7133d", "name": "Unused endpoint: GET /admin/export", "shortDescription": {"text": "Unused endpoint: GET /admin/export"}, "fullDescription": {"text": "`backend/app/routers/growth.py` declares `GET /admin/export` 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-89f87052a1277689", "name": "Unused endpoint: GET /daily-fixtures", "shortDescription": {"text": "Unused endpoint: GET /daily-fixtures"}, "fullDescription": {"text": "`backend/app/routers/daily_fixtures.py` declares `GET /daily-fixtures` 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-d678973662fed76d", "name": "Unused endpoint: POST /admin/daily-fixtures/upload", "shortDescription": {"text": "Unused endpoint: POST /admin/daily-fixtures/upload"}, "fullDescription": {"text": "`backend/app/routers/daily_fixtures.py` declares `POST /admin/daily-fixtures/upload` 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-7af2af0726a72987", "name": "Unused endpoint: POST /admin/daily-fixtures/refresh", "shortDescription": {"text": "Unused endpoint: POST /admin/daily-fixtures/refresh"}, "fullDescription": {"text": "`backend/app/routers/daily_fixtures.py` declares `POST /admin/daily-fixtures/refresh` 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-b8ecc43cb29112a1", "name": "Unused endpoint: GET /matches", "shortDescription": {"text": "Unused endpoint: GET /matches"}, "fullDescription": {"text": "`backend/app/routers/matches.py` declares `GET /matches` 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-41e39baf9b33f99a", "name": "Unused endpoint: GET /matches/{match_id}", "shortDescription": {"text": "Unused endpoint: GET /matches/{match_id}"}, "fullDescription": {"text": "`backend/app/routers/matches.py` declares `GET /matches/{match_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-231e982845827773", "name": "Unused endpoint: GET /reports/{match_id}", "shortDescription": {"text": "Unused endpoint: GET /reports/{match_id}"}, "fullDescription": {"text": "`backend/app/routers/matches.py` declares `GET /reports/{match_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-6f5d873175a5f0d1", "name": "Unused endpoint: POST /matches/{match_id}/refresh", "shortDescription": {"text": "Unused endpoint: POST /matches/{match_id}/refresh"}, "fullDescription": {"text": "`backend/app/routers/matches.py` declares `POST /matches/{match_id}/refresh` 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/23629"}, "properties": {"repository": "zhaojfifa/worldcup2026", "repoUrl": "https://github.com/zhaojfifa/worldcup2026", "branch": "main"}, "results": [{"ruleId": "scanner-94f6623a1dc6facd", "level": "note", "message": {"text": "Possibly dead Python function: rt"}, "properties": {"repobilityId": "b150fd039ed9fe1f", "scanner": "scanner-primary", "fingerprint": "94f6623a1dc6facd", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/check_llm_grounding.py:145"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-8d89b42c4d18fdb7", "level": "note", "message": {"text": "Possibly dead Python function: cmd_status"}, "properties": {"repobilityId": "244b91f3ae7622bf", "scanner": "scanner-primary", "fingerprint": "8d89b42c4d18fdb7", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/mvp2_daily_ops.py:252"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-8ebe6c2884b7347e", "level": "note", "message": {"text": "Possibly dead Python function: cmd_build_queue"}, "properties": {"repobilityId": "fc110b74d8f24420", "scanner": "scanner-primary", "fingerprint": "8ebe6c2884b7347e", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/mvp2_daily_ops.py:264"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-750881709f4dbdc0", "level": "note", "message": {"text": "Possibly dead Python function: cmd_review_summary"}, "properties": {"repobilityId": "922c043a380b7a23", "scanner": "scanner-primary", "fingerprint": "750881709f4dbdc0", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/mvp2_daily_ops.py:284"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-82dc0052ade64bc2", "level": "note", "message": {"text": "Possibly dead Python function: cmd_build_artifacts"}, "properties": {"repobilityId": "50436d010d96e86d", "scanner": "scanner-primary", "fingerprint": "82dc0052ade64bc2", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/mvp2_daily_ops.py:293"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-7a5c0820866b4345", "level": "note", "message": {"text": "Possibly dead Python function: cmd_t30_status"}, "properties": {"repobilityId": "11afd2bc9f18f2c0", "scanner": "scanner-primary", "fingerprint": "7a5c0820866b4345", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/mvp2_daily_ops.py:312"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3c7d64110bfeda1a", "level": "note", "message": {"text": "Possibly dead Python function: cmd_recap_status"}, "properties": {"repobilityId": "f3c7ffe9610a3f74", "scanner": "scanner-primary", "fingerprint": "3c7d64110bfeda1a", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/mvp2_daily_ops.py:320"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-f7e38226e7eb30c3", "level": "note", "message": {"text": "Possibly dead Python function: cmd_share_refresh"}, "properties": {"repobilityId": "1b2a4efc265e065f", "scanner": "scanner-primary", "fingerprint": "f7e38226e7eb30c3", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/mvp2_daily_ops.py:328"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-ee66357c70e2ff6d", "level": "note", "message": {"text": "Possibly dead Python function: cmd_close_day"}, "properties": {"repobilityId": "026c4fde6e54ba8d", "scanner": "scanner-primary", "fingerprint": "ee66357c70e2ff6d", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/mvp2_daily_ops.py:336"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-6c36b71693705bae", "level": "note", "message": {"text": "Possibly dead Python function: num"}, "properties": {"repobilityId": "4d577505c1ce96ff", "scanner": "scanner-primary", "fingerprint": "6c36b71693705bae", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/mvp2_build_scoutscore_v0_2_factors.py:166"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-1769d6f22ac5ffe8", "level": "note", "message": {"text": "Possibly dead Python function: cmd_scan"}, "properties": {"repobilityId": "45239483b43d0dd2", "scanner": "scanner-primary", "fingerprint": "1769d6f22ac5ffe8", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/mvp2_ops.py:136"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-1df83cf74befc399", "level": "note", "message": {"text": "Possibly dead Python function: cmd_prematch"}, "properties": {"repobilityId": "6a72c9e7e4076f70", "scanner": "scanner-primary", "fingerprint": "1df83cf74befc399", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/mvp2_ops.py:188"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-a6a7fd4d6e624d2a", "level": "note", "message": {"text": "Possibly dead Python function: cmd_watch"}, "properties": {"repobilityId": "1e6734bc1d615718", "scanner": "scanner-primary", "fingerprint": "a6a7fd4d6e624d2a", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/mvp2_ops.py:324"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-6220a73f75bde06e", "level": "note", "message": {"text": "Possibly dead Python function: cmd_recap"}, "properties": {"repobilityId": "346345ee91dec0d0", "scanner": "scanner-primary", "fingerprint": "6220a73f75bde06e", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/mvp2_ops.py:400"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-17ddb9161c6805df", "level": "note", "message": {"text": "Possibly dead Python function: cmd_bundle"}, "properties": {"repobilityId": "07b67a70503be069", "scanner": "scanner-primary", "fingerprint": "17ddb9161c6805df", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/mvp2_ops.py:452"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-03f614a9fec48724", "level": "note", "message": {"text": "Possibly dead Python function: cmd_queue"}, "properties": {"repobilityId": "f8bba06124cf3693", "scanner": "scanner-primary", "fingerprint": "03f614a9fec48724", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/mvp2_ops.py:497"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-573ed3521ebc2250", "level": "note", "message": {"text": "Possibly dead Python function: cmd_status"}, "properties": {"repobilityId": "244b91f3ae7622bf", "scanner": "scanner-primary", "fingerprint": "573ed3521ebc2250", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/mvp2_ops.py:522"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-1589b6008a6541f2", "level": "note", "message": {"text": "Possibly dead Python function: ts"}, "properties": {"repobilityId": "c9e7727fefb6585e", "scanner": "scanner-primary", "fingerprint": "1589b6008a6541f2", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/mvp2_match_sync.py:200"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-bd1a8d9f4f15d5b7", "level": "note", "message": {"text": "Possibly dead Python function: asset_exists"}, "properties": {"repobilityId": "f3bab20b89ac7e59", "scanner": "scanner-primary", "fingerprint": "bd1a8d9f4f15d5b7", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/services/storage/r2_client.py:97"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-1c6e9fc7166a195f", "level": "note", "message": {"text": "Possibly dead Python function: sync_lineups"}, "properties": {"repobilityId": "1bb65ea8d209abe0", "scanner": "scanner-primary", "fingerprint": "1c6e9fc7166a195f", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/jobs/fixtures_sync.py:175"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-4f475911c5c4cdd2", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 frontend/src/lib/freshness.selftest.ts:40"}, "properties": {"repobilityId": "1e5b105af9667e65", "scanner": "scanner-primary", "fingerprint": "4f475911c5c4cdd2", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-80dd397b88d5d163", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in wc-ai-h5.html:512"}, "properties": {"repobilityId": "fd0d0186bcf0d4b2", "scanner": "scanner-primary", "fingerprint": "80dd397b88d5d163", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "wc-ai-h5.html"}, "region": {"startLine": 512}}}]}, {"ruleId": "scanner-8cd638e22ad04311", "level": "warning", "message": {"text": "Insecure pattern 'local_storage_auth_token' in frontend/src/pages/GrowthAdminPage.tsx:45"}, "properties": {"repobilityId": "66be238d521d2aec", "scanner": "scanner-primary", "fingerprint": "8cd638e22ad04311", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "local_storage_auth_token"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "frontend/src/pages/GrowthAdminPage.tsx"}, "region": {"startLine": 45}}}]}, {"ruleId": "scanner-e43ce1ddfeddeb56", "level": "error", "message": {"text": "Possible secret in scripts/check_auto_llm_factory.py"}, "properties": {"repobilityId": "4a9ad3ffe77f9931", "scanner": "scanner-primary", "fingerprint": "e43ce1ddfeddeb56", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/check_auto_llm_factory.py"}, "region": {"startLine": 83}}}]}, {"ruleId": "scanner-e43ce1ddfeddeb56", "level": "error", "message": {"text": "Possible secret in scripts/check_auto_llm_factory.py"}, "properties": {"repobilityId": "80221d6da52fc535", "scanner": "scanner-primary", "fingerprint": "e43ce1ddfeddeb56", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/check_auto_llm_factory.py"}, "region": {"startLine": 83}}}]}, {"ruleId": "scanner-d8001f432ea2f281", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/qa/intel_rewrite_shots.mjs:13"}, "properties": {"repobilityId": "ffd961927d588ecd", "scanner": "scanner-primary", "fingerprint": "d8001f432ea2f281", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/qa/intel_rewrite_shots.mjs"}, "region": {"startLine": 13}}}]}, {"ruleId": "scanner-a220ec246fc7fb9c", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/qa/mvp2_evidence_board_shots.mjs:13"}, "properties": {"repobilityId": "abd69c02d78bfb18", "scanner": "scanner-primary", "fingerprint": "a220ec246fc7fb9c", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/qa/mvp2_evidence_board_shots.mjs"}, "region": {"startLine": 13}}}]}, {"ruleId": "scanner-203f5ac5a527428d", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/qa/historical_recap_shots.mjs:7"}, "properties": {"repobilityId": "1300f131f0c45edf", "scanner": "scanner-primary", "fingerprint": "203f5ac5a527428d", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/qa/historical_recap_shots.mjs"}, "region": {"startLine": 7}}}]}, {"ruleId": "scanner-17945c03cc30ec5b", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/qa/mvp2_locale_consolidation_shots.mjs:15"}, "properties": {"repobilityId": "ad1cab4c458b805d", "scanner": "scanner-primary", "fingerprint": "17945c03cc30ec5b", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/qa/mvp2_locale_consolidation_shots.mjs"}, "region": {"startLine": 15}}}]}, {"ruleId": "scanner-ed6c6929aef93360", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/qa/mvp2_scout_pack_shots.mjs:16"}, "properties": {"repobilityId": "39fd90b1714fffb0", "scanner": "scanner-primary", "fingerprint": "ed6c6929aef93360", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/qa/mvp2_scout_pack_shots.mjs"}, "region": {"startLine": 16}}}]}, {"ruleId": "scanner-d4acc5f4ba8428d6", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/qa/lang_interaction_shots.mjs:17"}, "properties": {"repobilityId": "80662002b6c70055", "scanner": "scanner-primary", "fingerprint": "d4acc5f4ba8428d6", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/qa/lang_interaction_shots.mjs"}, "region": {"startLine": 17}}}]}, {"ruleId": "scanner-c8a31e092bf0532a", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/qa/mvp2_recap_flow_shots.mjs:13"}, "properties": {"repobilityId": "e846e42460235ad0", "scanner": "scanner-primary", "fingerprint": "c8a31e092bf0532a", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/qa/mvp2_recap_flow_shots.mjs"}, "region": {"startLine": 13}}}]}, {"ruleId": "scanner-6372cebde0220094", "level": "warning", "message": {"text": "No auth library detected"}, "properties": {"repobilityId": "a5b6035a5bbf8054", "scanner": "scanner-primary", "fingerprint": "6372cebde0220094", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["coverage", "auth"]}}, {"ruleId": "scanner-4601e3ad3bb28677", "level": "warning", "message": {"text": "No CI/CD pipelines detected"}, "properties": {"repobilityId": "c3ee439bce2bc51e", "scanner": "scanner-primary", "fingerprint": "4601e3ad3bb28677", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["coverage"]}}, {"ruleId": "scanner-6893a6c8b0861585", "level": "warning", "message": {"text": "Very low test-to-source ratio"}, "properties": {"repobilityId": "54a7de3f06314bf0", "scanner": "scanner-primary", "fingerprint": "6893a6c8b0861585", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["tests", "coverage"]}}, {"ruleId": "scanner-141b30a41e03817b", "level": "note", "message": {"text": "No license file detected"}, "properties": {"repobilityId": "d89ae8d8daec0052", "scanner": "scanner-primary", "fingerprint": "141b30a41e03817b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["license", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "fa75b7d4b236a664", "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": "25a3490c653f6008", "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": "9076284a09a7daa2", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-b9088664ace7f748", "level": "warning", "message": {"text": "Composite production-readiness gap"}, "properties": {"repobilityId": "7b13ef688d4e2496", "scanner": "scanner-primary", "fingerprint": "b9088664ace7f748", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["production-readiness", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-749d4bc1bd66df5f", "level": "warning", "message": {"text": "Agent instructions exist but release-hardening basics are missing"}, "properties": {"repobilityId": "0d4a343322cd42e5", "scanner": "scanner-primary", "fingerprint": "749d4bc1bd66df5f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-ea8f3013f588db25", "level": "note", "message": {"text": "Shallow git history limits provenance confidence"}, "properties": {"repobilityId": "c9180cbc70f578a7", "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": "0197a4fd5a84a5c0", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-2c5f98b152cddb6d", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/launch.json"}, "properties": {"repobilityId": "0de48c0f4ab303d8", "scanner": "scanner-primary", "fingerprint": "2c5f98b152cddb6d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/launch.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-167f2fc105271ad2", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/i18n/viMapping.ts:312"}, "properties": {"repobilityId": "975371444841f577", "scanner": "scanner-primary", "fingerprint": "167f2fc105271ad2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2ca5109426336053", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/components/EvidenceBoard.tsx:8"}, "properties": {"repobilityId": "948c792d365161e3", "scanner": "scanner-primary", "fingerprint": "2ca5109426336053", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d014bfa632ed6183", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/components/ArtifactTacticalRoom.tsx:7"}, "properties": {"repobilityId": "faf8bdd87c78fdad", "scanner": "scanner-primary", "fingerprint": "d014bfa632ed6183", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f07229a7bdf9bf2e", "level": "none", "message": {"text": "Commented-code block (7 lines) in frontend/src/components/UpcomingTacticalStrip.tsx:10"}, "properties": {"repobilityId": "b18004608549f249", "scanner": "scanner-primary", "fingerprint": "f07229a7bdf9bf2e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6605ec34f51dae8a", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/components/ObservationReceipt.tsx:7"}, "properties": {"repobilityId": "37a4d33dd3de159a", "scanner": "scanner-primary", "fingerprint": "6605ec34f51dae8a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a5150016c737dc3d", "level": "note", "message": {"text": "Legacy-named symbol `operator_copy` in frontend/src/components/NarrativeView.tsx:42"}, "properties": {"repobilityId": "41ebde233fe7f747", "scanner": "scanner-primary", "fingerprint": "a5150016c737dc3d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-11fdd260fbf8e104", "level": "note", "message": {"text": "Legacy-named symbol `operator_copy` in frontend/src/components/ProductProofViews.tsx:134"}, "properties": {"repobilityId": "2e69b34303a1ab5a", "scanner": "scanner-primary", "fingerprint": "11fdd260fbf8e104", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-9598e71f48886ff0", "level": "none", "message": {"text": "Commented-code block (8 lines) in frontend/src/components/HomeProductLoop.tsx:24"}, "properties": {"repobilityId": "4cd470de6b7daee5", "scanner": "scanner-primary", "fingerprint": "9598e71f48886ff0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e1bf173aa3226fd6", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/components/MatchDesk.tsx:5"}, "properties": {"repobilityId": "0cc2bb329af7c754", "scanner": "scanner-primary", "fingerprint": "e1bf173aa3226fd6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b24417bb5a592acf", "level": "note", "message": {"text": "Legacy-named symbol `share_copy` in frontend/src/growth/shareTemplates.ts:63"}, "properties": {"repobilityId": "12e715a73c5a2e55", "scanner": "scanner-primary", "fingerprint": "b24417bb5a592acf", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-72452e5ca0621395", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/growth/shareTemplates.ts:1"}, "properties": {"repobilityId": "b63eb2b0978df6f7", "scanner": "scanner-primary", "fingerprint": "72452e5ca0621395", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fbe14ef7bec32c8b", "level": "none", "message": {"text": "Commented-code block (6 lines) in frontend/src/growth/strongCallProjection.ts:1"}, "properties": {"repobilityId": "7fae8fe41f2e1be8", "scanner": "scanner-primary", "fingerprint": "fbe14ef7bec32c8b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-caf24adbbd2ef16b", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/pages/TrialDetailGate.tsx:4"}, "properties": {"repobilityId": "7d23cc33171db068", "scanner": "scanner-primary", "fingerprint": "caf24adbbd2ef16b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2a6f81c7c62e5ca9", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/pages/GrowthAdminPage.tsx:4"}, "properties": {"repobilityId": "0b42ebb2db8f3bb4", "scanner": "scanner-primary", "fingerprint": "2a6f81c7c62e5ca9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-469b30d144627336", "level": "note", "message": {"text": "Legacy-named symbol `cta_copy` in frontend/src/pages/EvidenceBoardPage.tsx:63"}, "properties": {"repobilityId": "f76eef09ebc40327", "scanner": "scanner-primary", "fingerprint": "469b30d144627336", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-d3d4fecdfbc4cfa5", "level": "note", "message": {"text": "Legacy-named symbol `cta_copy` in frontend/src/pages/RecapDetailPage.tsx:220"}, "properties": {"repobilityId": "500232ac05196261", "scanner": "scanner-primary", "fingerprint": "d3d4fecdfbc4cfa5", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-2883decd9ea65417", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/pages/RecapDetailPage.tsx:90"}, "properties": {"repobilityId": "c100be4a636b0c20", "scanner": "scanner-primary", "fingerprint": "2883decd9ea65417", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-659b24fe0e0b60d5", "level": "note", "message": {"text": "Legacy-named symbol `share_copy` in frontend/src/pages/DailyStatusPage.tsx:101"}, "properties": {"repobilityId": "16b3a0a244369ffa", "scanner": "scanner-primary", "fingerprint": "659b24fe0e0b60d5", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-d2990cdc919e59a5", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/pages/DailyStatusPage.tsx:63"}, "properties": {"repobilityId": "dbd7cd8cf2bbfa41", "scanner": "scanner-primary", "fingerprint": "d2990cdc919e59a5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b85f82afca174d86", "level": "note", "message": {"text": "Legacy-named symbol `share_copy` in scripts/check_daily_content_flow.py:18"}, "properties": {"repobilityId": "818678bc109971c7", "scanner": "scanner-primary", "fingerprint": "b85f82afca174d86", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-feeaf782184ae5a2", "level": "note", "message": {"text": "Legacy-named symbol `share_copy` in scripts/check_prediction_artifact.py:182"}, "properties": {"repobilityId": "ab3cdaf513a2c10b", "scanner": "scanner-primary", "fingerprint": "feeaf782184ae5a2", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-770320a6f5b40cf9", "level": "note", "message": {"text": "Legacy-named symbol `check_growth_copy` in scripts/mvp2_editorial_agent.py:45"}, "properties": {"repobilityId": "82ed13be2aee1d5f", "scanner": "scanner-primary", "fingerprint": "770320a6f5b40cf9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-21f4fc25d2fac1f8", "level": "note", "message": {"text": "Legacy-named symbol `share_copy` in scripts/mvp2_build_daily_prediction_artifact.py:46"}, "properties": {"repobilityId": "4542a751bc640f9a", "scanner": "scanner-primary", "fingerprint": "21f4fc25d2fac1f8", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-2a66212ced026b72", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 scripts/mvp2_daily_autorun.py:52"}, "properties": {"repobilityId": "cc8006cb8f0b424e", "scanner": "scanner-primary", "fingerprint": "2a66212ced026b72", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b01bf9cd962ca638", "level": "note", "message": {"text": "Legacy-named symbol `qiuge_v2` in scripts/mvp2_generate_product_proof_narratives.py:183"}, "properties": {"repobilityId": "97cc9022ca5683bf", "scanner": "scanner-primary", "fingerprint": "b01bf9cd962ca638", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-2c09c2a542a98df6", "level": "note", "message": {"text": "Legacy-named symbol `share_copy` in scripts/mvp2_recommendation_closure.py:104"}, "properties": {"repobilityId": "513e0d6b97d019fc", "scanner": "scanner-primary", "fingerprint": "2c09c2a542a98df6", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-1fe7cde1612a78b5", "level": "note", "message": {"text": "Legacy-named symbol `has_copy` in scripts/mvp2_daily_ops.py:181"}, "properties": {"repobilityId": "8387b4066b64dba9", "scanner": "scanner-primary", "fingerprint": "1fe7cde1612a78b5", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-c500c94defe11c7d", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 scripts/mvp2_daily_ops.py:249"}, "properties": {"repobilityId": "c2b1b6eb613d425f", "scanner": "scanner-primary", "fingerprint": "c500c94defe11c7d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-53f93191e28e1058", "level": "note", "message": {"text": "Legacy-named symbol `share_copy` in scripts/check_llm_copy_attractiveness.py:7"}, "properties": {"repobilityId": "d9174d7c4101633a", "scanner": "scanner-primary", "fingerprint": "53f93191e28e1058", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-d9b26e19613334ee", "level": "note", "message": {"text": "Legacy-named symbol `tientri_v2` in scripts/mvp2_build_rescore_diff.py:179"}, "properties": {"repobilityId": "d4a56e9b2effc661", "scanner": "scanner-primary", "fingerprint": "d9b26e19613334ee", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-7d2eef4e7305e2e6", "level": "note", "message": {"text": "Legacy-named symbol `group_join_copy` in scripts/check_mvp2_product_narrative_guard.py:13"}, "properties": {"repobilityId": "8bbde302d47bf76b", "scanner": "scanner-primary", "fingerprint": "7d2eef4e7305e2e6", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-348037c70d0484f6", "level": "note", "message": {"text": "Legacy-named symbol `share_copy` in scripts/check_recap_pipeline.py:30"}, "properties": {"repobilityId": "6a226d0221243b49", "scanner": "scanner-primary", "fingerprint": "348037c70d0484f6", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-6d709b56a053721c", "level": "note", "message": {"text": "Legacy-named symbol `check_customer_visible_copy` in scripts/check_customer_visible_copy.py:29"}, "properties": {"repobilityId": "56f007649618aead", "scanner": "scanner-primary", "fingerprint": "6d709b56a053721c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-4d79d96a555d7f4c", "level": "note", "message": {"text": "Legacy-named symbol `share_copy` in scripts/check_recap_generation_flow.py:58"}, "properties": {"repobilityId": "da584a84b332ef36", "scanner": "scanner-primary", "fingerprint": "4d79d96a555d7f4c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-62e05440a19fbd99", "level": "note", "message": {"text": "Legacy-named symbol `share_copy` in scripts/check_auto_llm_factory.py:20"}, "properties": {"repobilityId": "6844ab6bd6c838f1", "scanner": "scanner-primary", "fingerprint": "62e05440a19fbd99", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-347a092e87054551", "level": "note", "message": {"text": "Legacy-named symbol `share_copy` in scripts/check_llm_copy_quality.py:13"}, "properties": {"repobilityId": "5de6018705df7829", "scanner": "scanner-primary", "fingerprint": "347a092e87054551", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-6d49a1dd2d2ae318", "level": "note", "message": {"text": "Legacy-named symbol `tientri_v2` in scripts/mvp2_generate_trial_prediction_narratives.py:110"}, "properties": {"repobilityId": "47d691cf3715fe6f", "scanner": "scanner-primary", "fingerprint": "6d49a1dd2d2ae318", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-01b7291067dcbcc0", "level": "note", "message": {"text": "Legacy-named symbol `operator_copy` in scripts/mvp2_ops.py:173"}, "properties": {"repobilityId": "99372cbc90415598", "scanner": "scanner-primary", "fingerprint": "01b7291067dcbcc0", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-4790c241c6c622ab", "level": "note", "message": {"text": "Legacy-named symbol `operator_copy` in scripts/mvp2_generate_scoutscore_narrative.py:201"}, "properties": {"repobilityId": "4f22d244ec077930", "scanner": "scanner-primary", "fingerprint": "4790c241c6c622ab", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-e4a364a16172aa73", "level": "note", "message": {"text": "Legacy-named symbol `check_customer_visible_copy` in scripts/check_fixture_freshness.py:9"}, "properties": {"repobilityId": "40cac0b612f50d98", "scanner": "scanner-primary", "fingerprint": "e4a364a16172aa73", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-a5dae48f3c746088", "level": "note", "message": {"text": "Legacy-named symbol `share_copy` in scripts/mvp2_autogen_prediction_draft.py:43"}, "properties": {"repobilityId": "599fd2d60cd66fd2", "scanner": "scanner-primary", "fingerprint": "a5dae48f3c746088", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-4078207b9e905030", "level": "note", "message": {"text": "Legacy-named symbol `check_customer_visible_copy` in scripts/check_homepage_product_loop.py:8"}, "properties": {"repobilityId": "cd8247b9f26f994c", "scanner": "scanner-primary", "fingerprint": "4078207b9e905030", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-d13cb0c7e2012938", "level": "note", "message": {"text": "Legacy-named symbol `share_copy` in scripts/check_daily_readiness.py:16"}, "properties": {"repobilityId": "9e2f87a6df627d6a", "scanner": "scanner-primary", "fingerprint": "d13cb0c7e2012938", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-a29f11c8de0c6906", "level": "note", "message": {"text": "Legacy-named symbol `free_copy` in scripts/mvp2_generate_rescore_models.py:8"}, "properties": {"repobilityId": "9d4ea5ef9c4d0286", "scanner": "scanner-primary", "fingerprint": "a29f11c8de0c6906", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-759baef844ac40e7", "level": "note", "message": {"text": "Legacy-named symbol `check_growth_copy` in scripts/check_growth_copy.py:44"}, "properties": {"repobilityId": "346e3e9ea4431a5f", "scanner": "scanner-primary", "fingerprint": "759baef844ac40e7", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-58b9bc7a4dd95718", "level": "none", "message": {"text": "Commented-code block (5 lines) in scripts/check_growth_copy.py:48"}, "properties": {"repobilityId": "967466ef552e0693", "scanner": "scanner-primary", "fingerprint": "58b9bc7a4dd95718", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2812c31d2571feb6", "level": "note", "message": {"text": "Legacy-named symbol `operator_copy` in scripts/check_mvp2_llm_narrative_guard.py:30"}, "properties": {"repobilityId": "67bd822f59c5a321", "scanner": "scanner-primary", "fingerprint": "2812c31d2571feb6", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-e46c64ba7628dff5", "level": "note", "message": {"text": "Legacy-named symbol `mvp2_evidence_board_v2` in scripts/qa/mvp2_evidence_board_shots.mjs:11"}, "properties": {"repobilityId": "7b7793d2aa54adaf", "scanner": "scanner-primary", "fingerprint": "e46c64ba7628dff5", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-f86796efd6699462", "level": "none", "message": {"text": "Commented-code block (5 lines) in scripts/qa/mvp2_evidence_board_shots.mjs:21"}, "properties": {"repobilityId": "0cc9f1e3ab1077b3", "scanner": "scanner-primary", "fingerprint": "f86796efd6699462", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3e9aaea006ad3a11", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/qa/historical_recap_shots.mjs:17"}, "properties": {"repobilityId": "f1e99eec757563be", "scanner": "scanner-primary", "fingerprint": "3e9aaea006ad3a11", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-30fd717e62b2b145", "level": "note", "message": {"text": "Legacy-named symbol `operator_recap_copy` in backend/app/services/scoutscore/accountability.py:212"}, "properties": {"repobilityId": "0ac635aa442441eb", "scanner": "scanner-primary", "fingerprint": "30fd717e62b2b145", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-37811a371f90b78b", "level": "note", "message": {"text": "Legacy-named symbol `operator_recap_copy` in backend/app/services/scoutscore/recap_view.py:55"}, "properties": {"repobilityId": "ef71bcbbc03d719f", "scanner": "scanner-primary", "fingerprint": "37811a371f90b78b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-26dd0f1b070dc390", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 backend/app/services/data_sources/api_football.py:65"}, "properties": {"repobilityId": "10a02dbdf721a93e", "scanner": "scanner-primary", "fingerprint": "26dd0f1b070dc390", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-02e11d4e2de9466c", "level": "note", "message": {"text": "Legacy-named symbol `generate_copy` in backend/app/services/llm/copy_service.py:102"}, "properties": {"repobilityId": "fcfc165d8c40c37d", "scanner": "scanner-primary", "fingerprint": "02e11d4e2de9466c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-d5f7f852100868df", "level": "note", "message": {"text": "Legacy-named symbol `operator_recap_copy` in backend/app/routers/internal_scout_pack.py:655"}, "properties": {"repobilityId": "7dbd98b3677d86e6", "scanner": "scanner-primary", "fingerprint": "d5f7f852100868df", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-71c4753c07858e7d", "level": "note", "message": {"text": "Legacy-named symbol `generate_copy` in backend/app/routers/llm.py:42"}, "properties": {"repobilityId": "95e7340c75d00096", "scanner": "scanner-primary", "fingerprint": "71c4753c07858e7d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-b334d875f2339fa1", "level": "note", "message": {"text": "5 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "faa38682016f5d53", "scanner": "scanner-primary", "fingerprint": "b334d875f2339fa1", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "config-drift"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "5ca324bd9cea0605", "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": "97869a425823888f", "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": "e97af23deca51c91", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "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": "5a0a6cd1e99205c8", "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": "e1f114d9e9158f04", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "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": "9e0dd14d1ac08854", "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": "aeed0419b8ecdd1a", "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": "ebd7dae8b349897d", "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": "adbb219c2071eb3f", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "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": "c484d9f318dc44d7", "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": "fc6d75f7c958043d", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-d8cf4ba94697c056", "level": "warning", "message": {"text": "Frontend route `join` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "7f1ac8bc36bbf1c7", "scanner": "scanner-primary", "fingerprint": "d8cf4ba94697c056", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-ef4b6b404b391b9e", "level": "warning", "message": {"text": "Frontend route `internal/growth` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "410e7ca3092928f6", "scanner": "scanner-primary", "fingerprint": "ef4b6b404b391b9e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-c441bb9eb47bf013", "level": "warning", "message": {"text": "Frontend route `internal/daily` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "c5038f771efa2a7a", "scanner": "scanner-primary", "fingerprint": "c441bb9eb47bf013", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-6fc7e9b573a57647", "level": "warning", "message": {"text": "Frontend route `share/fixture/:fixtureId` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "e1707a32c0241c45", "scanner": "scanner-primary", "fingerprint": "6fc7e9b573a57647", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-9d73e653a9b47069", "level": "warning", "message": {"text": "Frontend route `share/recap/:fixtureId` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "4c3268e14628a9e5", "scanner": "scanner-primary", "fingerprint": "9d73e653a9b47069", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-491bdafbb13abb72", "level": "warning", "message": {"text": "Frontend route `detail` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "65b18b4d54f5b0c8", "scanner": "scanner-primary", "fingerprint": "491bdafbb13abb72", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-b14e1b5d4af6d8e4", "level": "warning", "message": {"text": "Frontend route `report` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "551c47f42f351037", "scanner": "scanner-primary", "fingerprint": "b14e1b5d4af6d8e4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-e1d8b53b74a24cf6", "level": "warning", "message": {"text": "Frontend route `token` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "1ce374b8766ff80e", "scanner": "scanner-primary", "fingerprint": "e1d8b53b74a24cf6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-01164d2ea34c9c6f", "level": "warning", "message": {"text": "Frontend route `community` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "10737d5d470cf835", "scanner": "scanner-primary", "fingerprint": "01164d2ea34c9c6f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-adb5050adbfc8324", "level": "warning", "message": {"text": "Frontend route `recap/:fixtureId` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "eb92a89a69968a10", "scanner": "scanner-primary", "fingerprint": "adb5050adbfc8324", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-d946398e863dbf24", "level": "warning", "message": {"text": "Frontend route `evidence/:fixtureId` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "ad7b91d47abfdbd9", "scanner": "scanner-primary", "fingerprint": "d946398e863dbf24", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-9dc1cd52931d6a75", "level": "warning", "message": {"text": "Frontend route `predict/:slug` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "d8ba290f13c0d1fe", "scanner": "scanner-primary", "fingerprint": "9dc1cd52931d6a75", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-a474b3d3e01cc28b", "level": "error", "message": {"text": "FastAPI POST `track_event` without auth dependency \u2014 backend/app/routers/social.py:33"}, "properties": {"repobilityId": "301d265fce09dfa3", "scanner": "scanner-primary", "fingerprint": "a474b3d3e01cc28b", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/routers/social.py"}, "region": {"startLine": 33}}}]}, {"ruleId": "scanner-a1fcbc22ac6dd7bf", "level": "error", "message": {"text": "FastAPI POST `checkin` without auth dependency \u2014 backend/app/routers/tokens.py:27"}, "properties": {"repobilityId": "c91107a590955196", "scanner": "scanner-primary", "fingerprint": "a1fcbc22ac6dd7bf", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/routers/tokens.py"}, "region": {"startLine": 27}}}]}, {"ruleId": "scanner-5a61c6fb356be23d", "level": "error", "message": {"text": "FastAPI POST `unlock_report` without auth dependency \u2014 backend/app/routers/tokens.py:36"}, "properties": {"repobilityId": "a6b7713920b2a169", "scanner": "scanner-primary", "fingerprint": "5a61c6fb356be23d", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/routers/tokens.py"}, "region": {"startLine": 36}}}]}, {"ruleId": "scanner-ce0589dd0498585e", "level": "error", "message": {"text": "FastAPI POST `simulate_correction` without auth dependency \u2014 backend/app/routers/tokens.py:48"}, "properties": {"repobilityId": "336d03d96227722a", "scanner": "scanner-primary", "fingerprint": "ce0589dd0498585e", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/routers/tokens.py"}, "region": {"startLine": 48}}}]}, {"ruleId": "scanner-f0f1b3c5c996b02d", "level": "error", "message": {"text": "FastAPI POST `join_challenge` without auth dependency \u2014 backend/app/routers/tokens.py:60"}, "properties": {"repobilityId": "4c48f812b38b09e8", "scanner": "scanner-primary", "fingerprint": "f0f1b3c5c996b02d", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/routers/tokens.py"}, "region": {"startLine": 60}}}]}, {"ruleId": "scanner-1c1bf7ffabbe7832", "level": "error", "message": {"text": "FastAPI POST `subscribe` without auth dependency \u2014 backend/app/routers/tokens.py:76"}, "properties": {"repobilityId": "53b4a86fede198ca", "scanner": "scanner-primary", "fingerprint": "1c1bf7ffabbe7832", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/routers/tokens.py"}, "region": {"startLine": 76}}}]}, {"ruleId": "scanner-f4a74f0b80965f09", "level": "error", "message": {"text": "FastAPI POST `track_click` without auth dependency \u2014 backend/app/routers/growth.py:59"}, "properties": {"repobilityId": "a3d824b5c4837370", "scanner": "scanner-primary", "fingerprint": "f4a74f0b80965f09", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/routers/growth.py"}, "region": {"startLine": 59}}}]}, {"ruleId": "scanner-d1667fc502e404d2", "level": "error", "message": {"text": "FastAPI POST `join_intent` without auth dependency \u2014 backend/app/routers/growth.py:67"}, "properties": {"repobilityId": "c9215dee4160ac80", "scanner": "scanner-primary", "fingerprint": "d1667fc502e404d2", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/routers/growth.py"}, "region": {"startLine": 67}}}]}, {"ruleId": "scanner-c5b6783a95579a02", "level": "error", "message": {"text": "FastAPI POST `upload_daily_fixtures` without auth dependency \u2014 backend/app/routers/daily_fixtures.py:47"}, "properties": {"repobilityId": "c1e75b24417be8e1", "scanner": "scanner-primary", "fingerprint": "c5b6783a95579a02", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/routers/daily_fixtures.py"}, "region": {"startLine": 47}}}]}, {"ruleId": "scanner-d0c1dd6cc2f5a152", "level": "error", "message": {"text": "FastAPI POST `refresh_daily_fixtures` without auth dependency \u2014 backend/app/routers/daily_fixtures.py:54"}, "properties": {"repobilityId": "dd13c5ae32f9acff", "scanner": "scanner-primary", "fingerprint": "d0c1dd6cc2f5a152", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/routers/daily_fixtures.py"}, "region": {"startLine": 54}}}]}, {"ruleId": "scanner-8c36d505fc2ce638", "level": "error", "message": {"text": "FastAPI POST `refresh_match` without auth dependency \u2014 backend/app/routers/matches.py:47"}, "properties": {"repobilityId": "80402151de2a6451", "scanner": "scanner-primary", "fingerprint": "8c36d505fc2ce638", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/routers/matches.py"}, "region": {"startLine": 47}}}]}, {"ruleId": "scanner-617ac53cc33f48ea", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost:${PORT}/json/version (scripts/qa/intel_rewrite_shots.mjs:30)"}, "properties": {"repobilityId": "a59f589faaa5a521", "scanner": "scanner-primary", "fingerprint": "617ac53cc33f48ea", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c5863918ec8df944", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost:${PORT}/json/version (scripts/qa/mvp2_evidence_board_shots.mjs:41)"}, "properties": {"repobilityId": "7901dc623499b42e", "scanner": "scanner-primary", "fingerprint": "c5863918ec8df944", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e634cd577bab77ad", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost:${PORT}/json/version (scripts/qa/historical_recap_shots.mjs:17)"}, "properties": {"repobilityId": "286ec257dae1c789", "scanner": "scanner-primary", "fingerprint": "e634cd577bab77ad", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d0fb1b6009f1f18b", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost:${PORT}/json/version (scripts/qa/mvp2_locale_consolidation_shots.mjs:47)"}, "properties": {"repobilityId": "3cd8fd689c3cc57f", "scanner": "scanner-primary", "fingerprint": "d0fb1b6009f1f18b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-456ca404af7165ba", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost:${PORT}/json/version (scripts/qa/mvp2_scout_pack_shots.mjs:36)"}, "properties": {"repobilityId": "33219bc57646121b", "scanner": "scanner-primary", "fingerprint": "456ca404af7165ba", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2e934c07079ad9d6", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost:${PORT}/json/version (scripts/qa/lang_interaction_shots.mjs:35)"}, "properties": {"repobilityId": "9356803a712078e0", "scanner": "scanner-primary", "fingerprint": "2e934c07079ad9d6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ae206c37fc33639b", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost:${PORT}/json/version (scripts/qa/mvp2_recap_flow_shots.mjs:38)"}, "properties": {"repobilityId": "1c61b94740e18237", "scanner": "scanner-primary", "fingerprint": "ae206c37fc33639b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-400d86888d866dea", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/matches (frontend/src/api/client.ts:68)"}, "properties": {"repobilityId": "ba44272d7252a5dd", "scanner": "scanner-primary", "fingerprint": "400d86888d866dea", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-8dae18fb0dbb312d", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/matches/${id} (frontend/src/api/client.ts:69)"}, "properties": {"repobilityId": "b17ed167d8f79352", "scanner": "scanner-primary", "fingerprint": "8dae18fb0dbb312d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-3a140858f7f1075f", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/reports/${id} (frontend/src/api/client.ts:70)"}, "properties": {"repobilityId": "9e5684cb89e1e64e", "scanner": "scanner-primary", "fingerprint": "3a140858f7f1075f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-f1bcb85bfb5d38e6", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/recap/${fixtureId}?lang=${lang} (frontend/src/api/client.ts:71)"}, "properties": {"repobilityId": "b3742d32efcdffbb", "scanner": "scanner-primary", "fingerprint": "f1bcb85bfb5d38e6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-9773d325a37446b9", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/tokens/wallet/${userId} (frontend/src/api/client.ts:73)"}, "properties": {"repobilityId": "13f79769654a5904", "scanner": "scanner-primary", "fingerprint": "9773d325a37446b9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-be744bd04ccb0c3e", "level": "error", "message": {"text": "Dangling fetch: POST /api/v1/tokens/checkin (frontend/src/api/client.ts:74)"}, "properties": {"repobilityId": "a19dacf59841de04", "scanner": "scanner-primary", "fingerprint": "be744bd04ccb0c3e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-431a9dd1c4281313", "level": "error", "message": {"text": "Dangling fetch: POST /api/v1/tokens/unlock-report (frontend/src/api/client.ts:75)"}, "properties": {"repobilityId": "ae131cb8b97b5e26", "scanner": "scanner-primary", "fingerprint": "431a9dd1c4281313", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-d6aea2f5919a4cbc", "level": "error", "message": {"text": "Dangling fetch: POST /api/v1/corrections/${matchId}/simulate (frontend/src/api/client.ts:77)"}, "properties": {"repobilityId": "3344d01a9efb3103", "scanner": "scanner-primary", "fingerprint": "d6aea2f5919a4cbc", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-de65fc153cbb1a0b", "level": "error", "message": {"text": "Dangling fetch: POST /api/v1/challenges/${challengeId}/join (frontend/src/api/client.ts:78)"}, "properties": {"repobilityId": "3b2a7c8ac99e2a7f", "scanner": "scanner-primary", "fingerprint": "de65fc153cbb1a0b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-7955711d4066a49d", "level": "error", "message": {"text": "Dangling fetch: POST /api/v1/community/subscribe (frontend/src/api/client.ts:79)"}, "properties": {"repobilityId": "97b10e9d1c5a8cd9", "scanner": "scanner-primary", "fingerprint": "7955711d4066a49d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-085de746d290048c", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/assets/status (frontend/src/api/client.ts:82)"}, "properties": {"repobilityId": "4d518d4c3630d5cf", "scanner": "scanner-primary", "fingerprint": "085de746d290048c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-685d1642a6d7a9c7", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/social/channels (frontend/src/api/client.ts:85)"}, "properties": {"repobilityId": "c2dfc38a6183c029", "scanner": "scanner-primary", "fingerprint": "685d1642a6d7a9c7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-e1f4dc7c33a1e61e", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/community/heat (frontend/src/api/client.ts:86)"}, "properties": {"repobilityId": "ef7fcbc8d0022bea", "scanner": "scanner-primary", "fingerprint": "e1f4dc7c33a1e61e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-acade6f015a9086f", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/users/${userId}/streak (frontend/src/api/client.ts:87)"}, "properties": {"repobilityId": "6f968674de3df384", "scanner": "scanner-primary", "fingerprint": "acade6f015a9086f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-620937a3d03cd27d", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/rankings (frontend/src/api/client.ts:88)"}, "properties": {"repobilityId": "546bb0ec731ed722", "scanner": "scanner-primary", "fingerprint": "620937a3d03cd27d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-982d0b56c3409643", "level": "error", "message": {"text": "Dangling fetch: POST /api/v1/events/track (frontend/src/api/client.ts:90)"}, "properties": {"repobilityId": "e6a40c7f6dc54e3b", "scanner": "scanner-primary", "fingerprint": "982d0b56c3409643", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-5baa8971ebe192a1", "level": "note", "message": {"text": "Unused endpoint: GET /"}, "properties": {"repobilityId": "9a7ab29051c0367b", "scanner": "scanner-primary", "fingerprint": "5baa8971ebe192a1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d9589236551f1156", "level": "note", "message": {"text": "Unused endpoint: GET /scout-pack"}, "properties": {"repobilityId": "a9fe166b0aaf024f", "scanner": "scanner-primary", "fingerprint": "d9589236551f1156", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a436691337284d03", "level": "note", "message": {"text": "Unused endpoint: GET /api/v1/health"}, "properties": {"repobilityId": "86d45a8015538907", "scanner": "scanner-primary", "fingerprint": "a436691337284d03", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b609bed0fa392346", "level": "note", "message": {"text": "Unused endpoint: GET /api/v1/health/data-source"}, "properties": {"repobilityId": "d827cb16373bdc9a", "scanner": "scanner-primary", "fingerprint": "b609bed0fa392346", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c2f7e3b713cf197a", "level": "note", "message": {"text": "Unused endpoint: GET /users/{user_id}/streak"}, "properties": {"repobilityId": "f3d28745f603994a", "scanner": "scanner-primary", "fingerprint": "c2f7e3b713cf197a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e738ffd9fc26accf", "level": "note", "message": {"text": "Unused endpoint: GET /rankings"}, "properties": {"repobilityId": "d9ec41598ca58436", "scanner": "scanner-primary", "fingerprint": "e738ffd9fc26accf", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2c70cd16d09c56ef", "level": "note", "message": {"text": "Unused endpoint: POST /admin/challenges/settle"}, "properties": {"repobilityId": "48d4c0837d32b058", "scanner": "scanner-primary", "fingerprint": "2c70cd16d09c56ef", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-01d44ef6a9019d04", "level": "note", "message": {"text": "Unused endpoint: GET /assets/status"}, "properties": {"repobilityId": "efed0af39ee249c3", "scanner": "scanner-primary", "fingerprint": "01d44ef6a9019d04", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-0039828ce11ad937", "level": "note", "message": {"text": "Unused endpoint: POST /admin/assets/upload"}, "properties": {"repobilityId": "7a84cf67df231529", "scanner": "scanner-primary", "fingerprint": "0039828ce11ad937", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7aa39f714cc9854e", "level": "note", "message": {"text": "Unused endpoint: GET /assets/{asset_id}"}, "properties": {"repobilityId": "7c3d9ae03288b3cb", "scanner": "scanner-primary", "fingerprint": "7aa39f714cc9854e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-417c15146c960192", "level": "note", "message": {"text": "Unused endpoint: DELETE /admin/assets/{asset_id}"}, "properties": {"repobilityId": "4c351c6f8756ac39", "scanner": "scanner-primary", "fingerprint": "417c15146c960192", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e4674a8047d8a1a7", "level": "note", "message": {"text": "Unused endpoint: GET /data-source/status"}, "properties": {"repobilityId": "5ac4b003edce4ce3", "scanner": "scanner-primary", "fingerprint": "e4674a8047d8a1a7", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5d02a1a85451051f", "level": "note", "message": {"text": "Unused endpoint: GET /performance/daily"}, "properties": {"repobilityId": "cafb2469d4575c4f", "scanner": "scanner-primary", "fingerprint": "5d02a1a85451051f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-48a0659fa61cd052", "level": "note", "message": {"text": "Unused endpoint: GET /performance/summary"}, "properties": {"repobilityId": "2feee4cb8f1e010d", "scanner": "scanner-primary", "fingerprint": "48a0659fa61cd052", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-0d42733030608f96", "level": "note", "message": {"text": "Unused endpoint: GET /social/channels"}, "properties": {"repobilityId": "460c7739ca402400", "scanner": "scanner-primary", "fingerprint": "0d42733030608f96", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-41e91e49b4e58946", "level": "note", "message": {"text": "Unused endpoint: POST /admin/social/channels/upsert"}, "properties": {"repobilityId": "446405f25ea47134", "scanner": "scanner-primary", "fingerprint": "41e91e49b4e58946", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5d9be324e6d4cba7", "level": "note", "message": {"text": "Unused endpoint: POST /events/track"}, "properties": {"repobilityId": "efb5203699beabe8", "scanner": "scanner-primary", "fingerprint": "5d9be324e6d4cba7", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d38b0c45098a7d87", "level": "note", "message": {"text": "Unused endpoint: GET /community/heat"}, "properties": {"repobilityId": "49f1e1e9f2bab090", "scanner": "scanner-primary", "fingerprint": "d38b0c45098a7d87", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5b036cfabdae267d", "level": "note", "message": {"text": "Unused endpoint: POST /generate-copy"}, "properties": {"repobilityId": "b06e07207c78720a", "scanner": "scanner-primary", "fingerprint": "5b036cfabdae267d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b5fd07c8776b6862", "level": "note", "message": {"text": "Unused endpoint: GET /recap/{fixture_id}"}, "properties": {"repobilityId": "b6bdc3aa9f46bd97", "scanner": "scanner-primary", "fingerprint": "b5fd07c8776b6862", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-166c1584c9b8e94b", "level": "note", "message": {"text": "Unused endpoint: POST /sync/fixtures"}, "properties": {"repobilityId": "bc8f0c53bb3cee0b", "scanner": "scanner-primary", "fingerprint": "166c1584c9b8e94b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-9b53ddb091c9f07f", "level": "note", "message": {"text": "Unused endpoint: POST /sync/results"}, "properties": {"repobilityId": "1526653a6e232295", "scanner": "scanner-primary", "fingerprint": "9b53ddb091c9f07f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-90ccf256ae3c6310", "level": "note", "message": {"text": "Unused endpoint: GET /tokens/wallet/{user_id}"}, "properties": {"repobilityId": "25ba24ac37592c7b", "scanner": "scanner-primary", "fingerprint": "90ccf256ae3c6310", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2f3f20e6b8b08fcb", "level": "note", "message": {"text": "Unused endpoint: POST /tokens/checkin"}, "properties": {"repobilityId": "11491f6b118361ab", "scanner": "scanner-primary", "fingerprint": "2f3f20e6b8b08fcb", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-be8b5d06c7bdab12", "level": "note", "message": {"text": "Unused endpoint: POST /tokens/unlock-report"}, "properties": {"repobilityId": "f031caabf7ac7375", "scanner": "scanner-primary", "fingerprint": "be8b5d06c7bdab12", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-fb7010db9e247dcc", "level": "note", "message": {"text": "Unused endpoint: POST /corrections/{match_id}/simulate"}, "properties": {"repobilityId": "9e70166139173d2a", "scanner": "scanner-primary", "fingerprint": "fb7010db9e247dcc", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1bad048227a4ad82", "level": "note", "message": {"text": "Unused endpoint: POST /challenges/{challenge_id}/join"}, "properties": {"repobilityId": "a33fe36804397e14", "scanner": "scanner-primary", "fingerprint": "1bad048227a4ad82", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a4b69b1c5e547fe6", "level": "note", "message": {"text": "Unused endpoint: POST /community/subscribe"}, "properties": {"repobilityId": "8b417a95353043c2", "scanner": "scanner-primary", "fingerprint": "a4b69b1c5e547fe6", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-09e75e7e4adfd9c0", "level": "note", "message": {"text": "Unused endpoint: POST /click"}, "properties": {"repobilityId": "95b64ebf2bc6d94c", "scanner": "scanner-primary", "fingerprint": "09e75e7e4adfd9c0", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-bdca846e5d697a0b", "level": "note", "message": {"text": "Unused endpoint: POST /join-intent"}, "properties": {"repobilityId": "7d5d978c200731b9", "scanner": "scanner-primary", "fingerprint": "bdca846e5d697a0b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-4eb75f799cc0b0d7", "level": "note", "message": {"text": "Unused endpoint: POST /admin/ambassadors"}, "properties": {"repobilityId": "3becd30c62239b72", "scanner": "scanner-primary", "fingerprint": "4eb75f799cc0b0d7", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-0d9c9bb4753bd9ce", "level": "note", "message": {"text": "Unused endpoint: PATCH /admin/ambassadors/{code}"}, "properties": {"repobilityId": "922d19891aa26b5c", "scanner": "scanner-primary", "fingerprint": "0d9c9bb4753bd9ce", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-98bf724e39396970", "level": "note", "message": {"text": "Unused endpoint: GET /admin/dashboard"}, "properties": {"repobilityId": "4aa84d6a841a7837", "scanner": "scanner-primary", "fingerprint": "98bf724e39396970", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-111b9a786f66d3cc", "level": "note", "message": {"text": "Unused endpoint: POST /admin/intents/{intent_id}/confirm"}, "properties": {"repobilityId": "c94deb2979f71b20", "scanner": "scanner-primary", "fingerprint": "111b9a786f66d3cc", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-256a0bc652eb573e", "level": "note", "message": {"text": "Unused endpoint: POST /admin/contributions"}, "properties": {"repobilityId": "bd5bca7b4c0dc6ae", "scanner": "scanner-primary", "fingerprint": "256a0bc652eb573e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d642e884953b6c8d", "level": "note", "message": {"text": "Unused endpoint: POST /admin/contributions/{contribution_id}/review"}, "properties": {"repobilityId": "1bbebd9b6979d2f2", "scanner": "scanner-primary", "fingerprint": "d642e884953b6c8d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-616c69deffb7133d", "level": "note", "message": {"text": "Unused endpoint: GET /admin/export"}, "properties": {"repobilityId": "f3a024413b5251d0", "scanner": "scanner-primary", "fingerprint": "616c69deffb7133d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-89f87052a1277689", "level": "note", "message": {"text": "Unused endpoint: GET /daily-fixtures"}, "properties": {"repobilityId": "8481c5dac49830ab", "scanner": "scanner-primary", "fingerprint": "89f87052a1277689", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d678973662fed76d", "level": "note", "message": {"text": "Unused endpoint: POST /admin/daily-fixtures/upload"}, "properties": {"repobilityId": "50eb74a4f395af3b", "scanner": "scanner-primary", "fingerprint": "d678973662fed76d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7af2af0726a72987", "level": "note", "message": {"text": "Unused endpoint: POST /admin/daily-fixtures/refresh"}, "properties": {"repobilityId": "1352b53656a6d0f2", "scanner": "scanner-primary", "fingerprint": "7af2af0726a72987", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b8ecc43cb29112a1", "level": "note", "message": {"text": "Unused endpoint: GET /matches"}, "properties": {"repobilityId": "93f379aee31014e8", "scanner": "scanner-primary", "fingerprint": "b8ecc43cb29112a1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-41e39baf9b33f99a", "level": "note", "message": {"text": "Unused endpoint: GET /matches/{match_id}"}, "properties": {"repobilityId": "fab87dc8b407d2ed", "scanner": "scanner-primary", "fingerprint": "41e39baf9b33f99a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-231e982845827773", "level": "note", "message": {"text": "Unused endpoint: GET /reports/{match_id}"}, "properties": {"repobilityId": "99a96bccf81b2223", "scanner": "scanner-primary", "fingerprint": "231e982845827773", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6f5d873175a5f0d1", "level": "note", "message": {"text": "Unused endpoint: POST /matches/{match_id}/refresh"}, "properties": {"repobilityId": "9928b6562d3e1b6a", "scanner": "scanner-primary", "fingerprint": "6f5d873175a5f0d1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}