{"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-1c4cf10b779547b7", "name": "Possibly dead Python function: extract_vcp", "shortDescription": {"text": "Possibly dead Python function: extract_vcp"}, "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-d2054bdd7954f80a", "name": "Possibly dead Python function: extract_canslim", "shortDescription": {"text": "Possibly dead Python function: extract_canslim"}, "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-633d261f118095e5", "name": "Possibly dead Python function: evaluate_trigger", "shortDescription": {"text": "Possibly dead Python function: evaluate_trigger"}, "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-7fc5e5d47ed1d8ab", "name": "Possibly dead Python function: expiry_event_time", "shortDescription": {"text": "Possibly dead Python function: expiry_event_time"}, "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-124abe0a51003642", "name": "Possibly dead Python function: score_label", "shortDescription": {"text": "Possibly dead Python function: score_label"}, "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-5cf3486a7af03779", "name": "Possibly dead Python function: scan_watchlist", "shortDescription": {"text": "Possibly dead Python function: scan_watchlist"}, "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-7d7bd4dcb60f7f5f", "name": "Possibly dead Python function: to_note", "shortDescription": {"text": "Possibly dead Python function: to_note"}, "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-6e57845798022894", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 pwa/src/components/WsrDetailModal.tsx:127", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 pwa/src/components/WsrDetailModal.tsx:127"}, "fullDescription": {"text": "Open XSS surface unless the input is provably trusted. Replace with explicit JSX or sanitize via a vetted library.\n\nWhy: OWASP basics. Already partially flagged by the security analyzer.\nRule id: fq.dangerous-html"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-30eb1efa4700f437", "name": "`truncate` class without `title=` for hover reveal \u2014 pwa/src/components/ArchiveViewer.tsx:37", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 pwa/src/components/ArchiveViewer.tsx:37"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9b589b62f6bba0c0", "name": "`truncate` class without `title=` for hover reveal \u2014 pwa/src/pages/SettingsPage.tsx:713", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 pwa/src/pages/SettingsPage.tsx:713"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3f5d5fbfa8c23348", "name": "\"active\" state uses light bg in a dark theme \u2014 pwa/src/pages/SettingsPage.tsx:829", "shortDescription": {"text": "\"active\" state uses light bg in a dark theme \u2014 pwa/src/pages/SettingsPage.tsx:829"}, "fullDescription": {"text": "A ternary like `active ? 'bg-white' : '...'` (or bg-gray-100/200) on a dark theme produces jarring white pills. Use a dark-emphasized active state instead \u2014 border + ring or slightly brighter dark bg. Example: `active ? 'bg-gray-800 border-gray-500 ring-1 ring-blue-500/30' : '\u2026'`.\n\nWhy: P-E in CHECKLIST.md \u2014 light bg in a dark theme is a class of regression.\nRule id: fq.active-light-bg"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-dd0950b409ed7a83", "name": "`truncate` class without `title=` for hover reveal \u2014 pwa/src/pages/ArchivePage.tsx:26", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 pwa/src/pages/ArchivePage.tsx:26"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-de072ac18d67544a", "name": "`truncate` class without `title=` for hover reveal \u2014 pwa/src/cards/SectorMixCard.tsx:98", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 pwa/src/cards/SectorMixCard.tsx:98"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7d9d53ea9c081894", "name": "`truncate` class without `title=` for hover reveal \u2014 pwa/src/cards/CongressTradesCard.tsx:45", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 pwa/src/cards/CongressTradesCard.tsx:45"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-357b746df0de074c", "name": "`truncate` class without `title=` for hover reveal \u2014 pwa/src/cards/TldrTodayCard.tsx:358", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 pwa/src/cards/TldrTodayCard.tsx:358"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-91db90336f252f8d", "name": "`truncate` class without `title=` for hover reveal \u2014 pwa/src/cards/UpcomingCalendarsCard.tsx:143", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 pwa/src/cards/UpcomingCalendarsCard.tsx:143"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9fcb3d94909ad9c5", "name": "`truncate` class without `title=` for hover reveal \u2014 pwa/src/cards/MoversCard.tsx:44", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 pwa/src/cards/MoversCard.tsx:44"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9faf2fcdf7d3bc2f", "name": "`truncate` class without `title=` for hover reveal \u2014 pwa/src/cards/DecisionJournalCard.tsx:178", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 pwa/src/cards/DecisionJournalCard.tsx:178"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7e8d6552fa609e0b", "name": "`truncate` class without `title=` for hover reveal \u2014 pwa/src/cards/HitRateCard.tsx:223", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 pwa/src/cards/HitRateCard.tsx:223"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8e0c48928d3b2ad8", "name": "`truncate` class without `title=` for hover reveal \u2014 pwa/src/cards/RiskAllocationCard.tsx:327", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 pwa/src/cards/RiskAllocationCard.tsx:327"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-76bfbbe1770ad7df", "name": "`truncate` class without `title=` for hover reveal \u2014 pwa/src/cards/ApiUsageCard.tsx:177", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 pwa/src/cards/ApiUsageCard.tsx:177"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-791bdfb0bbf753a8", "name": "`truncate` class without `title=` for hover reveal \u2014 pwa/src/cards/FreshIdeasCard.tsx:179", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 pwa/src/cards/FreshIdeasCard.tsx:179"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d1664eecc2d5bfa9", "name": "Privileged port 13 in use", "shortDescription": {"text": "Privileged port 13 in use"}, "fullDescription": {"text": "Port 13 is privileged (<1024). Make sure the service runs with the right caps or front it with a non-privileged port via a load balancer."}, "properties": {"scanner": "scanner-primary", "layer": "network", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c53843fc5503bbc1", "name": "Privileged port 21 in use", "shortDescription": {"text": "Privileged port 21 in use"}, "fullDescription": {"text": "Port 21 is privileged (<1024). Make sure the service runs with the right caps or front it with a non-privileged port via a load balancer."}, "properties": {"scanner": "scanner-primary", "layer": "network", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4e0bda90e8ddaab4", "name": "Privileged port 5 in use", "shortDescription": {"text": "Privileged port 5 in use"}, "fullDescription": {"text": "Port 5 is privileged (<1024). Make sure the service runs with the right caps or front it with a non-privileged port via a load balancer."}, "properties": {"scanner": "scanner-primary", "layer": "network", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3ff7bffe9e975f10", "name": "Privileged port 30 in use", "shortDescription": {"text": "Privileged port 30 in use"}, "fullDescription": {"text": "Port 30 is privileged (<1024). Make sure the service runs with the right caps or front it with a non-privileged port via a load balancer."}, "properties": {"scanner": "scanner-primary", "layer": "network", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e15b0d39d93a0d40", "name": "Insecure pattern 'dangerous_innerhtml' in pwa/src/components/WsrDetailModal.tsx:127", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in pwa/src/components/WsrDetailModal.tsx:127"}, "fullDescription": {"text": "Found a known-risky pattern (dangerous_innerhtml). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-db311731bbbda8f8", "name": "Insecure pattern 'direct_innerhtml_assignment' in pwa/src/components/StockDetail.tsx:366", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in pwa/src/components/StockDetail.tsx:366"}, "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-20ffe6bf9a187622", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "anthropics/claude-code-action@v1.0.112 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2f00d3153773cfff", "name": "GitHub Actions workflow grants broad write permissions", "shortDescription": {"text": "GitHub Actions workflow grants broad write permissions"}, "fullDescription": {"text": "CI tokens with write permissions increase blast radius when an action, dependency, or PR workflow is compromised. Prefer job-level least-privilege permissions."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-28c4a04bd807da0c", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/deploy-pages@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ad6701f0a8405e22", "name": "GitHub Actions workflow grants broad write permissions", "shortDescription": {"text": "GitHub Actions workflow grants broad write permissions"}, "fullDescription": {"text": "CI tokens with write permissions increase blast radius when an action, dependency, or PR workflow is compromised. Prefer job-level least-privilege permissions."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e2ec911b9e7b3995", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "anthropics/claude-code-action@v1.0.112 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-725161b071a09dc8", "name": "GitHub Actions workflow grants broad write permissions", "shortDescription": {"text": "GitHub Actions workflow grants broad write permissions"}, "fullDescription": {"text": "CI tokens with write permissions increase blast radius when an action, dependency, or PR workflow is compromised. Prefer job-level least-privilege permissions."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0cab0c9a442a5fa5", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "anthropics/claude-code-action@v1.0.112 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-47d778ba26b8045e", "name": "GitHub Actions workflow grants broad write permissions", "shortDescription": {"text": "GitHub Actions workflow grants broad write permissions"}, "fullDescription": {"text": "CI tokens with write permissions increase blast radius when an action, dependency, or PR workflow is compromised. Prefer job-level least-privilege permissions."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-97001f132dacfb36", "name": "Very large file: scripts/signal_feedback.py (1261 lines)", "shortDescription": {"text": "Very large file: scripts/signal_feedback.py (1261 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9dccef3c4e4ce72f", "name": "Very large file: scripts/daily_tracker.py (1469 lines)", "shortDescription": {"text": "Very large file: scripts/daily_tracker.py (1469 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ecdc8d6c1d0d5543", "name": "Very large file: scripts/screen_gov_confluence.py (1237 lines)", "shortDescription": {"text": "Very large file: scripts/screen_gov_confluence.py (1237 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d7afea3486173c40", "name": "Very large file: scripts/daily_options_scan.py (2681 lines)", "shortDescription": {"text": "Very large file: scripts/daily_options_scan.py (2681 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-96f244d479b07a19", "name": "Very large file: scripts/trigger_alerts.py (2111 lines)", "shortDescription": {"text": "Very large file: scripts/trigger_alerts.py (2111 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a42748669daed950", "name": "Very large file: src/telegram.py (1456 lines)", "shortDescription": {"text": "Very large file: src/telegram.py (1456 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ea3b5e389d8c9c0f", "name": "Low test-to-source ratio", "shortDescription": {"text": "Low test-to-source ratio"}, "fullDescription": {"text": "46 tests / 201 src (ratio 0.23)."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "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 263 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 23 placeholder/mock markers across 12 source files. This often means the repo looks complete while core flows still use generated scaffolding or fake data."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2d0c7b7ab8f8aacf", "name": "Critical user flow still appears backed by mock or placeholder data", "shortDescription": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "fullDescription": {"text": "A payment/auth/admin/order/billing-style flow contains mock, fake, TODO, dummy, or placeholder markers in runtime source. In the Fable corpus this is a high-leverage completeness smell: the app can look finished while the money, identity, or tenant flow is still scaffolded."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ea8f3013f588db25", "name": "Shallow git history limits provenance confidence", "shortDescription": {"text": "Shallow git history limits provenance confidence"}, "fullDescription": {"text": "The repository is a shallow clone. Origin/evolution analysis cannot distinguish fresh generation, imported legacy code, or long-lived human code with high confidence."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8424db9c75e04ba4", "name": "Very short observed git history", "shortDescription": {"text": "Very short observed git history"}, "fullDescription": {"text": "The repo has multiple source files but two or fewer visible commits. This is not a failure by itself, but it lowers confidence in evolution-based diagnosis."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-70d25ba170503764", "name": "Legacy-named symbol `premium_v2` in tests/test_realized_kelly.py:175", "shortDescription": {"text": "Legacy-named symbol `premium_v2` in tests/test_realized_kelly.py:175"}, "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-17b0a53b6453855b", "name": "Commented-code block (8 lines) in tests/test_alert_lanes.py:350", "shortDescription": {"text": "Commented-code block (8 lines) in tests/test_alert_lanes.py:350"}, "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-8fd0aa6a592cb1a8", "name": "Commented-code block (6 lines) in scripts/growth_scan.py:116", "shortDescription": {"text": "Commented-code block (6 lines) in scripts/growth_scan.py:116"}, "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-8ea6375c9ba99026", "name": "Commented-code block (6 lines) in scripts/signal_feedback.py:67", "shortDescription": {"text": "Commented-code block (6 lines) in scripts/signal_feedback.py:67"}, "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-7f4be7cef8a27e50", "name": "Legacy-named symbol `dropped_old` in scripts/finnhub_news_insider.py:234", "shortDescription": {"text": "Legacy-named symbol `dropped_old` in scripts/finnhub_news_insider.py:234"}, "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-68c6e801a372533a", "name": "Commented-code block (6 lines) in scripts/finnhub_news_insider.py:45", "shortDescription": {"text": "Commented-code block (6 lines) in scripts/finnhub_news_insider.py:45"}, "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-6a9e1210e8cbdf4e", "name": "Commented-code block (5 lines) in scripts/push_decisions.py:203", "shortDescription": {"text": "Commented-code block (5 lines) in scripts/push_decisions.py:203"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-97aad871106ef9c9", "name": "Commented-code block (5 lines) in scripts/daily_tracker.py:583", "shortDescription": {"text": "Commented-code block (5 lines) in scripts/daily_tracker.py:583"}, "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-ef14e059fa70b84f", "name": "Commented-code block (5 lines) in scripts/paper_benchmark.py:141", "shortDescription": {"text": "Commented-code block (5 lines) in scripts/paper_benchmark.py:141"}, "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-e946e0341238dc10", "name": "Commented-code block (10 lines) in scripts/screen_gov_confluence.py:122", "shortDescription": {"text": "Commented-code block (10 lines) in scripts/screen_gov_confluence.py:122"}, "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-d98a0ab8796e5362", "name": "Commented-code block (6 lines) in scripts/backtest_scoring.py:32", "shortDescription": {"text": "Commented-code block (6 lines) in scripts/backtest_scoring.py:32"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e01a1813d417e754", "name": "Commented-code block (9 lines) in scripts/build_daily_plan.py:34", "shortDescription": {"text": "Commented-code block (9 lines) in scripts/build_daily_plan.py:34"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ce8cb437c7915d70", "name": "Commented-code block (8 lines) in scripts/daily_options_scan.py:57", "shortDescription": {"text": "Commented-code block (8 lines) in scripts/daily_options_scan.py:57"}, "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-ce75bae9faa92bba", "name": "Commented-code block (8 lines) in scripts/risk_parity_recommend.py:431", "shortDescription": {"text": "Commented-code block (8 lines) in scripts/risk_parity_recommend.py:431"}, "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-6b6b0c6dd28b6624", "name": "Commented-code block (6 lines) in scripts/ibkr_flex_sync.py:133", "shortDescription": {"text": "Commented-code block (6 lines) in scripts/ibkr_flex_sync.py:133"}, "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-164505ca0deb7f2a", "name": "Network/subprocess call without timeout or try/except \u2014 scripts/ibkr_flex_sync.py:275", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 scripts/ibkr_flex_sync.py:275"}, "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-4a29615b4523c80f", "name": "Commented-code block (6 lines) in scripts/exposure_posture_run.py:133", "shortDescription": {"text": "Commented-code block (6 lines) in scripts/exposure_posture_run.py:133"}, "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-b97edb5d579e176b", "name": "Commented-code block (5 lines) in scripts/telegram_portfolio_responder.py:208", "shortDescription": {"text": "Commented-code block (5 lines) in scripts/telegram_portfolio_responder.py:208"}, "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-cd9e3fd588c58a66", "name": "Commented-code block (8 lines) in scripts/mirror_to_firestore.py:114", "shortDescription": {"text": "Commented-code block (8 lines) in scripts/mirror_to_firestore.py:114"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c921a655c2c5e892", "name": "Commented-code block (9 lines) in scripts/iv_surface_scan.py:165", "shortDescription": {"text": "Commented-code block (9 lines) in scripts/iv_surface_scan.py:165"}, "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-53d40f57240dfd4b", "name": "Commented-code block (9 lines) in scripts/trigger_alerts.py:98", "shortDescription": {"text": "Commented-code block (9 lines) in scripts/trigger_alerts.py:98"}, "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-074094984e0b876c", "name": "Commented-code block (5 lines) in scripts/push_brief.py:160", "shortDescription": {"text": "Commented-code block (5 lines) in scripts/push_brief.py:160"}, "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-92095be4cec06f1a", "name": "Commented-code block (7 lines) in pwa/src/main.tsx:6", "shortDescription": {"text": "Commented-code block (7 lines) in pwa/src/main.tsx:6"}, "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-52535783db8ed416", "name": "Commented-code block (5 lines) in pwa/src/App.tsx:114", "shortDescription": {"text": "Commented-code block (5 lines) in pwa/src/App.tsx:114"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a0c588596814d299", "name": "Legacy-named symbol `casaa_settings_v2` in pwa/src/settings.ts:34", "shortDescription": {"text": "Legacy-named symbol `casaa_settings_v2` in pwa/src/settings.ts:34"}, "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-f221d77498bf4421", "name": "Legacy-named symbol `casaa_decision_actions_v1` in pwa/src/lib/useDecisionActions.ts:28", "shortDescription": {"text": "Legacy-named symbol `casaa_decision_actions_v1` in pwa/src/lib/useDecisionActions.ts:28"}, "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-0a6eff9929865fa0", "name": "Legacy-named symbol `casaa_decision_actions_v1` in pwa/src/lib/decisionActions.ts:23", "shortDescription": {"text": "Legacy-named symbol `casaa_decision_actions_v1` in pwa/src/lib/decisionActions.ts:23"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-11e09fc042804d9f", "name": "Legacy-named symbol `casaa_portfolio_subtab_migrated_v2` in pwa/src/pages/PortfolioPage.tsx:21", "shortDescription": {"text": "Legacy-named symbol `casaa_portfolio_subtab_migrated_v2` in pwa/src/pages/PortfolioPage.tsx:21"}, "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-70faebef028bd519", "name": "Commented-code block (5 lines) in pwa/src/pages/HarvestPage.tsx:120", "shortDescription": {"text": "Commented-code block (5 lines) in pwa/src/pages/HarvestPage.tsx:120"}, "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-6a4d69b3ca3ef3de", "name": "Commented-code block (6 lines) in pwa/src/cards/ClosedDecisionsCard.tsx:118", "shortDescription": {"text": "Commented-code block (6 lines) in pwa/src/cards/ClosedDecisionsCard.tsx:118"}, "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-44f22ed7d8408933", "name": "Commented-code block (5 lines) in pwa/src/cards/TldrTodayCard.tsx:93", "shortDescription": {"text": "Commented-code block (5 lines) in pwa/src/cards/TldrTodayCard.tsx:93"}, "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-34cd36f88d0c31b1", "name": "Commented-code block (7 lines) in pwa/src/cards/PnlCard.tsx:137", "shortDescription": {"text": "Commented-code block (7 lines) in pwa/src/cards/PnlCard.tsx:137"}, "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-11e4937158574b97", "name": "Commented-code block (5 lines) in pwa/src/cards/TopCandidatesCard.tsx:197", "shortDescription": {"text": "Commented-code block (5 lines) in pwa/src/cards/TopCandidatesCard.tsx:197"}, "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-4f64139f2ec3d1b7", "name": "Commented-code block (5 lines) in pwa/src/cards/HitRateCard.tsx:92", "shortDescription": {"text": "Commented-code block (5 lines) in pwa/src/cards/HitRateCard.tsx:92"}, "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-09ecb690303a10dc", "name": "Commented-code block (5 lines) in pwa/src/cards/WheelCard.tsx:381", "shortDescription": {"text": "Commented-code block (5 lines) in pwa/src/cards/WheelCard.tsx:381"}, "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-d19026f0f0ed08df", "name": "Commented-code block (5 lines) in src/realized_premium.py:109", "shortDescription": {"text": "Commented-code block (5 lines) in src/realized_premium.py:109"}, "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-b43b33540762ab04", "name": "Network/subprocess call without timeout or try/except \u2014 src/ibkr_grab.py:263", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 src/ibkr_grab.py:263"}, "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-81233aaecc111c74", "name": "Commented-code block (7 lines) in src/macro_blackouts.py:54", "shortDescription": {"text": "Commented-code block (7 lines) in src/macro_blackouts.py:54"}, "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-4f39cd6389597741", "name": "Commented-code block (5 lines) in src/exit_plan.py:274", "shortDescription": {"text": "Commented-code block (5 lines) in src/exit_plan.py:274"}, "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-8bbc8b628e9af34f", "name": "Commented-code block (7 lines) in src/sync.py:395", "shortDescription": {"text": "Commented-code block (7 lines) in src/sync.py:395"}, "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-80cfd1087e4e8fa2", "name": "Commented-code block (7 lines) in src/trading_rules.py:88", "shortDescription": {"text": "Commented-code block (7 lines) in src/trading_rules.py:88"}, "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-d6daec08c14d949a", "name": "Commented-code block (6 lines) in src/option_scanner.py:50", "shortDescription": {"text": "Commented-code block (6 lines) in src/option_scanner.py:50"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d62854b0cafee9b4", "name": "Commented-code block (5 lines) in src/yahoo_grab.py:172", "shortDescription": {"text": "Commented-code block (5 lines) in src/yahoo_grab.py:172"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-efdf52b2b4b84542", "name": "Commented-code block (5 lines) in src/news_aggregator.py:258", "shortDescription": {"text": "Commented-code block (5 lines) in src/news_aggregator.py:258"}, "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-a70cc0de29023104", "name": "Commented-code block (5 lines) in src/macro_playbook.py:16", "shortDescription": {"text": "Commented-code block (5 lines) in src/macro_playbook.py:16"}, "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-470ba52b77d6f9d0", "name": "Commented-code block (8 lines) in src/position_sizing.py:27", "shortDescription": {"text": "Commented-code block (8 lines) in src/position_sizing.py:27"}, "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-18b26196944f756e", "name": "Commented-code block (5 lines) in src/schema/macro.py:39", "shortDescription": {"text": "Commented-code block (5 lines) in src/schema/macro.py:39"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-242796e0abdd59ce", "name": "Legacy-named symbol `premium_v2` in src/schema/options.py:418", "shortDescription": {"text": "Legacy-named symbol `premium_v2` in src/schema/options.py:418"}, "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-5df847e8d99d7aa0", "name": "Commented-code block (8 lines) in src/schema/options.py:410", "shortDescription": {"text": "Commented-code block (8 lines) in src/schema/options.py:410"}, "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-a9836457f7ec50c4", "name": "23 env vars used in code but missing from .env.example", "shortDescription": {"text": "23 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `ALPACA_API_KEY_ID`, `ALPACA_API_SECRET_KEY`, `ALPACA_BASE_URL`, `ANTHROPIC_API_KEY`, `BASE_URL`, `FINNHUB_API_KEY`, `FMP_API_KEY`, `GMAIL_CLIENT_ID` + 15 more. Add them (with a placeholder/comment) to .env.example so onboarding doesn't break."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-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/finnhub_news_insider.py:read_universe, scripts/finnhub_analyst.py:read_universe\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-49c98f7cedd9c977", "name": "Near-duplicate function bodies in 4 places", "shortDescription": {"text": "Near-duplicate function bodies in 4 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nscripts/paper_benchmark.py:main, scripts/build_daily_plan.py:main, scripts/gex_regime.py:main, scripts/tail_hedge_run.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-02525d39071dd2c7", "name": "Near-duplicate function bodies in 5 places", "shortDescription": {"text": "Near-duplicate function bodies in 5 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nsrc/schema/gov.py:to_row, src/schema/gov.py:to_row, src/schema/gov.py:to_row, src/schema/gov.py:to_row\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-fe1d9311d6aee734", "name": "Near-duplicate function bodies in 12 places", "shortDescription": {"text": "Near-duplicate function bodies in 12 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nsrc/schema/macro.py:to_row, src/schema/macro.py:to_row, src/schema/macro.py:to_row, src/schema/macro.py:to_row\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-76a2f6818267a9a8", "name": "Near-duplicate function bodies in 8 places", "shortDescription": {"text": "Near-duplicate function bodies in 8 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nsrc/schema/portfolio.py:to_row, src/schema/portfolio.py:to_row, src/schema/portfolio.py:to_row, src/schema/portfolio.py:to_row\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-46969939caf8120b", "name": "Near-duplicate function bodies in 9 places", "shortDescription": {"text": "Near-duplicate function bodies in 9 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nsrc/schema/decisions.py:to_row, src/schema/decisions.py:to_row, src/schema/decisions.py:to_row, src/schema/decisions.py:to_row\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-9dad557909b86499", "name": "Near-duplicate function bodies in 10 places", "shortDescription": {"text": "Near-duplicate function bodies in 10 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nsrc/schema/options.py:to_row, src/schema/options.py:to_row, src/schema/options.py:to_row, src/schema/options.py:to_row\n\nThis is *the* AI-coder failure mode (4\u00d7 more duplication in vibe-coded repos \u2014 see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}]}}, "automationDetails": {"id": "repobility/23096"}, "properties": {"repository": "xynkro/CasaaFinance", "repoUrl": "https://github.com/xynkro/CasaaFinance", "branch": "main"}, "results": [{"ruleId": "scanner-1c4cf10b779547b7", "level": "note", "message": {"text": "Possibly dead Python function: extract_vcp"}, "properties": {"repobilityId": "054bc69556537b56", "scanner": "scanner-primary", "fingerprint": "1c4cf10b779547b7", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/screen_candidates_run.py:63"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-d2054bdd7954f80a", "level": "note", "message": {"text": "Possibly dead Python function: extract_canslim"}, "properties": {"repobilityId": "a7edfdc1c400d807", "scanner": "scanner-primary", "fingerprint": "d2054bdd7954f80a", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/screen_candidates_run.py:99"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-633d261f118095e5", "level": "note", "message": {"text": "Possibly dead Python function: evaluate_trigger"}, "properties": {"repobilityId": "24a256dbf1476f90", "scanner": "scanner-primary", "fingerprint": "633d261f118095e5", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/trigger_alerts.py:273"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-7fc5e5d47ed1d8ab", "level": "note", "message": {"text": "Possibly dead Python function: expiry_event_time"}, "properties": {"repobilityId": "d00b984a918a543c", "scanner": "scanner-primary", "fingerprint": "7fc5e5d47ed1d8ab", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/trigger_alerts.py:863"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-124abe0a51003642", "level": "note", "message": {"text": "Possibly dead Python function: score_label"}, "properties": {"repobilityId": "30845536642740d6", "scanner": "scanner-primary", "fingerprint": "124abe0a51003642", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/technical_score.py:347"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-5cf3486a7af03779", "level": "note", "message": {"text": "Possibly dead Python function: scan_watchlist"}, "properties": {"repobilityId": "810dda4d656f0684", "scanner": "scanner-primary", "fingerprint": "5cf3486a7af03779", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/option_scanner.py:438"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-7d7bd4dcb60f7f5f", "level": "note", "message": {"text": "Possibly dead Python function: to_note"}, "properties": {"repobilityId": "fb53e6577d01509b", "scanner": "scanner-primary", "fingerprint": "7d7bd4dcb60f7f5f", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/position_sizing.py:140"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-6e57845798022894", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 pwa/src/components/WsrDetailModal.tsx:127"}, "properties": {"repobilityId": "28e674a2e19bce0f", "scanner": "scanner-primary", "fingerprint": "6e57845798022894", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-30eb1efa4700f437", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 pwa/src/components/ArchiveViewer.tsx:37"}, "properties": {"repobilityId": "f0d7bf76df03c8d1", "scanner": "scanner-primary", "fingerprint": "30eb1efa4700f437", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-9b589b62f6bba0c0", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 pwa/src/pages/SettingsPage.tsx:713"}, "properties": {"repobilityId": "72a88812a7cb1249", "scanner": "scanner-primary", "fingerprint": "9b589b62f6bba0c0", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-3f5d5fbfa8c23348", "level": "note", "message": {"text": "\"active\" state uses light bg in a dark theme \u2014 pwa/src/pages/SettingsPage.tsx:829"}, "properties": {"repobilityId": "910f77b252948083", "scanner": "scanner-primary", "fingerprint": "3f5d5fbfa8c23348", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.active-light-bg"]}}, {"ruleId": "scanner-dd0950b409ed7a83", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 pwa/src/pages/ArchivePage.tsx:26"}, "properties": {"repobilityId": "b95b4ee14bc7b52b", "scanner": "scanner-primary", "fingerprint": "dd0950b409ed7a83", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-de072ac18d67544a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 pwa/src/cards/SectorMixCard.tsx:98"}, "properties": {"repobilityId": "284f9b189afc2837", "scanner": "scanner-primary", "fingerprint": "de072ac18d67544a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-7d9d53ea9c081894", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 pwa/src/cards/CongressTradesCard.tsx:45"}, "properties": {"repobilityId": "9f444dc4be24d757", "scanner": "scanner-primary", "fingerprint": "7d9d53ea9c081894", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-357b746df0de074c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 pwa/src/cards/TldrTodayCard.tsx:358"}, "properties": {"repobilityId": "3befba5ce433be70", "scanner": "scanner-primary", "fingerprint": "357b746df0de074c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-91db90336f252f8d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 pwa/src/cards/UpcomingCalendarsCard.tsx:143"}, "properties": {"repobilityId": "a12ede518e97cae2", "scanner": "scanner-primary", "fingerprint": "91db90336f252f8d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-9fcb3d94909ad9c5", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 pwa/src/cards/MoversCard.tsx:44"}, "properties": {"repobilityId": "f682ad127766fa9f", "scanner": "scanner-primary", "fingerprint": "9fcb3d94909ad9c5", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-9faf2fcdf7d3bc2f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 pwa/src/cards/DecisionJournalCard.tsx:178"}, "properties": {"repobilityId": "31ac996c20527f71", "scanner": "scanner-primary", "fingerprint": "9faf2fcdf7d3bc2f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-7e8d6552fa609e0b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 pwa/src/cards/HitRateCard.tsx:223"}, "properties": {"repobilityId": "7287d81cf351b14c", "scanner": "scanner-primary", "fingerprint": "7e8d6552fa609e0b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-8e0c48928d3b2ad8", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 pwa/src/cards/RiskAllocationCard.tsx:327"}, "properties": {"repobilityId": "8cb88a87f62c788c", "scanner": "scanner-primary", "fingerprint": "8e0c48928d3b2ad8", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-76bfbbe1770ad7df", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 pwa/src/cards/ApiUsageCard.tsx:177"}, "properties": {"repobilityId": "d98576b66a772f3d", "scanner": "scanner-primary", "fingerprint": "76bfbbe1770ad7df", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-791bdfb0bbf753a8", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 pwa/src/cards/FreshIdeasCard.tsx:179"}, "properties": {"repobilityId": "613d9c6717fdb705", "scanner": "scanner-primary", "fingerprint": "791bdfb0bbf753a8", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d1664eecc2d5bfa9", "level": "warning", "message": {"text": "Privileged port 13 in use"}, "properties": {"repobilityId": "79d721e4d6f64798", "scanner": "scanner-primary", "fingerprint": "d1664eecc2d5bfa9", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/intraday_loop_local.sh"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-c53843fc5503bbc1", "level": "warning", "message": {"text": "Privileged port 21 in use"}, "properties": {"repobilityId": "d920b7cd1b1a16dc", "scanner": "scanner-primary", "fingerprint": "c53843fc5503bbc1", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/intraday_loop_local.sh"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-4e0bda90e8ddaab4", "level": "warning", "message": {"text": "Privileged port 5 in use"}, "properties": {"repobilityId": "a8f80b4866464301", "scanner": "scanner-primary", "fingerprint": "4e0bda90e8ddaab4", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/intraday_loop_local.sh"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3ff7bffe9e975f10", "level": "warning", "message": {"text": "Privileged port 30 in use"}, "properties": {"repobilityId": "54f172e7d16fc662", "scanner": "scanner-primary", "fingerprint": "3ff7bffe9e975f10", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/intraday_loop_local.sh"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-e15b0d39d93a0d40", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in pwa/src/components/WsrDetailModal.tsx:127"}, "properties": {"repobilityId": "d10761bc38b1b756", "scanner": "scanner-primary", "fingerprint": "e15b0d39d93a0d40", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "pwa/src/components/WsrDetailModal.tsx"}, "region": {"startLine": 127}}}]}, {"ruleId": "scanner-db311731bbbda8f8", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in pwa/src/components/StockDetail.tsx:366"}, "properties": {"repobilityId": "e501eb4f7ab27f08", "scanner": "scanner-primary", "fingerprint": "db311731bbbda8f8", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "pwa/src/components/StockDetail.tsx"}, "region": {"startLine": 366}}}]}, {"ruleId": "scanner-20ffe6bf9a187622", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "7e64646afb3af557", "scanner": "scanner-primary", "fingerprint": "20ffe6bf9a187622", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/wsr-full.yml"}, "region": {"startLine": 35}}}]}, {"ruleId": "scanner-2f00d3153773cfff", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "0ef13d0e72b3ac1b", "scanner": "scanner-primary", "fingerprint": "2f00d3153773cfff", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/wsr-full.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-28c4a04bd807da0c", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "419d1ec7943efec2", "scanner": "scanner-primary", "fingerprint": "28c4a04bd807da0c", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/deploy.yml"}, "region": {"startLine": 66}}}]}, {"ruleId": "scanner-ad6701f0a8405e22", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "8384c23520d55657", "scanner": "scanner-primary", "fingerprint": "ad6701f0a8405e22", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/deploy.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-e2ec911b9e7b3995", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "a7ec5844a4d99c07", "scanner": "scanner-primary", "fingerprint": "e2ec911b9e7b3995", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/daily-brief.yml"}, "region": {"startLine": 42}}}]}, {"ruleId": "scanner-725161b071a09dc8", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "5cbc3faa7ebdf253", "scanner": "scanner-primary", "fingerprint": "725161b071a09dc8", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/daily-brief.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-0cab0c9a442a5fa5", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "0f82ca681fba6634", "scanner": "scanner-primary", "fingerprint": "0cab0c9a442a5fa5", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/wsr-lite.yml"}, "region": {"startLine": 36}}}]}, {"ruleId": "scanner-47d778ba26b8045e", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "59cb23d825faf51b", "scanner": "scanner-primary", "fingerprint": "47d778ba26b8045e", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/wsr-lite.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-97001f132dacfb36", "level": "note", "message": {"text": "Very large file: scripts/signal_feedback.py (1261 lines)"}, "properties": {"repobilityId": "7a0ac5df9594bc0a", "scanner": "scanner-primary", "fingerprint": "97001f132dacfb36", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-9dccef3c4e4ce72f", "level": "note", "message": {"text": "Very large file: scripts/daily_tracker.py (1469 lines)"}, "properties": {"repobilityId": "bbb3595402049a0f", "scanner": "scanner-primary", "fingerprint": "9dccef3c4e4ce72f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-ecdc8d6c1d0d5543", "level": "note", "message": {"text": "Very large file: scripts/screen_gov_confluence.py (1237 lines)"}, "properties": {"repobilityId": "81096606a8c820f8", "scanner": "scanner-primary", "fingerprint": "ecdc8d6c1d0d5543", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-d7afea3486173c40", "level": "note", "message": {"text": "Very large file: scripts/daily_options_scan.py (2681 lines)"}, "properties": {"repobilityId": "8e38b763916650b5", "scanner": "scanner-primary", "fingerprint": "d7afea3486173c40", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-96f244d479b07a19", "level": "note", "message": {"text": "Very large file: scripts/trigger_alerts.py (2111 lines)"}, "properties": {"repobilityId": "7a31776d7d1688d4", "scanner": "scanner-primary", "fingerprint": "96f244d479b07a19", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-a42748669daed950", "level": "note", "message": {"text": "Very large file: src/telegram.py (1456 lines)"}, "properties": {"repobilityId": "e94e1e05fd92d4ae", "scanner": "scanner-primary", "fingerprint": "a42748669daed950", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-ea3b5e389d8c9c0f", "level": "note", "message": {"text": "Low test-to-source ratio"}, "properties": {"repobilityId": "ef7b2552cc00a375", "scanner": "scanner-primary", "fingerprint": "ea3b5e389d8c9c0f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["tests"]}}, {"ruleId": "scanner-141b30a41e03817b", "level": "note", "message": {"text": "No license file detected"}, "properties": {"repobilityId": "cdfc88f82ffe35b1", "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": "cfe897e058a4e067", "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": "ca90ad16d9fb0427", "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": "c8175fe8a146bf54", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-ea8f3013f588db25", "level": "note", "message": {"text": "Shallow git history limits provenance confidence"}, "properties": {"repobilityId": "664d40b7c3440dc6", "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": "e166e386eda95ef4", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-70d25ba170503764", "level": "note", "message": {"text": "Legacy-named symbol `premium_v2` in tests/test_realized_kelly.py:175"}, "properties": {"repobilityId": "b35600bade870543", "scanner": "scanner-primary", "fingerprint": "70d25ba170503764", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-17b0a53b6453855b", "level": "none", "message": {"text": "Commented-code block (8 lines) in tests/test_alert_lanes.py:350"}, "properties": {"repobilityId": "40a583fee204cd9a", "scanner": "scanner-primary", "fingerprint": "17b0a53b6453855b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8fd0aa6a592cb1a8", "level": "none", "message": {"text": "Commented-code block (6 lines) in scripts/growth_scan.py:116"}, "properties": {"repobilityId": "439e18fd3be5d7aa", "scanner": "scanner-primary", "fingerprint": "8fd0aa6a592cb1a8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8ea6375c9ba99026", "level": "none", "message": {"text": "Commented-code block (6 lines) in scripts/signal_feedback.py:67"}, "properties": {"repobilityId": "d7a334eafb80655a", "scanner": "scanner-primary", "fingerprint": "8ea6375c9ba99026", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7f4be7cef8a27e50", "level": "note", "message": {"text": "Legacy-named symbol `dropped_old` in scripts/finnhub_news_insider.py:234"}, "properties": {"repobilityId": "809cbfd781fc47ec", "scanner": "scanner-primary", "fingerprint": "7f4be7cef8a27e50", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-68c6e801a372533a", "level": "none", "message": {"text": "Commented-code block (6 lines) in scripts/finnhub_news_insider.py:45"}, "properties": {"repobilityId": "65360948686596c4", "scanner": "scanner-primary", "fingerprint": "68c6e801a372533a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6a9e1210e8cbdf4e", "level": "none", "message": {"text": "Commented-code block (5 lines) in scripts/push_decisions.py:203"}, "properties": {"repobilityId": "53d8c6cb124c151b", "scanner": "scanner-primary", "fingerprint": "6a9e1210e8cbdf4e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-97aad871106ef9c9", "level": "none", "message": {"text": "Commented-code block (5 lines) in scripts/daily_tracker.py:583"}, "properties": {"repobilityId": "45b771ff8b1b3e3b", "scanner": "scanner-primary", "fingerprint": "97aad871106ef9c9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ef14e059fa70b84f", "level": "none", "message": {"text": "Commented-code block (5 lines) in scripts/paper_benchmark.py:141"}, "properties": {"repobilityId": "c7576a3d222d7cc4", "scanner": "scanner-primary", "fingerprint": "ef14e059fa70b84f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e946e0341238dc10", "level": "none", "message": {"text": "Commented-code block (10 lines) in scripts/screen_gov_confluence.py:122"}, "properties": {"repobilityId": "d75f61bba0feddf7", "scanner": "scanner-primary", "fingerprint": "e946e0341238dc10", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d98a0ab8796e5362", "level": "none", "message": {"text": "Commented-code block (6 lines) in scripts/backtest_scoring.py:32"}, "properties": {"repobilityId": "c631b7ef39f33420", "scanner": "scanner-primary", "fingerprint": "d98a0ab8796e5362", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e01a1813d417e754", "level": "none", "message": {"text": "Commented-code block (9 lines) in scripts/build_daily_plan.py:34"}, "properties": {"repobilityId": "122da42927ffb1e3", "scanner": "scanner-primary", "fingerprint": "e01a1813d417e754", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ce8cb437c7915d70", "level": "none", "message": {"text": "Commented-code block (8 lines) in scripts/daily_options_scan.py:57"}, "properties": {"repobilityId": "004faf7c3eba4801", "scanner": "scanner-primary", "fingerprint": "ce8cb437c7915d70", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ce75bae9faa92bba", "level": "none", "message": {"text": "Commented-code block (8 lines) in scripts/risk_parity_recommend.py:431"}, "properties": {"repobilityId": "7aa36376dd2cf371", "scanner": "scanner-primary", "fingerprint": "ce75bae9faa92bba", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6b6b0c6dd28b6624", "level": "none", "message": {"text": "Commented-code block (6 lines) in scripts/ibkr_flex_sync.py:133"}, "properties": {"repobilityId": "a842c30a93c8b12b", "scanner": "scanner-primary", "fingerprint": "6b6b0c6dd28b6624", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-164505ca0deb7f2a", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 scripts/ibkr_flex_sync.py:275"}, "properties": {"repobilityId": "e8cb4dd826f64dfb", "scanner": "scanner-primary", "fingerprint": "164505ca0deb7f2a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4a29615b4523c80f", "level": "none", "message": {"text": "Commented-code block (6 lines) in scripts/exposure_posture_run.py:133"}, "properties": {"repobilityId": "3069e974a46480a0", "scanner": "scanner-primary", "fingerprint": "4a29615b4523c80f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b97edb5d579e176b", "level": "none", "message": {"text": "Commented-code block (5 lines) in scripts/telegram_portfolio_responder.py:208"}, "properties": {"repobilityId": "0ee370fbba7c4957", "scanner": "scanner-primary", "fingerprint": "b97edb5d579e176b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cd9e3fd588c58a66", "level": "none", "message": {"text": "Commented-code block (8 lines) in scripts/mirror_to_firestore.py:114"}, "properties": {"repobilityId": "fd18272336c76fb0", "scanner": "scanner-primary", "fingerprint": "cd9e3fd588c58a66", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c921a655c2c5e892", "level": "none", "message": {"text": "Commented-code block (9 lines) in scripts/iv_surface_scan.py:165"}, "properties": {"repobilityId": "6036837b78eff82d", "scanner": "scanner-primary", "fingerprint": "c921a655c2c5e892", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-53d40f57240dfd4b", "level": "none", "message": {"text": "Commented-code block (9 lines) in scripts/trigger_alerts.py:98"}, "properties": {"repobilityId": "7ad5f0a8a04860f7", "scanner": "scanner-primary", "fingerprint": "53d40f57240dfd4b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-074094984e0b876c", "level": "none", "message": {"text": "Commented-code block (5 lines) in scripts/push_brief.py:160"}, "properties": {"repobilityId": "739339288dd06940", "scanner": "scanner-primary", "fingerprint": "074094984e0b876c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-92095be4cec06f1a", "level": "none", "message": {"text": "Commented-code block (7 lines) in pwa/src/main.tsx:6"}, "properties": {"repobilityId": "6f6a7430fb6d030a", "scanner": "scanner-primary", "fingerprint": "92095be4cec06f1a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-52535783db8ed416", "level": "none", "message": {"text": "Commented-code block (5 lines) in pwa/src/App.tsx:114"}, "properties": {"repobilityId": "feccea26ff90b735", "scanner": "scanner-primary", "fingerprint": "52535783db8ed416", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a0c588596814d299", "level": "note", "message": {"text": "Legacy-named symbol `casaa_settings_v2` in pwa/src/settings.ts:34"}, "properties": {"repobilityId": "d572a4abe6cc0779", "scanner": "scanner-primary", "fingerprint": "a0c588596814d299", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-f221d77498bf4421", "level": "note", "message": {"text": "Legacy-named symbol `casaa_decision_actions_v1` in pwa/src/lib/useDecisionActions.ts:28"}, "properties": {"repobilityId": "c269d12a2aab0fd9", "scanner": "scanner-primary", "fingerprint": "f221d77498bf4421", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-0a6eff9929865fa0", "level": "note", "message": {"text": "Legacy-named symbol `casaa_decision_actions_v1` in pwa/src/lib/decisionActions.ts:23"}, "properties": {"repobilityId": "b33595a39739476c", "scanner": "scanner-primary", "fingerprint": "0a6eff9929865fa0", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-11e09fc042804d9f", "level": "note", "message": {"text": "Legacy-named symbol `casaa_portfolio_subtab_migrated_v2` in pwa/src/pages/PortfolioPage.tsx:21"}, "properties": {"repobilityId": "c4607fe317805bbc", "scanner": "scanner-primary", "fingerprint": "11e09fc042804d9f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-70faebef028bd519", "level": "none", "message": {"text": "Commented-code block (5 lines) in pwa/src/pages/HarvestPage.tsx:120"}, "properties": {"repobilityId": "58730ce43fdbe684", "scanner": "scanner-primary", "fingerprint": "70faebef028bd519", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6a4d69b3ca3ef3de", "level": "none", "message": {"text": "Commented-code block (6 lines) in pwa/src/cards/ClosedDecisionsCard.tsx:118"}, "properties": {"repobilityId": "55c989a8929b443c", "scanner": "scanner-primary", "fingerprint": "6a4d69b3ca3ef3de", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-44f22ed7d8408933", "level": "none", "message": {"text": "Commented-code block (5 lines) in pwa/src/cards/TldrTodayCard.tsx:93"}, "properties": {"repobilityId": "ea1289a46df62cf3", "scanner": "scanner-primary", "fingerprint": "44f22ed7d8408933", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-34cd36f88d0c31b1", "level": "none", "message": {"text": "Commented-code block (7 lines) in pwa/src/cards/PnlCard.tsx:137"}, "properties": {"repobilityId": "8892a0ebf3c06470", "scanner": "scanner-primary", "fingerprint": "34cd36f88d0c31b1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-11e4937158574b97", "level": "none", "message": {"text": "Commented-code block (5 lines) in pwa/src/cards/TopCandidatesCard.tsx:197"}, "properties": {"repobilityId": "e51fc8d82d644ab3", "scanner": "scanner-primary", "fingerprint": "11e4937158574b97", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4f64139f2ec3d1b7", "level": "none", "message": {"text": "Commented-code block (5 lines) in pwa/src/cards/HitRateCard.tsx:92"}, "properties": {"repobilityId": "3968bae5af744f2d", "scanner": "scanner-primary", "fingerprint": "4f64139f2ec3d1b7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-09ecb690303a10dc", "level": "none", "message": {"text": "Commented-code block (5 lines) in pwa/src/cards/WheelCard.tsx:381"}, "properties": {"repobilityId": "8a85906edf17d656", "scanner": "scanner-primary", "fingerprint": "09ecb690303a10dc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d19026f0f0ed08df", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/realized_premium.py:109"}, "properties": {"repobilityId": "1ee2b619ee1e9889", "scanner": "scanner-primary", "fingerprint": "d19026f0f0ed08df", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b43b33540762ab04", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 src/ibkr_grab.py:263"}, "properties": {"repobilityId": "3f9a5ffc07afc2e9", "scanner": "scanner-primary", "fingerprint": "b43b33540762ab04", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-81233aaecc111c74", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/macro_blackouts.py:54"}, "properties": {"repobilityId": "b29e6d6ed20c948c", "scanner": "scanner-primary", "fingerprint": "81233aaecc111c74", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4f39cd6389597741", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/exit_plan.py:274"}, "properties": {"repobilityId": "e7ecb031c4f70c62", "scanner": "scanner-primary", "fingerprint": "4f39cd6389597741", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8bbc8b628e9af34f", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/sync.py:395"}, "properties": {"repobilityId": "9ee77a5035c29fcc", "scanner": "scanner-primary", "fingerprint": "8bbc8b628e9af34f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-80cfd1087e4e8fa2", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/trading_rules.py:88"}, "properties": {"repobilityId": "034aa645726d54c5", "scanner": "scanner-primary", "fingerprint": "80cfd1087e4e8fa2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d6daec08c14d949a", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/option_scanner.py:50"}, "properties": {"repobilityId": "ac3aa9a16f22a690", "scanner": "scanner-primary", "fingerprint": "d6daec08c14d949a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d62854b0cafee9b4", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/yahoo_grab.py:172"}, "properties": {"repobilityId": "0263208d1f3f52b2", "scanner": "scanner-primary", "fingerprint": "d62854b0cafee9b4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-efdf52b2b4b84542", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/news_aggregator.py:258"}, "properties": {"repobilityId": "2487ff1429f512f8", "scanner": "scanner-primary", "fingerprint": "efdf52b2b4b84542", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a70cc0de29023104", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/macro_playbook.py:16"}, "properties": {"repobilityId": "bcf82b9c48650815", "scanner": "scanner-primary", "fingerprint": "a70cc0de29023104", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-470ba52b77d6f9d0", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/position_sizing.py:27"}, "properties": {"repobilityId": "4784dfd847cb5db6", "scanner": "scanner-primary", "fingerprint": "470ba52b77d6f9d0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-18b26196944f756e", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/schema/macro.py:39"}, "properties": {"repobilityId": "043a091155af114c", "scanner": "scanner-primary", "fingerprint": "18b26196944f756e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-242796e0abdd59ce", "level": "note", "message": {"text": "Legacy-named symbol `premium_v2` in src/schema/options.py:418"}, "properties": {"repobilityId": "66481505576a6fdb", "scanner": "scanner-primary", "fingerprint": "242796e0abdd59ce", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-5df847e8d99d7aa0", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/schema/options.py:410"}, "properties": {"repobilityId": "5fdbd251522ba751", "scanner": "scanner-primary", "fingerprint": "5df847e8d99d7aa0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a9836457f7ec50c4", "level": "note", "message": {"text": "23 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "71ec3608d30f8bcd", "scanner": "scanner-primary", "fingerprint": "a9836457f7ec50c4", "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": "8398d9874136a053", "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": "a61bab8ab5c45a13", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-49c98f7cedd9c977", "level": "note", "message": {"text": "Near-duplicate function bodies in 4 places"}, "properties": {"repobilityId": "2994e6975f956b8a", "scanner": "scanner-primary", "fingerprint": "49c98f7cedd9c977", "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": "5cd89927fc925b33", "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": "96f0d52d642b3039", "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": "251c6a1548d62257", "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": "fbd272c2bcce4373", "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": "637866acf84c75ae", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-02525d39071dd2c7", "level": "note", "message": {"text": "Near-duplicate function bodies in 5 places"}, "properties": {"repobilityId": "fa2214d6f7fd6abf", "scanner": "scanner-primary", "fingerprint": "02525d39071dd2c7", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-02525d39071dd2c7", "level": "note", "message": {"text": "Near-duplicate function bodies in 5 places"}, "properties": {"repobilityId": "a1fd04bd14309fbe", "scanner": "scanner-primary", "fingerprint": "02525d39071dd2c7", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-fe1d9311d6aee734", "level": "note", "message": {"text": "Near-duplicate function bodies in 12 places"}, "properties": {"repobilityId": "2fea9d3ea1966a4d", "scanner": "scanner-primary", "fingerprint": "fe1d9311d6aee734", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-76a2f6818267a9a8", "level": "note", "message": {"text": "Near-duplicate function bodies in 8 places"}, "properties": {"repobilityId": "60dd32ea8ab4a7c3", "scanner": "scanner-primary", "fingerprint": "76a2f6818267a9a8", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-46969939caf8120b", "level": "note", "message": {"text": "Near-duplicate function bodies in 9 places"}, "properties": {"repobilityId": "b1dc00b96e5f455f", "scanner": "scanner-primary", "fingerprint": "46969939caf8120b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-9dad557909b86499", "level": "note", "message": {"text": "Near-duplicate function bodies in 10 places"}, "properties": {"repobilityId": "d3295d7cf0e74b06", "scanner": "scanner-primary", "fingerprint": "9dad557909b86499", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}]}]}