{"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-3977572baa4edb32", "name": "Possibly dead Python function: outcome_to_dict", "shortDescription": {"text": "Possibly dead Python function: outcome_to_dict"}, "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-93811dd6412d99b0", "name": "Possibly dead Python function: summarize", "shortDescription": {"text": "Possibly dead Python function: summarize"}, "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-36b6ecd260aa05c6", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/components/panels/EventCalendarPanel/index.tsx:64", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/components/panels/EventCalendarPanel/index.tsx:64"}, "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-5e515c3f113b4808", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/components/panels/CorrelationPanel/index.tsx:113", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/components/panels/CorrelationPanel/index.tsx:113"}, "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-8eda22c115e507d2", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/components/panels/MistakeMemoryPanel/index.tsx:78", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/components/panels/MistakeMemoryPanel/index.tsx:78"}, "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-03cfb9fc4d67fd64", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/components/panels/TimeframeMatrixPanel/index.tsx:106", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/components/panels/TimeframeMatrixPanel/index.tsx:106"}, "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-4a5c13f865988614", "name": "Stray `console.log` in TS/JS \u2014 apps/web/hooks/useOwnerFeedback.ts:17", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/web/hooks/useOwnerFeedback.ts:17"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-cfa3c5a41cdd6949", "name": "Insecure pattern 'cors_wildcard' in apps/api/main.py:52", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in apps/api/main.py:52"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6372cebde0220094", "name": "No auth library detected", "shortDescription": {"text": "No auth library detected"}, "fullDescription": {"text": "The scanner did not find any standard auth library (JWT, OAuth, NextAuth, Auth0, etc.). The repo has auth/admin/session surface indicators, so auth may live in custom code, in a separate service, or be missing."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-7e0bb66534314763", "name": "Very large file: apps/web/types/generated/schema.ts (2398 lines)", "shortDescription": {"text": "Very large file: apps/web/types/generated/schema.ts (2398 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ea3b5e389d8c9c0f", "name": "Low test-to-source ratio", "shortDescription": {"text": "Low test-to-source ratio"}, "fullDescription": {"text": "37 tests / 164 src (ratio 0.23)."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-141b30a41e03817b", "name": "No license file detected", "shortDescription": {"text": "No license file detected"}, "fullDescription": {"text": "No LICENSE/COPYING/NOTICE file was found. Generated repositories often omit licensing, which blocks reuse and automated intake."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3ab5d313dda8e5f9", "name": "Debug logging residue appears in source files", "shortDescription": {"text": "Debug logging residue appears in source files"}, "fullDescription": {"text": "Found 6 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 40 placeholder/mock markers across 19 source files. This often means the repo looks complete while core flows still use generated scaffolding or fake data."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2d0c7b7ab8f8aacf", "name": "Critical user flow still appears backed by mock or placeholder data", "shortDescription": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "fullDescription": {"text": "A payment/auth/admin/order/billing-style flow contains mock, fake, TODO, dummy, or placeholder markers in runtime source. In the Fable corpus this is a high-leverage completeness smell: the app can look finished while the money, identity, or tenant flow is still scaffolded."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ea8f3013f588db25", "name": "Shallow git history limits provenance confidence", "shortDescription": {"text": "Shallow git history limits provenance confidence"}, "fullDescription": {"text": "The repository is a shallow clone. Origin/evolution analysis cannot distinguish fresh generation, imported legacy code, or long-lived human code with high confidence."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8424db9c75e04ba4", "name": "Very short observed git history", "shortDescription": {"text": "Very short observed git history"}, "fullDescription": {"text": "The repo has multiple source files but two or fewer visible commits. This is not a failure by itself, but it lowers confidence in evolution-based diagnosis."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5484cd5f7d72598e", "name": "Legacy-named symbol `_seed_v2` in tests/unit/test_learning_outcomes.py:213", "shortDescription": {"text": "Legacy-named symbol `_seed_v2` in tests/unit/test_learning_outcomes.py:213"}, "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-7a8c3311a703fdc8", "name": "Legacy-named symbol `weights_v1` in tests/unit/test_rebalance.py:5", "shortDescription": {"text": "Legacy-named symbol `weights_v1` in tests/unit/test_rebalance.py:5"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-50d563363a62c81d", "name": "Legacy-named symbol `is_v2` in tests/unit/test_timeframe_contracts.py:99", "shortDescription": {"text": "Legacy-named symbol `is_v2` in tests/unit/test_timeframe_contracts.py:99"}, "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-b3380b2ca42b9164", "name": "Commented-code block (7 lines) in tests/unit/test_paper_lifecycle.py:311", "shortDescription": {"text": "Commented-code block (7 lines) in tests/unit/test_paper_lifecycle.py:311"}, "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-9e90221c658c65b2", "name": "Legacy-named symbol `weights_v1` in apps/api/routers/rebalance.py:5", "shortDescription": {"text": "Legacy-named symbol `weights_v1` in apps/api/routers/rebalance.py:5"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f1a1ed5f6c4d718c", "name": "Commented-code block (5 lines) in apps/web/components/panels/OptionsVolPanel/index.tsx:9", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web/components/panels/OptionsVolPanel/index.tsx:9"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d257f55d39352610", "name": "Network/subprocess call without timeout or try/except \u2014 scripts/codegen.py:59", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 scripts/codegen.py:59"}, "fullDescription": {"text": "`subprocess.run(...)` here lacks both a `timeout=` arg and an enclosing try/except. This is exactly the class of bug that took down our git-clone earlier (HTTP/2 stream cancel surfaced as a fatal). Add a `timeout=` and wrap in try/except, or use a wrapper that retries."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-847d19529d52fbee", "name": "Legacy-named symbol `touche_fallback_legacy` in packages/consensus/engine.py:78", "shortDescription": {"text": "Legacy-named symbol `touche_fallback_legacy` in packages/consensus/engine.py:78"}, "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-fda7cd62ba75baf1", "name": "Legacy-named symbol `is_v2` in packages/learning/fingerprint.py:55", "shortDescription": {"text": "Legacy-named symbol `is_v2` in packages/learning/fingerprint.py:55"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ef338112ea1faad1", "name": "Legacy-named symbol `model_copy` in packages/risk/event_risk.py:132", "shortDescription": {"text": "Legacy-named symbol `model_copy` in packages/risk/event_risk.py:132"}, "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-250f57e8a1dbd3c5", "name": "4 env vars used in code but missing from .env.example", "shortDescription": {"text": "4 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `DECISION_LOG_PATH`, `NEXT_PUBLIC_API_BASE`, `PAPER_ARCHIVE_DIR`, `WEIGHTS_OUTPUT_DIR`. Add them (with a placeholder/comment) to .env.example so onboarding doesn't break."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "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:\napps/api/routers/decision.py:get_decision_matrix, apps/api/routers/cockpit.py:get_cockpit_brief\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-e52bd87113d9c4c5", "name": "FastAPI POST `post_retrain_calibration` without auth dependency \u2014 apps/api/routers/learning.py:44", "shortDescription": {"text": "FastAPI POST `post_retrain_calibration` without auth dependency \u2014 apps/api/routers/learning.py:44"}, "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-6afc78d278fa9aaa", "name": "FastAPI POST `post_propose` without auth dependency \u2014 apps/api/routers/rebalance.py:43", "shortDescription": {"text": "FastAPI POST `post_propose` without auth dependency \u2014 apps/api/routers/rebalance.py:43"}, "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-3896dc2400a042ba", "name": "FastAPI POST `post_approve` without auth dependency \u2014 apps/api/routers/rebalance.py:54", "shortDescription": {"text": "FastAPI POST `post_approve` without auth dependency \u2014 apps/api/routers/rebalance.py:54"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3065303f177c3ea1", "name": "FastAPI POST `post_reject` without auth dependency \u2014 apps/api/routers/rebalance.py:63", "shortDescription": {"text": "FastAPI POST `post_reject` without auth dependency \u2014 apps/api/routers/rebalance.py:63"}, "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-9afa7394e0db989d", "name": "FastAPI POST `post_halts_reset` without auth dependency \u2014 apps/api/routers/risk.py:47", "shortDescription": {"text": "FastAPI POST `post_halts_reset` without auth dependency \u2014 apps/api/routers/risk.py:47"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-582a61d07a4ac69f", "name": "FastAPI POST `post_chat` without auth dependency \u2014 apps/api/routers/chat.py:25", "shortDescription": {"text": "FastAPI POST `post_chat` without auth dependency \u2014 apps/api/routers/chat.py:25"}, "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-439b2550db68cc56", "name": "FastAPI POST `post_paper_tick` without auth dependency \u2014 apps/api/routers/paper_trading.py:97", "shortDescription": {"text": "FastAPI POST `post_paper_tick` without auth dependency \u2014 apps/api/routers/paper_trading.py:97"}, "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-65194fa2e72bdc42", "name": "FastAPI POST `approve_manual_ready` without auth dependency \u2014 apps/api/routers/paper_trading.py:218", "shortDescription": {"text": "FastAPI POST `approve_manual_ready` without auth dependency \u2014 apps/api/routers/paper_trading.py:218"}, "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-9ba66e189d03da42", "name": "FastAPI POST `reject_manual_ready` without auth dependency \u2014 apps/api/routers/paper_trading.py:244", "shortDescription": {"text": "FastAPI POST `reject_manual_ready` without auth dependency \u2014 apps/api/routers/paper_trading.py:244"}, "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-1843577dfaade374", "name": "FastAPI POST `dismiss_manual_ready` without auth dependency \u2014 apps/api/routers/paper_trading.py:254", "shortDescription": {"text": "FastAPI POST `dismiss_manual_ready` without auth dependency \u2014 apps/api/routers/paper_trading.py:254"}, "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-b0f2ba7731d6b037", "name": "FastAPI POST `reset` without auth dependency \u2014 apps/api/routers/paper_trading.py:265", "shortDescription": {"text": "FastAPI POST `reset` without auth dependency \u2014 apps/api/routers/paper_trading.py:265"}, "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-686226bd4942ddd0", "name": "FastAPI POST `post_maintenance_archive` without auth dependency \u2014 apps/api/routers/paper_trading.py:280", "shortDescription": {"text": "FastAPI POST `post_maintenance_archive` without auth dependency \u2014 apps/api/routers/paper_trading.py:280"}, "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-5ddf9a8aa8f6ad2b", "name": "FastAPI POST `post_maintenance_repair` without auth dependency \u2014 apps/api/routers/paper_trading.py:286", "shortDescription": {"text": "FastAPI POST `post_maintenance_repair` without auth dependency \u2014 apps/api/routers/paper_trading.py:286"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-25c0ec55e734a6cf", "name": "FastAPI POST `post_maintenance_reset` without auth dependency \u2014 apps/api/routers/paper_trading.py:292", "shortDescription": {"text": "FastAPI POST `post_maintenance_reset` without auth dependency \u2014 apps/api/routers/paper_trading.py:292"}, "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-b5b0f1f54e17f087", "name": "Unused endpoint: GET /ai-report/current", "shortDescription": {"text": "Unused endpoint: GET /ai-report/current"}, "fullDescription": {"text": "`apps/api/routers/ai_report.py` declares `GET /ai-report/current` 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-32cda19363220296", "name": "Unused endpoint: GET /learning/summary", "shortDescription": {"text": "Unused endpoint: GET /learning/summary"}, "fullDescription": {"text": "`apps/api/routers/learning.py` declares `GET /learning/summary` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6b4ac59062810a7d", "name": "Unused endpoint: GET /learning/calibration", "shortDescription": {"text": "Unused endpoint: GET /learning/calibration"}, "fullDescription": {"text": "`apps/api/routers/learning.py` declares `GET /learning/calibration` 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-7fef72a93cd620ee", "name": "Unused endpoint: POST /learning/calibration/retrain", "shortDescription": {"text": "Unused endpoint: POST /learning/calibration/retrain"}, "fullDescription": {"text": "`apps/api/routers/learning.py` declares `POST /learning/calibration/retrain` 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-7bd763ee2421c0ee", "name": "Unused endpoint: GET /learning/mistakes", "shortDescription": {"text": "Unused endpoint: GET /learning/mistakes"}, "fullDescription": {"text": "`apps/api/routers/learning.py` declares `GET /learning/mistakes` 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-73411bd355d1f5a9", "name": "Unused endpoint: GET /decision/matrix", "shortDescription": {"text": "Unused endpoint: GET /decision/matrix"}, "fullDescription": {"text": "`apps/api/routers/decision.py` declares `GET /decision/matrix` 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-6a0b0d47197a9ed3", "name": "Unused endpoint: GET /dashboard/state", "shortDescription": {"text": "Unused endpoint: GET /dashboard/state"}, "fullDescription": {"text": "`apps/api/routers/dashboard_state.py` declares `GET /dashboard/state` 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-def7feec2724bc8a", "name": "Unused endpoint: GET /replay/status", "shortDescription": {"text": "Unused endpoint: GET /replay/status"}, "fullDescription": {"text": "`apps/api/routers/replay.py` declares `GET /replay/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-fa74d5232c25f69f", "name": "Unused endpoint: GET /replay/backtest", "shortDescription": {"text": "Unused endpoint: GET /replay/backtest"}, "fullDescription": {"text": "`apps/api/routers/replay.py` declares `GET /replay/backtest` 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-67954f92702705ed", "name": "Unused endpoint: GET /replay/backtest/{run_id}", "shortDescription": {"text": "Unused endpoint: GET /replay/backtest/{run_id}"}, "fullDescription": {"text": "`apps/api/routers/replay.py` declares `GET /replay/backtest/{run_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-48bae6fe79af485a", "name": "Unused endpoint: GET /replay/{snapshot_id}", "shortDescription": {"text": "Unused endpoint: GET /replay/{snapshot_id}"}, "fullDescription": {"text": "`apps/api/routers/replay.py` declares `GET /replay/{snapshot_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-d796fffe87009d92", "name": "Unused endpoint: GET /replay/{snapshot_id}/decision-trace", "shortDescription": {"text": "Unused endpoint: GET /replay/{snapshot_id}/decision-trace"}, "fullDescription": {"text": "`apps/api/routers/replay.py` declares `GET /replay/{snapshot_id}/decision-trace` 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-52b6dbd339ac9feb", "name": "Unused endpoint: GET /learning/rebalance/proposal", "shortDescription": {"text": "Unused endpoint: GET /learning/rebalance/proposal"}, "fullDescription": {"text": "`apps/api/routers/rebalance.py` declares `GET /learning/rebalance/proposal` 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-38c60161109110dc", "name": "Unused endpoint: POST /learning/rebalance/propose", "shortDescription": {"text": "Unused endpoint: POST /learning/rebalance/propose"}, "fullDescription": {"text": "`apps/api/routers/rebalance.py` declares `POST /learning/rebalance/propose` 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-6103714e08ee6378", "name": "Unused endpoint: POST /learning/rebalance/approve", "shortDescription": {"text": "Unused endpoint: POST /learning/rebalance/approve"}, "fullDescription": {"text": "`apps/api/routers/rebalance.py` declares `POST /learning/rebalance/approve` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6969cb5b78fae219", "name": "Unused endpoint: POST /learning/rebalance/reject", "shortDescription": {"text": "Unused endpoint: POST /learning/rebalance/reject"}, "fullDescription": {"text": "`apps/api/routers/rebalance.py` declares `POST /learning/rebalance/reject` 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-66f8e6451fc24520", "name": "Unused endpoint: GET /risk/halts", "shortDescription": {"text": "Unused endpoint: GET /risk/halts"}, "fullDescription": {"text": "`apps/api/routers/risk.py` declares `GET /risk/halts` 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-34f837e10fc9607c", "name": "Unused endpoint: POST /risk/halts/reset", "shortDescription": {"text": "Unused endpoint: POST /risk/halts/reset"}, "fullDescription": {"text": "`apps/api/routers/risk.py` declares `POST /risk/halts/reset` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0d791a8648e50990", "name": "Unused endpoint: GET /risk/correlation", "shortDescription": {"text": "Unused endpoint: GET /risk/correlation"}, "fullDescription": {"text": "`apps/api/routers/risk.py` declares `GET /risk/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-a8a87a33d08ac333", "name": "Unused endpoint: GET /cockpit/brief", "shortDescription": {"text": "Unused endpoint: GET /cockpit/brief"}, "fullDescription": {"text": "`apps/api/routers/cockpit.py` declares `GET /cockpit/brief` 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-9a5a144923327b6f", "name": "Unused endpoint: GET /regime-report/current", "shortDescription": {"text": "Unused endpoint: GET /regime-report/current"}, "fullDescription": {"text": "`apps/api/routers/regime_report.py` declares `GET /regime-report/current` 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-cff8da5fbc19c76d", "name": "Unused endpoint: POST /chat", "shortDescription": {"text": "Unused endpoint: POST /chat"}, "fullDescription": {"text": "`apps/api/routers/chat.py` declares `POST /chat` 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-0b7a0af24c53bfcd", "name": "Unused endpoint: GET /paper-trading/state", "shortDescription": {"text": "Unused endpoint: GET /paper-trading/state"}, "fullDescription": {"text": "`apps/api/routers/paper_trading.py` declares `GET /paper-trading/state` 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-382dc59f804e3271", "name": "Unused endpoint: POST /paper-trading/tick", "shortDescription": {"text": "Unused endpoint: POST /paper-trading/tick"}, "fullDescription": {"text": "`apps/api/routers/paper_trading.py` declares `POST /paper-trading/tick` 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-738ecbbf37f412c2", "name": "Unused endpoint: GET /paper-trading/manual-ready", "shortDescription": {"text": "Unused endpoint: GET /paper-trading/manual-ready"}, "fullDescription": {"text": "`apps/api/routers/paper_trading.py` declares `GET /paper-trading/manual-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-df992e5f2a765988", "name": "Unused endpoint: POST /paper-trading/manual-ready/{manual_id}/approve", "shortDescription": {"text": "Unused endpoint: POST /paper-trading/manual-ready/{manual_id}/approve"}, "fullDescription": {"text": "`apps/api/routers/paper_trading.py` declares `POST /paper-trading/manual-ready/{manual_id}/approve` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4be169ef9ff97274", "name": "Unused endpoint: POST /paper-trading/manual-ready/{manual_id}/reject", "shortDescription": {"text": "Unused endpoint: POST /paper-trading/manual-ready/{manual_id}/reject"}, "fullDescription": {"text": "`apps/api/routers/paper_trading.py` declares `POST /paper-trading/manual-ready/{manual_id}/reject` 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-98e921ac1c68535b", "name": "Unused endpoint: POST /paper-trading/manual-ready/{manual_id}/dismiss", "shortDescription": {"text": "Unused endpoint: POST /paper-trading/manual-ready/{manual_id}/dismiss"}, "fullDescription": {"text": "`apps/api/routers/paper_trading.py` declares `POST /paper-trading/manual-ready/{manual_id}/dismiss` 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-ef0854f9bb2ca016", "name": "Unused endpoint: POST /paper-trading/reset", "shortDescription": {"text": "Unused endpoint: POST /paper-trading/reset"}, "fullDescription": {"text": "`apps/api/routers/paper_trading.py` declares `POST /paper-trading/reset` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-754f823ed7847f7b", "name": "Unused endpoint: POST /paper-trading/maintenance/archive", "shortDescription": {"text": "Unused endpoint: POST /paper-trading/maintenance/archive"}, "fullDescription": {"text": "`apps/api/routers/paper_trading.py` declares `POST /paper-trading/maintenance/archive` 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-16ce57464dfacad5", "name": "Unused endpoint: POST /paper-trading/maintenance/repair", "shortDescription": {"text": "Unused endpoint: POST /paper-trading/maintenance/repair"}, "fullDescription": {"text": "`apps/api/routers/paper_trading.py` declares `POST /paper-trading/maintenance/repair` 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-150b9a828ce3d95e", "name": "Unused endpoint: POST /paper-trading/maintenance/reset", "shortDescription": {"text": "Unused endpoint: POST /paper-trading/maintenance/reset"}, "fullDescription": {"text": "`apps/api/routers/paper_trading.py` declares `POST /paper-trading/maintenance/reset` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-de355b13ca3085a2", "name": "Unused endpoint: GET /data/snapshot", "shortDescription": {"text": "Unused endpoint: GET /data/snapshot"}, "fullDescription": {"text": "`apps/api/routers/data.py` declares `GET /data/snapshot` 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-2527279df995164f", "name": "Unused endpoint: GET /system/health", "shortDescription": {"text": "Unused endpoint: GET /system/health"}, "fullDescription": {"text": "`apps/api/routers/system.py` declares `GET /system/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}}]}}, "automationDetails": {"id": "repobility/21771"}, "properties": {"repository": "twonezerotwo-hue/clean-e-yay", "repoUrl": "https://github.com/twonezerotwo-hue/clean-e-yay", "branch": "main"}, "results": [{"ruleId": "scanner-3977572baa4edb32", "level": "note", "message": {"text": "Possibly dead Python function: outcome_to_dict"}, "properties": {"repobilityId": "052559b34c74745d", "scanner": "scanner-primary", "fingerprint": "3977572baa4edb32", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/learning/outcomes.py:125"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-93811dd6412d99b0", "level": "note", "message": {"text": "Possibly dead Python function: summarize"}, "properties": {"repobilityId": "2f031b6e55dee53f", "scanner": "scanner-primary", "fingerprint": "93811dd6412d99b0", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/learning/walkforward.py:27"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-36b6ecd260aa05c6", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/components/panels/EventCalendarPanel/index.tsx:64"}, "properties": {"repobilityId": "3241a13478c975a2", "scanner": "scanner-primary", "fingerprint": "36b6ecd260aa05c6", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-5e515c3f113b4808", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/components/panels/CorrelationPanel/index.tsx:113"}, "properties": {"repobilityId": "dd5c7df6e885e6a1", "scanner": "scanner-primary", "fingerprint": "5e515c3f113b4808", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-8eda22c115e507d2", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/components/panels/MistakeMemoryPanel/index.tsx:78"}, "properties": {"repobilityId": "05036105783a4a9e", "scanner": "scanner-primary", "fingerprint": "8eda22c115e507d2", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-03cfb9fc4d67fd64", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/components/panels/TimeframeMatrixPanel/index.tsx:106"}, "properties": {"repobilityId": "f694be6a1a554a6c", "scanner": "scanner-primary", "fingerprint": "03cfb9fc4d67fd64", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4a5c13f865988614", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/web/hooks/useOwnerFeedback.ts:17"}, "properties": {"repobilityId": "47c70ca15f2f00d8", "scanner": "scanner-primary", "fingerprint": "4a5c13f865988614", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-cfa3c5a41cdd6949", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in apps/api/main.py:52"}, "properties": {"repobilityId": "d1dd9c5e1f84b6e0", "scanner": "scanner-primary", "fingerprint": "cfa3c5a41cdd6949", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/main.py"}, "region": {"startLine": 52}}}]}, {"ruleId": "scanner-6372cebde0220094", "level": "warning", "message": {"text": "No auth library detected"}, "properties": {"repobilityId": "a5b6035a5bbf8054", "scanner": "scanner-primary", "fingerprint": "6372cebde0220094", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["coverage", "auth"]}}, {"ruleId": "scanner-7e0bb66534314763", "level": "note", "message": {"text": "Very large file: apps/web/types/generated/schema.ts (2398 lines)"}, "properties": {"repobilityId": "8cde48652a5c01bb", "scanner": "scanner-primary", "fingerprint": "7e0bb66534314763", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-ea3b5e389d8c9c0f", "level": "note", "message": {"text": "Low test-to-source ratio"}, "properties": {"repobilityId": "ef7b2552cc00a375", "scanner": "scanner-primary", "fingerprint": "ea3b5e389d8c9c0f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["tests"]}}, {"ruleId": "scanner-141b30a41e03817b", "level": "note", "message": {"text": "No license file detected"}, "properties": {"repobilityId": "1f9e3293a1a8a55c", "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": "a58f985febdc71cd", "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": "8912fbba2c4c5302", "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": "0b3fbc50b0e47231", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-ea8f3013f588db25", "level": "note", "message": {"text": "Shallow git history limits provenance confidence"}, "properties": {"repobilityId": "567e2a444bac7d59", "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": "e863d651cd0bf0f8", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-5484cd5f7d72598e", "level": "note", "message": {"text": "Legacy-named symbol `_seed_v2` in tests/unit/test_learning_outcomes.py:213"}, "properties": {"repobilityId": "c5a1772a8fb5644c", "scanner": "scanner-primary", "fingerprint": "5484cd5f7d72598e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-7a8c3311a703fdc8", "level": "note", "message": {"text": "Legacy-named symbol `weights_v1` in tests/unit/test_rebalance.py:5"}, "properties": {"repobilityId": "22dafaf3f63f3615", "scanner": "scanner-primary", "fingerprint": "7a8c3311a703fdc8", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-50d563363a62c81d", "level": "note", "message": {"text": "Legacy-named symbol `is_v2` in tests/unit/test_timeframe_contracts.py:99"}, "properties": {"repobilityId": "d447603c53159eae", "scanner": "scanner-primary", "fingerprint": "50d563363a62c81d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-b3380b2ca42b9164", "level": "none", "message": {"text": "Commented-code block (7 lines) in tests/unit/test_paper_lifecycle.py:311"}, "properties": {"repobilityId": "4edde92c27a2af9d", "scanner": "scanner-primary", "fingerprint": "b3380b2ca42b9164", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9e90221c658c65b2", "level": "note", "message": {"text": "Legacy-named symbol `weights_v1` in apps/api/routers/rebalance.py:5"}, "properties": {"repobilityId": "816923183c56cba8", "scanner": "scanner-primary", "fingerprint": "9e90221c658c65b2", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-f1a1ed5f6c4d718c", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web/components/panels/OptionsVolPanel/index.tsx:9"}, "properties": {"repobilityId": "37e4758519694dba", "scanner": "scanner-primary", "fingerprint": "f1a1ed5f6c4d718c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d257f55d39352610", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 scripts/codegen.py:59"}, "properties": {"repobilityId": "4208fd90ec9d7e32", "scanner": "scanner-primary", "fingerprint": "d257f55d39352610", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-847d19529d52fbee", "level": "note", "message": {"text": "Legacy-named symbol `touche_fallback_legacy` in packages/consensus/engine.py:78"}, "properties": {"repobilityId": "1529b63f811fbb17", "scanner": "scanner-primary", "fingerprint": "847d19529d52fbee", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-fda7cd62ba75baf1", "level": "note", "message": {"text": "Legacy-named symbol `is_v2` in packages/learning/fingerprint.py:55"}, "properties": {"repobilityId": "9a018d9ad2a72945", "scanner": "scanner-primary", "fingerprint": "fda7cd62ba75baf1", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-ef338112ea1faad1", "level": "note", "message": {"text": "Legacy-named symbol `model_copy` in packages/risk/event_risk.py:132"}, "properties": {"repobilityId": "041994b82d6df649", "scanner": "scanner-primary", "fingerprint": "ef338112ea1faad1", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-250f57e8a1dbd3c5", "level": "none", "message": {"text": "4 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "57584f22b735b5ee", "scanner": "scanner-primary", "fingerprint": "250f57e8a1dbd3c5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "config-drift"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "6412cb66a5c7cd21", "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": "cfad66625ba0d97e", "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": "8183ec3cdd53f712", "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": "e0a7da3685bc9323", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-e52bd87113d9c4c5", "level": "error", "message": {"text": "FastAPI POST `post_retrain_calibration` without auth dependency \u2014 apps/api/routers/learning.py:44"}, "properties": {"repobilityId": "fbf69ae69ca21466", "scanner": "scanner-primary", "fingerprint": "e52bd87113d9c4c5", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/routers/learning.py"}, "region": {"startLine": 44}}}]}, {"ruleId": "scanner-6afc78d278fa9aaa", "level": "error", "message": {"text": "FastAPI POST `post_propose` without auth dependency \u2014 apps/api/routers/rebalance.py:43"}, "properties": {"repobilityId": "6f283b1bf07c1702", "scanner": "scanner-primary", "fingerprint": "6afc78d278fa9aaa", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/routers/rebalance.py"}, "region": {"startLine": 43}}}]}, {"ruleId": "scanner-3896dc2400a042ba", "level": "error", "message": {"text": "FastAPI POST `post_approve` without auth dependency \u2014 apps/api/routers/rebalance.py:54"}, "properties": {"repobilityId": "ffcbe97e0655b1d1", "scanner": "scanner-primary", "fingerprint": "3896dc2400a042ba", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/routers/rebalance.py"}, "region": {"startLine": 54}}}]}, {"ruleId": "scanner-3065303f177c3ea1", "level": "error", "message": {"text": "FastAPI POST `post_reject` without auth dependency \u2014 apps/api/routers/rebalance.py:63"}, "properties": {"repobilityId": "4f9b727cb4cd2be0", "scanner": "scanner-primary", "fingerprint": "3065303f177c3ea1", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/routers/rebalance.py"}, "region": {"startLine": 63}}}]}, {"ruleId": "scanner-9afa7394e0db989d", "level": "error", "message": {"text": "FastAPI POST `post_halts_reset` without auth dependency \u2014 apps/api/routers/risk.py:47"}, "properties": {"repobilityId": "ec3d4fc4c3773813", "scanner": "scanner-primary", "fingerprint": "9afa7394e0db989d", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/routers/risk.py"}, "region": {"startLine": 47}}}]}, {"ruleId": "scanner-582a61d07a4ac69f", "level": "error", "message": {"text": "FastAPI POST `post_chat` without auth dependency \u2014 apps/api/routers/chat.py:25"}, "properties": {"repobilityId": "662f8366596eb314", "scanner": "scanner-primary", "fingerprint": "582a61d07a4ac69f", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/routers/chat.py"}, "region": {"startLine": 25}}}]}, {"ruleId": "scanner-439b2550db68cc56", "level": "error", "message": {"text": "FastAPI POST `post_paper_tick` without auth dependency \u2014 apps/api/routers/paper_trading.py:97"}, "properties": {"repobilityId": "023569ff5fd9dc4a", "scanner": "scanner-primary", "fingerprint": "439b2550db68cc56", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/routers/paper_trading.py"}, "region": {"startLine": 97}}}]}, {"ruleId": "scanner-65194fa2e72bdc42", "level": "error", "message": {"text": "FastAPI POST `approve_manual_ready` without auth dependency \u2014 apps/api/routers/paper_trading.py:218"}, "properties": {"repobilityId": "d17a8825daf8fe6f", "scanner": "scanner-primary", "fingerprint": "65194fa2e72bdc42", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/routers/paper_trading.py"}, "region": {"startLine": 218}}}]}, {"ruleId": "scanner-9ba66e189d03da42", "level": "error", "message": {"text": "FastAPI POST `reject_manual_ready` without auth dependency \u2014 apps/api/routers/paper_trading.py:244"}, "properties": {"repobilityId": "05d009635faeaaf3", "scanner": "scanner-primary", "fingerprint": "9ba66e189d03da42", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/routers/paper_trading.py"}, "region": {"startLine": 244}}}]}, {"ruleId": "scanner-1843577dfaade374", "level": "error", "message": {"text": "FastAPI POST `dismiss_manual_ready` without auth dependency \u2014 apps/api/routers/paper_trading.py:254"}, "properties": {"repobilityId": "9672472945ef28c4", "scanner": "scanner-primary", "fingerprint": "1843577dfaade374", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/routers/paper_trading.py"}, "region": {"startLine": 254}}}]}, {"ruleId": "scanner-b0f2ba7731d6b037", "level": "error", "message": {"text": "FastAPI POST `reset` without auth dependency \u2014 apps/api/routers/paper_trading.py:265"}, "properties": {"repobilityId": "7c58afd0e8af18f7", "scanner": "scanner-primary", "fingerprint": "b0f2ba7731d6b037", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/routers/paper_trading.py"}, "region": {"startLine": 265}}}]}, {"ruleId": "scanner-686226bd4942ddd0", "level": "error", "message": {"text": "FastAPI POST `post_maintenance_archive` without auth dependency \u2014 apps/api/routers/paper_trading.py:280"}, "properties": {"repobilityId": "10ab564a9844f31f", "scanner": "scanner-primary", "fingerprint": "686226bd4942ddd0", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/routers/paper_trading.py"}, "region": {"startLine": 280}}}]}, {"ruleId": "scanner-5ddf9a8aa8f6ad2b", "level": "error", "message": {"text": "FastAPI POST `post_maintenance_repair` without auth dependency \u2014 apps/api/routers/paper_trading.py:286"}, "properties": {"repobilityId": "972a3d9b162c8fc9", "scanner": "scanner-primary", "fingerprint": "5ddf9a8aa8f6ad2b", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/routers/paper_trading.py"}, "region": {"startLine": 286}}}]}, {"ruleId": "scanner-25c0ec55e734a6cf", "level": "error", "message": {"text": "FastAPI POST `post_maintenance_reset` without auth dependency \u2014 apps/api/routers/paper_trading.py:292"}, "properties": {"repobilityId": "cdb72e0fc0e37b5a", "scanner": "scanner-primary", "fingerprint": "25c0ec55e734a6cf", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/routers/paper_trading.py"}, "region": {"startLine": 292}}}]}, {"ruleId": "scanner-b5b0f1f54e17f087", "level": "note", "message": {"text": "Unused endpoint: GET /ai-report/current"}, "properties": {"repobilityId": "9648389c4007de58", "scanner": "scanner-primary", "fingerprint": "b5b0f1f54e17f087", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-32cda19363220296", "level": "note", "message": {"text": "Unused endpoint: GET /learning/summary"}, "properties": {"repobilityId": "70e16a1f7f28b977", "scanner": "scanner-primary", "fingerprint": "32cda19363220296", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6b4ac59062810a7d", "level": "note", "message": {"text": "Unused endpoint: GET /learning/calibration"}, "properties": {"repobilityId": "aa55acf93c3223a0", "scanner": "scanner-primary", "fingerprint": "6b4ac59062810a7d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7fef72a93cd620ee", "level": "note", "message": {"text": "Unused endpoint: POST /learning/calibration/retrain"}, "properties": {"repobilityId": "8c221748b76ca7c1", "scanner": "scanner-primary", "fingerprint": "7fef72a93cd620ee", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7bd763ee2421c0ee", "level": "note", "message": {"text": "Unused endpoint: GET /learning/mistakes"}, "properties": {"repobilityId": "08c9ca26ec9d5456", "scanner": "scanner-primary", "fingerprint": "7bd763ee2421c0ee", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-73411bd355d1f5a9", "level": "note", "message": {"text": "Unused endpoint: GET /decision/matrix"}, "properties": {"repobilityId": "7ba78f65c7ba57a1", "scanner": "scanner-primary", "fingerprint": "73411bd355d1f5a9", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6a0b0d47197a9ed3", "level": "note", "message": {"text": "Unused endpoint: GET /dashboard/state"}, "properties": {"repobilityId": "750e3185a96cc8d4", "scanner": "scanner-primary", "fingerprint": "6a0b0d47197a9ed3", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-def7feec2724bc8a", "level": "note", "message": {"text": "Unused endpoint: GET /replay/status"}, "properties": {"repobilityId": "b3d3a948cbe2b7c9", "scanner": "scanner-primary", "fingerprint": "def7feec2724bc8a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-fa74d5232c25f69f", "level": "note", "message": {"text": "Unused endpoint: GET /replay/backtest"}, "properties": {"repobilityId": "52e62169334adc43", "scanner": "scanner-primary", "fingerprint": "fa74d5232c25f69f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-67954f92702705ed", "level": "note", "message": {"text": "Unused endpoint: GET /replay/backtest/{run_id}"}, "properties": {"repobilityId": "dce3f85372311720", "scanner": "scanner-primary", "fingerprint": "67954f92702705ed", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-48bae6fe79af485a", "level": "note", "message": {"text": "Unused endpoint: GET /replay/{snapshot_id}"}, "properties": {"repobilityId": "c6fbf20b3e39004a", "scanner": "scanner-primary", "fingerprint": "48bae6fe79af485a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d796fffe87009d92", "level": "note", "message": {"text": "Unused endpoint: GET /replay/{snapshot_id}/decision-trace"}, "properties": {"repobilityId": "31d1a4ad3b9093b2", "scanner": "scanner-primary", "fingerprint": "d796fffe87009d92", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-52b6dbd339ac9feb", "level": "note", "message": {"text": "Unused endpoint: GET /learning/rebalance/proposal"}, "properties": {"repobilityId": "0143dc06cc4545eb", "scanner": "scanner-primary", "fingerprint": "52b6dbd339ac9feb", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-38c60161109110dc", "level": "note", "message": {"text": "Unused endpoint: POST /learning/rebalance/propose"}, "properties": {"repobilityId": "7df023193cc482fa", "scanner": "scanner-primary", "fingerprint": "38c60161109110dc", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6103714e08ee6378", "level": "note", "message": {"text": "Unused endpoint: POST /learning/rebalance/approve"}, "properties": {"repobilityId": "5e7e33afd056d372", "scanner": "scanner-primary", "fingerprint": "6103714e08ee6378", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6969cb5b78fae219", "level": "note", "message": {"text": "Unused endpoint: POST /learning/rebalance/reject"}, "properties": {"repobilityId": "c7f406bcd9210b99", "scanner": "scanner-primary", "fingerprint": "6969cb5b78fae219", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-66f8e6451fc24520", "level": "note", "message": {"text": "Unused endpoint: GET /risk/halts"}, "properties": {"repobilityId": "4e7bc666d5ed43b5", "scanner": "scanner-primary", "fingerprint": "66f8e6451fc24520", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-34f837e10fc9607c", "level": "note", "message": {"text": "Unused endpoint: POST /risk/halts/reset"}, "properties": {"repobilityId": "1b3e3260ced99ef8", "scanner": "scanner-primary", "fingerprint": "34f837e10fc9607c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-0d791a8648e50990", "level": "note", "message": {"text": "Unused endpoint: GET /risk/correlation"}, "properties": {"repobilityId": "600c8f3d7acd4a73", "scanner": "scanner-primary", "fingerprint": "0d791a8648e50990", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a8a87a33d08ac333", "level": "note", "message": {"text": "Unused endpoint: GET /cockpit/brief"}, "properties": {"repobilityId": "ee585efbe590cc1d", "scanner": "scanner-primary", "fingerprint": "a8a87a33d08ac333", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-9a5a144923327b6f", "level": "note", "message": {"text": "Unused endpoint: GET /regime-report/current"}, "properties": {"repobilityId": "a403bf75b89cf044", "scanner": "scanner-primary", "fingerprint": "9a5a144923327b6f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-cff8da5fbc19c76d", "level": "note", "message": {"text": "Unused endpoint: POST /chat"}, "properties": {"repobilityId": "a1921fbe7db7cb3a", "scanner": "scanner-primary", "fingerprint": "cff8da5fbc19c76d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-0b7a0af24c53bfcd", "level": "note", "message": {"text": "Unused endpoint: GET /paper-trading/state"}, "properties": {"repobilityId": "ab0a2b62accb9130", "scanner": "scanner-primary", "fingerprint": "0b7a0af24c53bfcd", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-382dc59f804e3271", "level": "note", "message": {"text": "Unused endpoint: POST /paper-trading/tick"}, "properties": {"repobilityId": "4687d865532cec50", "scanner": "scanner-primary", "fingerprint": "382dc59f804e3271", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-738ecbbf37f412c2", "level": "note", "message": {"text": "Unused endpoint: GET /paper-trading/manual-ready"}, "properties": {"repobilityId": "bb74269324a67b41", "scanner": "scanner-primary", "fingerprint": "738ecbbf37f412c2", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-df992e5f2a765988", "level": "note", "message": {"text": "Unused endpoint: POST /paper-trading/manual-ready/{manual_id}/approve"}, "properties": {"repobilityId": "0c8dd3660c4cefec", "scanner": "scanner-primary", "fingerprint": "df992e5f2a765988", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-4be169ef9ff97274", "level": "note", "message": {"text": "Unused endpoint: POST /paper-trading/manual-ready/{manual_id}/reject"}, "properties": {"repobilityId": "7725ac4cf1f5d15b", "scanner": "scanner-primary", "fingerprint": "4be169ef9ff97274", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-98e921ac1c68535b", "level": "note", "message": {"text": "Unused endpoint: POST /paper-trading/manual-ready/{manual_id}/dismiss"}, "properties": {"repobilityId": "039387c3df63dff6", "scanner": "scanner-primary", "fingerprint": "98e921ac1c68535b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ef0854f9bb2ca016", "level": "note", "message": {"text": "Unused endpoint: POST /paper-trading/reset"}, "properties": {"repobilityId": "99a1afdace0a9d8d", "scanner": "scanner-primary", "fingerprint": "ef0854f9bb2ca016", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-754f823ed7847f7b", "level": "note", "message": {"text": "Unused endpoint: POST /paper-trading/maintenance/archive"}, "properties": {"repobilityId": "d04958d9d874affd", "scanner": "scanner-primary", "fingerprint": "754f823ed7847f7b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-16ce57464dfacad5", "level": "note", "message": {"text": "Unused endpoint: POST /paper-trading/maintenance/repair"}, "properties": {"repobilityId": "83554ac74bb387c6", "scanner": "scanner-primary", "fingerprint": "16ce57464dfacad5", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-150b9a828ce3d95e", "level": "note", "message": {"text": "Unused endpoint: POST /paper-trading/maintenance/reset"}, "properties": {"repobilityId": "37ad00b64a5deb23", "scanner": "scanner-primary", "fingerprint": "150b9a828ce3d95e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-de355b13ca3085a2", "level": "note", "message": {"text": "Unused endpoint: GET /data/snapshot"}, "properties": {"repobilityId": "be867d14f0a79571", "scanner": "scanner-primary", "fingerprint": "de355b13ca3085a2", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2527279df995164f", "level": "note", "message": {"text": "Unused endpoint: GET /system/health"}, "properties": {"repobilityId": "33997fe9db5865b9", "scanner": "scanner-primary", "fingerprint": "2527279df995164f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}