{"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-c3aa83de02ff7988", "name": "Possibly dead Python function: add_many", "shortDescription": {"text": "Possibly dead Python function: add_many"}, "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-31d7057f53237eb6", "name": "Possibly dead Python function: to_citation_index", "shortDescription": {"text": "Possibly dead Python function: to_citation_index"}, "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-fe774298e52423aa", "name": "Possibly dead Python function: correlation_heatmap", "shortDescription": {"text": "Possibly dead Python function: correlation_heatmap"}, "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-1220ae2d543fae7b", "name": "Possibly dead Python function: drawdown_chart", "shortDescription": {"text": "Possibly dead Python function: drawdown_chart"}, "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-de4d07aa698f3100", "name": "Possibly dead Python function: wrap", "shortDescription": {"text": "Possibly dead Python function: wrap"}, "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-efb1c50813204104", "name": "Possibly dead Python function: draw", "shortDescription": {"text": "Possibly dead Python function: draw"}, "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-b856d422c86b15d7", "name": "Possibly dead Python function: render_scan", "shortDescription": {"text": "Possibly dead Python function: render_scan"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-31855e1778690ccb", "name": "Possibly dead Python function: run_interpreter", "shortDescription": {"text": "Possibly dead Python function: run_interpreter"}, "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-ae750fd680d0e5b5", "name": "Possibly dead Python function: run_strategy", "shortDescription": {"text": "Possibly dead Python function: run_strategy"}, "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-33f72d82596fd084", "name": "Possibly dead Python function: run_synthesizer", "shortDescription": {"text": "Possibly dead Python function: run_synthesizer"}, "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-73d61ecbb1c955b3", "name": "Possibly dead Python function: universe_by_class", "shortDescription": {"text": "Possibly dead Python function: universe_by_class"}, "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-1130ea2e7cb49b6e", "name": "Possibly dead Python function: best_effort_sections", "shortDescription": {"text": "Possibly dead Python function: best_effort_sections"}, "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-81c83e9f4af6da14", "name": "Possibly dead Python function: http_get_json", "shortDescription": {"text": "Possibly dead Python function: http_get_json"}, "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-d10ce7fc5f5f3e04", "name": "Possibly dead Python function: ahttp_get_json", "shortDescription": {"text": "Possibly dead Python function: ahttp_get_json"}, "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-9811989a61116b8c", "name": "Possibly dead Python function: run_with_timeout", "shortDescription": {"text": "Possibly dead Python function: run_with_timeout"}, "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-7ae5c68fb03bcd0a", "name": "Possibly dead Python function: run_sync_with_timeout", "shortDescription": {"text": "Possibly dead Python function: run_sync_with_timeout"}, "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-829a91cb331e82e4", "name": "Possibly dead Python function: gather_bounded", "shortDescription": {"text": "Possibly dead Python function: gather_bounded"}, "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-876cd4b8202f0a0b", "name": "Possibly dead Python function: heartbeat", "shortDescription": {"text": "Possibly dead Python function: heartbeat"}, "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-9f37850d328de59c", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/components/StatPanel.tsx:70", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/components/StatPanel.tsx:70"}, "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-a5364e286402aec2", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/components/AnalysisTrace.tsx:302", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/components/AnalysisTrace.tsx:302"}, "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-6bd1d0d75d58e846", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/components/LedgerRow.tsx:44", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/components/LedgerRow.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-157f45c7be514c7a", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/components/MemoPanel.tsx:502", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/components/MemoPanel.tsx:502"}, "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-a885a5d2fd689d2d", "name": "Icon-only button without accessible name \u2014 frontend/components/ApiKeys.tsx:157", "shortDescription": {"text": "Icon-only button without accessible name \u2014 frontend/components/ApiKeys.tsx:157"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8d65489b6737eafb", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/components/ApiKeys.tsx:93", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/components/ApiKeys.tsx:93"}, "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-35a7d9232d533fe8", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/components/Citations.tsx:281", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/components/Citations.tsx:281"}, "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-abd1514cb4396bbb", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/components/StudioWorkspace.tsx:297", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/components/StudioWorkspace.tsx:297"}, "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-f142973ee4f4c5d6", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/components/Sidebar.tsx:234", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/components/Sidebar.tsx:234"}, "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-7db650b3d31cb28a", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/app/page.tsx:200", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/app/page.tsx:200"}, "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-6c8071cd162fe2b2", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/app/memos/page.tsx:168", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/app/memos/page.tsx:168"}, "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-e283c6dcffecdee8", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/app/dashboard/page.tsx:193", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/app/dashboard/page.tsx:193"}, "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-2d72e57ea74aaf28", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/app/risk/page.tsx:281", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/app/risk/page.tsx:281"}, "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-51b60af1f61bbb08", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/app/portal/page.tsx:463", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/app/portal/page.tsx:463"}, "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-60427b03771411b6", "name": "Dockerfile runs as root: frontend/Dockerfile", "shortDescription": {"text": "Dockerfile runs as root: frontend/Dockerfile"}, "fullDescription": {"text": "No non-root USER set. Containers running as root expand the blast radius of any vulnerability inside the image."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-25dca079d9977df5", "name": "Docker base image is tag-pinned but not digest-pinned: node:20-slim", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: node:20-slim"}, "fullDescription": {"text": "Container tags can be retagged upstream. Pin production base images to a reviewed digest (`image@sha256:...`) when reproducibility and supply-chain integrity matter."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0e2460270d93a260", "name": "Dockerfile runs as root: mcp-server/Dockerfile", "shortDescription": {"text": "Dockerfile runs as root: mcp-server/Dockerfile"}, "fullDescription": {"text": "No non-root USER set. Containers running as root expand the blast radius of any vulnerability inside the image."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-1be5eab1d65ec22a", "name": "Docker base image is tag-pinned but not digest-pinned: python:3.10.11-slim", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: python:3.10.11-slim"}, "fullDescription": {"text": "Container tags can be retagged upstream. Pin production base images to a reviewed digest (`image@sha256:...`) when reproducibility and supply-chain integrity matter."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1f66ad88286ca30a", "name": "Dockerfile runs as root: backend/Dockerfile", "shortDescription": {"text": "Dockerfile runs as root: backend/Dockerfile"}, "fullDescription": {"text": "No non-root USER set. Containers running as root expand the blast radius of any vulnerability inside the image."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0cf17c5709fbc3c3", "name": "Docker base image is tag-pinned but not digest-pinned: python:3.13-slim", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: python:3.13-slim"}, "fullDescription": {"text": "Container tags can be retagged upstream. Pin production base images to a reviewed digest (`image@sha256:...`) when reproducibility and supply-chain integrity matter."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-aa5acaa49eb8315b", "name": "Containers defined but no K8s/orchestration manifest found", "shortDescription": {"text": "Containers defined but no K8s/orchestration manifest found"}, "fullDescription": {"text": "Repo has Dockerfiles/compose but no Kubernetes/Nomad manifests. If the target deployment is K8s, the manifests may live in a separate ops repo."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4601e3ad3bb28677", "name": "No CI/CD pipelines detected", "shortDescription": {"text": "No CI/CD pipelines detected"}, "fullDescription": {"text": "No GitHub Actions, GitLab CI, or CircleCI configs found. Without CI you can't gate deploys on tests/lints."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c6befcddc572f74b", "name": "Very large file: frontend/components/MemoPanel.tsx (1347 lines)", "shortDescription": {"text": "Very large file: frontend/components/MemoPanel.tsx (1347 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-cd8d91446f2cc93b", "name": "Very large file: frontend/app/page.tsx (900 lines)", "shortDescription": {"text": "Very large file: frontend/app/page.tsx (900 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-a9394bbfd991cd4e", "name": "Very large file: frontend/app/docs/page.tsx (1110 lines)", "shortDescription": {"text": "Very large file: frontend/app/docs/page.tsx (1110 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-d7efe6cdc9bb1b32", "name": "Very large file: frontend/app/portal/page.tsx (2227 lines)", "shortDescription": {"text": "Very large file: frontend/app/portal/page.tsx (2227 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-3c868a108230009b", "name": "Very large file: backend/main.py (4600 lines)", "shortDescription": {"text": "Very large file: backend/main.py (4600 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-0a7a0ddb820993e1", "name": "Very large file: backend/exports/pdf_renderer.py (1544 lines)", "shortDescription": {"text": "Very large file: backend/exports/pdf_renderer.py (1544 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-2ec7e6b6cd73bb58", "name": "Very large file: backend/agents/orchestrator.py (1727 lines)", "shortDescription": {"text": "Very large file: backend/agents/orchestrator.py (1727 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-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 11 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 39 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-b9088664ace7f748", "name": "Composite production-readiness gap", "shortDescription": {"text": "Composite production-readiness gap"}, "fullDescription": {"text": "Multiple low-cost hardening controls are missing together: license, ci. Opus verification showed these co-occurring gaps are a better readiness signal than reading each flag in isolation."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-749d4bc1bd66df5f", "name": "Agent instructions exist but release-hardening basics are missing", "shortDescription": {"text": "Agent instructions exist but release-hardening basics are missing"}, "fullDescription": {"text": "AI-coder instruction files were found, but the repo is missing license, ci. Treat this as a contract gap: the agent is guided, but the generated output is not yet guarded by the controls that make it repeatable."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ea8f3013f588db25", "name": "Shallow git history limits provenance confidence", "shortDescription": {"text": "Shallow git history limits provenance confidence"}, "fullDescription": {"text": "The repository is a shallow clone. Origin/evolution analysis cannot distinguish fresh generation, imported legacy code, or long-lived human code with high confidence."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8424db9c75e04ba4", "name": "Very short observed git history", "shortDescription": {"text": "Very short observed git history"}, "fullDescription": {"text": "The repo has multiple source files but two or fewer visible commits. This is not a failure by itself, but it lowers confidence in evolution-based diagnosis."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fed8cca37584cdcf", "name": "Commented-code block (8 lines) in frontend/components/SessionGuard.tsx:104", "shortDescription": {"text": "Commented-code block (8 lines) in frontend/components/SessionGuard.tsx:104"}, "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-fbf2ad0285d55df5", "name": "Commented-code block (6 lines) in frontend/components/EquityCurve.tsx:68", "shortDescription": {"text": "Commented-code block (6 lines) in frontend/components/EquityCurve.tsx:68"}, "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-c416854334229b52", "name": "Commented-code block (5 lines) in frontend/app/page.tsx:282", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/app/page.tsx:282"}, "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-e9d3eba375d0a562", "name": "Commented-code block (5 lines) in frontend/app/layout.tsx:72", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/app/layout.tsx:72"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-470d1bf1932eade2", "name": "Commented-code block (5 lines) in frontend/app/docs/page.tsx:864", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/app/docs/page.tsx:864"}, "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-71445c4c98278f4b", "name": "Commented-code block (7 lines) in frontend/app/dashboard/page.tsx:138", "shortDescription": {"text": "Commented-code block (7 lines) in frontend/app/dashboard/page.tsx:138"}, "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-b028b33d4373aaa3", "name": "Commented-code block (7 lines) in frontend/app/portal/page.tsx:502", "shortDescription": {"text": "Commented-code block (7 lines) in frontend/app/portal/page.tsx:502"}, "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-668d38273f19fabe", "name": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/app/portal/page.tsx:887", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/app/portal/page.tsx:887"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4ef042e5db5081bd", "name": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/lib/api.ts:574", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/lib/api.ts:574"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-92a1d13bcb885507", "name": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/hooks/useAnalysis.ts:272", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/hooks/useAnalysis.ts:272"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ee7d87289bc38225", "name": "Commented-code block (5 lines) in mcp-server/app.py:32", "shortDescription": {"text": "Commented-code block (5 lines) in mcp-server/app.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-c220d9d8f8e3f9ef", "name": "Commented-code block (6 lines) in mcp-server/telemetry.py:88", "shortDescription": {"text": "Commented-code block (6 lines) in mcp-server/telemetry.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-b9892a2511c58771", "name": "Commented-code block (7 lines) in mcp-server/server.py:73", "shortDescription": {"text": "Commented-code block (7 lines) in mcp-server/server.py:73"}, "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-9ce99cab0d79468b", "name": "Commented-code block (6 lines) in mcp-server/api.py:542", "shortDescription": {"text": "Commented-code block (6 lines) in mcp-server/api.py:542"}, "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-0aad033f22fc5724", "name": "Stub function `_none_key` (body is just `pass`/`return`) \u2014 mcp-server/seam/install.py:44", "shortDescription": {"text": "Stub function `_none_key` (body is just `pass`/`return`) \u2014 mcp-server/seam/install.py:44"}, "fullDescription": {"text": "Likely an AI scaffold that was never filled in. Remove or implement."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d92481f658c9764c", "name": "Commented-code block (5 lines) in mcp-server/quant_core/risk.py:78", "shortDescription": {"text": "Commented-code block (5 lines) in mcp-server/quant_core/risk.py:78"}, "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-0e162f8a20d1819f", "name": "Commented-code block (6 lines) in mcp-server/quant_core/pairs.py:261", "shortDescription": {"text": "Commented-code block (6 lines) in mcp-server/quant_core/pairs.py:261"}, "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-764189eb99a55b1f", "name": "Commented-code block (5 lines) in mcp-server/gateway/access.py:78", "shortDescription": {"text": "Commented-code block (5 lines) in mcp-server/gateway/access.py:78"}, "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-a9039c9ae39d5313", "name": "Commented-code block (5 lines) in backend/config.py:16", "shortDescription": {"text": "Commented-code block (5 lines) in backend/config.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-18f6c5d15312fd9a", "name": "Commented-code block (5 lines) in backend/auth.py:121", "shortDescription": {"text": "Commented-code block (5 lines) in backend/auth.py:121"}, "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-1b53dcf237192e50", "name": "Legacy-named symbol `macro_snapshot_legacy` in backend/main.py:1299", "shortDescription": {"text": "Legacy-named symbol `macro_snapshot_legacy` in backend/main.py:1299"}, "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-e31aac18d302fed8", "name": "Commented-code block (5 lines) in backend/main.py:97", "shortDescription": {"text": "Commented-code block (5 lines) in backend/main.py:97"}, "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-50288acd4ef8e1d8", "name": "Commented-code block (5 lines) in backend/exports/pdf_renderer.py:944", "shortDescription": {"text": "Commented-code block (5 lines) in backend/exports/pdf_renderer.py:944"}, "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-ee71dd6887b03450", "name": "Commented-code block (7 lines) in backend/agents/schemas.py:126", "shortDescription": {"text": "Commented-code block (7 lines) in backend/agents/schemas.py:126"}, "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-60e1f2b31cbabac6", "name": "Commented-code block (8 lines) in backend/agents/base_agent.py:39", "shortDescription": {"text": "Commented-code block (8 lines) in backend/agents/base_agent.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-a55049cbe3f7dcf4", "name": "Commented-code block (6 lines) in backend/agents/research_analyst.py:727", "shortDescription": {"text": "Commented-code block (6 lines) in backend/agents/research_analyst.py:727"}, "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-363aa60e64304fac", "name": "Commented-code block (5 lines) in backend/agents/desk_tools.py:34", "shortDescription": {"text": "Commented-code block (5 lines) in backend/agents/desk_tools.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-cdfb22ce8c1e3cb4", "name": "Commented-code block (5 lines) in backend/agents/orchestrator.py:375", "shortDescription": {"text": "Commented-code block (5 lines) in backend/agents/orchestrator.py:375"}, "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-ded5a80ccb1b3e45", "name": "Commented-code block (5 lines) in backend/agents/cio_synthesizer.py:85", "shortDescription": {"text": "Commented-code block (5 lines) in backend/agents/cio_synthesizer.py:85"}, "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-b8436fada0115f4d", "name": "Commented-code block (5 lines) in backend/agents/mandate_gate.py:41", "shortDescription": {"text": "Commented-code block (5 lines) in backend/agents/mandate_gate.py:41"}, "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-639ded853a2f1d3b", "name": "Commented-code block (5 lines) in backend/agents/universe.py:340", "shortDescription": {"text": "Commented-code block (5 lines) in backend/agents/universe.py:340"}, "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-d9c47604e04335bc", "name": "Commented-code block (5 lines) in backend/agents/query_interpreter.py:558", "shortDescription": {"text": "Commented-code block (5 lines) in backend/agents/query_interpreter.py:558"}, "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-879af5f968ce9598", "name": "Commented-code block (6 lines) in backend/agents/scorer.py:119", "shortDescription": {"text": "Commented-code block (6 lines) in backend/agents/scorer.py:119"}, "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-57776fcfc5ddb936", "name": "Commented-code block (5 lines) in backend/agents/screen_desk.py:266", "shortDescription": {"text": "Commented-code block (5 lines) in backend/agents/screen_desk.py:266"}, "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-4ed5631aeae0a375", "name": "Commented-code block (6 lines) in backend/agents/portfolio_strategist.py:117", "shortDescription": {"text": "Commented-code block (6 lines) in backend/agents/portfolio_strategist.py:117"}, "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-3859a2a6dce8c40f", "name": "Commented-code block (5 lines) in backend/db/models.py:289", "shortDescription": {"text": "Commented-code block (5 lines) in backend/db/models.py:289"}, "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-a67bf4cc6e85b481", "name": "Commented-code block (6 lines) in backend/infra/provided_data.py:93", "shortDescription": {"text": "Commented-code block (6 lines) in backend/infra/provided_data.py: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-8b602b8a29e5a301", "name": "Stub function `_none_key` (body is just `pass`/`return`) \u2014 backend/infra/provided_data.py:201", "shortDescription": {"text": "Stub function `_none_key` (body is just `pass`/`return`) \u2014 backend/infra/provided_data.py:201"}, "fullDescription": {"text": "Likely an AI scaffold that was never filled in. Remove or implement."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5bea20711dff9279", "name": "Legacy-named symbol `resolutions_dict_unused` in backend/infra/citations_resolver.py:317", "shortDescription": {"text": "Legacy-named symbol `resolutions_dict_unused` in backend/infra/citations_resolver.py:317"}, "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-23509fdfb5f9af27", "name": "Commented-code block (5 lines) in backend/quant/risk.py:195", "shortDescription": {"text": "Commented-code block (5 lines) in backend/quant/risk.py:195"}, "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-3de1590a0fa428ab", "name": "Commented-code block (6 lines) in backend/quant/backtester.py:39", "shortDescription": {"text": "Commented-code block (6 lines) in backend/quant/backtester.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-4764210b80c7c2a4", "name": "Commented-code block (6 lines) in backend/quant/regime_factors.py:18", "shortDescription": {"text": "Commented-code block (6 lines) in backend/quant/regime_factors.py:18"}, "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-e23d8be8844bcacd", "name": "Commented-code block (5 lines) in backend/quant/optimizer.py:390", "shortDescription": {"text": "Commented-code block (5 lines) in backend/quant/optimizer.py:390"}, "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-562dcc96ee7000f2", "name": "Commented-code block (9 lines) in backend/quant/conviction.py:35", "shortDescription": {"text": "Commented-code block (9 lines) in backend/quant/conviction.py:35"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-be9909d36b812e20", "name": "Commented-code block (5 lines) in backend/quant/regime.py:309", "shortDescription": {"text": "Commented-code block (5 lines) in backend/quant/regime.py:309"}, "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-8f2a98f020f2f2b1", "name": "Commented-code block (5 lines) in backend/llm/client.py:27", "shortDescription": {"text": "Commented-code block (5 lines) in backend/llm/client.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-b0b7578dd2a289b6", "name": "26 env vars used in code but missing from .env.example", "shortDescription": {"text": "26 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `AF_MAX_MONITORS`, `AF_MAX_THESES`, `AF_MAX_WORKSPACES`, `ALPHAENGINE_KEY`, `ALPHAENGINE_URL`, `ALPHAFLOW_ENC_KEY`, `CORS_ORIGINS`, `DESK_SESSION_TTL_SECONDS` + 18 more. Add them (with a placeholder/comment) to .env.example so onboarding doesn't break."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-be46ea126aa5d8dc", "name": "Near-duplicate function bodies in 3 places", "shortDescription": {"text": "Near-duplicate function bodies in 3 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nmcp-server/telemetry.py:record_mcp_current, mcp-server/telemetry.py:record_mcp, mcp-server/telemetry.py:record\n\nThis is *the* AI-coder failure mode (4\u00d7 more duplication in vibe-coded repos \u2014 see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2c04133e54348533", "name": "Near-duplicate function bodies in 2 places", "shortDescription": {"text": "Near-duplicate function bodies in 2 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nmcp-server/seam/data_context.py:get_provided_data, mcp-server/seam/data_context.py:get_provided\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-ee53e8e0c58609d8", "name": "Near-duplicate function bodies in 15 places", "shortDescription": {"text": "Near-duplicate function bodies in 15 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nmcp-server/contracts/inbound.py:assert_ready, mcp-server/contracts/inbound.py:assert_ready, mcp-server/contracts/inbound.py:assert_ready, mcp-server/contracts/inbound.py:assert_ready\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-0027e313ade46c8f", "name": "Near-duplicate function bodies in 7 places", "shortDescription": {"text": "Near-duplicate function bodies in 7 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nbackend/db/alphaflow_repositories.py:create, backend/db/alphaflow_repositories.py:create, backend/db/alphaflow_repositories.py:create, backend/db/alphaflow_repositories.py:create\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:\nbackend/db/alphaflow_repositories.py:get, backend/db/alphaflow_repositories.py:rename, backend/db/alphaflow_repositories.py:get, backend/db/alphaflow_repositories.py:get\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-ad0d2aaa54f770f1", "name": "FastAPI POST `create_workspace` without auth dependency \u2014 backend/routes/alphaflow.py:94", "shortDescription": {"text": "FastAPI POST `create_workspace` without auth dependency \u2014 backend/routes/alphaflow.py:94"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-24e862f59bdeb765", "name": "FastAPI PATCH `rename_workspace` without auth dependency \u2014 backend/routes/alphaflow.py:101", "shortDescription": {"text": "FastAPI PATCH `rename_workspace` without auth dependency \u2014 backend/routes/alphaflow.py:101"}, "fullDescription": {"text": "`@router.patch` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0c1d81729e747e95", "name": "FastAPI PUT `put_mandate` without auth dependency \u2014 backend/routes/alphaflow.py:124", "shortDescription": {"text": "FastAPI PUT `put_mandate` without auth dependency \u2014 backend/routes/alphaflow.py:124"}, "fullDescription": {"text": "`@router.put` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-695365e8c9eeaecf", "name": "FastAPI POST `generate_thesis_route` without auth dependency \u2014 backend/routes/alphaflow.py:157", "shortDescription": {"text": "FastAPI POST `generate_thesis_route` without auth dependency \u2014 backend/routes/alphaflow.py:157"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b5ea27511f30fc9e", "name": "FastAPI POST `validate_thesis` without auth dependency \u2014 backend/routes/alphaflow.py:206", "shortDescription": {"text": "FastAPI POST `validate_thesis` without auth dependency \u2014 backend/routes/alphaflow.py:206"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7b1dd17b7c10f62e", "name": "FastAPI POST `create_thesis` without auth dependency \u2014 backend/routes/alphaflow.py:276", "shortDescription": {"text": "FastAPI POST `create_thesis` without auth dependency \u2014 backend/routes/alphaflow.py:276"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6b605a0ba119f29e", "name": "FastAPI PATCH `update_thesis` without auth dependency \u2014 backend/routes/alphaflow.py:296", "shortDescription": {"text": "FastAPI PATCH `update_thesis` without auth dependency \u2014 backend/routes/alphaflow.py:296"}, "fullDescription": {"text": "`@router.patch` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-113e17faf5ffe709", "name": "FastAPI POST `create_journal` without auth dependency \u2014 backend/routes/alphaflow.py:330", "shortDescription": {"text": "FastAPI POST `create_journal` without auth dependency \u2014 backend/routes/alphaflow.py:330"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-18497b51676efb49", "name": "FastAPI POST `create_connector` without auth dependency \u2014 backend/routes/alphaflow.py:358", "shortDescription": {"text": "FastAPI POST `create_connector` without auth dependency \u2014 backend/routes/alphaflow.py:358"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-59d4dd98e2271bf7", "name": "FastAPI DELETE `revoke_connector` without auth dependency \u2014 backend/routes/alphaflow.py:373", "shortDescription": {"text": "FastAPI DELETE `revoke_connector` without auth dependency \u2014 backend/routes/alphaflow.py:373"}, "fullDescription": {"text": "`@router.delete` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0bea49cdd841fa5d", "name": "FastAPI POST `create_report` without auth dependency \u2014 backend/routes/alphaflow.py:399", "shortDescription": {"text": "FastAPI POST `create_report` without auth dependency \u2014 backend/routes/alphaflow.py:399"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-dd204aea1fade599", "name": "FastAPI PATCH `update_report` without auth dependency \u2014 backend/routes/alphaflow.py:434", "shortDescription": {"text": "FastAPI PATCH `update_report` without auth dependency \u2014 backend/routes/alphaflow.py:434"}, "fullDescription": {"text": "`@router.patch` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-576817080069807e", "name": "FastAPI DELETE `delete_report` without auth dependency \u2014 backend/routes/alphaflow.py:445", "shortDescription": {"text": "FastAPI DELETE `delete_report` without auth dependency \u2014 backend/routes/alphaflow.py:445"}, "fullDescription": {"text": "`@router.delete` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e56a230105bea9cf", "name": "FastAPI POST `share_report` without auth dependency \u2014 backend/routes/alphaflow.py:454", "shortDescription": {"text": "FastAPI POST `share_report` without auth dependency \u2014 backend/routes/alphaflow.py:454"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-af16d364969e2ffa", "name": "FastAPI DELETE `unshare_report` without auth dependency \u2014 backend/routes/alphaflow.py:463", "shortDescription": {"text": "FastAPI DELETE `unshare_report` without auth dependency \u2014 backend/routes/alphaflow.py:463"}, "fullDescription": {"text": "`@router.delete` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-db60dd3ffe744677", "name": "FastAPI POST `quick_signal` without auth dependency \u2014 backend/routes/alphaflow.py:481", "shortDescription": {"text": "FastAPI POST `quick_signal` without auth dependency \u2014 backend/routes/alphaflow.py:481"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d1b85b422c05e493", "name": "FastAPI POST `create_monitor` without auth dependency \u2014 backend/routes/alphaflow.py:820", "shortDescription": {"text": "FastAPI POST `create_monitor` without auth dependency \u2014 backend/routes/alphaflow.py:820"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-75452172dda8b1f7", "name": "FastAPI PATCH `update_monitor` without auth dependency \u2014 backend/routes/alphaflow.py:833", "shortDescription": {"text": "FastAPI PATCH `update_monitor` without auth dependency \u2014 backend/routes/alphaflow.py:833"}, "fullDescription": {"text": "`@router.patch` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-723c9716c00c7cb6", "name": "FastAPI DELETE `delete_monitor` without auth dependency \u2014 backend/routes/alphaflow.py:845", "shortDescription": {"text": "FastAPI DELETE `delete_monitor` without auth dependency \u2014 backend/routes/alphaflow.py:845"}, "fullDescription": {"text": "`@router.delete` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6039bf899c4c43d7", "name": "FastAPI POST `run_monitor_now` without auth dependency \u2014 backend/routes/alphaflow.py:853", "shortDescription": {"text": "FastAPI POST `run_monitor_now` without auth dependency \u2014 backend/routes/alphaflow.py:853"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3c516f2a15035c4f", "name": "FastAPI POST `alerts_mark_all_read` without auth dependency \u2014 backend/routes/alphaflow.py:887", "shortDescription": {"text": "FastAPI POST `alerts_mark_all_read` without auth dependency \u2014 backend/routes/alphaflow.py:887"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-806b818fd2e90b85", "name": "FastAPI PATCH `set_alert_state` without auth dependency \u2014 backend/routes/alphaflow.py:893", "shortDescription": {"text": "FastAPI PATCH `set_alert_state` without auth dependency \u2014 backend/routes/alphaflow.py:893"}, "fullDescription": {"text": "`@router.patch` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-848c201b1836efd9", "name": "FastAPI DELETE `delete_my_data` without auth dependency \u2014 backend/routes/alphaflow.py:912", "shortDescription": {"text": "FastAPI DELETE `delete_my_data` without auth dependency \u2014 backend/routes/alphaflow.py:912"}, "fullDescription": {"text": "`@router.delete` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-74ba6011860d481b", "name": "Dangling fetch: GET /api/me/workspaces (frontend/lib/api.ts:379)", "shortDescription": {"text": "Dangling fetch: GET /api/me/workspaces (frontend/lib/api.ts:379)"}, "fullDescription": {"text": "`frontend/lib/api.ts:379` calls `GET /api/me/workspaces` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/me/workspaces`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-618c65f1e8f00a19", "name": "Dangling fetch: POST /api/me/workspaces (frontend/lib/api.ts:381)", "shortDescription": {"text": "Dangling fetch: POST /api/me/workspaces (frontend/lib/api.ts:381)"}, "fullDescription": {"text": "`frontend/lib/api.ts:381` calls `POST /api/me/workspaces` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/me/workspaces`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d3f7a2f8123e6021", "name": "Dangling fetch: GET /api/me/workspaces/${workspaceId}/mandate (frontend/lib/api.ts:383)", "shortDescription": {"text": "Dangling fetch: GET /api/me/workspaces/${workspaceId}/mandate (frontend/lib/api.ts:383)"}, "fullDescription": {"text": "`frontend/lib/api.ts:383` calls `GET /api/me/workspaces/${workspaceId}/mandate` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/me/workspaces/<p>/mandate`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ac023f19a3c9cc21", "name": "Dangling fetch: PUT /api/me/workspaces/${workspaceId}/mandate (frontend/lib/api.ts:385)", "shortDescription": {"text": "Dangling fetch: PUT /api/me/workspaces/${workspaceId}/mandate (frontend/lib/api.ts:385)"}, "fullDescription": {"text": "`frontend/lib/api.ts:385` calls `PUT /api/me/workspaces/${workspaceId}/mandate` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/me/workspaces/<p>/mandate`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-55252455183fcc2e", "name": "Dangling fetch: GET /api/me/theses?${q.toString()} (frontend/lib/api.ts:392)", "shortDescription": {"text": "Dangling fetch: GET /api/me/theses?${q.toString()} (frontend/lib/api.ts:392)"}, "fullDescription": {"text": "`frontend/lib/api.ts:392` calls `GET /api/me/theses?${q.toString()}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/me/theses`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f9ae517b18b61dc8", "name": "Dangling fetch: POST /api/me/theses (frontend/lib/api.ts:395)", "shortDescription": {"text": "Dangling fetch: POST /api/me/theses (frontend/lib/api.ts:395)"}, "fullDescription": {"text": "`frontend/lib/api.ts:395` calls `POST /api/me/theses` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/me/theses`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4e39ce7e24121d41", "name": "Dangling fetch: POST /api/me/theses/generate (frontend/lib/api.ts:399)", "shortDescription": {"text": "Dangling fetch: POST /api/me/theses/generate (frontend/lib/api.ts:399)"}, "fullDescription": {"text": "`frontend/lib/api.ts:399` calls `POST /api/me/theses/generate` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/me/theses/generate`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3e286c70b874094d", "name": "Dangling fetch: PATCH /api/me/theses/${thesisId} (frontend/lib/api.ts:409)", "shortDescription": {"text": "Dangling fetch: PATCH /api/me/theses/${thesisId} (frontend/lib/api.ts:409)"}, "fullDescription": {"text": "`frontend/lib/api.ts:409` calls `PATCH /api/me/theses/${thesisId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/me/theses/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9776f2adbb9c791c", "name": "Dangling fetch: GET /api/me/journal?${q.toString()} (frontend/lib/api.ts:412)", "shortDescription": {"text": "Dangling fetch: GET /api/me/journal?${q.toString()} (frontend/lib/api.ts:412)"}, "fullDescription": {"text": "`frontend/lib/api.ts:412` calls `GET /api/me/journal?${q.toString()}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/me/journal`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-063c9d749acbb70d", "name": "Dangling fetch: POST /api/me/journal (frontend/lib/api.ts:417)", "shortDescription": {"text": "Dangling fetch: POST /api/me/journal (frontend/lib/api.ts:417)"}, "fullDescription": {"text": "`frontend/lib/api.ts:417` calls `POST /api/me/journal` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/me/journal`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9e0f44040b449ada", "name": "Dangling fetch: GET /api/me/reports (frontend/lib/api.ts:418)", "shortDescription": {"text": "Dangling fetch: GET /api/me/reports (frontend/lib/api.ts:418)"}, "fullDescription": {"text": "`frontend/lib/api.ts:418` calls `GET /api/me/reports` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/me/reports`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-22720ac20880e7c4", "name": "Dangling fetch: POST /api/me/reports (frontend/lib/api.ts:420)", "shortDescription": {"text": "Dangling fetch: POST /api/me/reports (frontend/lib/api.ts:420)"}, "fullDescription": {"text": "`frontend/lib/api.ts:420` calls `POST /api/me/reports` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/me/reports`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2ea35387c742bac5", "name": "Dangling fetch: PATCH /api/me/reports/${reportId} (frontend/lib/api.ts:422)", "shortDescription": {"text": "Dangling fetch: PATCH /api/me/reports/${reportId} (frontend/lib/api.ts:422)"}, "fullDescription": {"text": "`frontend/lib/api.ts:422` calls `PATCH /api/me/reports/${reportId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/me/reports/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2cb62c13ccdb8478", "name": "Dangling fetch: DELETE /api/me/reports/${reportId} (frontend/lib/api.ts:424)", "shortDescription": {"text": "Dangling fetch: DELETE /api/me/reports/${reportId} (frontend/lib/api.ts:424)"}, "fullDescription": {"text": "`frontend/lib/api.ts:424` calls `DELETE /api/me/reports/${reportId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/me/reports/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-300c795a3aca11ff", "name": "Dangling fetch: POST /api/me/reports/${reportId}/share (frontend/lib/api.ts:428)", "shortDescription": {"text": "Dangling fetch: POST /api/me/reports/${reportId}/share (frontend/lib/api.ts:428)"}, "fullDescription": {"text": "`frontend/lib/api.ts:428` calls `POST /api/me/reports/${reportId}/share` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/me/reports/<p>/share`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-dcce82d20ce9786d", "name": "Dangling fetch: DELETE /api/me/reports/${reportId}/share (frontend/lib/api.ts:430)", "shortDescription": {"text": "Dangling fetch: DELETE /api/me/reports/${reportId}/share (frontend/lib/api.ts:430)"}, "fullDescription": {"text": "`frontend/lib/api.ts:430` calls `DELETE /api/me/reports/${reportId}/share` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/me/reports/<p>/share`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-926852c237a173f8", "name": "Dangling fetch: GET /api/me/connectors (frontend/lib/api.ts:434)", "shortDescription": {"text": "Dangling fetch: GET /api/me/connectors (frontend/lib/api.ts:434)"}, "fullDescription": {"text": "`frontend/lib/api.ts:434` calls `GET /api/me/connectors` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/me/connectors`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-23a6edeabf2ef5a0", "name": "Dangling fetch: POST /api/me/connectors (frontend/lib/api.ts:436)", "shortDescription": {"text": "Dangling fetch: POST /api/me/connectors (frontend/lib/api.ts:436)"}, "fullDescription": {"text": "`frontend/lib/api.ts:436` calls `POST /api/me/connectors` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/me/connectors`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-aee4669a2ba27608", "name": "Dangling fetch: DELETE /api/me/connectors/${connectorId} (frontend/lib/api.ts:438)", "shortDescription": {"text": "Dangling fetch: DELETE /api/me/connectors/${connectorId} (frontend/lib/api.ts:438)"}, "fullDescription": {"text": "`frontend/lib/api.ts:438` calls `DELETE /api/me/connectors/${connectorId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/me/connectors/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2eae51127a431061", "name": "Dangling fetch: POST /api/me/monitors (frontend/lib/api.ts:451)", "shortDescription": {"text": "Dangling fetch: POST /api/me/monitors (frontend/lib/api.ts:451)"}, "fullDescription": {"text": "`frontend/lib/api.ts:451` calls `POST /api/me/monitors` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/me/monitors`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c12f77ed5d87d63b", "name": "Dangling fetch: PATCH /api/me/monitors/${monitorId} (frontend/lib/api.ts:453)", "shortDescription": {"text": "Dangling fetch: PATCH /api/me/monitors/${monitorId} (frontend/lib/api.ts:453)"}, "fullDescription": {"text": "`frontend/lib/api.ts:453` calls `PATCH /api/me/monitors/${monitorId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/me/monitors/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-dd9224a6554ddd52", "name": "Dangling fetch: DELETE /api/me/monitors/${monitorId} (frontend/lib/api.ts:455)", "shortDescription": {"text": "Dangling fetch: DELETE /api/me/monitors/${monitorId} (frontend/lib/api.ts:455)"}, "fullDescription": {"text": "`frontend/lib/api.ts:455` calls `DELETE /api/me/monitors/${monitorId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/me/monitors/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a33f0ab8e09c678b", "name": "Dangling fetch: POST /api/me/monitors/${monitorId}/run (frontend/lib/api.ts:459)", "shortDescription": {"text": "Dangling fetch: POST /api/me/monitors/${monitorId}/run (frontend/lib/api.ts:459)"}, "fullDescription": {"text": "`frontend/lib/api.ts:459` calls `POST /api/me/monitors/${monitorId}/run` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/me/monitors/<p>/run`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5c8999a16a316026", "name": "Dangling fetch: GET /api/me/alerts/unread-count (frontend/lib/api.ts:464)", "shortDescription": {"text": "Dangling fetch: GET /api/me/alerts/unread-count (frontend/lib/api.ts:464)"}, "fullDescription": {"text": "`frontend/lib/api.ts:464` calls `GET /api/me/alerts/unread-count` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/me/alerts/unread-count`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-cbbd0aeefdfa4690", "name": "Dangling fetch: POST /api/me/alerts/mark-all-read (frontend/lib/api.ts:465)", "shortDescription": {"text": "Dangling fetch: POST /api/me/alerts/mark-all-read (frontend/lib/api.ts:465)"}, "fullDescription": {"text": "`frontend/lib/api.ts:465` calls `POST /api/me/alerts/mark-all-read` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/me/alerts/mark-all-read`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8cbb12ab4b617c4f", "name": "Dangling fetch: PATCH /api/me/alerts/${alertId} (frontend/lib/api.ts:467)", "shortDescription": {"text": "Dangling fetch: PATCH /api/me/alerts/${alertId} (frontend/lib/api.ts:467)"}, "fullDescription": {"text": "`frontend/lib/api.ts:467` calls `PATCH /api/me/alerts/${alertId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/me/alerts/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a5a7090164f8e2e3", "name": "Dangling fetch: GET /api/me/breadth (frontend/lib/api.ts:471)", "shortDescription": {"text": "Dangling fetch: GET /api/me/breadth (frontend/lib/api.ts:471)"}, "fullDescription": {"text": "`frontend/lib/api.ts:471` calls `GET /api/me/breadth` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/me/breadth`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e4beadb34770367c", "name": "Unused endpoint: GET /v1/status", "shortDescription": {"text": "Unused endpoint: GET /v1/status"}, "fullDescription": {"text": "`mcp-server/api.py` declares `GET /v1/status` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5baa8971ebe192a1", "name": "Unused endpoint: GET /", "shortDescription": {"text": "Unused endpoint: GET /"}, "fullDescription": {"text": "`mcp-server/api.py` declares `GET /` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4c063354a4d178f9", "name": "Unused endpoint: GET /favicon.svg", "shortDescription": {"text": "Unused endpoint: GET /favicon.svg"}, "fullDescription": {"text": "`mcp-server/api.py` declares `GET /favicon.svg` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4c1219a716537775", "name": "Unused endpoint: GET /icon.svg", "shortDescription": {"text": "Unused endpoint: GET /icon.svg"}, "fullDescription": {"text": "`mcp-server/api.py` declares `GET /icon.svg` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-df1dca98975f25ca", "name": "Unused endpoint: GET /icon.png", "shortDescription": {"text": "Unused endpoint: GET /icon.png"}, "fullDescription": {"text": "`mcp-server/api.py` declares `GET /icon.png` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c7b4e1b46de2a2d9", "name": "Unused endpoint: GET /v1/version", "shortDescription": {"text": "Unused endpoint: GET /v1/version"}, "fullDescription": {"text": "`mcp-server/api.py` declares `GET /v1/version` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-67e7baa1846bfe5d", "name": "Unused endpoint: GET /v1/tools", "shortDescription": {"text": "Unused endpoint: GET /v1/tools"}, "fullDescription": {"text": "`mcp-server/api.py` declares `GET /v1/tools` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-bcbac91b4d15dcf3", "name": "Unused endpoint: GET /v1/usage", "shortDescription": {"text": "Unused endpoint: GET /v1/usage"}, "fullDescription": {"text": "`mcp-server/api.py` declares `GET /v1/usage` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e4515b92ee44213d", "name": "Unused endpoint: GET /v1/internal/usage", "shortDescription": {"text": "Unused endpoint: GET /v1/internal/usage"}, "fullDescription": {"text": "`mcp-server/api.py` declares `GET /v1/internal/usage` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-35a386e4107e71ec", "name": "Unused endpoint: POST /v1/tools/{tool}", "shortDescription": {"text": "Unused endpoint: POST /v1/tools/{tool}"}, "fullDescription": {"text": "`mcp-server/api.py` declares `POST /v1/tools/{tool}` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2f99ff0235d64890", "name": "Unused endpoint: POST /v1/desk/research", "shortDescription": {"text": "Unused endpoint: POST /v1/desk/research"}, "fullDescription": {"text": "`mcp-server/api.py` declares `POST /v1/desk/research` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-be46334ae9460347", "name": "Unused endpoint: POST /v1/desk/macro", "shortDescription": {"text": "Unused endpoint: POST /v1/desk/macro"}, "fullDescription": {"text": "`mcp-server/api.py` declares `POST /v1/desk/macro` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4468b0c23bc6f9a1", "name": "Unused endpoint: POST /v1/desk/scenario", "shortDescription": {"text": "Unused endpoint: POST /v1/desk/scenario"}, "fullDescription": {"text": "`mcp-server/api.py` declares `POST /v1/desk/scenario` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b7ed82757d2efeb0", "name": "Unused endpoint: POST /v1/desk/screen", "shortDescription": {"text": "Unused endpoint: POST /v1/desk/screen"}, "fullDescription": {"text": "`mcp-server/api.py` declares `POST /v1/desk/screen` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8d12928787dc6a36", "name": "Unused endpoint: POST /v1/apply_mandate", "shortDescription": {"text": "Unused endpoint: POST /v1/apply_mandate"}, "fullDescription": {"text": "`mcp-server/api.py` declares `POST /v1/apply_mandate` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-86a8974775594da4", "name": "Unused endpoint: POST /v1/desk/risk", "shortDescription": {"text": "Unused endpoint: POST /v1/desk/risk"}, "fullDescription": {"text": "`mcp-server/api.py` declares `POST /v1/desk/risk` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f754f5b79d9e48e0", "name": "Unused endpoint: POST /v1/desk/structure", "shortDescription": {"text": "Unused endpoint: POST /v1/desk/structure"}, "fullDescription": {"text": "`mcp-server/api.py` declares `POST /v1/desk/structure` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5cd65a5e3d27cddc", "name": "Unused endpoint: POST /v1/jobs", "shortDescription": {"text": "Unused endpoint: POST /v1/jobs"}, "fullDescription": {"text": "`mcp-server/api.py` declares `POST /v1/jobs` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6b037c79094e53ad", "name": "Unused endpoint: GET /v1/jobs/{job_id}", "shortDescription": {"text": "Unused endpoint: GET /v1/jobs/{job_id}"}, "fullDescription": {"text": "`mcp-server/api.py` declares `GET /v1/jobs/{job_id}` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d2c7128de03fdd80", "name": "Unused endpoint: GET /v1/jobs/{job_id}/stream", "shortDescription": {"text": "Unused endpoint: GET /v1/jobs/{job_id}/stream"}, "fullDescription": {"text": "`mcp-server/api.py` declares `GET /v1/jobs/{job_id}/stream` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4756b4c4da7d2088", "name": "Unused endpoint: GET /api/health", "shortDescription": {"text": "Unused endpoint: GET /api/health"}, "fullDescription": {"text": "`backend/main.py` declares `GET /api/health` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-52765bcf81a6e09b", "name": "Unused endpoint: GET /api/ready", "shortDescription": {"text": "Unused endpoint: GET /api/ready"}, "fullDescription": {"text": "`backend/main.py` declares `GET /api/ready` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2b6bec3c059afc6a", "name": "Unused endpoint: POST /api/internal/usage/incr", "shortDescription": {"text": "Unused endpoint: POST /api/internal/usage/incr"}, "fullDescription": {"text": "`backend/main.py` declares `POST /api/internal/usage/incr` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2280fc79e3908d9d", "name": "Unused endpoint: POST /api/internal/keys/verify", "shortDescription": {"text": "Unused endpoint: POST /api/internal/keys/verify"}, "fullDescription": {"text": "`backend/main.py` declares `POST /api/internal/keys/verify` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-56afea5482d4f0a7", "name": "Unused endpoint: POST /api/internal/desk", "shortDescription": {"text": "Unused endpoint: POST /api/internal/desk"}, "fullDescription": {"text": "`backend/main.py` declares `POST /api/internal/desk` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d5ce73ff43640790", "name": "Unused endpoint: POST /api/internal/apply-mandate", "shortDescription": {"text": "Unused endpoint: POST /api/internal/apply-mandate"}, "fullDescription": {"text": "`backend/main.py` declares `POST /api/internal/apply-mandate` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-feafa0c10734647d", "name": "Unused endpoint: POST /api/internal/cron/nightly", "shortDescription": {"text": "Unused endpoint: POST /api/internal/cron/nightly"}, "fullDescription": {"text": "`backend/main.py` declares `POST /api/internal/cron/nightly` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-48b53adfff9b3075", "name": "Unused endpoint: POST /api/internal/slate", "shortDescription": {"text": "Unused endpoint: POST /api/internal/slate"}, "fullDescription": {"text": "`backend/main.py` declares `POST /api/internal/slate` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-778bd52fb113ae5e", "name": "Unused endpoint: GET /api/me/risk", "shortDescription": {"text": "Unused endpoint: GET /api/me/risk"}, "fullDescription": {"text": "`backend/main.py` declares `GET /api/me/risk` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-60ba17578521932f", "name": "Unused endpoint: GET /api/data/events", "shortDescription": {"text": "Unused endpoint: GET /api/data/events"}, "fullDescription": {"text": "`backend/main.py` declares `GET /api/data/events` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-53fd3192dbcb86e9", "name": "Unused endpoint: GET /api/quant/correlation", "shortDescription": {"text": "Unused endpoint: GET /api/quant/correlation"}, "fullDescription": {"text": "`backend/main.py` declares `GET /api/quant/correlation` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e04c6bb4c517ba57", "name": "Unused endpoint: GET /api/quant/drawdown/{ticker}", "shortDescription": {"text": "Unused endpoint: GET /api/quant/drawdown/{ticker}"}, "fullDescription": {"text": "`backend/main.py` declares `GET /api/quant/drawdown/{ticker}` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-fee493e441e74102", "name": "Unused endpoint: GET /api/quant/volatility/{ticker}", "shortDescription": {"text": "Unused endpoint: GET /api/quant/volatility/{ticker}"}, "fullDescription": {"text": "`backend/main.py` declares `GET /api/quant/volatility/{ticker}` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-339dabada27b8dc0", "name": "Unused endpoint: GET /api/quant/options/{ticker}", "shortDescription": {"text": "Unused endpoint: GET /api/quant/options/{ticker}"}, "fullDescription": {"text": "`backend/main.py` declares `GET /api/quant/options/{ticker}` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f9ba17ecb2ce1809", "name": "Unused endpoint: GET /api/quant/enrich", "shortDescription": {"text": "Unused endpoint: GET /api/quant/enrich"}, "fullDescription": {"text": "`backend/main.py` declares `GET /api/quant/enrich` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-18a6d45f9bd7bf6e", "name": "Unused endpoint: GET /api/quant/macro-series", "shortDescription": {"text": "Unused endpoint: GET /api/quant/macro-series"}, "fullDescription": {"text": "`backend/main.py` declares `GET /api/quant/macro-series` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e6d3540819c43b1b", "name": "Unused endpoint: GET /api/quant/cross-asset-correlation", "shortDescription": {"text": "Unused endpoint: GET /api/quant/cross-asset-correlation"}, "fullDescription": {"text": "`backend/main.py` declares `GET /api/quant/cross-asset-correlation` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-99a3d1e4d2c301d8", "name": "Unused endpoint: GET /api/quant/regime/diagnostics", "shortDescription": {"text": "Unused endpoint: GET /api/quant/regime/diagnostics"}, "fullDescription": {"text": "`backend/main.py` declares `GET /api/quant/regime/diagnostics` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e48b8c8899fc741a", "name": "Unused endpoint: POST /api/quant/curve/key-rate-durations", "shortDescription": {"text": "Unused endpoint: POST /api/quant/curve/key-rate-durations"}, "fullDescription": {"text": "`backend/main.py` declares `POST /api/quant/curve/key-rate-durations` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-34d9123ba323959d", "name": "Unused endpoint: GET /api/quant/factors", "shortDescription": {"text": "Unused endpoint: GET /api/quant/factors"}, "fullDescription": {"text": "`backend/main.py` declares `GET /api/quant/factors` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e12e9b70e1261963", "name": "Unused endpoint: GET /api/portfolio/risk", "shortDescription": {"text": "Unused endpoint: GET /api/portfolio/risk"}, "fullDescription": {"text": "`backend/main.py` declares `GET /api/portfolio/risk` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-26ce46123a2fea39", "name": "Unused endpoint: GET /api/export/memo/{memo_id}", "shortDescription": {"text": "Unused endpoint: GET /api/export/memo/{memo_id}"}, "fullDescription": {"text": "`backend/main.py` declares `GET /api/export/memo/{memo_id}` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7eaf9725135ddddd", "name": "Unused endpoint: GET /api/export/portfolio", "shortDescription": {"text": "Unused endpoint: GET /api/export/portfolio"}, "fullDescription": {"text": "`backend/main.py` declares `GET /api/export/portfolio` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ce2091a987b62ffa", "name": "Unused endpoint: GET /api/export/scorecard", "shortDescription": {"text": "Unused endpoint: GET /api/export/scorecard"}, "fullDescription": {"text": "`backend/main.py` declares `GET /api/export/scorecard` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c1cabc4cfd5b7c1f", "name": "Unused endpoint: GET /api/export/morning", "shortDescription": {"text": "Unused endpoint: GET /api/export/morning"}, "fullDescription": {"text": "`backend/main.py` declares `GET /api/export/morning` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2b11c70711f79d25", "name": "Unused endpoint: GET /api/export/range", "shortDescription": {"text": "Unused endpoint: GET /api/export/range"}, "fullDescription": {"text": "`backend/main.py` declares `GET /api/export/range` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1d52fef0fa6b5d16", "name": "Unused endpoint: GET /api/portfolio/equity-curve", "shortDescription": {"text": "Unused endpoint: GET /api/portfolio/equity-curve"}, "fullDescription": {"text": "`backend/main.py` declares `GET /api/portfolio/equity-curve` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-781467633fad5815", "name": "Unused endpoint: GET /api/track-record/verify", "shortDescription": {"text": "Unused endpoint: GET /api/track-record/verify"}, "fullDescription": {"text": "`backend/main.py` declares `GET /api/track-record/verify` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-937332265654ea98", "name": "Unused endpoint: POST /api/track-record/anchor", "shortDescription": {"text": "Unused endpoint: POST /api/track-record/anchor"}, "fullDescription": {"text": "`backend/main.py` declares `POST /api/track-record/anchor` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-66a8df1d99747f4f", "name": "Unused endpoint: POST /api/analyze/stream", "shortDescription": {"text": "Unused endpoint: POST /api/analyze/stream"}, "fullDescription": {"text": "`backend/main.py` declares `POST /api/analyze/stream` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}]}}, "automationDetails": {"id": "repobility/22667"}, "properties": {"repository": "wevo7526/quantOS", "repoUrl": "https://github.com/wevo7526/quantOS", "branch": "main"}, "results": [{"ruleId": "scanner-c3aa83de02ff7988", "level": "note", "message": {"text": "Possibly dead Python function: add_many"}, "properties": {"repobilityId": "91905fc19df29f19", "scanner": "scanner-primary", "fingerprint": "c3aa83de02ff7988", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/provenance/store.py:179"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-31d7057f53237eb6", "level": "note", "message": {"text": "Possibly dead Python function: to_citation_index"}, "properties": {"repobilityId": "1240a21f5a08235b", "scanner": "scanner-primary", "fingerprint": "31d7057f53237eb6", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/provenance/store.py:225"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-fe774298e52423aa", "level": "note", "message": {"text": "Possibly dead Python function: correlation_heatmap"}, "properties": {"repobilityId": "bd3c9257d3669630", "scanner": "scanner-primary", "fingerprint": "fe774298e52423aa", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/exports/charts.py:49"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-1220ae2d543fae7b", "level": "note", "message": {"text": "Possibly dead Python function: drawdown_chart"}, "properties": {"repobilityId": "33fa4a5769c07352", "scanner": "scanner-primary", "fingerprint": "1220ae2d543fae7b", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/exports/charts.py:80"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-de4d07aa698f3100", "level": "note", "message": {"text": "Possibly dead Python function: wrap"}, "properties": {"repobilityId": "67bfdfc1acedae4b", "scanner": "scanner-primary", "fingerprint": "de4d07aa698f3100", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/exports/pdf_renderer.py:307"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-efb1c50813204104", "level": "note", "message": {"text": "Possibly dead Python function: draw"}, "properties": {"repobilityId": "53ecb21dcbad2db9", "scanner": "scanner-primary", "fingerprint": "efb1c50813204104", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/exports/pdf_renderer.py:310"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-b856d422c86b15d7", "level": "note", "message": {"text": "Possibly dead Python function: render_scan"}, "properties": {"repobilityId": "f2d62f7609af7002", "scanner": "scanner-primary", "fingerprint": "b856d422c86b15d7", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/exports/pdf_renderer.py:1266"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-31855e1778690ccb", "level": "note", "message": {"text": "Possibly dead Python function: run_interpreter"}, "properties": {"repobilityId": "21e070215a3bbd28", "scanner": "scanner-primary", "fingerprint": "31855e1778690ccb", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/agents/orchestrator.py:236"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-ae750fd680d0e5b5", "level": "note", "message": {"text": "Possibly dead Python function: run_strategy"}, "properties": {"repobilityId": "85abfac197f54ded", "scanner": "scanner-primary", "fingerprint": "ae750fd680d0e5b5", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/agents/orchestrator.py:369"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-33f72d82596fd084", "level": "note", "message": {"text": "Possibly dead Python function: run_synthesizer"}, "properties": {"repobilityId": "d4a50add9ead60d6", "scanner": "scanner-primary", "fingerprint": "33f72d82596fd084", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/agents/orchestrator.py:1236"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-73d61ecbb1c955b3", "level": "note", "message": {"text": "Possibly dead Python function: universe_by_class"}, "properties": {"repobilityId": "c22d31f0a5f74ecb", "scanner": "scanner-primary", "fingerprint": "73d61ecbb1c955b3", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/agents/universe.py:139"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-1130ea2e7cb49b6e", "level": "note", "message": {"text": "Possibly dead Python function: best_effort_sections"}, "properties": {"repobilityId": "c641a9fc534b1eeb", "scanner": "scanner-primary", "fingerprint": "1130ea2e7cb49b6e", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/agents/nlp/sections.py:84"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-81c83e9f4af6da14", "level": "note", "message": {"text": "Possibly dead Python function: http_get_json"}, "properties": {"repobilityId": "4a5c2dff73239a4e", "scanner": "scanner-primary", "fingerprint": "81c83e9f4af6da14", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/infra/http.py:148"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-d10ce7fc5f5f3e04", "level": "note", "message": {"text": "Possibly dead Python function: ahttp_get_json"}, "properties": {"repobilityId": "6a1b4633fb49fc73", "scanner": "scanner-primary", "fingerprint": "d10ce7fc5f5f3e04", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/infra/http.py:247"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-9811989a61116b8c", "level": "note", "message": {"text": "Possibly dead Python function: run_with_timeout"}, "properties": {"repobilityId": "bb1578b3ba69fce0", "scanner": "scanner-primary", "fingerprint": "9811989a61116b8c", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/infra/http.py:274"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-7ae5c68fb03bcd0a", "level": "note", "message": {"text": "Possibly dead Python function: run_sync_with_timeout"}, "properties": {"repobilityId": "392ebf4b01da0d94", "scanner": "scanner-primary", "fingerprint": "7ae5c68fb03bcd0a", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/infra/async_utils.py:40"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-829a91cb331e82e4", "level": "note", "message": {"text": "Possibly dead Python function: gather_bounded"}, "properties": {"repobilityId": "6f13191039e98e58", "scanner": "scanner-primary", "fingerprint": "829a91cb331e82e4", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/infra/async_utils.py:50"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-876cd4b8202f0a0b", "level": "note", "message": {"text": "Possibly dead Python function: heartbeat"}, "properties": {"repobilityId": "05a4bdcca0a378ba", "scanner": "scanner-primary", "fingerprint": "876cd4b8202f0a0b", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/infra/status_store.py:42"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-9f37850d328de59c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/components/StatPanel.tsx:70"}, "properties": {"repobilityId": "8b1155afddd51dfa", "scanner": "scanner-primary", "fingerprint": "9f37850d328de59c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a5364e286402aec2", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/components/AnalysisTrace.tsx:302"}, "properties": {"repobilityId": "357726a2d999d830", "scanner": "scanner-primary", "fingerprint": "a5364e286402aec2", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-6bd1d0d75d58e846", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/components/LedgerRow.tsx:44"}, "properties": {"repobilityId": "fdb414be7d8866ce", "scanner": "scanner-primary", "fingerprint": "6bd1d0d75d58e846", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-157f45c7be514c7a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/components/MemoPanel.tsx:502"}, "properties": {"repobilityId": "73b508f0b5f26e9d", "scanner": "scanner-primary", "fingerprint": "157f45c7be514c7a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a885a5d2fd689d2d", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 frontend/components/ApiKeys.tsx:157"}, "properties": {"repobilityId": "3da1a86e75eb9e84", "scanner": "scanner-primary", "fingerprint": "a885a5d2fd689d2d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-8d65489b6737eafb", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/components/ApiKeys.tsx:93"}, "properties": {"repobilityId": "842271e8a056e0d5", "scanner": "scanner-primary", "fingerprint": "8d65489b6737eafb", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-35a7d9232d533fe8", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/components/Citations.tsx:281"}, "properties": {"repobilityId": "121da14503daa46c", "scanner": "scanner-primary", "fingerprint": "35a7d9232d533fe8", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-abd1514cb4396bbb", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/components/StudioWorkspace.tsx:297"}, "properties": {"repobilityId": "2e9541b0e8d3d825", "scanner": "scanner-primary", "fingerprint": "abd1514cb4396bbb", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f142973ee4f4c5d6", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/components/Sidebar.tsx:234"}, "properties": {"repobilityId": "1539a47ef0f8f1a3", "scanner": "scanner-primary", "fingerprint": "f142973ee4f4c5d6", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-7db650b3d31cb28a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/app/page.tsx:200"}, "properties": {"repobilityId": "d6399cfd43dfe522", "scanner": "scanner-primary", "fingerprint": "7db650b3d31cb28a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-6c8071cd162fe2b2", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/app/memos/page.tsx:168"}, "properties": {"repobilityId": "093b941e12fd0a81", "scanner": "scanner-primary", "fingerprint": "6c8071cd162fe2b2", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e283c6dcffecdee8", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/app/dashboard/page.tsx:193"}, "properties": {"repobilityId": "9e2e346635cffe53", "scanner": "scanner-primary", "fingerprint": "e283c6dcffecdee8", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-2d72e57ea74aaf28", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/app/risk/page.tsx:281"}, "properties": {"repobilityId": "83e1913bd8b406bc", "scanner": "scanner-primary", "fingerprint": "2d72e57ea74aaf28", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-51b60af1f61bbb08", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/app/portal/page.tsx:463"}, "properties": {"repobilityId": "d96ba2c627effdee", "scanner": "scanner-primary", "fingerprint": "51b60af1f61bbb08", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-60427b03771411b6", "level": "warning", "message": {"text": "Dockerfile runs as root: frontend/Dockerfile"}, "properties": {"repobilityId": "735c01d8531dfd2c", "scanner": "scanner-primary", "fingerprint": "60427b03771411b6", "layer": "hardware", "severity": "medium", "confidence": 1.0, "tags": ["security", "container"]}}, {"ruleId": "scanner-25dca079d9977df5", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: node:20-slim"}, "properties": {"repobilityId": "2660a94c01e6d5d8", "scanner": "scanner-primary", "fingerprint": "25dca079d9977df5", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "frontend/Dockerfile"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-0e2460270d93a260", "level": "warning", "message": {"text": "Dockerfile runs as root: mcp-server/Dockerfile"}, "properties": {"repobilityId": "2fc32db9c026ebf2", "scanner": "scanner-primary", "fingerprint": "0e2460270d93a260", "layer": "hardware", "severity": "medium", "confidence": 1.0, "tags": ["security", "container"]}}, {"ruleId": "scanner-1be5eab1d65ec22a", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: python:3.10.11-slim"}, "properties": {"repobilityId": "82cf3e9038164069", "scanner": "scanner-primary", "fingerprint": "1be5eab1d65ec22a", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "mcp-server/Dockerfile"}, "region": {"startLine": 8}}}]}, {"ruleId": "scanner-1f66ad88286ca30a", "level": "warning", "message": {"text": "Dockerfile runs as root: backend/Dockerfile"}, "properties": {"repobilityId": "7afd2b0e8a8c9eeb", "scanner": "scanner-primary", "fingerprint": "1f66ad88286ca30a", "layer": "hardware", "severity": "medium", "confidence": 1.0, "tags": ["security", "container"]}}, {"ruleId": "scanner-0cf17c5709fbc3c3", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: python:3.13-slim"}, "properties": {"repobilityId": "5230b2603545503e", "scanner": "scanner-primary", "fingerprint": "0cf17c5709fbc3c3", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/Dockerfile"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-aa5acaa49eb8315b", "level": "note", "message": {"text": "Containers defined but no K8s/orchestration manifest found"}, "properties": {"repobilityId": "b230ea9b68736081", "scanner": "scanner-primary", "fingerprint": "aa5acaa49eb8315b", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["coverage", "deployment"]}}, {"ruleId": "scanner-4601e3ad3bb28677", "level": "warning", "message": {"text": "No CI/CD pipelines detected"}, "properties": {"repobilityId": "c3ee439bce2bc51e", "scanner": "scanner-primary", "fingerprint": "4601e3ad3bb28677", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["coverage"]}}, {"ruleId": "scanner-c6befcddc572f74b", "level": "note", "message": {"text": "Very large file: frontend/components/MemoPanel.tsx (1347 lines)"}, "properties": {"repobilityId": "88e789ee2ea94273", "scanner": "scanner-primary", "fingerprint": "c6befcddc572f74b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-cd8d91446f2cc93b", "level": "note", "message": {"text": "Very large file: frontend/app/page.tsx (900 lines)"}, "properties": {"repobilityId": "62ad808caa33533c", "scanner": "scanner-primary", "fingerprint": "cd8d91446f2cc93b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-a9394bbfd991cd4e", "level": "note", "message": {"text": "Very large file: frontend/app/docs/page.tsx (1110 lines)"}, "properties": {"repobilityId": "771551bab69884af", "scanner": "scanner-primary", "fingerprint": "a9394bbfd991cd4e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-d7efe6cdc9bb1b32", "level": "note", "message": {"text": "Very large file: frontend/app/portal/page.tsx (2227 lines)"}, "properties": {"repobilityId": "b13bc3638d19ce71", "scanner": "scanner-primary", "fingerprint": "d7efe6cdc9bb1b32", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-3c868a108230009b", "level": "note", "message": {"text": "Very large file: backend/main.py (4600 lines)"}, "properties": {"repobilityId": "fb764a5c13811891", "scanner": "scanner-primary", "fingerprint": "3c868a108230009b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-0a7a0ddb820993e1", "level": "note", "message": {"text": "Very large file: backend/exports/pdf_renderer.py (1544 lines)"}, "properties": {"repobilityId": "f7142c2cdcef1f63", "scanner": "scanner-primary", "fingerprint": "0a7a0ddb820993e1", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-2ec7e6b6cd73bb58", "level": "note", "message": {"text": "Very large file: backend/agents/orchestrator.py (1727 lines)"}, "properties": {"repobilityId": "8b8f08337f3abe89", "scanner": "scanner-primary", "fingerprint": "2ec7e6b6cd73bb58", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-141b30a41e03817b", "level": "note", "message": {"text": "No license file detected"}, "properties": {"repobilityId": "0c4f9604cf9e610e", "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": "00415086f2398ae6", "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": "6d41503525efe840", "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": "982bf38861bab1be", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-b9088664ace7f748", "level": "note", "message": {"text": "Composite production-readiness gap"}, "properties": {"repobilityId": "acc236f5b1f52bbb", "scanner": "scanner-primary", "fingerprint": "b9088664ace7f748", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["production-readiness", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-749d4bc1bd66df5f", "level": "warning", "message": {"text": "Agent instructions exist but release-hardening basics are missing"}, "properties": {"repobilityId": "15c470ed3016c0cd", "scanner": "scanner-primary", "fingerprint": "749d4bc1bd66df5f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-ea8f3013f588db25", "level": "note", "message": {"text": "Shallow git history limits provenance confidence"}, "properties": {"repobilityId": "f9ec8902241ed658", "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": "23e38fc494474043", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-fed8cca37584cdcf", "level": "none", "message": {"text": "Commented-code block (8 lines) in frontend/components/SessionGuard.tsx:104"}, "properties": {"repobilityId": "2f0cc9137c0cb51e", "scanner": "scanner-primary", "fingerprint": "fed8cca37584cdcf", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fbf2ad0285d55df5", "level": "none", "message": {"text": "Commented-code block (6 lines) in frontend/components/EquityCurve.tsx:68"}, "properties": {"repobilityId": "2f1be52101769fe2", "scanner": "scanner-primary", "fingerprint": "fbf2ad0285d55df5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c416854334229b52", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/app/page.tsx:282"}, "properties": {"repobilityId": "4b05123d6723c18f", "scanner": "scanner-primary", "fingerprint": "c416854334229b52", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e9d3eba375d0a562", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/app/layout.tsx:72"}, "properties": {"repobilityId": "39c18511da055a9e", "scanner": "scanner-primary", "fingerprint": "e9d3eba375d0a562", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-470d1bf1932eade2", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/app/docs/page.tsx:864"}, "properties": {"repobilityId": "1139bbf7980764b8", "scanner": "scanner-primary", "fingerprint": "470d1bf1932eade2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-71445c4c98278f4b", "level": "none", "message": {"text": "Commented-code block (7 lines) in frontend/app/dashboard/page.tsx:138"}, "properties": {"repobilityId": "4759a9dd4dba7b73", "scanner": "scanner-primary", "fingerprint": "71445c4c98278f4b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b028b33d4373aaa3", "level": "none", "message": {"text": "Commented-code block (7 lines) in frontend/app/portal/page.tsx:502"}, "properties": {"repobilityId": "80b84edd07894eb2", "scanner": "scanner-primary", "fingerprint": "b028b33d4373aaa3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-668d38273f19fabe", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/app/portal/page.tsx:887"}, "properties": {"repobilityId": "b87bd3e9450409dd", "scanner": "scanner-primary", "fingerprint": "668d38273f19fabe", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4ef042e5db5081bd", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/lib/api.ts:574"}, "properties": {"repobilityId": "7767d1b02584d8db", "scanner": "scanner-primary", "fingerprint": "4ef042e5db5081bd", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-92a1d13bcb885507", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/hooks/useAnalysis.ts:272"}, "properties": {"repobilityId": "23d30d0c78eecdd0", "scanner": "scanner-primary", "fingerprint": "92a1d13bcb885507", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ee7d87289bc38225", "level": "none", "message": {"text": "Commented-code block (5 lines) in mcp-server/app.py:32"}, "properties": {"repobilityId": "c6b57c0f8593df01", "scanner": "scanner-primary", "fingerprint": "ee7d87289bc38225", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c220d9d8f8e3f9ef", "level": "none", "message": {"text": "Commented-code block (6 lines) in mcp-server/telemetry.py:88"}, "properties": {"repobilityId": "de35c5c0c7cd88fc", "scanner": "scanner-primary", "fingerprint": "c220d9d8f8e3f9ef", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b9892a2511c58771", "level": "none", "message": {"text": "Commented-code block (7 lines) in mcp-server/server.py:73"}, "properties": {"repobilityId": "926da6db981d7f02", "scanner": "scanner-primary", "fingerprint": "b9892a2511c58771", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9ce99cab0d79468b", "level": "none", "message": {"text": "Commented-code block (6 lines) in mcp-server/api.py:542"}, "properties": {"repobilityId": "64a306d599183385", "scanner": "scanner-primary", "fingerprint": "9ce99cab0d79468b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0aad033f22fc5724", "level": "note", "message": {"text": "Stub function `_none_key` (body is just `pass`/`return`) \u2014 mcp-server/seam/install.py:44"}, "properties": {"repobilityId": "8d104be032e048fe", "scanner": "scanner-primary", "fingerprint": "0aad033f22fc5724", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "empty-handler", "dead-code"]}}, {"ruleId": "scanner-d92481f658c9764c", "level": "none", "message": {"text": "Commented-code block (5 lines) in mcp-server/quant_core/risk.py:78"}, "properties": {"repobilityId": "2aaafe1657afa8e0", "scanner": "scanner-primary", "fingerprint": "d92481f658c9764c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0e162f8a20d1819f", "level": "none", "message": {"text": "Commented-code block (6 lines) in mcp-server/quant_core/pairs.py:261"}, "properties": {"repobilityId": "2f6cec62207d11cf", "scanner": "scanner-primary", "fingerprint": "0e162f8a20d1819f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-764189eb99a55b1f", "level": "none", "message": {"text": "Commented-code block (5 lines) in mcp-server/gateway/access.py:78"}, "properties": {"repobilityId": "8ff0951b995efd31", "scanner": "scanner-primary", "fingerprint": "764189eb99a55b1f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a9039c9ae39d5313", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/config.py:16"}, "properties": {"repobilityId": "b8588417e6afff17", "scanner": "scanner-primary", "fingerprint": "a9039c9ae39d5313", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-18f6c5d15312fd9a", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/auth.py:121"}, "properties": {"repobilityId": "27c444fe0f77ff56", "scanner": "scanner-primary", "fingerprint": "18f6c5d15312fd9a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1b53dcf237192e50", "level": "note", "message": {"text": "Legacy-named symbol `macro_snapshot_legacy` in backend/main.py:1299"}, "properties": {"repobilityId": "86e4562d3c1f04c4", "scanner": "scanner-primary", "fingerprint": "1b53dcf237192e50", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-e31aac18d302fed8", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/main.py:97"}, "properties": {"repobilityId": "6e51a0c3e1f9b161", "scanner": "scanner-primary", "fingerprint": "e31aac18d302fed8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-50288acd4ef8e1d8", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/exports/pdf_renderer.py:944"}, "properties": {"repobilityId": "4e5b4d39106a3ee3", "scanner": "scanner-primary", "fingerprint": "50288acd4ef8e1d8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ee71dd6887b03450", "level": "none", "message": {"text": "Commented-code block (7 lines) in backend/agents/schemas.py:126"}, "properties": {"repobilityId": "70f83049001cd6f0", "scanner": "scanner-primary", "fingerprint": "ee71dd6887b03450", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-60e1f2b31cbabac6", "level": "none", "message": {"text": "Commented-code block (8 lines) in backend/agents/base_agent.py:39"}, "properties": {"repobilityId": "a86c2a0aba235ca0", "scanner": "scanner-primary", "fingerprint": "60e1f2b31cbabac6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a55049cbe3f7dcf4", "level": "none", "message": {"text": "Commented-code block (6 lines) in backend/agents/research_analyst.py:727"}, "properties": {"repobilityId": "0d57f8880a4cde42", "scanner": "scanner-primary", "fingerprint": "a55049cbe3f7dcf4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-363aa60e64304fac", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/agents/desk_tools.py:34"}, "properties": {"repobilityId": "ba79e01040bc218b", "scanner": "scanner-primary", "fingerprint": "363aa60e64304fac", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cdfb22ce8c1e3cb4", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/agents/orchestrator.py:375"}, "properties": {"repobilityId": "95854215a0d4d4ab", "scanner": "scanner-primary", "fingerprint": "cdfb22ce8c1e3cb4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ded5a80ccb1b3e45", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/agents/cio_synthesizer.py:85"}, "properties": {"repobilityId": "19ab4114e5062819", "scanner": "scanner-primary", "fingerprint": "ded5a80ccb1b3e45", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b8436fada0115f4d", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/agents/mandate_gate.py:41"}, "properties": {"repobilityId": "065884066f5c9b30", "scanner": "scanner-primary", "fingerprint": "b8436fada0115f4d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-639ded853a2f1d3b", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/agents/universe.py:340"}, "properties": {"repobilityId": "08ae76cdef99c162", "scanner": "scanner-primary", "fingerprint": "639ded853a2f1d3b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d9c47604e04335bc", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/agents/query_interpreter.py:558"}, "properties": {"repobilityId": "f6ecdab308d7fa01", "scanner": "scanner-primary", "fingerprint": "d9c47604e04335bc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-879af5f968ce9598", "level": "none", "message": {"text": "Commented-code block (6 lines) in backend/agents/scorer.py:119"}, "properties": {"repobilityId": "9e6c09352b6505bc", "scanner": "scanner-primary", "fingerprint": "879af5f968ce9598", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-57776fcfc5ddb936", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/agents/screen_desk.py:266"}, "properties": {"repobilityId": "5afa8ab8963c9079", "scanner": "scanner-primary", "fingerprint": "57776fcfc5ddb936", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4ed5631aeae0a375", "level": "none", "message": {"text": "Commented-code block (6 lines) in backend/agents/portfolio_strategist.py:117"}, "properties": {"repobilityId": "823c3ac419953091", "scanner": "scanner-primary", "fingerprint": "4ed5631aeae0a375", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3859a2a6dce8c40f", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/db/models.py:289"}, "properties": {"repobilityId": "12a474181e696c8c", "scanner": "scanner-primary", "fingerprint": "3859a2a6dce8c40f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a67bf4cc6e85b481", "level": "none", "message": {"text": "Commented-code block (6 lines) in backend/infra/provided_data.py:93"}, "properties": {"repobilityId": "996a2195017f1e7c", "scanner": "scanner-primary", "fingerprint": "a67bf4cc6e85b481", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8b602b8a29e5a301", "level": "note", "message": {"text": "Stub function `_none_key` (body is just `pass`/`return`) \u2014 backend/infra/provided_data.py:201"}, "properties": {"repobilityId": "94f81603fb98a783", "scanner": "scanner-primary", "fingerprint": "8b602b8a29e5a301", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "empty-handler", "dead-code"]}}, {"ruleId": "scanner-5bea20711dff9279", "level": "note", "message": {"text": "Legacy-named symbol `resolutions_dict_unused` in backend/infra/citations_resolver.py:317"}, "properties": {"repobilityId": "323a15dfb33d1a6a", "scanner": "scanner-primary", "fingerprint": "5bea20711dff9279", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-23509fdfb5f9af27", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/quant/risk.py:195"}, "properties": {"repobilityId": "3bb2b6488c5dd0fa", "scanner": "scanner-primary", "fingerprint": "23509fdfb5f9af27", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3de1590a0fa428ab", "level": "none", "message": {"text": "Commented-code block (6 lines) in backend/quant/backtester.py:39"}, "properties": {"repobilityId": "a5e71c24959cd03b", "scanner": "scanner-primary", "fingerprint": "3de1590a0fa428ab", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4764210b80c7c2a4", "level": "none", "message": {"text": "Commented-code block (6 lines) in backend/quant/regime_factors.py:18"}, "properties": {"repobilityId": "5071d8e1b5ea0158", "scanner": "scanner-primary", "fingerprint": "4764210b80c7c2a4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e23d8be8844bcacd", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/quant/optimizer.py:390"}, "properties": {"repobilityId": "ba308165f743b7f6", "scanner": "scanner-primary", "fingerprint": "e23d8be8844bcacd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-562dcc96ee7000f2", "level": "none", "message": {"text": "Commented-code block (9 lines) in backend/quant/conviction.py:35"}, "properties": {"repobilityId": "f2fc880e23a7d2b5", "scanner": "scanner-primary", "fingerprint": "562dcc96ee7000f2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-be9909d36b812e20", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/quant/regime.py:309"}, "properties": {"repobilityId": "8f4e83301204ff11", "scanner": "scanner-primary", "fingerprint": "be9909d36b812e20", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8f2a98f020f2f2b1", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/llm/client.py:27"}, "properties": {"repobilityId": "179f0f0562c1fef1", "scanner": "scanner-primary", "fingerprint": "8f2a98f020f2f2b1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b0b7578dd2a289b6", "level": "note", "message": {"text": "26 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "8099a5c5713d37b9", "scanner": "scanner-primary", "fingerprint": "b0b7578dd2a289b6", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "config-drift"]}}, {"ruleId": "scanner-be46ea126aa5d8dc", "level": "note", "message": {"text": "Near-duplicate function bodies in 3 places"}, "properties": {"repobilityId": "9951570f25c19018", "scanner": "scanner-primary", "fingerprint": "be46ea126aa5d8dc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "81256d612ec060f3", "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": "b4904a377fb28790", "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": "63da22152ddac264", "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": "6c6cc8c46ce25ca3", "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": "c702a6e27d4b39ce", "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": "1bf8640e8327acf7", "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": "d20396bec58e42e2", "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": "e1502422dae80216", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-ee53e8e0c58609d8", "level": "note", "message": {"text": "Near-duplicate function bodies in 15 places"}, "properties": {"repobilityId": "65ef5d32b2268167", "scanner": "scanner-primary", "fingerprint": "ee53e8e0c58609d8", "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": "cf101fdfe08cd774", "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": "3f84328cd62124bb", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-be46ea126aa5d8dc", "level": "note", "message": {"text": "Near-duplicate function bodies in 3 places"}, "properties": {"repobilityId": "1b3a3f37f6e9b8cf", "scanner": "scanner-primary", "fingerprint": "be46ea126aa5d8dc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-be46ea126aa5d8dc", "level": "note", "message": {"text": "Near-duplicate function bodies in 3 places"}, "properties": {"repobilityId": "9a284ffe39718181", "scanner": "scanner-primary", "fingerprint": "be46ea126aa5d8dc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-0027e313ade46c8f", "level": "note", "message": {"text": "Near-duplicate function bodies in 7 places"}, "properties": {"repobilityId": "5c6d0af30a5f3d87", "scanner": "scanner-primary", "fingerprint": "0027e313ade46c8f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-0027e313ade46c8f", "level": "note", "message": {"text": "Near-duplicate function bodies in 7 places"}, "properties": {"repobilityId": "9b5e36c9db08fe0c", "scanner": "scanner-primary", "fingerprint": "0027e313ade46c8f", "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": "52ac5ae0333033c5", "scanner": "scanner-primary", "fingerprint": "02525d39071dd2c7", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "85561a38939008c1", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-be46ea126aa5d8dc", "level": "note", "message": {"text": "Near-duplicate function bodies in 3 places"}, "properties": {"repobilityId": "ca094793885caafa", "scanner": "scanner-primary", "fingerprint": "be46ea126aa5d8dc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-be46ea126aa5d8dc", "level": "note", "message": {"text": "Near-duplicate function bodies in 3 places"}, "properties": {"repobilityId": "91400117fc66df5b", "scanner": "scanner-primary", "fingerprint": "be46ea126aa5d8dc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-ad0d2aaa54f770f1", "level": "error", "message": {"text": "FastAPI POST `create_workspace` without auth dependency \u2014 backend/routes/alphaflow.py:94"}, "properties": {"repobilityId": "d6a4b776e16857d9", "scanner": "scanner-primary", "fingerprint": "ad0d2aaa54f770f1", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/routes/alphaflow.py"}, "region": {"startLine": 94}}}]}, {"ruleId": "scanner-24e862f59bdeb765", "level": "error", "message": {"text": "FastAPI PATCH `rename_workspace` without auth dependency \u2014 backend/routes/alphaflow.py:101"}, "properties": {"repobilityId": "8bba5379b223180d", "scanner": "scanner-primary", "fingerprint": "24e862f59bdeb765", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/routes/alphaflow.py"}, "region": {"startLine": 101}}}]}, {"ruleId": "scanner-0c1d81729e747e95", "level": "error", "message": {"text": "FastAPI PUT `put_mandate` without auth dependency \u2014 backend/routes/alphaflow.py:124"}, "properties": {"repobilityId": "bab357b4e5e9b45a", "scanner": "scanner-primary", "fingerprint": "0c1d81729e747e95", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/routes/alphaflow.py"}, "region": {"startLine": 124}}}]}, {"ruleId": "scanner-695365e8c9eeaecf", "level": "error", "message": {"text": "FastAPI POST `generate_thesis_route` without auth dependency \u2014 backend/routes/alphaflow.py:157"}, "properties": {"repobilityId": "ddbc13efe95b7544", "scanner": "scanner-primary", "fingerprint": "695365e8c9eeaecf", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/routes/alphaflow.py"}, "region": {"startLine": 157}}}]}, {"ruleId": "scanner-b5ea27511f30fc9e", "level": "error", "message": {"text": "FastAPI POST `validate_thesis` without auth dependency \u2014 backend/routes/alphaflow.py:206"}, "properties": {"repobilityId": "48406e42bd1164d1", "scanner": "scanner-primary", "fingerprint": "b5ea27511f30fc9e", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/routes/alphaflow.py"}, "region": {"startLine": 206}}}]}, {"ruleId": "scanner-7b1dd17b7c10f62e", "level": "error", "message": {"text": "FastAPI POST `create_thesis` without auth dependency \u2014 backend/routes/alphaflow.py:276"}, "properties": {"repobilityId": "e8cdf362dc9e7f59", "scanner": "scanner-primary", "fingerprint": "7b1dd17b7c10f62e", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/routes/alphaflow.py"}, "region": {"startLine": 276}}}]}, {"ruleId": "scanner-6b605a0ba119f29e", "level": "error", "message": {"text": "FastAPI PATCH `update_thesis` without auth dependency \u2014 backend/routes/alphaflow.py:296"}, "properties": {"repobilityId": "6f3be3f68fed0c2f", "scanner": "scanner-primary", "fingerprint": "6b605a0ba119f29e", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/routes/alphaflow.py"}, "region": {"startLine": 296}}}]}, {"ruleId": "scanner-113e17faf5ffe709", "level": "error", "message": {"text": "FastAPI POST `create_journal` without auth dependency \u2014 backend/routes/alphaflow.py:330"}, "properties": {"repobilityId": "14b815a41a579b79", "scanner": "scanner-primary", "fingerprint": "113e17faf5ffe709", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/routes/alphaflow.py"}, "region": {"startLine": 330}}}]}, {"ruleId": "scanner-18497b51676efb49", "level": "error", "message": {"text": "FastAPI POST `create_connector` without auth dependency \u2014 backend/routes/alphaflow.py:358"}, "properties": {"repobilityId": "05064ae6b98b6950", "scanner": "scanner-primary", "fingerprint": "18497b51676efb49", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/routes/alphaflow.py"}, "region": {"startLine": 358}}}]}, {"ruleId": "scanner-59d4dd98e2271bf7", "level": "error", "message": {"text": "FastAPI DELETE `revoke_connector` without auth dependency \u2014 backend/routes/alphaflow.py:373"}, "properties": {"repobilityId": "039bd63dc5429d33", "scanner": "scanner-primary", "fingerprint": "59d4dd98e2271bf7", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/routes/alphaflow.py"}, "region": {"startLine": 373}}}]}, {"ruleId": "scanner-0bea49cdd841fa5d", "level": "error", "message": {"text": "FastAPI POST `create_report` without auth dependency \u2014 backend/routes/alphaflow.py:399"}, "properties": {"repobilityId": "38480b1447ba4d05", "scanner": "scanner-primary", "fingerprint": "0bea49cdd841fa5d", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/routes/alphaflow.py"}, "region": {"startLine": 399}}}]}, {"ruleId": "scanner-dd204aea1fade599", "level": "error", "message": {"text": "FastAPI PATCH `update_report` without auth dependency \u2014 backend/routes/alphaflow.py:434"}, "properties": {"repobilityId": "4e11f800c8bf7b58", "scanner": "scanner-primary", "fingerprint": "dd204aea1fade599", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/routes/alphaflow.py"}, "region": {"startLine": 434}}}]}, {"ruleId": "scanner-576817080069807e", "level": "error", "message": {"text": "FastAPI DELETE `delete_report` without auth dependency \u2014 backend/routes/alphaflow.py:445"}, "properties": {"repobilityId": "5775ca1c337222fe", "scanner": "scanner-primary", "fingerprint": "576817080069807e", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/routes/alphaflow.py"}, "region": {"startLine": 445}}}]}, {"ruleId": "scanner-e56a230105bea9cf", "level": "error", "message": {"text": "FastAPI POST `share_report` without auth dependency \u2014 backend/routes/alphaflow.py:454"}, "properties": {"repobilityId": "9466d8b27be72cb1", "scanner": "scanner-primary", "fingerprint": "e56a230105bea9cf", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/routes/alphaflow.py"}, "region": {"startLine": 454}}}]}, {"ruleId": "scanner-af16d364969e2ffa", "level": "error", "message": {"text": "FastAPI DELETE `unshare_report` without auth dependency \u2014 backend/routes/alphaflow.py:463"}, "properties": {"repobilityId": "e81d9ee98bf9ce32", "scanner": "scanner-primary", "fingerprint": "af16d364969e2ffa", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/routes/alphaflow.py"}, "region": {"startLine": 463}}}]}, {"ruleId": "scanner-db60dd3ffe744677", "level": "error", "message": {"text": "FastAPI POST `quick_signal` without auth dependency \u2014 backend/routes/alphaflow.py:481"}, "properties": {"repobilityId": "2672ef2da0cd5725", "scanner": "scanner-primary", "fingerprint": "db60dd3ffe744677", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/routes/alphaflow.py"}, "region": {"startLine": 481}}}]}, {"ruleId": "scanner-d1b85b422c05e493", "level": "error", "message": {"text": "FastAPI POST `create_monitor` without auth dependency \u2014 backend/routes/alphaflow.py:820"}, "properties": {"repobilityId": "3586cd0f05c02ba2", "scanner": "scanner-primary", "fingerprint": "d1b85b422c05e493", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/routes/alphaflow.py"}, "region": {"startLine": 820}}}]}, {"ruleId": "scanner-75452172dda8b1f7", "level": "error", "message": {"text": "FastAPI PATCH `update_monitor` without auth dependency \u2014 backend/routes/alphaflow.py:833"}, "properties": {"repobilityId": "f11e2b344b4eb4df", "scanner": "scanner-primary", "fingerprint": "75452172dda8b1f7", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/routes/alphaflow.py"}, "region": {"startLine": 833}}}]}, {"ruleId": "scanner-723c9716c00c7cb6", "level": "error", "message": {"text": "FastAPI DELETE `delete_monitor` without auth dependency \u2014 backend/routes/alphaflow.py:845"}, "properties": {"repobilityId": "7d2e439a7951202a", "scanner": "scanner-primary", "fingerprint": "723c9716c00c7cb6", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/routes/alphaflow.py"}, "region": {"startLine": 845}}}]}, {"ruleId": "scanner-6039bf899c4c43d7", "level": "error", "message": {"text": "FastAPI POST `run_monitor_now` without auth dependency \u2014 backend/routes/alphaflow.py:853"}, "properties": {"repobilityId": "b5fd14ac4572de25", "scanner": "scanner-primary", "fingerprint": "6039bf899c4c43d7", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/routes/alphaflow.py"}, "region": {"startLine": 853}}}]}, {"ruleId": "scanner-3c516f2a15035c4f", "level": "error", "message": {"text": "FastAPI POST `alerts_mark_all_read` without auth dependency \u2014 backend/routes/alphaflow.py:887"}, "properties": {"repobilityId": "2e404d75598cd33a", "scanner": "scanner-primary", "fingerprint": "3c516f2a15035c4f", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/routes/alphaflow.py"}, "region": {"startLine": 887}}}]}, {"ruleId": "scanner-806b818fd2e90b85", "level": "error", "message": {"text": "FastAPI PATCH `set_alert_state` without auth dependency \u2014 backend/routes/alphaflow.py:893"}, "properties": {"repobilityId": "8ba947089c70c7a5", "scanner": "scanner-primary", "fingerprint": "806b818fd2e90b85", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/routes/alphaflow.py"}, "region": {"startLine": 893}}}]}, {"ruleId": "scanner-848c201b1836efd9", "level": "error", "message": {"text": "FastAPI DELETE `delete_my_data` without auth dependency \u2014 backend/routes/alphaflow.py:912"}, "properties": {"repobilityId": "a165521578715a49", "scanner": "scanner-primary", "fingerprint": "848c201b1836efd9", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/routes/alphaflow.py"}, "region": {"startLine": 912}}}]}, {"ruleId": "scanner-74ba6011860d481b", "level": "error", "message": {"text": "Dangling fetch: GET /api/me/workspaces (frontend/lib/api.ts:379)"}, "properties": {"repobilityId": "7ebba7caed1e9471", "scanner": "scanner-primary", "fingerprint": "74ba6011860d481b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-618c65f1e8f00a19", "level": "error", "message": {"text": "Dangling fetch: POST /api/me/workspaces (frontend/lib/api.ts:381)"}, "properties": {"repobilityId": "dc845dc73a3c763d", "scanner": "scanner-primary", "fingerprint": "618c65f1e8f00a19", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-d3f7a2f8123e6021", "level": "error", "message": {"text": "Dangling fetch: GET /api/me/workspaces/${workspaceId}/mandate (frontend/lib/api.ts:383)"}, "properties": {"repobilityId": "6e9b4e49dae483f4", "scanner": "scanner-primary", "fingerprint": "d3f7a2f8123e6021", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-ac023f19a3c9cc21", "level": "error", "message": {"text": "Dangling fetch: PUT /api/me/workspaces/${workspaceId}/mandate (frontend/lib/api.ts:385)"}, "properties": {"repobilityId": "5700d9f487cdca0d", "scanner": "scanner-primary", "fingerprint": "ac023f19a3c9cc21", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-55252455183fcc2e", "level": "error", "message": {"text": "Dangling fetch: GET /api/me/theses?${q.toString()} (frontend/lib/api.ts:392)"}, "properties": {"repobilityId": "0a2331d7f9f825f3", "scanner": "scanner-primary", "fingerprint": "55252455183fcc2e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-f9ae517b18b61dc8", "level": "error", "message": {"text": "Dangling fetch: POST /api/me/theses (frontend/lib/api.ts:395)"}, "properties": {"repobilityId": "9bec836fbece848e", "scanner": "scanner-primary", "fingerprint": "f9ae517b18b61dc8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-4e39ce7e24121d41", "level": "error", "message": {"text": "Dangling fetch: POST /api/me/theses/generate (frontend/lib/api.ts:399)"}, "properties": {"repobilityId": "782f4d2950f76ef4", "scanner": "scanner-primary", "fingerprint": "4e39ce7e24121d41", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-3e286c70b874094d", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/me/theses/${thesisId} (frontend/lib/api.ts:409)"}, "properties": {"repobilityId": "ade86ef53585adad", "scanner": "scanner-primary", "fingerprint": "3e286c70b874094d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-9776f2adbb9c791c", "level": "error", "message": {"text": "Dangling fetch: GET /api/me/journal?${q.toString()} (frontend/lib/api.ts:412)"}, "properties": {"repobilityId": "311419f26811e8ea", "scanner": "scanner-primary", "fingerprint": "9776f2adbb9c791c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-063c9d749acbb70d", "level": "error", "message": {"text": "Dangling fetch: POST /api/me/journal (frontend/lib/api.ts:417)"}, "properties": {"repobilityId": "a4df2fd1bc0672d9", "scanner": "scanner-primary", "fingerprint": "063c9d749acbb70d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-9e0f44040b449ada", "level": "error", "message": {"text": "Dangling fetch: GET /api/me/reports (frontend/lib/api.ts:418)"}, "properties": {"repobilityId": "76e14f6e5a6dac19", "scanner": "scanner-primary", "fingerprint": "9e0f44040b449ada", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-22720ac20880e7c4", "level": "error", "message": {"text": "Dangling fetch: POST /api/me/reports (frontend/lib/api.ts:420)"}, "properties": {"repobilityId": "12a0bae5e39e124a", "scanner": "scanner-primary", "fingerprint": "22720ac20880e7c4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-2ea35387c742bac5", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/me/reports/${reportId} (frontend/lib/api.ts:422)"}, "properties": {"repobilityId": "dfbe643f79a17085", "scanner": "scanner-primary", "fingerprint": "2ea35387c742bac5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-2cb62c13ccdb8478", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/me/reports/${reportId} (frontend/lib/api.ts:424)"}, "properties": {"repobilityId": "7eb53920d82112bf", "scanner": "scanner-primary", "fingerprint": "2cb62c13ccdb8478", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-300c795a3aca11ff", "level": "error", "message": {"text": "Dangling fetch: POST /api/me/reports/${reportId}/share (frontend/lib/api.ts:428)"}, "properties": {"repobilityId": "2c75401351dcee96", "scanner": "scanner-primary", "fingerprint": "300c795a3aca11ff", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-dcce82d20ce9786d", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/me/reports/${reportId}/share (frontend/lib/api.ts:430)"}, "properties": {"repobilityId": "3b16a01ff9eee4ac", "scanner": "scanner-primary", "fingerprint": "dcce82d20ce9786d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-926852c237a173f8", "level": "error", "message": {"text": "Dangling fetch: GET /api/me/connectors (frontend/lib/api.ts:434)"}, "properties": {"repobilityId": "14b96d73d4a85945", "scanner": "scanner-primary", "fingerprint": "926852c237a173f8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-23a6edeabf2ef5a0", "level": "error", "message": {"text": "Dangling fetch: POST /api/me/connectors (frontend/lib/api.ts:436)"}, "properties": {"repobilityId": "8b5242561c4114bd", "scanner": "scanner-primary", "fingerprint": "23a6edeabf2ef5a0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-aee4669a2ba27608", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/me/connectors/${connectorId} (frontend/lib/api.ts:438)"}, "properties": {"repobilityId": "0c3c8ee2fc0ba846", "scanner": "scanner-primary", "fingerprint": "aee4669a2ba27608", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-2eae51127a431061", "level": "error", "message": {"text": "Dangling fetch: POST /api/me/monitors (frontend/lib/api.ts:451)"}, "properties": {"repobilityId": "bd4fef7952bc03b4", "scanner": "scanner-primary", "fingerprint": "2eae51127a431061", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-c12f77ed5d87d63b", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/me/monitors/${monitorId} (frontend/lib/api.ts:453)"}, "properties": {"repobilityId": "474cc76834702ea3", "scanner": "scanner-primary", "fingerprint": "c12f77ed5d87d63b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-dd9224a6554ddd52", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/me/monitors/${monitorId} (frontend/lib/api.ts:455)"}, "properties": {"repobilityId": "59c086a9f97be11f", "scanner": "scanner-primary", "fingerprint": "dd9224a6554ddd52", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-a33f0ab8e09c678b", "level": "error", "message": {"text": "Dangling fetch: POST /api/me/monitors/${monitorId}/run (frontend/lib/api.ts:459)"}, "properties": {"repobilityId": "faeb6e53cc87cf08", "scanner": "scanner-primary", "fingerprint": "a33f0ab8e09c678b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-5c8999a16a316026", "level": "error", "message": {"text": "Dangling fetch: GET /api/me/alerts/unread-count (frontend/lib/api.ts:464)"}, "properties": {"repobilityId": "b0fbf0d2a46dc783", "scanner": "scanner-primary", "fingerprint": "5c8999a16a316026", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-cbbd0aeefdfa4690", "level": "error", "message": {"text": "Dangling fetch: POST /api/me/alerts/mark-all-read (frontend/lib/api.ts:465)"}, "properties": {"repobilityId": "c562c91e9b56ce20", "scanner": "scanner-primary", "fingerprint": "cbbd0aeefdfa4690", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-8cbb12ab4b617c4f", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/me/alerts/${alertId} (frontend/lib/api.ts:467)"}, "properties": {"repobilityId": "737d9bcfb114def7", "scanner": "scanner-primary", "fingerprint": "8cbb12ab4b617c4f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-a5a7090164f8e2e3", "level": "error", "message": {"text": "Dangling fetch: GET /api/me/breadth (frontend/lib/api.ts:471)"}, "properties": {"repobilityId": "b69fa8321db91685", "scanner": "scanner-primary", "fingerprint": "a5a7090164f8e2e3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-e4beadb34770367c", "level": "note", "message": {"text": "Unused endpoint: GET /v1/status"}, "properties": {"repobilityId": "4c79ebf08611fc77", "scanner": "scanner-primary", "fingerprint": "e4beadb34770367c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5baa8971ebe192a1", "level": "note", "message": {"text": "Unused endpoint: GET /"}, "properties": {"repobilityId": "20a8f3c2fe8fff04", "scanner": "scanner-primary", "fingerprint": "5baa8971ebe192a1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-4c063354a4d178f9", "level": "note", "message": {"text": "Unused endpoint: GET /favicon.svg"}, "properties": {"repobilityId": "18d3d94f7264104a", "scanner": "scanner-primary", "fingerprint": "4c063354a4d178f9", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-4c1219a716537775", "level": "note", "message": {"text": "Unused endpoint: GET /icon.svg"}, "properties": {"repobilityId": "4b2c917bb09217eb", "scanner": "scanner-primary", "fingerprint": "4c1219a716537775", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-df1dca98975f25ca", "level": "note", "message": {"text": "Unused endpoint: GET /icon.png"}, "properties": {"repobilityId": "f5a5eb3a3e05cb10", "scanner": "scanner-primary", "fingerprint": "df1dca98975f25ca", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c7b4e1b46de2a2d9", "level": "note", "message": {"text": "Unused endpoint: GET /v1/version"}, "properties": {"repobilityId": "b5e965833f49554c", "scanner": "scanner-primary", "fingerprint": "c7b4e1b46de2a2d9", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-67e7baa1846bfe5d", "level": "note", "message": {"text": "Unused endpoint: GET /v1/tools"}, "properties": {"repobilityId": "eafc9d089f489f15", "scanner": "scanner-primary", "fingerprint": "67e7baa1846bfe5d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-bcbac91b4d15dcf3", "level": "note", "message": {"text": "Unused endpoint: GET /v1/usage"}, "properties": {"repobilityId": "dc7b5c7f3083d3a7", "scanner": "scanner-primary", "fingerprint": "bcbac91b4d15dcf3", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e4515b92ee44213d", "level": "note", "message": {"text": "Unused endpoint: GET /v1/internal/usage"}, "properties": {"repobilityId": "8141ebb449202400", "scanner": "scanner-primary", "fingerprint": "e4515b92ee44213d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-35a386e4107e71ec", "level": "note", "message": {"text": "Unused endpoint: POST /v1/tools/{tool}"}, "properties": {"repobilityId": "1cac2a712fab8994", "scanner": "scanner-primary", "fingerprint": "35a386e4107e71ec", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2f99ff0235d64890", "level": "note", "message": {"text": "Unused endpoint: POST /v1/desk/research"}, "properties": {"repobilityId": "e76388aede7dad55", "scanner": "scanner-primary", "fingerprint": "2f99ff0235d64890", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-be46334ae9460347", "level": "note", "message": {"text": "Unused endpoint: POST /v1/desk/macro"}, "properties": {"repobilityId": "0e50df156428c716", "scanner": "scanner-primary", "fingerprint": "be46334ae9460347", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-4468b0c23bc6f9a1", "level": "note", "message": {"text": "Unused endpoint: POST /v1/desk/scenario"}, "properties": {"repobilityId": "e5710b85d1b06f7a", "scanner": "scanner-primary", "fingerprint": "4468b0c23bc6f9a1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b7ed82757d2efeb0", "level": "note", "message": {"text": "Unused endpoint: POST /v1/desk/screen"}, "properties": {"repobilityId": "19081c550880abdf", "scanner": "scanner-primary", "fingerprint": "b7ed82757d2efeb0", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8d12928787dc6a36", "level": "note", "message": {"text": "Unused endpoint: POST /v1/apply_mandate"}, "properties": {"repobilityId": "3e3a25c0c1179b6e", "scanner": "scanner-primary", "fingerprint": "8d12928787dc6a36", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-86a8974775594da4", "level": "note", "message": {"text": "Unused endpoint: POST /v1/desk/risk"}, "properties": {"repobilityId": "36b852bf898b78bb", "scanner": "scanner-primary", "fingerprint": "86a8974775594da4", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f754f5b79d9e48e0", "level": "note", "message": {"text": "Unused endpoint: POST /v1/desk/structure"}, "properties": {"repobilityId": "54ca43363cc19fa6", "scanner": "scanner-primary", "fingerprint": "f754f5b79d9e48e0", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5cd65a5e3d27cddc", "level": "note", "message": {"text": "Unused endpoint: POST /v1/jobs"}, "properties": {"repobilityId": "e133b866ca2ec234", "scanner": "scanner-primary", "fingerprint": "5cd65a5e3d27cddc", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6b037c79094e53ad", "level": "note", "message": {"text": "Unused endpoint: GET /v1/jobs/{job_id}"}, "properties": {"repobilityId": "b7db6ed2f6291dae", "scanner": "scanner-primary", "fingerprint": "6b037c79094e53ad", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d2c7128de03fdd80", "level": "note", "message": {"text": "Unused endpoint: GET /v1/jobs/{job_id}/stream"}, "properties": {"repobilityId": "f3a680385129a365", "scanner": "scanner-primary", "fingerprint": "d2c7128de03fdd80", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-4756b4c4da7d2088", "level": "note", "message": {"text": "Unused endpoint: GET /api/health"}, "properties": {"repobilityId": "3c95aa69206af894", "scanner": "scanner-primary", "fingerprint": "4756b4c4da7d2088", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-52765bcf81a6e09b", "level": "note", "message": {"text": "Unused endpoint: GET /api/ready"}, "properties": {"repobilityId": "7af157e1f8e361b1", "scanner": "scanner-primary", "fingerprint": "52765bcf81a6e09b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2b6bec3c059afc6a", "level": "note", "message": {"text": "Unused endpoint: POST /api/internal/usage/incr"}, "properties": {"repobilityId": "d2d82f0d04979f41", "scanner": "scanner-primary", "fingerprint": "2b6bec3c059afc6a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2280fc79e3908d9d", "level": "note", "message": {"text": "Unused endpoint: POST /api/internal/keys/verify"}, "properties": {"repobilityId": "597b3ab885150907", "scanner": "scanner-primary", "fingerprint": "2280fc79e3908d9d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-56afea5482d4f0a7", "level": "note", "message": {"text": "Unused endpoint: POST /api/internal/desk"}, "properties": {"repobilityId": "e7a3bcb50cfd2667", "scanner": "scanner-primary", "fingerprint": "56afea5482d4f0a7", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d5ce73ff43640790", "level": "note", "message": {"text": "Unused endpoint: POST /api/internal/apply-mandate"}, "properties": {"repobilityId": "466f8611e357d5d9", "scanner": "scanner-primary", "fingerprint": "d5ce73ff43640790", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-feafa0c10734647d", "level": "note", "message": {"text": "Unused endpoint: POST /api/internal/cron/nightly"}, "properties": {"repobilityId": "af9c6bb63ab0927c", "scanner": "scanner-primary", "fingerprint": "feafa0c10734647d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-48b53adfff9b3075", "level": "note", "message": {"text": "Unused endpoint: POST /api/internal/slate"}, "properties": {"repobilityId": "fc09885ca332f44e", "scanner": "scanner-primary", "fingerprint": "48b53adfff9b3075", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-778bd52fb113ae5e", "level": "note", "message": {"text": "Unused endpoint: GET /api/me/risk"}, "properties": {"repobilityId": "b8231e1be2ea9deb", "scanner": "scanner-primary", "fingerprint": "778bd52fb113ae5e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-60ba17578521932f", "level": "note", "message": {"text": "Unused endpoint: GET /api/data/events"}, "properties": {"repobilityId": "89f32f4d4d662054", "scanner": "scanner-primary", "fingerprint": "60ba17578521932f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-53fd3192dbcb86e9", "level": "note", "message": {"text": "Unused endpoint: GET /api/quant/correlation"}, "properties": {"repobilityId": "d49cbba09debf7b7", "scanner": "scanner-primary", "fingerprint": "53fd3192dbcb86e9", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e04c6bb4c517ba57", "level": "note", "message": {"text": "Unused endpoint: GET /api/quant/drawdown/{ticker}"}, "properties": {"repobilityId": "387ab6398bdd7d8a", "scanner": "scanner-primary", "fingerprint": "e04c6bb4c517ba57", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-fee493e441e74102", "level": "note", "message": {"text": "Unused endpoint: GET /api/quant/volatility/{ticker}"}, "properties": {"repobilityId": "ffde993b9a5891a8", "scanner": "scanner-primary", "fingerprint": "fee493e441e74102", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-339dabada27b8dc0", "level": "note", "message": {"text": "Unused endpoint: GET /api/quant/options/{ticker}"}, "properties": {"repobilityId": "fd05f9108b546c6d", "scanner": "scanner-primary", "fingerprint": "339dabada27b8dc0", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f9ba17ecb2ce1809", "level": "note", "message": {"text": "Unused endpoint: GET /api/quant/enrich"}, "properties": {"repobilityId": "cbb6659e8a724b07", "scanner": "scanner-primary", "fingerprint": "f9ba17ecb2ce1809", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-18a6d45f9bd7bf6e", "level": "note", "message": {"text": "Unused endpoint: GET /api/quant/macro-series"}, "properties": {"repobilityId": "b8622cf4cb3fc052", "scanner": "scanner-primary", "fingerprint": "18a6d45f9bd7bf6e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e6d3540819c43b1b", "level": "note", "message": {"text": "Unused endpoint: GET /api/quant/cross-asset-correlation"}, "properties": {"repobilityId": "c59161838b66aa89", "scanner": "scanner-primary", "fingerprint": "e6d3540819c43b1b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-99a3d1e4d2c301d8", "level": "note", "message": {"text": "Unused endpoint: GET /api/quant/regime/diagnostics"}, "properties": {"repobilityId": "8cb06bc3bfa9f5b8", "scanner": "scanner-primary", "fingerprint": "99a3d1e4d2c301d8", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e48b8c8899fc741a", "level": "note", "message": {"text": "Unused endpoint: POST /api/quant/curve/key-rate-durations"}, "properties": {"repobilityId": "6c34da2e98bc84f5", "scanner": "scanner-primary", "fingerprint": "e48b8c8899fc741a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-34d9123ba323959d", "level": "note", "message": {"text": "Unused endpoint: GET /api/quant/factors"}, "properties": {"repobilityId": "16393298c0029856", "scanner": "scanner-primary", "fingerprint": "34d9123ba323959d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e12e9b70e1261963", "level": "note", "message": {"text": "Unused endpoint: GET /api/portfolio/risk"}, "properties": {"repobilityId": "e4f7227639296c25", "scanner": "scanner-primary", "fingerprint": "e12e9b70e1261963", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-26ce46123a2fea39", "level": "note", "message": {"text": "Unused endpoint: GET /api/export/memo/{memo_id}"}, "properties": {"repobilityId": "13a5b8e496c291cf", "scanner": "scanner-primary", "fingerprint": "26ce46123a2fea39", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7eaf9725135ddddd", "level": "note", "message": {"text": "Unused endpoint: GET /api/export/portfolio"}, "properties": {"repobilityId": "264e170cfd7a7efc", "scanner": "scanner-primary", "fingerprint": "7eaf9725135ddddd", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ce2091a987b62ffa", "level": "note", "message": {"text": "Unused endpoint: GET /api/export/scorecard"}, "properties": {"repobilityId": "939c7631e4998cad", "scanner": "scanner-primary", "fingerprint": "ce2091a987b62ffa", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c1cabc4cfd5b7c1f", "level": "note", "message": {"text": "Unused endpoint: GET /api/export/morning"}, "properties": {"repobilityId": "090c254fccf49069", "scanner": "scanner-primary", "fingerprint": "c1cabc4cfd5b7c1f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2b11c70711f79d25", "level": "note", "message": {"text": "Unused endpoint: GET /api/export/range"}, "properties": {"repobilityId": "338d3214c0a64427", "scanner": "scanner-primary", "fingerprint": "2b11c70711f79d25", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1d52fef0fa6b5d16", "level": "note", "message": {"text": "Unused endpoint: GET /api/portfolio/equity-curve"}, "properties": {"repobilityId": "62d9a18088448309", "scanner": "scanner-primary", "fingerprint": "1d52fef0fa6b5d16", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-781467633fad5815", "level": "note", "message": {"text": "Unused endpoint: GET /api/track-record/verify"}, "properties": {"repobilityId": "b3ea21795064333c", "scanner": "scanner-primary", "fingerprint": "781467633fad5815", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-937332265654ea98", "level": "note", "message": {"text": "Unused endpoint: POST /api/track-record/anchor"}, "properties": {"repobilityId": "6d5a130442b6e340", "scanner": "scanner-primary", "fingerprint": "937332265654ea98", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-66a8df1d99747f4f", "level": "note", "message": {"text": "Unused endpoint: POST /api/analyze/stream"}, "properties": {"repobilityId": "29d03304e72a39d3", "scanner": "scanner-primary", "fingerprint": "66a8df1d99747f4f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}