{"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-252cc8f55056e45b", "name": "Possibly dead Python function: behavior_click_random", "shortDescription": {"text": "Possibly dead Python function: behavior_click_random"}, "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-808710f0376037a0", "name": "Possibly dead Python function: behavior_scroll", "shortDescription": {"text": "Possibly dead Python function: behavior_scroll"}, "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-4c91371863285dec", "name": "Possibly dead Python function: behavior_hover", "shortDescription": {"text": "Possibly dead Python function: behavior_hover"}, "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-c7a7c08b814eb140", "name": "Possibly dead Python function: behavior_press_key", "shortDescription": {"text": "Possibly dead Python function: behavior_press_key"}, "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-fbc3878e7f659291", "name": "Possibly dead Python function: behavior_type_search", "shortDescription": {"text": "Possibly dead Python function: behavior_type_search"}, "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-4b82f4ecd01582e6", "name": "Possibly dead Python function: noop_decorator", "shortDescription": {"text": "Possibly dead Python function: noop_decorator"}, "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-d0e5648d701c1fca", "name": "Possibly dead Python function: refresh_efos", "shortDescription": {"text": "Possibly dead Python function: refresh_efos"}, "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-ab9fb73d6a6cfe8d", "name": "Possibly dead Python function: refresh_sfp", "shortDescription": {"text": "Possibly dead Python function: refresh_sfp"}, "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-776c8d686333ec9c", "name": "Possibly dead Python function: refresh_rupc", "shortDescription": {"text": "Possibly dead Python function: refresh_rupc"}, "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-6846427998664130", "name": "Possibly dead Python function: refresh_asf", "shortDescription": {"text": "Possibly dead Python function: refresh_asf"}, "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-3e1d2fa4ceefedd3", "name": "Possibly dead Python function: refresh_rfc", "shortDescription": {"text": "Possibly dead Python function: refresh_rfc"}, "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-b35a81d12692989c", "name": "Possibly dead Python function: compute_binary_stats", "shortDescription": {"text": "Possibly dead Python function: compute_binary_stats"}, "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-8b16473180db66f1", "name": "Possibly dead Python function: compute_continuous_stats", "shortDescription": {"text": "Possibly dead Python function: compute_continuous_stats"}, "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-cf4176f757412059", "name": "Possibly dead Python function: objective", "shortDescription": {"text": "Possibly dead Python function: objective"}, "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-ac0e76646b5f4fff", "name": "Possibly dead Python function: get_summary_plot_base64", "shortDescription": {"text": "Possibly dead Python function: get_summary_plot_base64"}, "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-b59979aadc7a63ea", "name": "Possibly dead Python function: get_importance_plot_base64", "shortDescription": {"text": "Possibly dead Python function: get_importance_plot_base64"}, "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-0a0f4cfaca4c3b4e", "name": "File has no detected symbols: backend/scripts/_tmp_scan.py", "shortDescription": {"text": "File has no detected symbols: backend/scripts/_tmp_scan.py"}, "fullDescription": {"text": "Source file with no class/function declarations \u2014 possible config, dead code, or scratch file."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ad23dfc4070d4030", "name": "File has no detected symbols: backend/scripts/_tmp_scan2.py", "shortDescription": {"text": "File has no detected symbols: backend/scripts/_tmp_scan2.py"}, "fullDescription": {"text": "Source file with no class/function declarations \u2014 possible config, dead code, or scratch file."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9f063392a3b363be", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/CommandPalette.tsx:206", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/CommandPalette.tsx:206"}, "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-11f2c2889baa8558", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/DossierCreateDialog.tsx:108", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/DossierCreateDialog.tsx:108"}, "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-ba6fd31f297ff12a", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/RiskExplainTooltip.tsx:69", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/RiskExplainTooltip.tsx:69"}, "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-aca846855ab44c05", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/AddToDossierButton.tsx:147", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/AddToDossierButton.tsx:147"}, "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-ea8850af051a1149", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/VendorContractBreakdown.tsx:93", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/VendorContractBreakdown.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-96c6e4f2ad74fe15", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/SharedContractsModal.tsx:136", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/SharedContractsModal.tsx:136"}, "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-4516b20a4eaab92f", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/FolderSidebar.tsx:91", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/FolderSidebar.tsx:91"}, "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-a77229c4f0222ab2", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/DossierAddItemDialog.tsx:109", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/DossierAddItemDialog.tsx:109"}, "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-d13e060624d2a39b", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/RedThreadPanel.tsx:86", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/RedThreadPanel.tsx:86"}, "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-b78e439cbe0a25a0", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/DossierCard.tsx:70", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/DossierCard.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-c7a53fdfa4812294", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/layout/MobileBottomNav.tsx:53", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/layout/MobileBottomNav.tsx:53"}, "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-db381dbc5f679741", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/layout/Sidebar.tsx:269", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/layout/Sidebar.tsx:269"}, "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-28f8afc0ac4f5a7c", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/layout/Header.tsx:259", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/layout/Header.tsx:259"}, "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-51d807c4935d140c", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/cases/IndexBlocks.tsx:401", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/cases/IndexBlocks.tsx:401"}, "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-1a86416c19b8b0e6", "name": "React Flow edge with `label=` but no project-wide edge-label CSS override \u2014 frontend/src/components/charts/TemporalRiskC", "shortDescription": {"text": "React Flow edge with `label=` but no project-wide edge-label CSS override \u2014 frontend/src/components/charts/TemporalRiskChart.tsx:325"}, "fullDescription": {"text": "React Flow edge labels render with a white rectangle behind the text by default, which scatters bright boxes across a dark canvas. Either drop the label, or override `.react-flow__edge-textbg` and `.react-flow__edge-text` in your stylesheet.\n\nWhy: P-H in CHECKLIST.md \u2014 vendor edge labels bleed white through a dark canvas.\nRule id: fq.edge-label.no-bg"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-505c6d50a5c53338", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/charts/SectorRiskHeatmap.tsx:189", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/charts/SectorRiskHeatmap.tsx:189"}, "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-79e1148860f08bf2", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/charts/VendorFingerprintChart.tsx:444", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/charts/VendorFingerprintChart.tsx:444"}, "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-d1e54e0d2fe838af", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/charts/AdminSectorHeatmap.tsx:189", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/charts/AdminSectorHeatmap.tsx:189"}, "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-a8934501a18cc4b7", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/charts/CommunityBubbles.tsx:153", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/charts/CommunityBubbles.tsx:153"}, "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-2a2b0d3a4c315a17", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/charts/editorial/DotStrip.tsx:111", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/charts/editorial/DotStrip.tsx:111"}, "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-4c503aedc6881bdf", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/sector/SectorReferenceSections.tsx:360", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/sector/SectorReferenceSections.tsx:360"}, "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-fb447c2dec31be70", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/aria/RowExpand.tsx:109", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/aria/RowExpand.tsx:109"}, "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-ac24b51fc875ba93", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/aria/MesetaRug.tsx:66", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/aria/MesetaRug.tsx:66"}, "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-af3602788b0e0d35", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/aria/FunnelBand.tsx:139", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/aria/FunnelBand.tsx:139"}, "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-e1d807f8a9c6ca4d", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/ui/StatRow.tsx:70", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/ui/StatRow.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-fbca0f65fd438e20", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/ui/select.tsx:101", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/ui/select.tsx:101"}, "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-408479f504e4d365", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/administrations/AdminSummaryCard.tsx:233", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/administrations/AdminSummaryCard.tsx:233"}, "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-413f8bff2a372091", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/administrations/ProcurementGradeCard.tsx:99", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/administrations/ProcurementGradeCard.tsx:99"}, "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-501a1fb31e6280c4", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/executive/TopCategoriesChart.tsx:228", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/executive/TopCategoriesChart.tsx:228"}, "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-8dbd8dd24f67ccc7", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/atlas/AtlasLeftRail.tsx:257", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/atlas/AtlasLeftRail.tsx:257"}, "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-73811c896cea7d7b", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/atlas/AtlasMasthead.tsx:62", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/atlas/AtlasMasthead.tsx:62"}, "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-8517d93c9ccb03a9", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/atlas/AtlasRightPanel.tsx:199", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/atlas/AtlasRightPanel.tsx:199"}, "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-1b21626bdaf09e94", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/atlas/AtlasVendorDrawer.tsx:181", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/atlas/AtlasVendorDrawer.tsx:181"}, "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-e8cd327377e8e06e", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/collusion/PairDossierRow.tsx:118", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/collusion/PairDossierRow.tsx:118"}, "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-e214c0c48f447acc", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/capture/CaptureField.tsx:221", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/capture/CaptureField.tsx:221"}, "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-329f405993b061b5", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/stories/CrimeCard.tsx:98", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/stories/CrimeCard.tsx:98"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-228029564308763b", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/category/CategoryDossierSections.tsx:340", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/category/CategoryDossierSections.tsx:340"}, "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-62950a57c24e71b1", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/dossier/DossierSectionHeader.tsx:46", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/dossier/DossierSectionHeader.tsx:46"}, "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-2499466e9ee364d6", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/explore/SearchOverlay.tsx:256", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/explore/SearchOverlay.tsx:256"}, "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-e7a16deb6116c1e5", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/explore/ExploreCanvas.tsx:1846", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/explore/ExploreCanvas.tsx:1846"}, "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-d56d08d59e3dcaf8", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/sectors/ExposureLedger.tsx:217", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/sectors/ExposureLedger.tsx:217"}, "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-4136e21c71187437", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/sectors/SelfCaptureBand.tsx:96", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/sectors/SelfCaptureBand.tsx:96"}, "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-834ccec38dd09064", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/sectors/ConfoundPlate.tsx:308", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/sectors/ConfoundPlate.tsx:308"}, "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-c6118f09dc7b3e6d", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/sectors/SectorHoverDossier.tsx:63", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/sectors/SectorHoverDossier.tsx:63"}, "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-b88ef90a6879f9cd", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/pages/CategoryProfile.tsx:440", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/pages/CategoryProfile.tsx:440"}, "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-14bc26daf3f6c456", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/pages/YearInReview.tsx:182", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/pages/YearInReview.tsx:182"}, "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-f3948eeb3d9e3d39", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/pages/VendorCompare.tsx:248", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/pages/VendorCompare.tsx:248"}, "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-dac7b6088f7dfadb", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/pages/ReportCard.tsx:869", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/pages/ReportCard.tsx:869"}, "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-ff1f30d493aa90b4", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/pages/InstitutionProfile.tsx:512", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/pages/InstitutionProfile.tsx:512"}, "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-d7c5701100c3aea8", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/pages/Methodology.tsx:1210", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/pages/Methodology.tsx:1210"}, "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-66190c47883a99e7", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/pages/RedesKnownDossier.tsx:170", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/pages/RedesKnownDossier.tsx:170"}, "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-ba3b18de41282090", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/pages/PriceIntelligence.tsx:279", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/pages/PriceIntelligence.tsx:279"}, "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-a2cbe9d38ccf9c66", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 frontend/src/pages/PriceIntelligence.tsx:1713", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 frontend/src/pages/PriceIntelligence.tsx:1713"}, "fullDescription": {"text": "Open XSS surface unless the input is provably trusted. Replace with explicit JSX or sanitize via a vetted library.\n\nWhy: OWASP basics. Already partially flagged by the security analyzer.\nRule id: fq.dangerous-html"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a6cd06d3816db1a9", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/pages/CorruptionClusters.tsx:576", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/pages/CorruptionClusters.tsx:576"}, "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-7ec2fefee38714ef", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/pages/ContractDetail.tsx:202", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/pages/ContractDetail.tsx:202"}, "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-dbb5da615decb186", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/pages/Contracts.tsx:983", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/pages/Contracts.tsx:983"}, "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-2aa970114b58398d", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/pages/PatternDossier.tsx:767", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/pages/PatternDossier.tsx:767"}, "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-7a4b28c5bb34afd1", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/pages/Executive.tsx:1676", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/pages/Executive.tsx:1676"}, "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-0512e57e9747036e", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/pages/Administrations.tsx:909", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/pages/Administrations.tsx:909"}, "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-9356b5a42fc42812", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/pages/Settings.tsx:1115", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/pages/Settings.tsx:1115"}, "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-ffac5e2f9e7e46d4", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/pages/Atlas.tsx:2265", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/pages/Atlas.tsx:2265"}, "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-94d5fcf6105c32d0", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/pages/InstitutionLeague.tsx:287", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/pages/InstitutionLeague.tsx:287"}, "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-860bb0bf2b66c33f", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/pages/InstitutionCompare.tsx:952", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/pages/InstitutionCompare.tsx:952"}, "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-e346a2000246ff7c", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/pages/explore/TrendsTab.tsx:831", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/pages/explore/TrendsTab.tsx:831"}, "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-8d8c2c291038a85a", "name": "TODO/FIXME marker in shipping code \u2014 frontend/src/pages/explore/VendorsTab.tsx:570", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 frontend/src/pages/explore/VendorsTab.tsx:570"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ab8ed6fe1d914e78", "name": "TODO/FIXME marker in shipping code \u2014 frontend/src/pages/explore/TimeSeriesPanel.tsx:6", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 frontend/src/pages/explore/TimeSeriesPanel.tsx:6"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-00b9062738d16694", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/pages/explore/ResultsTable.tsx:549", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/pages/explore/ResultsTable.tsx:549"}, "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-7d8530ed2c398af8", "name": "Stray `console.log` in TS/JS \u2014 scripts/run_visual_review.js:25", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/run_visual_review.js:25"}, "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-bbf1183a0363fc2a", "name": "Privileged port 30 in use", "shortDescription": {"text": "Privileged port 30 in use"}, "fullDescription": {"text": "Port 30 is privileged (<1024). Make sure the service runs with the right caps or front it with a non-privileged port via a load balancer."}, "properties": {"scanner": "scanner-primary", "layer": "network", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-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-a7f39cdd5fa21931", "name": "Docker base image is tag-pinned but not digest-pinned: node:22-alpine", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: node:22-alpine"}, "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-b048d166901fd868", "name": "Docker base image is tag-pinned but not digest-pinned: nginx:alpine", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: nginx:alpine"}, "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-8cd20d539467d2c5", "name": "Docker base image is tag-pinned but not digest-pinned: python:3.11-slim", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: python:3.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-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-1140b4590d44ec89", "name": "Insecure pattern 'node_child_process' in frontend/scripts/lint-tokens.mjs:20", "shortDescription": {"text": "Insecure pattern 'node_child_process' in frontend/scripts/lint-tokens.mjs:20"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-5a7181d566afa6e2", "name": "Insecure pattern 'direct_innerhtml_assignment' in frontend/src/components/InstitutionBadge.tsx:62", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in frontend/src/components/InstitutionBadge.tsx:62"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a0baecde726855cc", "name": "Insecure pattern 'document_write' in frontend/src/components/ReportModal.tsx:178", "shortDescription": {"text": "Insecure pattern 'document_write' in frontend/src/components/ReportModal.tsx:178"}, "fullDescription": {"text": "Found a known-risky pattern (document_write). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d9cbbf2a9da034a7", "name": "Insecure pattern 'dangerous_innerhtml' in frontend/src/pages/PriceIntelligence.tsx:1713", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in frontend/src/pages/PriceIntelligence.tsx:1713"}, "fullDescription": {"text": "Found a known-risky pattern (dangerous_innerhtml). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b9fa3eeeb0d83f4d", "name": "Insecure pattern 'tls_verify_false' in backend/scripts/enrich_vendor_names_qqw.py:115", "shortDescription": {"text": "Insecure pattern 'tls_verify_false' in backend/scripts/enrich_vendor_names_qqw.py:115"}, "fullDescription": {"text": "Found a known-risky pattern (tls_verify_false). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0a40b8468778aeb6", "name": "Insecure pattern 'tls_verify_false' in backend/scripts/load_sat_efos.py:102", "shortDescription": {"text": "Insecure pattern 'tls_verify_false' in backend/scripts/load_sat_efos.py:102"}, "fullDescription": {"text": "Found a known-risky pattern (tls_verify_false). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c3b11bbaf1bdd472", "name": "Insecure pattern 'tls_verify_false' in backend/scripts/archive/load_asf_mdb.py:64", "shortDescription": {"text": "Insecure pattern 'tls_verify_false' in backend/scripts/archive/load_asf_mdb.py:64"}, "fullDescription": {"text": "Found a known-risky pattern (tls_verify_false). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-65aa740cba4a4a73", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "github/codeql-action/init@v3 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6628dee3f22bf9ab", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "preactjs/compressed-size-action@v2 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ad4f2b4575fd028a", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/setup-node@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-28c4a04bd807da0c", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "webfactory/ssh-agent@v0.9.0 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-cf95dca2d4eb0c34", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/setup-python@v5 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c0840d07864313e3", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "treosh/lighthouse-ci-action@v11 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d047e32fc7582a42", "name": "Very large file: frontend/src/api/client.ts (3786 lines)", "shortDescription": {"text": "Very large file: frontend/src/api/client.ts (3786 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-98e6788a10db33ca", "name": "Very large file: frontend/src/api/types.ts (2872 lines)", "shortDescription": {"text": "Very large file: frontend/src/api/types.ts (2872 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-80fa619e4a6d3a10", "name": "Very large file: frontend/src/components/charts/ConcentrationConstellation.tsx (1092 lines)", "shortDescription": {"text": "Very large file: frontend/src/components/charts/ConcentrationConstellation.tsx (1092 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-a27f33dd36de87d8", "name": "Very large file: frontend/src/components/atlas/ObservatoryScatter.tsx (1041 lines)", "shortDescription": {"text": "Very large file: frontend/src/components/atlas/ObservatoryScatter.tsx (1041 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-e95db969a3c58793", "name": "Very large file: frontend/src/components/atlas/AtlasZoomLayer.tsx (1274 lines)", "shortDescription": {"text": "Very large file: frontend/src/components/atlas/AtlasZoomLayer.tsx (1274 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-8c9506a54d92f2c5", "name": "Very large file: frontend/src/components/stories/InlineCharts.tsx (3359 lines)", "shortDescription": {"text": "Very large file: frontend/src/components/stories/InlineCharts.tsx (3359 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-81c466c839731a77", "name": "Very large file: frontend/src/components/explore/ExploreCanvas.tsx (5603 lines)", "shortDescription": {"text": "Very large file: frontend/src/components/explore/ExploreCanvas.tsx (5603 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-2c93902fd3c8b912", "name": "Very large file: frontend/src/lib/story-content.ts (5919 lines)", "shortDescription": {"text": "Very large file: frontend/src/lib/story-content.ts (5919 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-3b8e3aebeab5eb72", "name": "Very large file: frontend/src/pages/CategoryProfile.tsx (2041 lines)", "shortDescription": {"text": "Very large file: frontend/src/pages/CategoryProfile.tsx (2041 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-6bd539f7db70460d", "name": "Very large file: frontend/src/pages/YearInReview.tsx (1663 lines)", "shortDescription": {"text": "Very large file: frontend/src/pages/YearInReview.tsx (1663 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-18291d297758d3f7", "name": "Very large file: frontend/src/pages/InstitutionProfile.tsx (2354 lines)", "shortDescription": {"text": "Very large file: frontend/src/pages/InstitutionProfile.tsx (2354 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-4b70e780aebe6668", "name": "Very large file: frontend/src/pages/StoryNarrative.tsx (2390 lines)", "shortDescription": {"text": "Very large file: frontend/src/pages/StoryNarrative.tsx (2390 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-22282a3dc55915de", "name": "Very large file: frontend/src/pages/Sectors.tsx (1163 lines)", "shortDescription": {"text": "Very large file: frontend/src/pages/Sectors.tsx (1163 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-eab2f1e99be6e13d", "name": "Very large file: frontend/src/pages/Methodology.tsx (1700 lines)", "shortDescription": {"text": "Very large file: frontend/src/pages/Methodology.tsx (1700 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-3df2c21f7d1b477c", "name": "Very large file: frontend/src/pages/RedesKnownDossier.tsx (1416 lines)", "shortDescription": {"text": "Very large file: frontend/src/pages/RedesKnownDossier.tsx (1416 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-8327603bff38df48", "name": "Very large file: frontend/src/pages/PriceIntelligence.tsx (2166 lines)", "shortDescription": {"text": "Very large file: frontend/src/pages/PriceIntelligence.tsx (2166 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-ff1c9e89fcff9ebf", "name": "Very large file: frontend/src/pages/CorruptionClusters.tsx (1345 lines)", "shortDescription": {"text": "Very large file: frontend/src/pages/CorruptionClusters.tsx (1345 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-10f2ec0b6c230148", "name": "Very large file: frontend/src/pages/CaseDetail.tsx (2585 lines)", "shortDescription": {"text": "Very large file: frontend/src/pages/CaseDetail.tsx (2585 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-bbd42c0f3608d713", "name": "Very large file: frontend/src/pages/Contracts.tsx (1731 lines)", "shortDescription": {"text": "Very large file: frontend/src/pages/Contracts.tsx (1731 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-53ef6d7a6c1aab98", "name": "Very large file: frontend/src/pages/PatternDossier.tsx (984 lines)", "shortDescription": {"text": "Very large file: frontend/src/pages/PatternDossier.tsx (984 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-e31c7db136db6b62", "name": "Very large file: frontend/src/pages/Executive.tsx (2050 lines)", "shortDescription": {"text": "Very large file: frontend/src/pages/Executive.tsx (2050 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-ba48a6196c21e321", "name": "Very large file: frontend/src/pages/InvestigationCaseDetail.tsx (1730 lines)", "shortDescription": {"text": "Very large file: frontend/src/pages/InvestigationCaseDetail.tsx (1730 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-8a5e3dea75e654f9", "name": "Very large file: frontend/src/pages/Administrations.tsx (1303 lines)", "shortDescription": {"text": "Very large file: frontend/src/pages/Administrations.tsx (1303 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-7cf0c58614cea5fc", "name": "Very large file: frontend/src/pages/Atlas.tsx (2653 lines)", "shortDescription": {"text": "Very large file: frontend/src/pages/Atlas.tsx (2653 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-5c5e4736cc45217f", "name": "Very large file: frontend/src/pages/InstitutionLeague.tsx (1882 lines)", "shortDescription": {"text": "Very large file: frontend/src/pages/InstitutionLeague.tsx (1882 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-bcaa8c6cac5a94a1", "name": "Very large file: frontend/src/pages/SectorProfile.tsx (2069 lines)", "shortDescription": {"text": "Very large file: frontend/src/pages/SectorProfile.tsx (2069 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-9f7dafd64353a386", "name": "Very large file: backend/mcp_server.py (1369 lines)", "shortDescription": {"text": "Very large file: backend/mcp_server.py (1369 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-0e6643220a3603b6", "name": "Very large file: backend/api/routers/network.py (1880 lines)", "shortDescription": {"text": "Very large file: backend/api/routers/network.py (1880 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-db360fb5b06edb54", "name": "Very large file: backend/api/routers/analysis_vendor_sector.py (1314 lines)", "shortDescription": {"text": "Very large file: backend/api/routers/analysis_vendor_sector.py (1314 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-a12b95105949d327", "name": "Very large file: backend/api/routers/stories.py (1379 lines)", "shortDescription": {"text": "Very large file: backend/api/routers/stories.py (1379 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-13892916718ae9f3", "name": "Very large file: backend/api/routers/vendors.py (3187 lines)", "shortDescription": {"text": "Very large file: backend/api/routers/vendors.py (3187 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-531b1d4e83e387b9", "name": "Very large file: backend/api/routers/analysis.py (4999 lines)", "shortDescription": {"text": "Very large file: backend/api/routers/analysis.py (4999 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-1ad84aa3cebb9b38", "name": "Very large file: backend/api/routers/institutions.py (2410 lines)", "shortDescription": {"text": "Very large file: backend/api/routers/institutions.py (2410 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-a2be657ce27a9ecc", "name": "Very large file: backend/api/routers/sectors.py (1654 lines)", "shortDescription": {"text": "Very large file: backend/api/routers/sectors.py (1654 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-f5f90cc059c240aa", "name": "Very large file: backend/scripts/etl_create_schema.py (1715 lines)", "shortDescription": {"text": "Very large file: backend/scripts/etl_create_schema.py (1715 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-5d48b4aa31044ca0", "name": "Very large file: backend/scripts/compute_subcategory_stats.py (1448 lines)", "shortDescription": {"text": "Very large file: backend/scripts/compute_subcategory_stats.py (1448 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-ff476d0a088c0b70", "name": "Very large file: backend/scripts/aria_pipeline.py (1292 lines)", "shortDescription": {"text": "Very large file: backend/scripts/aria_pipeline.py (1292 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-7aa2c9848cbc1e6f", "name": "Very large file: backend/scripts/etl_pipeline.py (1605 lines)", "shortDescription": {"text": "Very large file: backend/scripts/etl_pipeline.py (1605 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-18ac8baf01417f1c", "name": "Very large file: backend/hyperion/atlas/rules.py (1227 lines)", "shortDescription": {"text": "Very large file: backend/hyperion/atlas/rules.py (1227 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-6893a6c8b0861585", "name": "Very low test-to-source ratio", "shortDescription": {"text": "Very low test-to-source ratio"}, "fullDescription": {"text": "58 test file(s) for 1103 source file(s) (ratio 0.05). Consider adding integration or unit tests for critical paths."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-58ac4bdd8d2e5578", "name": "53 TODO/FIXME markers", "shortDescription": {"text": "53 TODO/FIXME markers"}, "fullDescription": {"text": "High count of TODO/FIXME/HACK markers \u2014 track them as issues so they're not forgotten."}, "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 7202 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 103 placeholder/mock markers across 56 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-0d23d984364364f8", "name": "Agent authority lacks a verifier contract: frontend/.mcp.json", "shortDescription": {"text": "Agent authority lacks a verifier contract: frontend/.mcp.json"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a1f8c2bdcfb10ecc", "name": "Commented-code block (5 lines) in frontend/vite.config.ts:12", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/vite.config.ts:12"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-808524d8c4e6f594", "name": "Commented-code block (6 lines) in frontend/scripts/lint-tokens.mjs:23", "shortDescription": {"text": "Commented-code block (6 lines) in frontend/scripts/lint-tokens.mjs:23"}, "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-563998a4599d89c4", "name": "Commented-code block (6 lines) in frontend/src/main.tsx:65", "shortDescription": {"text": "Commented-code block (6 lines) in frontend/src/main.tsx:65"}, "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-ef08cfe49d26bb60", "name": "Legacy-named symbol `ExploreLegacy` in frontend/src/App.tsx:34", "shortDescription": {"text": "Legacy-named symbol `ExploreLegacy` in frontend/src/App.tsx:34"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-47a57246d016775b", "name": "Commented-code block (5 lines) in frontend/src/App.tsx:44", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/App.tsx:44"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-eb4a1753947e5191", "name": "Commented-code block (5 lines) in frontend/src/__tests__/utils.test.ts:72", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/__tests__/utils.test.ts: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-7fe27e2324e9b0f9", "name": "Commented-code block (8 lines) in frontend/src/i18n/index.ts:143", "shortDescription": {"text": "Commented-code block (8 lines) in frontend/src/i18n/index.ts:143"}, "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-4ab88f5a962254d1", "name": "Commented-code block (5 lines) in frontend/src/api/client.ts:210", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/api/client.ts:210"}, "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-3af7c7910e4d84a2", "name": "Commented-code block (9 lines) in frontend/src/components/EntityProfileDrawer.tsx:527", "shortDescription": {"text": "Commented-code block (9 lines) in frontend/src/components/EntityProfileDrawer.tsx:527"}, "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-5ef68400731df05e", "name": "Commented-code block (5 lines) in frontend/src/components/ErrorBoundary.tsx:75", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/components/ErrorBoundary.tsx:75"}, "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-8f3b754bff82acfe", "name": "Commented-code block (6 lines) in frontend/src/components/layout/Sidebar.tsx:61", "shortDescription": {"text": "Commented-code block (6 lines) in frontend/src/components/layout/Sidebar.tsx:61"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-59fdba042f0fc528", "name": "Commented-code block (5 lines) in frontend/src/components/layout/EditorialPageShell.tsx:12", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/components/layout/EditorialPageShell.tsx:12"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8e46cb82bddeae30", "name": "Commented-code block (5 lines) in frontend/src/components/layout/Header.tsx:144", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/components/layout/Header.tsx:144"}, "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-3187aeb6fe00ea4c", "name": "Commented-code block (5 lines) in frontend/src/components/charts/cluster-glyphs.tsx:41", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/components/charts/cluster-glyphs.tsx: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-d6a00ffe04210150", "name": "Commented-code block (8 lines) in frontend/src/components/charts/ProcedureBreakdown.tsx:21", "shortDescription": {"text": "Commented-code block (8 lines) in frontend/src/components/charts/ProcedureBreakdown.tsx:21"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7631f31b04326515", "name": "Commented-code block (6 lines) in frontend/src/components/charts/ConcentrationConstellation.tsx:104", "shortDescription": {"text": "Commented-code block (6 lines) in frontend/src/components/charts/ConcentrationConstellation.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-a1f7ef81263b07c2", "name": "Commented-code block (6 lines) in frontend/src/components/network/CommunityForceGraph.tsx:127", "shortDescription": {"text": "Commented-code block (6 lines) in frontend/src/components/network/CommunityForceGraph.tsx:127"}, "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-094e0a5f219b9a2e", "name": "Commented-code block (5 lines) in frontend/src/components/widgets/AriaMemoPanel.tsx:207", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/components/widgets/AriaMemoPanel.tsx:207"}, "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-97427c14375a6490", "name": "Commented-code block (5 lines) in frontend/src/components/institution/InstitutionCommandPanel.tsx:157", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/components/institution/InstitutionCommandPanel.tsx:157"}, "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-0a00ce77297b8334", "name": "Commented-code block (5 lines) in frontend/src/components/executive/LensVisualization.tsx:102", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/components/executive/LensVisualization.tsx:102"}, "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-14144a5107069519", "name": "Commented-code block (11 lines) in frontend/src/components/atlas/VendorFile.tsx:374", "shortDescription": {"text": "Commented-code block (11 lines) in frontend/src/components/atlas/VendorFile.tsx:374"}, "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-2db7c4ae3810e0eb", "name": "Legacy-named symbol `rubli_atlas_saved_view_v1` in frontend/src/components/atlas/AtlasLeftRail.tsx:141", "shortDescription": {"text": "Legacy-named symbol `rubli_atlas_saved_view_v1` in frontend/src/components/atlas/AtlasLeftRail.tsx:141"}, "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-95829ac232b0fdc6", "name": "Commented-code block (10 lines) in frontend/src/components/atlas/AtlasRightPanel.tsx:336", "shortDescription": {"text": "Commented-code block (10 lines) in frontend/src/components/atlas/AtlasRightPanel.tsx:336"}, "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-9ef77cfd919701ad", "name": "Commented-code block (7 lines) in frontend/src/components/atlas/CanvasConstellation.tsx:82", "shortDescription": {"text": "Commented-code block (7 lines) in frontend/src/components/atlas/CanvasConstellation.tsx:82"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-72ebaea40b80141a", "name": "Commented-code block (5 lines) in frontend/src/components/atlas/ClusterFloatingCard.tsx:84", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/components/atlas/ClusterFloatingCard.tsx:84"}, "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-9944067de93bcb57", "name": "Commented-code block (5 lines) in frontend/src/components/atlas/SpotlightCard.tsx:189", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/components/atlas/SpotlightCard.tsx:189"}, "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-bfc3c0d0428fc334", "name": "Commented-code block (5 lines) in frontend/src/components/atlas/ObservatoryScatter.tsx:58", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/components/atlas/ObservatoryScatter.tsx:58"}, "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-187fd061d7ea81b1", "name": "Commented-code block (5 lines) in frontend/src/components/atlas/AtlasZoomLayer.tsx:48", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/components/atlas/AtlasZoomLayer.tsx:48"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7a4689fdbf88a4f9", "name": "Commented-code block (6 lines) in frontend/src/components/atlas/AtlasContext.tsx:23", "shortDescription": {"text": "Commented-code block (6 lines) in frontend/src/components/atlas/AtlasContext.tsx:23"}, "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-15690b74ceed2c9f", "name": "Commented-code block (5 lines) in frontend/src/components/stories/DataPullquote.tsx:7", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/components/stories/DataPullquote.tsx:7"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-adb837bdd242b8c1", "name": "Commented-code block (5 lines) in frontend/src/components/stories/InlineCharts.tsx:32", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/components/stories/InlineCharts.tsx: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-5dbab319e5cfeccc", "name": "Commented-code block (5 lines) in frontend/src/components/category/CategoryDossierSections.tsx:413", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/components/category/CategoryDossierSections.tsx:413"}, "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-24f7ad949475b157", "name": "Commented-code block (5 lines) in frontend/src/components/dossier/command/primitives.tsx:172", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/components/dossier/command/primitives.tsx:172"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7b9efe5ecb7e78aa", "name": "Legacy-named symbol `rubli_explore_recent_v1` in frontend/src/components/explore/SearchOverlay.tsx:29", "shortDescription": {"text": "Legacy-named symbol `rubli_explore_recent_v1` in frontend/src/components/explore/SearchOverlay.tsx:29"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6ede798444b25795", "name": "Commented-code block (5 lines) in frontend/src/components/explore/SearchOverlay.tsx:68", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/components/explore/SearchOverlay.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-cef1b4627df7b084", "name": "Commented-code block (6 lines) in frontend/src/components/explore/ExploreCanvas.tsx:69", "shortDescription": {"text": "Commented-code block (6 lines) in frontend/src/components/explore/ExploreCanvas.tsx:69"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-393b05d335850b65", "name": "Legacy-named symbol `rubli_explore_pin_v1` in frontend/src/components/explore/ExploreState.tsx:50", "shortDescription": {"text": "Legacy-named symbol `rubli_explore_pin_v1` in frontend/src/components/explore/ExploreState.tsx:50"}, "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-81799585cf264fc4", "name": "Commented-code block (7 lines) in frontend/src/components/explore/ExploreState.tsx:118", "shortDescription": {"text": "Commented-code block (7 lines) in frontend/src/components/explore/ExploreState.tsx:118"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b9eab87ae0bec452", "name": "Commented-code block (7 lines) in frontend/src/components/sectors/SectorTreemap.tsx:447", "shortDescription": {"text": "Commented-code block (7 lines) in frontend/src/components/sectors/SectorTreemap.tsx:447"}, "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-35e8c65037be568a", "name": "Commented-code block (5 lines) in frontend/src/components/sectors/CategoryCaptureDumbbell.tsx:316", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/components/sectors/CategoryCaptureDumbbell.tsx:316"}, "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-66d6f4658a5913cc", "name": "Commented-code block (8 lines) in frontend/src/components/sectors/RiskSpendBeeswarm.tsx:94", "shortDescription": {"text": "Commented-code block (8 lines) in frontend/src/components/sectors/RiskSpendBeeswarm.tsx:94"}, "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-60fb0ea11de1f3bf", "name": "Commented-code block (5 lines) in frontend/src/components/editorial/BenchmarkRow.tsx:23", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/components/editorial/BenchmarkRow.tsx:23"}, "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-6756849262d3fc4a", "name": "Commented-code block (6 lines) in frontend/src/lib/atlas-stories.ts:81", "shortDescription": {"text": "Commented-code block (6 lines) in frontend/src/lib/atlas-stories.ts:81"}, "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-f46ab15550e63315", "name": "Commented-code block (7 lines) in frontend/src/lib/utils.ts:315", "shortDescription": {"text": "Commented-code block (7 lines) in frontend/src/lib/utils.ts:315"}, "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-8e1254c9428520b5", "name": "Commented-code block (6 lines) in frontend/src/lib/constants.ts:23", "shortDescription": {"text": "Commented-code block (6 lines) in frontend/src/lib/constants.ts:23"}, "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-49613b341729cb7c", "name": "Commented-code block (8 lines) in frontend/src/lib/tiers.ts:40", "shortDescription": {"text": "Commented-code block (8 lines) in frontend/src/lib/tiers.ts:40"}, "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-cd47acaab0919fd2", "name": "Commented-code block (7 lines) in frontend/src/lib/nav/wayfinding.tsx:184", "shortDescription": {"text": "Commented-code block (7 lines) in frontend/src/lib/nav/wayfinding.tsx:184"}, "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-2944397a916a37ac", "name": "Commented-code block (7 lines) in frontend/src/lib/atlas/useAtlasLOD.ts:38", "shortDescription": {"text": "Commented-code block (7 lines) in frontend/src/lib/atlas/useAtlasLOD.ts:38"}, "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-9cab544e847234be", "name": "Legacy-named symbol `rubli_explore_visited_v1` in frontend/src/pages/SpatialMap.tsx:31", "shortDescription": {"text": "Legacy-named symbol `rubli_explore_visited_v1` in frontend/src/pages/SpatialMap.tsx:31"}, "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-37bf22bbac50eb7d", "name": "Commented-code block (5 lines) in frontend/src/pages/ReportCard.tsx:99", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/pages/ReportCard.tsx:99"}, "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-af96d1975ea71f10", "name": "Commented-code block (7 lines) in frontend/src/pages/CategoryDossier.tsx:297", "shortDescription": {"text": "Commented-code block (7 lines) in frontend/src/pages/CategoryDossier.tsx:297"}, "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-100bf05d50daa5c8", "name": "Commented-code block (5 lines) in frontend/src/pages/ModelTransparency.tsx:19", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/pages/ModelTransparency.tsx:19"}, "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-362670d983597a0b", "name": "Commented-code block (7 lines) in frontend/src/pages/StoryNarrative.tsx:120", "shortDescription": {"text": "Commented-code block (7 lines) in frontend/src/pages/StoryNarrative.tsx:120"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a71defdd320a5586", "name": "Legacy-named symbol `rubli_explore_recent_v1` in frontend/src/pages/VendorProfile.tsx:178", "shortDescription": {"text": "Legacy-named symbol `rubli_explore_recent_v1` in frontend/src/pages/VendorProfile.tsx:178"}, "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-c0d31cfabf1e0907", "name": "Commented-code block (5 lines) in frontend/src/pages/Methodology.tsx:503", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/pages/Methodology.tsx:503"}, "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-c59a7f2e0b879f91", "name": "Legacy-named symbol `rubli_trama_pins_v1` in frontend/src/pages/RedesKnownDossier.tsx:45", "shortDescription": {"text": "Legacy-named symbol `rubli_trama_pins_v1` in frontend/src/pages/RedesKnownDossier.tsx:45"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e6fc56df6af51e58", "name": "Commented-code block (5 lines) in frontend/src/pages/PriceIntelligence.tsx:1308", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/pages/PriceIntelligence.tsx:1308"}, "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-f93e15f0579b87da", "name": "Commented-code block (5 lines) in frontend/src/pages/CaseDetail.tsx:191", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/pages/CaseDetail.tsx:191"}, "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-2327cc0fdbfc0ce2", "name": "Commented-code block (5 lines) in frontend/src/pages/PatternDossier.tsx:129", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/pages/PatternDossier.tsx:129"}, "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-b12448320be64cac", "name": "Commented-code block (7 lines) in frontend/src/pages/Executive.tsx:86", "shortDescription": {"text": "Commented-code block (7 lines) in frontend/src/pages/Executive.tsx:86"}, "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-25c1164904d72394", "name": "Commented-code block (6 lines) in frontend/src/pages/Privacy.tsx:4", "shortDescription": {"text": "Commented-code block (6 lines) in frontend/src/pages/Privacy.tsx:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-41665a4d4118a09b", "name": "Commented-code block (5 lines) in frontend/src/pages/InvestigationCaseDetail.tsx:72", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/pages/InvestigationCaseDetail.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-7c7c8128752472cd", "name": "Commented-code block (8 lines) in frontend/src/pages/Administrations.tsx:511", "shortDescription": {"text": "Commented-code block (8 lines) in frontend/src/pages/Administrations.tsx:511"}, "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-e80e35f17a576e8b", "name": "Commented-code block (7 lines) in frontend/src/pages/VendorDossier.tsx:66", "shortDescription": {"text": "Commented-code block (7 lines) in frontend/src/pages/VendorDossier.tsx:66"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ae2f08cbc802aa6f", "name": "Legacy-named symbol `rubli_atlas_visited_v1` in frontend/src/pages/Atlas.tsx:5", "shortDescription": {"text": "Legacy-named symbol `rubli_atlas_visited_v1` in frontend/src/pages/Atlas.tsx: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-b88cb077ed827f7c", "name": "Commented-code block (6 lines) in frontend/src/pages/Atlas.tsx:71", "shortDescription": {"text": "Commented-code block (6 lines) in frontend/src/pages/Atlas.tsx:71"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8b334ab73416e3e2", "name": "Commented-code block (8 lines) in frontend/src/pages/InstitutionLeague.tsx:756", "shortDescription": {"text": "Commented-code block (8 lines) in frontend/src/pages/InstitutionLeague.tsx:756"}, "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-345a319bb3c3bcc3", "name": "Commented-code block (5 lines) in frontend/src/pages/InstitutionCompare.tsx:744", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/pages/InstitutionCompare.tsx:744"}, "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-53e8e1dee8edc993", "name": "Commented-code block (5 lines) in frontend/src/pages/AriaQueue.tsx:176", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/pages/AriaQueue.tsx:176"}, "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-41b76f958144eb64", "name": "Commented-code block (5 lines) in frontend/src/pages/SectorProfile.tsx:917", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/pages/SectorProfile.tsx:917"}, "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-9e303c318cc22baf", "name": "Legacy-named symbol `rubli_wayfinding_scroll_v1` in frontend/src/hooks/useWayfindingScroll.ts:29", "shortDescription": {"text": "Legacy-named symbol `rubli_wayfinding_scroll_v1` in frontend/src/hooks/useWayfindingScroll.ts:29"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-036718bb73d7989a", "name": "Legacy-named symbol `rest_v1` in frontend/src/hooks/useWikipediaImage.ts:7", "shortDescription": {"text": "Legacy-named symbol `rest_v1` in frontend/src/hooks/useWikipediaImage.ts:7"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b6620f256f240280", "name": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/hooks/useWikipediaImage.ts:22", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/hooks/useWikipediaImage.ts:22"}, "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-3d6b66eae3d462d8", "name": "Commented-code block (8 lines) in frontend/src/hooks/useAnimations.tsx:187", "shortDescription": {"text": "Commented-code block (8 lines) in frontend/src/hooks/useAnimations.tsx:187"}, "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-8f04fad829b2f064", "name": "Commented-code block (5 lines) in frontend/src/hooks/__tests__/useAnimations.test.tsx:78", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/hooks/__tests__/useAnimations.test.tsx: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-2fc6e06e557093b8", "name": "Commented-code block (5 lines) in scripts/automated_explore.py:137", "shortDescription": {"text": "Commented-code block (5 lines) in scripts/automated_explore.py:137"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-590289dac3fe4b1b", "name": "Commented-code block (6 lines) in backend/tests/test_z2_vendor_pool_flags.py:123", "shortDescription": {"text": "Commented-code block (6 lines) in backend/tests/test_z2_vendor_pool_flags.py:123"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0feaca9712e38a71", "name": "Legacy-named symbol `r_old` in backend/tests/test_subnational.py:61", "shortDescription": {"text": "Legacy-named symbol `r_old` in backend/tests/test_subnational.py:61"}, "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-8c364b2d6bb96728", "name": "Commented-code block (6 lines) in backend/api/main.py:159", "shortDescription": {"text": "Commented-code block (6 lines) in backend/api/main.py:159"}, "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-7af6822564db1a8f", "name": "Legacy-named symbol `network_trama_index_v1` in backend/api/routers/network.py:814", "shortDescription": {"text": "Legacy-named symbol `network_trama_index_v1` in backend/api/routers/network.py:814"}, "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-fe5b81531dd85bd9", "name": "Commented-code block (7 lines) in backend/api/routers/analysis_vendor_sector.py:590", "shortDescription": {"text": "Commented-code block (7 lines) in backend/api/routers/analysis_vendor_sector.py:590"}, "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-59d4c18193771eb7", "name": "Legacy-named symbol `_get_last_backup` in backend/api/routers/health.py:114", "shortDescription": {"text": "Legacy-named symbol `_get_last_backup` in backend/api/routers/health.py:114"}, "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-5493664cfcd5979c", "name": "Commented-code block (5 lines) in backend/api/routers/vendors.py:485", "shortDescription": {"text": "Commented-code block (5 lines) in backend/api/routers/vendors.py:485"}, "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-a48869f75d41c041", "name": "Commented-code block (7 lines) in backend/api/routers/atlas.py:68", "shortDescription": {"text": "Commented-code block (7 lines) in backend/api/routers/atlas.py: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-6c9a2a25fff97828", "name": "Legacy-named symbol `capture_landscape_v1` in backend/api/routers/capture.py:346", "shortDescription": {"text": "Legacy-named symbol `capture_landscape_v1` in backend/api/routers/capture.py:346"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a131e619b697865e", "name": "Commented-code block (12 lines) in backend/api/routers/capture.py:31", "shortDescription": {"text": "Commented-code block (12 lines) in backend/api/routers/capture.py:31"}, "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-c5681100df7f6c0e", "name": "Legacy-named symbol `RUBLI_v1` in backend/api/routers/cases.py:101", "shortDescription": {"text": "Legacy-named symbol `RUBLI_v1` in backend/api/routers/cases.py:101"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-76b1374f0dad2928", "name": "Commented-code block (5 lines) in backend/api/routers/intersection.py:55", "shortDescription": {"text": "Commented-code block (5 lines) in backend/api/routers/intersection.py:55"}, "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-292ade9d4dce4824", "name": "Commented-code block (5 lines) in backend/api/routers/export.py:50", "shortDescription": {"text": "Commented-code block (5 lines) in backend/api/routers/export.py:50"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-735f3c4bfeb772f8", "name": "Legacy-named symbol `RUBLI_v1` in backend/api/routers/categories.py:223", "shortDescription": {"text": "Legacy-named symbol `RUBLI_v1` in backend/api/routers/categories.py:223"}, "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-2bc5bf8f6b7dee5e", "name": "Commented-code block (7 lines) in backend/api/routers/categories.py:217", "shortDescription": {"text": "Commented-code block (7 lines) in backend/api/routers/categories.py:217"}, "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-e9052bf86454d7b4", "name": "Commented-code block (5 lines) in backend/api/routers/analysis.py:2462", "shortDescription": {"text": "Commented-code block (5 lines) in backend/api/routers/analysis.py:2462"}, "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-76cca0e10f3c8bc5", "name": "Legacy-named symbol `model_copy` in backend/api/routers/institutions.py:1565", "shortDescription": {"text": "Legacy-named symbol `model_copy` in backend/api/routers/institutions.py:1565"}, "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-13b4b0d163ca6b78", "name": "Commented-code block (10 lines) in backend/api/routers/institutions.py:1188", "shortDescription": {"text": "Commented-code block (10 lines) in backend/api/routers/institutions.py:1188"}, "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-39cade1ef75a1a75", "name": "Legacy-named symbol `sectors_treemap_v1` in backend/api/routers/sectors.py:269", "shortDescription": {"text": "Legacy-named symbol `sectors_treemap_v1` in backend/api/routers/sectors.py:269"}, "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-8e627602171477cd", "name": "Commented-code block (6 lines) in backend/scripts/create_deploy_db.py:212", "shortDescription": {"text": "Commented-code block (6 lines) in backend/scripts/create_deploy_db.py:212"}, "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-2ad06175b064c90a", "name": "Legacy-named symbol `old_backup` in backend/scripts/backup_database.py:71", "shortDescription": {"text": "Legacy-named symbol `old_backup` in backend/scripts/backup_database.py:71"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-cc61b60d8533c3eb", "name": "Legacy-named symbol `network_trama_index_v1` in backend/scripts/_precompute_network_trama.py:7", "shortDescription": {"text": "Legacy-named symbol `network_trama_index_v1` in backend/scripts/_precompute_network_trama.py:7"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-84e13edfde301cac", "name": "Legacy-named symbol `match_corporate_groups_v2` in backend/scripts/match_corporate_groups_v2.py:12", "shortDescription": {"text": "Legacy-named symbol `match_corporate_groups_v2` in backend/scripts/match_corporate_groups_v2.py:12"}, "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-6ddcbac0abb4dfcb", "name": "Legacy-named symbol `decentralized_legacy` in backend/scripts/etl_create_schema.py:1018", "shortDescription": {"text": "Legacy-named symbol `decentralized_legacy` in backend/scripts/etl_create_schema.py:1018"}, "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-2799d11747e04b2e", "name": "Commented-code block (13 lines) in backend/scripts/_aria_cases_721_723.py:12", "shortDescription": {"text": "Commented-code block (13 lines) in backend/scripts/_aria_cases_721_723.py:12"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f43e857fb5526dba", "name": "Commented-code block (12 lines) in backend/scripts/_aria_cases_662_670.py:18", "shortDescription": {"text": "Commented-code block (12 lines) in backend/scripts/_aria_cases_662_670.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-0aeba63d44b790f5", "name": "Commented-code block (11 lines) in backend/scripts/_aria_cases_636_643.py:17", "shortDescription": {"text": "Commented-code block (11 lines) in backend/scripts/_aria_cases_636_643.py:17"}, "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-483846c2e88d37cb", "name": "Legacy-named symbol `days_old` in backend/scripts/centinela.py:134", "shortDescription": {"text": "Legacy-named symbol `days_old` in backend/scripts/centinela.py:134"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-eb4a016644254a92", "name": "Commented-code block (12 lines) in backend/scripts/_aria_cases_628_631.py:13", "shortDescription": {"text": "Commented-code block (12 lines) in backend/scripts/_aria_cases_628_631.py:13"}, "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-ef2aef808d7076e4", "name": "Commented-code block (5 lines) in backend/scripts/calculate_vendor_risk.py:432", "shortDescription": {"text": "Commented-code block (5 lines) in backend/scripts/calculate_vendor_risk.py:432"}, "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-54d22d17a2950d03", "name": "Commented-code block (14 lines) in backend/scripts/_aria_cases_632_635.py:13", "shortDescription": {"text": "Commented-code block (14 lines) in backend/scripts/_aria_cases_632_635.py:13"}, "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-74f2321f2c492e22", "name": "Commented-code block (15 lines) in backend/scripts/_aria_cases_705_707.py:12", "shortDescription": {"text": "Commented-code block (15 lines) in backend/scripts/_aria_cases_705_707.py:12"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-dc1a9b6bc96d9de4", "name": "Commented-code block (9 lines) in backend/scripts/_aria_cases_613_616.py:13", "shortDescription": {"text": "Commented-code block (9 lines) in backend/scripts/_aria_cases_613_616.py:13"}, "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-8494cc3afbb45d5e", "name": "Commented-code block (17 lines) in backend/scripts/_aria_cases_724_726.py:12", "shortDescription": {"text": "Commented-code block (17 lines) in backend/scripts/_aria_cases_724_726.py:12"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a31254e96a0b0a0a", "name": "Commented-code block (5 lines) in backend/scripts/_precompute_category_top_vendors.py:123", "shortDescription": {"text": "Commented-code block (5 lines) in backend/scripts/_precompute_category_top_vendors.py:123"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f86012f040db9e31", "name": "Commented-code block (11 lines) in backend/scripts/_aria_cases_batch_II.py:36", "shortDescription": {"text": "Commented-code block (11 lines) in backend/scripts/_aria_cases_batch_II.py:36"}, "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-49111883a1e08c32", "name": "Commented-code block (13 lines) in backend/scripts/_aria_cases_644_651.py:17", "shortDescription": {"text": "Commented-code block (13 lines) in backend/scripts/_aria_cases_644_651.py:17"}, "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-21af3b086fc5a0ff", "name": "Commented-code block (5 lines) in backend/scripts/_insert_cases_216_223.py:38", "shortDescription": {"text": "Commented-code block (5 lines) in backend/scripts/_insert_cases_216_223.py:38"}, "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-bc87d1dc6ae35681", "name": "Legacy-named symbol `rate_v1` in backend/scripts/explore_detectable_patterns.py:125", "shortDescription": {"text": "Legacy-named symbol `rate_v1` in backend/scripts/explore_detectable_patterns.py:125"}, "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-35a42201a07a578b", "name": "Commented-code block (11 lines) in backend/scripts/_aria_cases_batch_EEE1.py:31", "shortDescription": {"text": "Commented-code block (11 lines) in backend/scripts/_aria_cases_batch_EEE1.py:31"}, "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-15bfe269c4bab46e", "name": "Commented-code block (10 lines) in backend/scripts/_insert_cases_224_231.py:42", "shortDescription": {"text": "Commented-code block (10 lines) in backend/scripts/_insert_cases_224_231.py:42"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-406f3707c87c44e2", "name": "Commented-code block (6 lines) in backend/scripts/compute_scorecards.py:598", "shortDescription": {"text": "Commented-code block (6 lines) in backend/scripts/compute_scorecards.py:598"}, "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-9e8bea424dab7f7a", "name": "Commented-code block (10 lines) in backend/scripts/_aria_cases_batch_HH.py:36", "shortDescription": {"text": "Commented-code block (10 lines) in backend/scripts/_aria_cases_batch_HH.py:36"}, "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-f5da81db796c6f7d", "name": "Commented-code block (18 lines) in backend/scripts/_aria_cases_718_720.py:12", "shortDescription": {"text": "Commented-code block (18 lines) in backend/scripts/_aria_cases_718_720.py:12"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c894ac696a24a424", "name": "Commented-code block (16 lines) in backend/scripts/_aria_cases_715_717.py:12", "shortDescription": {"text": "Commented-code block (16 lines) in backend/scripts/_aria_cases_715_717.py:12"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f99b493bc0f61911", "name": "Legacy-named symbol `run_backup` in backend/scripts/backup_db.py:80", "shortDescription": {"text": "Legacy-named symbol `run_backup` in backend/scripts/backup_db.py:80"}, "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-f00a0dd4d9ed7b69", "name": "Commented-code block (17 lines) in backend/scripts/_aria_cases_697_700.py:13", "shortDescription": {"text": "Commented-code block (17 lines) in backend/scripts/_aria_cases_697_700.py:13"}, "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-3626a3f305fac2ea", "name": "Commented-code block (9 lines) in backend/scripts/_aria_cases_603_605.py:12", "shortDescription": {"text": "Commented-code block (9 lines) in backend/scripts/_aria_cases_603_605.py:12"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-57efd035766898b3", "name": "Legacy-named symbol `days_old` in backend/scripts/aria_investigate.py:93", "shortDescription": {"text": "Legacy-named symbol `days_old` in backend/scripts/aria_investigate.py:93"}, "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-f8c1f79879fd59fe", "name": "Commented-code block (11 lines) in backend/scripts/_aria_cases_712_714.py:12", "shortDescription": {"text": "Commented-code block (11 lines) in backend/scripts/_aria_cases_712_714.py:12"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2517f3827b8e6389", "name": "Commented-code block (15 lines) in backend/scripts/_aria_cases_701_704.py:13", "shortDescription": {"text": "Commented-code block (15 lines) in backend/scripts/_aria_cases_701_704.py:13"}, "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-2d8330ed9af7b915", "name": "Commented-code block (5 lines) in backend/scripts/_score_v6_now.py:34", "shortDescription": {"text": "Commented-code block (5 lines) in backend/scripts/_score_v6_now.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-ca1b06e8414e708e", "name": "Commented-code block (11 lines) in backend/scripts/_aria_cases_671_678.py:17", "shortDescription": {"text": "Commented-code block (11 lines) in backend/scripts/_aria_cases_671_678.py:17"}, "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-c5d953ceb6037420", "name": "Network/subprocess call without timeout or try/except \u2014 backend/scripts/timing_test.py:46", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 backend/scripts/timing_test.py:46"}, "fullDescription": {"text": "`requests.get(...)` here lacks both a `timeout=` arg and an enclosing try/except. This is exactly the class of bug that took down our git-clone earlier (HTTP/2 stream cancel surfaced as a fatal). Add a `timeout=` and wrap in try/except, or use a wrapper that retries."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-96b9855ef33106e5", "name": "Commented-code block (9 lines) in backend/scripts/_aria_cases_batch_GG.py:36", "shortDescription": {"text": "Commented-code block (9 lines) in backend/scripts/_aria_cases_batch_GG.py:36"}, "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-5cab229b0777a130", "name": "Commented-code block (5 lines) in backend/scripts/compute_official_profiles.py:48", "shortDescription": {"text": "Commented-code block (5 lines) in backend/scripts/compute_official_profiles.py:48"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6886932226d2bc9d", "name": "Commented-code block (12 lines) in backend/scripts/_aria_cases_620_622.py:12", "shortDescription": {"text": "Commented-code block (12 lines) in backend/scripts/_aria_cases_620_622.py:12"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-02247ce639675ba1", "name": "Commented-code block (5 lines) in backend/scripts/_classify_federal.py:64", "shortDescription": {"text": "Commented-code block (5 lines) in backend/scripts/_classify_federal.py:64"}, "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-6201d97a0245c252", "name": "Commented-code block (11 lines) in backend/scripts/_aria_cases_batch_KK.py:35", "shortDescription": {"text": "Commented-code block (11 lines) in backend/scripts/_aria_cases_batch_KK.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-d3073cf0f9c4e8c1", "name": "Commented-code block (10 lines) in backend/scripts/_aria_cases_batch_FF.py:36", "shortDescription": {"text": "Commented-code block (10 lines) in backend/scripts/_aria_cases_batch_FF.py:36"}, "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-baa214649f200039", "name": "Legacy-named symbol `template_v1` in backend/scripts/_write_memos_307_309.py:255", "shortDescription": {"text": "Legacy-named symbol `template_v1` in backend/scripts/_write_memos_307_309.py:255"}, "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-089eb23f96af277b", "name": "Commented-code block (5 lines) in backend/scripts/_update_gt_fraud_windows.py:47", "shortDescription": {"text": "Commented-code block (5 lines) in backend/scripts/_update_gt_fraud_windows.py:47"}, "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-4829e08c3232b595", "name": "Commented-code block (10 lines) in backend/scripts/_aria_cases_610_612.py:12", "shortDescription": {"text": "Commented-code block (10 lines) in backend/scripts/_aria_cases_610_612.py:12"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fefd6ee0f280fbd6", "name": "Commented-code block (18 lines) in backend/scripts/_aria_cases_695_696.py:11", "shortDescription": {"text": "Commented-code block (18 lines) in backend/scripts/_aria_cases_695_696.py:11"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-27712b62ca7106ca", "name": "Commented-code block (11 lines) in backend/scripts/_aria_cases_652_661.py:19", "shortDescription": {"text": "Commented-code block (11 lines) in backend/scripts/_aria_cases_652_661.py:19"}, "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-0e67ac33cc5f38c0", "name": "Legacy-named symbol `rate_v1` in backend/scripts/analyze_co_bidding.py:124", "shortDescription": {"text": "Legacy-named symbol `rate_v1` in backend/scripts/analyze_co_bidding.py:124"}, "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-557d270104ce31dc", "name": "Commented-code block (9 lines) in backend/scripts/_aria_cases_606_609.py:13", "shortDescription": {"text": "Commented-code block (9 lines) in backend/scripts/_aria_cases_606_609.py:13"}, "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-d567cbd72e911f9e", "name": "Commented-code block (14 lines) in backend/scripts/_aria_cases_708_711.py:13", "shortDescription": {"text": "Commented-code block (14 lines) in backend/scripts/_aria_cases_708_711.py:13"}, "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-4aabf5ef50368c83", "name": "Commented-code block (11 lines) in backend/scripts/_aria_cases_batch_OOO.py:37", "shortDescription": {"text": "Commented-code block (11 lines) in backend/scripts/_aria_cases_batch_OOO.py:37"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-050cc6a8fbb5ac5c", "name": "Legacy-named symbol `ips_old` in backend/scripts/recompute_ips_with_novelty.py:53", "shortDescription": {"text": "Legacy-named symbol `ips_old` in backend/scripts/recompute_ips_with_novelty.py:53"}, "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-b1c1fe9d9d23b702", "name": "Commented-code block (11 lines) in backend/scripts/_aria_cases_batch_JJ.py:36", "shortDescription": {"text": "Commented-code block (11 lines) in backend/scripts/_aria_cases_batch_JJ.py:36"}, "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-cc49e801847105df", "name": "Commented-code block (17 lines) in backend/scripts/_aria_cases_692_694.py:12", "shortDescription": {"text": "Commented-code block (17 lines) in backend/scripts/_aria_cases_692_694.py:12"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f83d540509f9dc86", "name": "Commented-code block (6 lines) in backend/scripts/_add_perf_indexes.py:47", "shortDescription": {"text": "Commented-code block (6 lines) in backend/scripts/_add_perf_indexes.py:47"}, "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-176ca6c5994081ad", "name": "Commented-code block (11 lines) in backend/scripts/_aria_cases_685_691.py:16", "shortDescription": {"text": "Commented-code block (11 lines) in backend/scripts/_aria_cases_685_691.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-cda8f897fc6a05d7", "name": "Commented-code block (7 lines) in backend/scripts/calibrate_risk_model_v6_enhanced.py:71", "shortDescription": {"text": "Commented-code block (7 lines) in backend/scripts/calibrate_risk_model_v6_enhanced.py:71"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-92ba091371cb6cfc", "name": "Commented-code block (8 lines) in backend/scripts/_aria_cases_batch_JJJ.py:30", "shortDescription": {"text": "Commented-code block (8 lines) in backend/scripts/_aria_cases_batch_JJJ.py:30"}, "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-8ca2384236e369a5", "name": "Commented-code block (8 lines) in backend/scripts/_aria_cases_batch_AA.py:37", "shortDescription": {"text": "Commented-code block (8 lines) in backend/scripts/_aria_cases_batch_AA.py:37"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-31c2cc37e10e28e0", "name": "Legacy-named symbol `compute_score_old` in backend/scripts/_calibration_estimate.py:6", "shortDescription": {"text": "Legacy-named symbol `compute_score_old` in backend/scripts/_calibration_estimate.py:6"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-be621eb8726e06cb", "name": "Network/subprocess call without timeout or try/except \u2014 backend/scripts/add_efos_ground_truth.py:162", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 backend/scripts/add_efos_ground_truth.py:162"}, "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-3250106cf9cc1d56", "name": "Commented-code block (9 lines) in backend/scripts/_aria_cases_623_627.py:14", "shortDescription": {"text": "Commented-code block (9 lines) in backend/scripts/_aria_cases_623_627.py:14"}, "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-12f2d76c243ab186", "name": "Commented-code block (9 lines) in backend/scripts/_aria_cases_617_619.py:12", "shortDescription": {"text": "Commented-code block (9 lines) in backend/scripts/_aria_cases_617_619.py:12"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2d1b383c441dd42c", "name": "Commented-code block (6 lines) in backend/scripts/_aria_cases_600_602.py:12", "shortDescription": {"text": "Commented-code block (6 lines) in backend/scripts/_aria_cases_600_602.py:12"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-32cd4d88388411c3", "name": "Commented-code block (9 lines) in backend/scripts/_build_deploy_db.py:62", "shortDescription": {"text": "Commented-code block (9 lines) in backend/scripts/_build_deploy_db.py:62"}, "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-46fec3988a88a9ec", "name": "Network/subprocess call without timeout or try/except \u2014 backend/scripts/_build_deploy_db.py:179", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 backend/scripts/_build_deploy_db.py:179"}, "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-b0fa44cdbe1221c2", "name": "Commented-code block (8 lines) in backend/scripts/compute_new_vendor_risk_model.py:35", "shortDescription": {"text": "Commented-code block (8 lines) in backend/scripts/compute_new_vendor_risk_model.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-644bfb5ebf6234ce", "name": "Commented-code block (12 lines) in backend/scripts/_aria_cases_679_684.py:15", "shortDescription": {"text": "Commented-code block (12 lines) in backend/scripts/_aria_cases_679_684.py:15"}, "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-08bc667d8a9a5242", "name": "Legacy-named symbol `decentralized_legacy` in backend/scripts/classify_institutions.py:101", "shortDescription": {"text": "Legacy-named symbol `decentralized_legacy` in backend/scripts/classify_institutions.py:101"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-681c5c675b9ba00c", "name": "Commented-code block (6 lines) in backend/scripts/load_rupc.py:26", "shortDescription": {"text": "Commented-code block (6 lines) in backend/scripts/load_rupc.py:26"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-08c5d382b65ce57f", "name": "Legacy-named symbol `cluster_vendors_v2` in backend/scripts/archive/cluster_vendors_v2.py:18", "shortDescription": {"text": "Legacy-named symbol `cluster_vendors_v2` in backend/scripts/archive/cluster_vendors_v2.py:18"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8e16478b3c2f96e3", "name": "Legacy-named symbol `rate_v1` in backend/scripts/archive/calculate_risk_scores.py:465", "shortDescription": {"text": "Legacy-named symbol `rate_v1` in backend/scripts/archive/calculate_risk_scores.py:465"}, "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-a926e94b71f788ba", "name": "Commented-code block (7 lines) in backend/scripts/archive/load_asf_mdb.py:165", "shortDescription": {"text": "Commented-code block (7 lines) in backend/scripts/archive/load_asf_mdb.py:165"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-111f137a1aa4dd5e", "name": "Commented-code block (5 lines) in backend/scripts/archive/cluster_vendors.py:173", "shortDescription": {"text": "Commented-code block (5 lines) in backend/scripts/archive/cluster_vendors.py:173"}, "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-0dfe7fd85136668d", "name": "Commented-code block (9 lines) in backend/hyperion/phonetic.py:38", "shortDescription": {"text": "Commented-code block (9 lines) in backend/hyperion/phonetic.py:38"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a9836457f7ec50c4", "name": "23 env vars used in code but missing from .env.example", "shortDescription": {"text": "23 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `ANTHROPIC_API_KEY`, `ARIA_TIER1_THRESHOLD`, `ARIA_TIER2_THRESHOLD`, `ARIA_TIER3_THRESHOLD`, `ARIA_W_ENSEMBLE`, `ARIA_W_EXTERNAL`, `ARIA_W_FINANCIAL`, `ARIA_W_RISK` + 15 more. Add them (with a placeholder/comment) to .env.example so onboarding doesn't break."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2c04133e54348533", "name": "Near-duplicate function bodies in 2 places", "shortDescription": {"text": "Near-duplicate function bodies in 2 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nscripts/automated_explore.py:main_async, scripts/automated_explore.py:main\n\nThis is *the* AI-coder failure mode (4\u00d7 more duplication in vibe-coded repos \u2014 see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-be46ea126aa5d8dc", "name": "Near-duplicate function bodies in 3 places", "shortDescription": {"text": "Near-duplicate function bodies in 3 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nbackend/api/cache.py:get_cache, backend/api/cache.py:get, backend/api/cache.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-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/scripts/_aria_cases_batch_BBB.py:main, backend/scripts/_aria_cases_batch_Z.py:main, backend/scripts/_aria_cases_batch_BB.py:main, backend/scripts/_aria_cases_batch_W.py:main\n\nThis is *the* AI-coder failure mode (4\u00d7 more duplication in vibe-coded repos \u2014 see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6718a631ead09376", "name": "Near-duplicate function bodies in 38 places", "shortDescription": {"text": "Near-duplicate function bodies in 38 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nbackend/scripts/_aria_cases_439_440.py:run, backend/scripts/_aria_cases_443_445.py:run, backend/scripts/_aria_cases_586_589.py:run, backend/scripts/_aria_cases_581_585.py:run\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-cf017baa675bf381", "name": "Frontend route `login` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `login` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-356241c421138370", "name": "Frontend route `register` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `register` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-510f9d88aa3beef9", "name": "Frontend route `intro` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `intro` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3e5f15ad4f8276ff", "name": "Frontend route `landing` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `landing` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-de3602a808ab3d94", "name": "Frontend route `_dev/charts` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `_dev/charts` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-8e11138a9f634ca9", "name": "Frontend route `dashboard` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `dashboard` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2d3e85c2e8510cb2", "name": "Frontend route `executive` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `executive` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-85f058f890f99d07", "name": "Frontend route `executive-summary` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `executive-summary` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6ddd382d0c1353c5", "name": "Frontend route `report-card` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `report-card` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-afa4ad16886ffe96", "name": "Frontend route `institution-ranking` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `institution-ranking` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ace352fd901532ce", "name": "Frontend route `league` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `league` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0d249e02a8ef8b3b", "name": "Frontend route `institution-league` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `institution-league` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-79a84e38c8572c48", "name": "Frontend route `explore/legacy` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `explore/legacy` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a48b5c1b7bfc7238", "name": "Frontend route `administrations` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `administrations` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-82302f97663ecc57", "name": "Frontend route `categories` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `categories` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-910b7a6bdd8bb763", "name": "Frontend route `categories/:id` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `categories/:id` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-96d8dba10fcbcf07", "name": "Frontend route `print/categories/:id` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `print/categories/:id` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e75060ec13abb8b3", "name": "Frontend route `contracts` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `contracts` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e5555441b5eb4d65", "name": "Frontend route `contracts/:id` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `contracts/:id` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-1a63d80a86d2bb8c", "name": "Frontend route `print/contracts/:id` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `print/contracts/:id` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-577b9f460a8ee042", "name": "Frontend route `network` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `network` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c43319e6b938ae78", "name": "Frontend route `workspace` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `workspace` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-977e6376ea32a7ef", "name": "Frontend route `watchlist` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `watchlist` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-82c01e48079753e8", "name": "Frontend route `investigation/:caseId` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `investigation/:caseId` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-647c2f27a6f63e98", "name": "Frontend route `investigation` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `investigation` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ca6213cc28a7cd8d", "name": "Frontend route `cola` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `cola` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-75c9f7e891a2d00d", "name": "Frontend route `aria` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `aria` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-560fb35116387d79", "name": "Frontend route `patterns` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `patterns` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-05a8329811b238d3", "name": "Frontend route `patterns/:code/constellation` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `patterns/:code/constellation` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e0562d2ca0babcb9", "name": "Frontend route `patterns/:code` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `patterns/:code` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6aecc44248d9dc0d", "name": "Frontend route `captura` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `captura` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-205618577beec291", "name": "Frontend route `relationships` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `relationships` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-bec6c4e761442fc3", "name": "Frontend route `intersection` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `intersection` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-bed99c57b88a8731", "name": "Frontend route `capture` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `capture` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-1d5861e438084511", "name": "Frontend route `clusters` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `clusters` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3be4bb8a5a52b5af", "name": "Frontend route `atlas/stories/:slug` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `atlas/stories/:slug` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-75da889ed5c64004", "name": "Frontend route `atlas` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `atlas` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c49bbfe57bb4060a", "name": "Frontend route `observatorio` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `observatorio` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-03df3e442488c4ba", "name": "Frontend route `observatory` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `observatory` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a84255e884b93388", "name": "Frontend route `spatial` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `spatial` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a21fa8a1e0e8dc2d", "name": "Frontend route `sectors` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `sectors` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-7fbf437ee8ea9543", "name": "Frontend route `sectors/:id` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `sectors/:id` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6293bb46478f4e2c", "name": "Frontend route `print/sectors/:id` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `print/sectors/:id` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-8d989af6cbfc579c", "name": "Frontend route `methodology` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `methodology` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-10f4a4a8629554cd", "name": "Frontend route `limitations` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `limitations` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-dbe3cfb95ea16ae6", "name": "Frontend route `cases` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `cases` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-1a3a9fe5e1c2014a", "name": "Frontend route `cases/:slug` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `cases/:slug` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-1e8551c2234e6390", "name": "Frontend route `print/cases/:slug` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `print/cases/:slug` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-06020bcd05a9132d", "name": "Frontend route `ground-truth` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `ground-truth` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-acf9f7546b74cddb", "name": "Frontend route `state-expenditure` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `state-expenditure` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4a093e00066c783b", "name": "Frontend route `state-expenditure/:code` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `state-expenditure/:code` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-919981016c9302eb", "name": "Frontend route `year-in-review` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `year-in-review` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-cb5ac80067415d84", "name": "Frontend route `year-in-review/:year` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `year-in-review/:year` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-76742324391bc8a0", "name": "Frontend route `institutions/health` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `institutions/health` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2f1bae3fae6e8961", "name": "Frontend route `institutions/scorecards` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `institutions/scorecards` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-247540eb71b9e8d4", "name": "Frontend route `institutions/fichas` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `institutions/fichas` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6f154103e7390d4b", "name": "Frontend route `price-intelligence` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `price-intelligence` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d5b976759d05b8f3", "name": "Frontend route `model-transparency` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `model-transparency` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2c4a5416043e856a", "name": "Frontend route `price-analysis` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `price-analysis` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6a94cb436d897bc8", "name": "Frontend route `model` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `model` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-1fcd80e6e237d73b", "name": "Frontend route `vendors/:id` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `vendors/:id` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3a4d2c53848a3ef2", "name": "Frontend route `institutions/:id` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `institutions/:id` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-db8942b4f41677c0", "name": "Frontend route `officials/:name` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `officials/:name` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-601f1d56f8e42aef", "name": "Frontend route `print/vendors/:id` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `print/vendors/:id` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a07386aedc02e9ea", "name": "Frontend route `print/institutions/:id` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `print/institutions/:id` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ec223e2c0d8b24c3", "name": "Frontend route `explore` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `explore` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-17bacb17f6efb788", "name": "Frontend route `settings` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `settings` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-98c357a3f972b5fd", "name": "Frontend route `money-flow` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `money-flow` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0129c55a157ddb58", "name": "Frontend route `networks` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `networks` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0e7780fe948cdf2a", "name": "Frontend route `institution-health` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `institution-health` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-be3d9b432e92e576", "name": "Frontend route `vendors/compare` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `vendors/compare` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b454653c21428176", "name": "Frontend route `procurement-calendar` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `procurement-calendar` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-8513536854a340f0", "name": "Frontend route `journalists` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `journalists` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2380e20fc60a9a21", "name": "Frontend route `stories/:slug` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `stories/:slug` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-de70570204fb4ce8", "name": "Frontend route `stories/the-pharmaceutical-cartel` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `stories/the-pharmaceutical-cartel` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-8193ce4c4c40e70c", "name": "Frontend route `stories/the-intermediary-industry` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `stories/the-intermediary-industry` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-957401f217aaf23f", "name": "Frontend route `stories/the-covid-year` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `stories/the-covid-year` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0a63537e69e0c08c", "name": "Frontend route `stories/the-ghost-army` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `stories/the-ghost-army` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f900e15ed065dde9", "name": "Frontend route `stories/the-big-price` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `stories/the-big-price` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f0cac7e5bc16f93d", "name": "Frontend route `stories/the-invisible-monopoly` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `stories/the-invisible-monopoly` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ea07df865b2d4d82", "name": "Frontend route `stories/the-illusion-of-competition` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `stories/the-illusion-of-competition` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c28e1fa03b84d8db", "name": "Frontend route `stories/institutional-capture` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `stories/institutional-capture` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-83e6224ad5de85d5", "name": "Frontend route `stories/the-tide-of-awards` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `stories/the-tide-of-awards` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-124a965ef20eccad", "name": "Frontend route `stories/the-decade-of-risk` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `stories/the-decade-of-risk` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3ad6b599fe52c8d2", "name": "Frontend route `stories/the-300k-threshold` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `stories/the-300k-threshold` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9155a036af732cd6", "name": "Frontend route `institutions/compare` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `institutions/compare` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-717086346123cd92", "name": "Frontend route `sector` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `sector` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3d0f17c81017732d", "name": "Frontend route `sector/:id` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `sector/:id` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-74d7ff4daf6b1f82", "name": "Frontend route `scandals` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `scandals` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-540c495144417c7d", "name": "Frontend route `collusion` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `collusion` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b875e7d8c27caef6", "name": "Frontend route `scorecards` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `scorecards` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a56712407209fa68", "name": "Frontend route `vendors` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `vendors` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-11e29cba9d7b0d1f", "name": "Frontend route `institutions` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `institutions` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f233aed5618d9433", "name": "Frontend route `investigations` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `investigations` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-89a41bafcfe7d723", "name": "Frontend route `for-journalists` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `for-journalists` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-99fd8191a024785f", "name": "Frontend route `newsroom` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `newsroom` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-fc926cf432cde6a3", "name": "Frontend route `stories` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `stories` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-28fb665485c97c4c", "name": "Frontend route `metodologia` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `metodologia` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-47c8ff4838f33a75", "name": "Frontend route `cases-library` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `cases-library` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-473d675327f56f3b", "name": "Frontend route `thread` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `thread` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-53640bc314e4bdb1", "name": "Frontend route `thread/:vendorId` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `thread/:vendorId` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ca2f1ffdf806e1a5", "name": "Frontend route `states` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `states` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-67099c8b3c745019", "name": "Frontend route `privacy` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `privacy` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-be29e4950307e1ba", "name": "Frontend route `terms` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `terms` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-bf6a211975faa5c4", "name": "FastAPI POST `submit_issue` without auth dependency \u2014 backend/api/routers/issues.py:80", "shortDescription": {"text": "FastAPI POST `submit_issue` without auth dependency \u2014 backend/api/routers/issues.py:80"}, "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-45a4fee28251f686", "name": "Dangling fetch: GET /api/v1/stats/exchange-rates (frontend/src/lib/exchangeRates.ts:26)", "shortDescription": {"text": "Dangling fetch: GET /api/v1/stats/exchange-rates (frontend/src/lib/exchangeRates.ts:26)"}, "fullDescription": {"text": "`frontend/src/lib/exchangeRates.ts:26` calls `GET /api/v1/stats/exchange-rates` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/stats/exchange-rates`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5baa8971ebe192a1", "name": "Unused endpoint: GET /", "shortDescription": {"text": "Unused endpoint: GET /"}, "fullDescription": {"text": "`backend/api/main.py` declares `GET /` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c0ac2ef565a5459b", "name": "Unused endpoint: GET /graph", "shortDescription": {"text": "Unused endpoint: GET /graph"}, "fullDescription": {"text": "`backend/api/routers/network.py` declares `GET /graph` 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-4b7059ade8b1105e", "name": "Unused endpoint: GET /co-bidders/{vendor_id}", "shortDescription": {"text": "Unused endpoint: GET /co-bidders/{vendor_id}"}, "fullDescription": {"text": "`backend/api/routers/network.py` declares `GET /co-bidders/{vendor_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-eeb14a9398390927", "name": "Unused endpoint: GET /institution-vendors/{institution_id}", "shortDescription": {"text": "Unused endpoint: GET /institution-vendors/{institution_id}"}, "fullDescription": {"text": "`backend/api/routers/network.py` declares `GET /institution-vendors/{institution_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-0b9977e10e0f8d11", "name": "Unused endpoint: GET /related-vendors/{vendor_id}", "shortDescription": {"text": "Unused endpoint: GET /related-vendors/{vendor_id}"}, "fullDescription": {"text": "`backend/api/routers/network.py` declares `GET /related-vendors/{vendor_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-b0498bdb13716a0b", "name": "Unused endpoint: GET /pattern-spotlight", "shortDescription": {"text": "Unused endpoint: GET /pattern-spotlight"}, "fullDescription": {"text": "`backend/api/routers/network.py` declares `GET /pattern-spotlight` 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-c3aac795a24eb16b", "name": "Unused endpoint: GET /communities", "shortDescription": {"text": "Unused endpoint: GET /communities"}, "fullDescription": {"text": "`backend/api/routers/network.py` declares `GET /communities` 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-b1b7b85f40935e13", "name": "Unused endpoint: GET /communities/index", "shortDescription": {"text": "Unused endpoint: GET /communities/index"}, "fullDescription": {"text": "`backend/api/routers/network.py` declares `GET /communities/index` 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-0e66fde548072ce5", "name": "Unused endpoint: GET /communities/{community_id}", "shortDescription": {"text": "Unused endpoint: GET /communities/{community_id}"}, "fullDescription": {"text": "`backend/api/routers/network.py` declares `GET /communities/{community_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-21847f417f72c516", "name": "Unused endpoint: GET /communities/{community_id}/graph", "shortDescription": {"text": "Unused endpoint: GET /communities/{community_id}/graph"}, "fullDescription": {"text": "`backend/api/routers/network.py` declares `GET /communities/{community_id}/graph` 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-4c7c8a5ef27da94b", "name": "Unused endpoint: GET /institution-capture", "shortDescription": {"text": "Unused endpoint: GET /institution-capture"}, "fullDescription": {"text": "`backend/api/routers/network.py` declares `GET /institution-capture` 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-5fdc1cb7b64df6cf", "name": "Unused endpoint: GET /institution-capture/{institution_id}/star", "shortDescription": {"text": "Unused endpoint: GET /institution-capture/{institution_id}/star"}, "fullDescription": {"text": "`backend/api/routers/network.py` declares `GET /institution-capture/{institution_id}/star` 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-e1b7bee247ffc801", "name": "Unused endpoint: GET /summary", "shortDescription": {"text": "Unused endpoint: GET /summary"}, "fullDescription": {"text": "`backend/api/routers/executive.py` declares `GET /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-2472a89d5f403d9d", "name": "Unused endpoint: GET /capture-leaders", "shortDescription": {"text": "Unused endpoint: GET /capture-leaders"}, "fullDescription": {"text": "`backend/api/routers/executive.py` declares `GET /capture-leaders` 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-6ff3410f57dca0e2", "name": "Unused endpoint: GET /dashboard-bundle", "shortDescription": {"text": "Unused endpoint: GET /dashboard-bundle"}, "fullDescription": {"text": "`backend/api/routers/executive.py` declares `GET /dashboard-bundle` 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-7a009b1a56794f45", "name": "Unused endpoint: POST /", "shortDescription": {"text": "Unused endpoint: POST /"}, "fullDescription": {"text": "`backend/api/routers/watchlist_folders.py` declares `POST /` 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-6f470541dff51e82", "name": "Unused endpoint: PUT /{folder_id}", "shortDescription": {"text": "Unused endpoint: PUT /{folder_id}"}, "fullDescription": {"text": "`backend/api/routers/watchlist_folders.py` declares `PUT /{folder_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-2dfbf5e3394408df", "name": "Unused endpoint: DELETE /{folder_id}", "shortDescription": {"text": "Unused endpoint: DELETE /{folder_id}"}, "fullDescription": {"text": "`backend/api/routers/watchlist_folders.py` declares `DELETE /{folder_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-50ff56c89fe22e53", "name": "Unused endpoint: GET /export/{folder_id}", "shortDescription": {"text": "Unused endpoint: GET /export/{folder_id}"}, "fullDescription": {"text": "`backend/api/routers/watchlist_folders.py` declares `GET /export/{folder_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-96a9a657802de17f", "name": "Unused endpoint: GET /institution-risk-factors", "shortDescription": {"text": "Unused endpoint: GET /institution-risk-factors"}, "fullDescription": {"text": "`backend/api/routers/analysis_vendor_sector.py` declares `GET /institution-risk-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-e11d77fe18c194dd", "name": "Unused endpoint: GET /value-concentration", "shortDescription": {"text": "Unused endpoint: GET /value-concentration"}, "fullDescription": {"text": "`backend/api/routers/analysis_vendor_sector.py` declares `GET /value-concentration` 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-f28e35d7b719ce7d", "name": "Unused endpoint: GET /flash-vendors", "shortDescription": {"text": "Unused endpoint: GET /flash-vendors"}, "fullDescription": {"text": "`backend/api/routers/analysis_vendor_sector.py` declares `GET /flash-vendors` 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-7d6a84371f6daf10", "name": "Unused endpoint: GET /industry-risk-clusters", "shortDescription": {"text": "Unused endpoint: GET /industry-risk-clusters"}, "fullDescription": {"text": "`backend/api/routers/analysis_vendor_sector.py` declares `GET /industry-risk-clusters` 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-992197be5dc4e4f6", "name": "Unused endpoint: GET /seasonal-risk", "shortDescription": {"text": "Unused endpoint: GET /seasonal-risk"}, "fullDescription": {"text": "`backend/api/routers/analysis_vendor_sector.py` declares `GET /seasonal-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-0acb1eb78ba9cfcf", "name": "Unused endpoint: GET /monthly-risk-summary", "shortDescription": {"text": "Unused endpoint: GET /monthly-risk-summary"}, "fullDescription": {"text": "`backend/api/routers/analysis_vendor_sector.py` declares `GET /monthly-risk-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-242899c8cd1d9708", "name": "Unused endpoint: GET /procedure-risk-comparison", "shortDescription": {"text": "Unused endpoint: GET /procedure-risk-comparison"}, "fullDescription": {"text": "`backend/api/routers/analysis_vendor_sector.py` declares `GET /procedure-risk-comparison` 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-94b21ca34066e845", "name": "Unused endpoint: GET /top-by-period", "shortDescription": {"text": "Unused endpoint: GET /top-by-period"}, "fullDescription": {"text": "`backend/api/routers/analysis_vendor_sector.py` declares `GET /top-by-period` 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-5a3c817ca0cd6219", "name": "Unused endpoint: GET /sector-growth", "shortDescription": {"text": "Unused endpoint: GET /sector-growth"}, "fullDescription": {"text": "`backend/api/routers/analysis_vendor_sector.py` declares `GET /sector-growth` 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-b961d424f0574e4e", "name": "Unused endpoint: GET /year-summary/{year}", "shortDescription": {"text": "Unused endpoint: GET /year-summary/{year}"}, "fullDescription": {"text": "`backend/api/routers/analysis_vendor_sector.py` declares `GET /year-summary/{year}` 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-f91f282218c9cda9", "name": "Unused endpoint: GET /movers", "shortDescription": {"text": "Unused endpoint: GET /movers"}, "fullDescription": {"text": "`backend/api/routers/officials.py` declares `GET /movers` 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-a12f85b46010cb53", "name": "Unused endpoint: GET /{name}", "shortDescription": {"text": "Unused endpoint: GET /{name}"}, "fullDescription": {"text": "`backend/api/routers/officials.py` declares `GET /{name}` 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-caa6dd4dd00b83e5", "name": "Unused endpoint: GET /institutions", "shortDescription": {"text": "Unused endpoint: GET /institutions"}, "fullDescription": {"text": "`backend/api/routers/scorecards.py` declares `GET /institutions` 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-cd999ecda552effa", "name": "Unused endpoint: GET /institutions/stats", "shortDescription": {"text": "Unused endpoint: GET /institutions/stats"}, "fullDescription": {"text": "`backend/api/routers/scorecards.py` declares `GET /institutions/stats` 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-d72d8177811710ca", "name": "Unused endpoint: GET /institutions/{institution_id}", "shortDescription": {"text": "Unused endpoint: GET /institutions/{institution_id}"}, "fullDescription": {"text": "`backend/api/routers/scorecards.py` declares `GET /institutions/{institution_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-6baa43c10ac94484", "name": "Unused endpoint: GET /vendors", "shortDescription": {"text": "Unused endpoint: GET /vendors"}, "fullDescription": {"text": "`backend/api/routers/scorecards.py` declares `GET /vendors` 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-9e4168cb661243e5", "name": "Unused endpoint: GET /vendors/{vendor_id}", "shortDescription": {"text": "Unused endpoint: GET /vendors/{vendor_id}"}, "fullDescription": {"text": "`backend/api/routers/scorecards.py` declares `GET /vendors/{vendor_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-2f4493751a9fb3f0", "name": "Unused endpoint: GET /vendor/{vendor_id}", "shortDescription": {"text": "Unused endpoint: GET /vendor/{vendor_id}"}, "fullDescription": {"text": "`backend/api/routers/reports.py` declares `GET /vendor/{vendor_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-ad2cad7b7c2fa841", "name": "Unused endpoint: GET /institution/{institution_id}", "shortDescription": {"text": "Unused endpoint: GET /institution/{institution_id}"}, "fullDescription": {"text": "`backend/api/routers/reports.py` declares `GET /institution/{institution_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-16b723d0138481e0", "name": "Unused endpoint: GET /sector/{sector_id}", "shortDescription": {"text": "Unused endpoint: GET /sector/{sector_id}"}, "fullDescription": {"text": "`backend/api/routers/reports.py` declares `GET /sector/{sector_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-dfe00256772eb012", "name": "Unused endpoint: GET /thematic/{theme}", "shortDescription": {"text": "Unused endpoint: GET /thematic/{theme}"}, "fullDescription": {"text": "`backend/api/routers/reports.py` declares `GET /thematic/{theme}` 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-e8fd4b864f850d3b", "name": "Unused endpoint: GET /patterns/co-bidding", "shortDescription": {"text": "Unused endpoint: GET /patterns/co-bidding"}, "fullDescription": {"text": "`backend/api/routers/analysis_patterns.py` declares `GET /patterns/co-bidding` 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-4f1e33fbc1596c7c", "name": "Unused endpoint: GET /patterns/concentration", "shortDescription": {"text": "Unused endpoint: GET /patterns/concentration"}, "fullDescription": {"text": "`backend/api/routers/analysis_patterns.py` declares `GET /patterns/concentration` 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-66b0ce7decf81f1b", "name": "Unused endpoint: GET /patterns/year-end", "shortDescription": {"text": "Unused endpoint: GET /patterns/year-end"}, "fullDescription": {"text": "`backend/api/routers/analysis_patterns.py` declares `GET /patterns/year-end` 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-6eb19a2be7a6629c", "name": "Unused endpoint: GET /leads", "shortDescription": {"text": "Unused endpoint: GET /leads"}, "fullDescription": {"text": "`backend/api/routers/analysis_patterns.py` declares `GET /leads` 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-aee2264e2c0eb4ba", "name": "Unused endpoint: GET /institution/{institution_id}/period-comparison", "shortDescription": {"text": "Unused endpoint: GET /institution/{institution_id}/period-comparison"}, "fullDescription": {"text": "`backend/api/routers/analysis_patterns.py` declares `GET /institution/{institution_id}/period-comparison` 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-3b30f4c0994a30b4", "name": "Unused endpoint: DELETE /", "shortDescription": {"text": "Unused endpoint: DELETE /"}, "fullDescription": {"text": "`backend/api/routers/feedback.py` declares `DELETE /` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9c768cf25ee8a57b", "name": "Unused endpoint: GET /administration-comparison", "shortDescription": {"text": "Unused endpoint: GET /administration-comparison"}, "fullDescription": {"text": "`backend/api/routers/stories.py` declares `GET /administration-comparison` 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-b563313ec545b7ee", "name": "Unused endpoint: GET /ghost-companies", "shortDescription": {"text": "Unused endpoint: GET /ghost-companies"}, "fullDescription": {"text": "`backend/api/routers/stories.py` declares `GET /ghost-companies` 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-724310db177bf140", "name": "Unused endpoint: GET /top-suspicious-vendors", "shortDescription": {"text": "Unused endpoint: GET /top-suspicious-vendors"}, "fullDescription": {"text": "`backend/api/routers/stories.py` declares `GET /top-suspicious-vendors` 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-b735a63d6ca8b777", "name": "Unused endpoint: GET /overpricing-patterns", "shortDescription": {"text": "Unused endpoint: GET /overpricing-patterns"}, "fullDescription": {"text": "`backend/api/routers/stories.py` declares `GET /overpricing-patterns` 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/18367"}, "properties": {"repository": "rodanaya/yangwenli", "repoUrl": "https://github.com/rodanaya/yangwenli", "branch": "main"}, "results": [{"ruleId": "scanner-252cc8f55056e45b", "level": "note", "message": {"text": "Possibly dead Python function: behavior_click_random"}, "properties": {"repobilityId": "2766e7b43edba8a9", "scanner": "scanner-primary", "fingerprint": "252cc8f55056e45b", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/automated_explore.py:285"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-808710f0376037a0", "level": "note", "message": {"text": "Possibly dead Python function: behavior_scroll"}, "properties": {"repobilityId": "e58da81170fa8181", "scanner": "scanner-primary", "fingerprint": "808710f0376037a0", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/automated_explore.py:301"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-4c91371863285dec", "level": "note", "message": {"text": "Possibly dead Python function: behavior_hover"}, "properties": {"repobilityId": "772b8b5d7c2bb178", "scanner": "scanner-primary", "fingerprint": "4c91371863285dec", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/automated_explore.py:318"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-c7a7c08b814eb140", "level": "note", "message": {"text": "Possibly dead Python function: behavior_press_key"}, "properties": {"repobilityId": "11817c4b5a167de3", "scanner": "scanner-primary", "fingerprint": "c7a7c08b814eb140", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/automated_explore.py:333"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-fbc3878e7f659291", "level": "note", "message": {"text": "Possibly dead Python function: behavior_type_search"}, "properties": {"repobilityId": "b2a201c41bea9b4a", "scanner": "scanner-primary", "fingerprint": "fbc3878e7f659291", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/automated_explore.py:342"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-4b82f4ecd01582e6", "level": "note", "message": {"text": "Possibly dead Python function: noop_decorator"}, "properties": {"repobilityId": "8912f8ea110ffe78", "scanner": "scanner-primary", "fingerprint": "4b82f4ecd01582e6", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/api/routers/sectors.py:42"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-d0e5648d701c1fca", "level": "note", "message": {"text": "Possibly dead Python function: refresh_efos"}, "properties": {"repobilityId": "3892c1ee78f67398", "scanner": "scanner-primary", "fingerprint": "d0e5648d701c1fca", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/scripts/centinela.py:174"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-ab9fb73d6a6cfe8d", "level": "note", "message": {"text": "Possibly dead Python function: refresh_sfp"}, "properties": {"repobilityId": "a0996a0ae0312edc", "scanner": "scanner-primary", "fingerprint": "ab9fb73d6a6cfe8d", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/scripts/centinela.py:209"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-776c8d686333ec9c", "level": "note", "message": {"text": "Possibly dead Python function: refresh_rupc"}, "properties": {"repobilityId": "5e17f20940497f52", "scanner": "scanner-primary", "fingerprint": "776c8d686333ec9c", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/scripts/centinela.py:255"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-6846427998664130", "level": "note", "message": {"text": "Possibly dead Python function: refresh_asf"}, "properties": {"repobilityId": "80fe1a8e4af47fe9", "scanner": "scanner-primary", "fingerprint": "6846427998664130", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/scripts/centinela.py:358"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3e1d2fa4ceefedd3", "level": "note", "message": {"text": "Possibly dead Python function: refresh_rfc"}, "properties": {"repobilityId": "a417e95e4ada88f0", "scanner": "scanner-primary", "fingerprint": "3e1d2fa4ceefedd3", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/scripts/centinela.py:527"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-b35a81d12692989c", "level": "note", "message": {"text": "Possibly dead Python function: compute_binary_stats"}, "properties": {"repobilityId": "eed41bad3158fb8a", "scanner": "scanner-primary", "fingerprint": "b35a81d12692989c", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/scripts/compute_factor_baselines.py:79"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-8b16473180db66f1", "level": "note", "message": {"text": "Possibly dead Python function: compute_continuous_stats"}, "properties": {"repobilityId": "11a5fcdb17f547be", "scanner": "scanner-primary", "fingerprint": "8b16473180db66f1", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/scripts/compute_factor_baselines.py:90"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-cf4176f757412059", "level": "note", "message": {"text": "Possibly dead Python function: objective"}, "properties": {"repobilityId": "b2ca8f96950eb149", "scanner": "scanner-primary", "fingerprint": "cf4176f757412059", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/scripts/calibrate_risk_model_v5.py:305"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-ac0e76646b5f4fff", "level": "note", "message": {"text": "Possibly dead Python function: get_summary_plot_base64"}, "properties": {"repobilityId": "b3158045e484c47f", "scanner": "scanner-primary", "fingerprint": "ac0e76646b5f4fff", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/scripts/investigation_shap_visualizations.py:527"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-b59979aadc7a63ea", "level": "note", "message": {"text": "Possibly dead Python function: get_importance_plot_base64"}, "properties": {"repobilityId": "c3bcab05e206b996", "scanner": "scanner-primary", "fingerprint": "b59979aadc7a63ea", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/scripts/investigation_shap_visualizations.py:532"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-0a0f4cfaca4c3b4e", "level": "note", "message": {"text": "File has no detected symbols: backend/scripts/_tmp_scan.py"}, "properties": {"repobilityId": "8f060bef976c959b", "scanner": "scanner-primary", "fingerprint": "0a0f4cfaca4c3b4e", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code-candidate"]}}, {"ruleId": "scanner-ad23dfc4070d4030", "level": "note", "message": {"text": "File has no detected symbols: backend/scripts/_tmp_scan2.py"}, "properties": {"repobilityId": "d0f67a6ad47c7652", "scanner": "scanner-primary", "fingerprint": "ad23dfc4070d4030", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code-candidate"]}}, {"ruleId": "scanner-9f063392a3b363be", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/CommandPalette.tsx:206"}, "properties": {"repobilityId": "6c9536975aad41c4", "scanner": "scanner-primary", "fingerprint": "9f063392a3b363be", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-11f2c2889baa8558", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/DossierCreateDialog.tsx:108"}, "properties": {"repobilityId": "ed4006232a03566a", "scanner": "scanner-primary", "fingerprint": "11f2c2889baa8558", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ba6fd31f297ff12a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/RiskExplainTooltip.tsx:69"}, "properties": {"repobilityId": "72c4dfca7107983c", "scanner": "scanner-primary", "fingerprint": "ba6fd31f297ff12a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-aca846855ab44c05", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/AddToDossierButton.tsx:147"}, "properties": {"repobilityId": "6af480006c2082b0", "scanner": "scanner-primary", "fingerprint": "aca846855ab44c05", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ea8850af051a1149", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/VendorContractBreakdown.tsx:93"}, "properties": {"repobilityId": "673c4e2bfbe55826", "scanner": "scanner-primary", "fingerprint": "ea8850af051a1149", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-96c6e4f2ad74fe15", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/SharedContractsModal.tsx:136"}, "properties": {"repobilityId": "c27daea9c79162f2", "scanner": "scanner-primary", "fingerprint": "96c6e4f2ad74fe15", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4516b20a4eaab92f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/FolderSidebar.tsx:91"}, "properties": {"repobilityId": "1b63ba2d52e91081", "scanner": "scanner-primary", "fingerprint": "4516b20a4eaab92f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a77229c4f0222ab2", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/DossierAddItemDialog.tsx:109"}, "properties": {"repobilityId": "eacbba38e7262709", "scanner": "scanner-primary", "fingerprint": "a77229c4f0222ab2", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d13e060624d2a39b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/RedThreadPanel.tsx:86"}, "properties": {"repobilityId": "170a6ef0fa2ef0b3", "scanner": "scanner-primary", "fingerprint": "d13e060624d2a39b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b78e439cbe0a25a0", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/DossierCard.tsx:70"}, "properties": {"repobilityId": "e468cfb9c432583d", "scanner": "scanner-primary", "fingerprint": "b78e439cbe0a25a0", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c7a53fdfa4812294", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/layout/MobileBottomNav.tsx:53"}, "properties": {"repobilityId": "f529250d6e3f198c", "scanner": "scanner-primary", "fingerprint": "c7a53fdfa4812294", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-db381dbc5f679741", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/layout/Sidebar.tsx:269"}, "properties": {"repobilityId": "4fbed5d8e51dbbe4", "scanner": "scanner-primary", "fingerprint": "db381dbc5f679741", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-28f8afc0ac4f5a7c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/layout/Header.tsx:259"}, "properties": {"repobilityId": "f31794ffb87a08e8", "scanner": "scanner-primary", "fingerprint": "28f8afc0ac4f5a7c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-51d807c4935d140c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/cases/IndexBlocks.tsx:401"}, "properties": {"repobilityId": "4b458bb3902e00e9", "scanner": "scanner-primary", "fingerprint": "51d807c4935d140c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1a86416c19b8b0e6", "level": "note", "message": {"text": "React Flow edge with `label=` but no project-wide edge-label CSS override \u2014 frontend/src/components/charts/TemporalRiskChart.tsx:325"}, "properties": {"repobilityId": "f6ea607f5f8c2edb", "scanner": "scanner-primary", "fingerprint": "1a86416c19b8b0e6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.edge-label.no-bg"]}}, {"ruleId": "scanner-505c6d50a5c53338", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/charts/SectorRiskHeatmap.tsx:189"}, "properties": {"repobilityId": "ee3d4fec9f5c56b3", "scanner": "scanner-primary", "fingerprint": "505c6d50a5c53338", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-79e1148860f08bf2", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/charts/VendorFingerprintChart.tsx:444"}, "properties": {"repobilityId": "cfc0ff4ffc442cd4", "scanner": "scanner-primary", "fingerprint": "79e1148860f08bf2", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d1e54e0d2fe838af", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/charts/AdminSectorHeatmap.tsx:189"}, "properties": {"repobilityId": "bf1dcec0f6a467f6", "scanner": "scanner-primary", "fingerprint": "d1e54e0d2fe838af", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a8934501a18cc4b7", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/charts/CommunityBubbles.tsx:153"}, "properties": {"repobilityId": "18b871d7c37547b9", "scanner": "scanner-primary", "fingerprint": "a8934501a18cc4b7", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-2a2b0d3a4c315a17", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/charts/editorial/DotStrip.tsx:111"}, "properties": {"repobilityId": "fd9ab6ab43ffc43c", "scanner": "scanner-primary", "fingerprint": "2a2b0d3a4c315a17", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4c503aedc6881bdf", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/sector/SectorReferenceSections.tsx:360"}, "properties": {"repobilityId": "2c7d13154f21eb42", "scanner": "scanner-primary", "fingerprint": "4c503aedc6881bdf", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-fb447c2dec31be70", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/aria/RowExpand.tsx:109"}, "properties": {"repobilityId": "50b9d10db3e097ee", "scanner": "scanner-primary", "fingerprint": "fb447c2dec31be70", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ac24b51fc875ba93", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/aria/MesetaRug.tsx:66"}, "properties": {"repobilityId": "d232d4eee3693577", "scanner": "scanner-primary", "fingerprint": "ac24b51fc875ba93", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-af3602788b0e0d35", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/aria/FunnelBand.tsx:139"}, "properties": {"repobilityId": "1eddde85b1b61481", "scanner": "scanner-primary", "fingerprint": "af3602788b0e0d35", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e1d807f8a9c6ca4d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/ui/StatRow.tsx:70"}, "properties": {"repobilityId": "a35ae718a2ef3546", "scanner": "scanner-primary", "fingerprint": "e1d807f8a9c6ca4d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-fbca0f65fd438e20", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/ui/select.tsx:101"}, "properties": {"repobilityId": "73595385889189b7", "scanner": "scanner-primary", "fingerprint": "fbca0f65fd438e20", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-408479f504e4d365", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/administrations/AdminSummaryCard.tsx:233"}, "properties": {"repobilityId": "1432733abf83e1fc", "scanner": "scanner-primary", "fingerprint": "408479f504e4d365", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-413f8bff2a372091", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/administrations/ProcurementGradeCard.tsx:99"}, "properties": {"repobilityId": "e4d4fba39f5e09b2", "scanner": "scanner-primary", "fingerprint": "413f8bff2a372091", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-501a1fb31e6280c4", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/executive/TopCategoriesChart.tsx:228"}, "properties": {"repobilityId": "6c13f66d8aaf6f8f", "scanner": "scanner-primary", "fingerprint": "501a1fb31e6280c4", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-8dbd8dd24f67ccc7", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/atlas/AtlasLeftRail.tsx:257"}, "properties": {"repobilityId": "3017507426c0d3d8", "scanner": "scanner-primary", "fingerprint": "8dbd8dd24f67ccc7", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-73811c896cea7d7b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/atlas/AtlasMasthead.tsx:62"}, "properties": {"repobilityId": "cdaddeb07d86184e", "scanner": "scanner-primary", "fingerprint": "73811c896cea7d7b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-8517d93c9ccb03a9", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/atlas/AtlasRightPanel.tsx:199"}, "properties": {"repobilityId": "b0cc512909f78d1e", "scanner": "scanner-primary", "fingerprint": "8517d93c9ccb03a9", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1b21626bdaf09e94", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/atlas/AtlasVendorDrawer.tsx:181"}, "properties": {"repobilityId": "3a8a1ced20c90177", "scanner": "scanner-primary", "fingerprint": "1b21626bdaf09e94", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e8cd327377e8e06e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/collusion/PairDossierRow.tsx:118"}, "properties": {"repobilityId": "0f2af86b67a676b9", "scanner": "scanner-primary", "fingerprint": "e8cd327377e8e06e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e214c0c48f447acc", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/capture/CaptureField.tsx:221"}, "properties": {"repobilityId": "9f657940ae813e60", "scanner": "scanner-primary", "fingerprint": "e214c0c48f447acc", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-329f405993b061b5", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/stories/CrimeCard.tsx:98"}, "properties": {"repobilityId": "b8b116336776a621", "scanner": "scanner-primary", "fingerprint": "329f405993b061b5", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-228029564308763b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/category/CategoryDossierSections.tsx:340"}, "properties": {"repobilityId": "7c20918810dc9fe0", "scanner": "scanner-primary", "fingerprint": "228029564308763b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-62950a57c24e71b1", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/dossier/DossierSectionHeader.tsx:46"}, "properties": {"repobilityId": "eec3218d3f972e6c", "scanner": "scanner-primary", "fingerprint": "62950a57c24e71b1", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-2499466e9ee364d6", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/explore/SearchOverlay.tsx:256"}, "properties": {"repobilityId": "f664c672eb8cf20e", "scanner": "scanner-primary", "fingerprint": "2499466e9ee364d6", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e7a16deb6116c1e5", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/explore/ExploreCanvas.tsx:1846"}, "properties": {"repobilityId": "c2d4d9823e62f091", "scanner": "scanner-primary", "fingerprint": "e7a16deb6116c1e5", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d56d08d59e3dcaf8", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/sectors/ExposureLedger.tsx:217"}, "properties": {"repobilityId": "d326cad4ad8ecb37", "scanner": "scanner-primary", "fingerprint": "d56d08d59e3dcaf8", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4136e21c71187437", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/sectors/SelfCaptureBand.tsx:96"}, "properties": {"repobilityId": "a1516d80ead204b2", "scanner": "scanner-primary", "fingerprint": "4136e21c71187437", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-834ccec38dd09064", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/sectors/ConfoundPlate.tsx:308"}, "properties": {"repobilityId": "84e5c1f4a3aada5b", "scanner": "scanner-primary", "fingerprint": "834ccec38dd09064", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c6118f09dc7b3e6d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/sectors/SectorHoverDossier.tsx:63"}, "properties": {"repobilityId": "1c7d6beec995b62a", "scanner": "scanner-primary", "fingerprint": "c6118f09dc7b3e6d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b88ef90a6879f9cd", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/pages/CategoryProfile.tsx:440"}, "properties": {"repobilityId": "916df2f1c6021a9e", "scanner": "scanner-primary", "fingerprint": "b88ef90a6879f9cd", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-14bc26daf3f6c456", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/pages/YearInReview.tsx:182"}, "properties": {"repobilityId": "22587ee0cdad0c01", "scanner": "scanner-primary", "fingerprint": "14bc26daf3f6c456", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f3948eeb3d9e3d39", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/pages/VendorCompare.tsx:248"}, "properties": {"repobilityId": "64995ee1a9e8757f", "scanner": "scanner-primary", "fingerprint": "f3948eeb3d9e3d39", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-dac7b6088f7dfadb", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/pages/ReportCard.tsx:869"}, "properties": {"repobilityId": "c98f84d5d99c0df8", "scanner": "scanner-primary", "fingerprint": "dac7b6088f7dfadb", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ff1f30d493aa90b4", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/pages/InstitutionProfile.tsx:512"}, "properties": {"repobilityId": "ed56c721f957cb06", "scanner": "scanner-primary", "fingerprint": "ff1f30d493aa90b4", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d7c5701100c3aea8", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/pages/Methodology.tsx:1210"}, "properties": {"repobilityId": "e57c1b004c2aa264", "scanner": "scanner-primary", "fingerprint": "d7c5701100c3aea8", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-66190c47883a99e7", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/pages/RedesKnownDossier.tsx:170"}, "properties": {"repobilityId": "0d946f7c0c88e32b", "scanner": "scanner-primary", "fingerprint": "66190c47883a99e7", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ba3b18de41282090", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/pages/PriceIntelligence.tsx:279"}, "properties": {"repobilityId": "93a14dce47efc38a", "scanner": "scanner-primary", "fingerprint": "ba3b18de41282090", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a2cbe9d38ccf9c66", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 frontend/src/pages/PriceIntelligence.tsx:1713"}, "properties": {"repobilityId": "492b24360a7d448d", "scanner": "scanner-primary", "fingerprint": "a2cbe9d38ccf9c66", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-a6cd06d3816db1a9", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/pages/CorruptionClusters.tsx:576"}, "properties": {"repobilityId": "d23d0fddcb7c96f3", "scanner": "scanner-primary", "fingerprint": "a6cd06d3816db1a9", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-7ec2fefee38714ef", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/pages/ContractDetail.tsx:202"}, "properties": {"repobilityId": "ddee0441ac2e1a68", "scanner": "scanner-primary", "fingerprint": "7ec2fefee38714ef", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-dbb5da615decb186", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/pages/Contracts.tsx:983"}, "properties": {"repobilityId": "c3abe7f63dd03407", "scanner": "scanner-primary", "fingerprint": "dbb5da615decb186", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-2aa970114b58398d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/pages/PatternDossier.tsx:767"}, "properties": {"repobilityId": "19371407340848c3", "scanner": "scanner-primary", "fingerprint": "2aa970114b58398d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-7a4b28c5bb34afd1", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/pages/Executive.tsx:1676"}, "properties": {"repobilityId": "e882d044616892e0", "scanner": "scanner-primary", "fingerprint": "7a4b28c5bb34afd1", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0512e57e9747036e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/pages/Administrations.tsx:909"}, "properties": {"repobilityId": "a79a13ca02901963", "scanner": "scanner-primary", "fingerprint": "0512e57e9747036e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-9356b5a42fc42812", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/pages/Settings.tsx:1115"}, "properties": {"repobilityId": "509320c7c09eb590", "scanner": "scanner-primary", "fingerprint": "9356b5a42fc42812", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ffac5e2f9e7e46d4", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/pages/Atlas.tsx:2265"}, "properties": {"repobilityId": "6356e65f8b92f478", "scanner": "scanner-primary", "fingerprint": "ffac5e2f9e7e46d4", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-94d5fcf6105c32d0", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/pages/InstitutionLeague.tsx:287"}, "properties": {"repobilityId": "eaf29308693cfeb4", "scanner": "scanner-primary", "fingerprint": "94d5fcf6105c32d0", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-860bb0bf2b66c33f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/pages/InstitutionCompare.tsx:952"}, "properties": {"repobilityId": "e63c824222943342", "scanner": "scanner-primary", "fingerprint": "860bb0bf2b66c33f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e346a2000246ff7c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/pages/explore/TrendsTab.tsx:831"}, "properties": {"repobilityId": "67f3f050a4bb93dc", "scanner": "scanner-primary", "fingerprint": "e346a2000246ff7c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-8d8c2c291038a85a", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 frontend/src/pages/explore/VendorsTab.tsx:570"}, "properties": {"repobilityId": "ebcbad84c04996c0", "scanner": "scanner-primary", "fingerprint": "8d8c2c291038a85a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-ab8ed6fe1d914e78", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 frontend/src/pages/explore/TimeSeriesPanel.tsx:6"}, "properties": {"repobilityId": "eb557f78487771eb", "scanner": "scanner-primary", "fingerprint": "ab8ed6fe1d914e78", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-00b9062738d16694", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/pages/explore/ResultsTable.tsx:549"}, "properties": {"repobilityId": "0e22b50902edffb1", "scanner": "scanner-primary", "fingerprint": "00b9062738d16694", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-7d8530ed2c398af8", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/run_visual_review.js:25"}, "properties": {"repobilityId": "adadd768bbc31367", "scanner": "scanner-primary", "fingerprint": "7d8530ed2c398af8", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-bbf1183a0363fc2a", "level": "warning", "message": {"text": "Privileged port 30 in use"}, "properties": {"repobilityId": "54f172e7d16fc662", "scanner": "scanner-primary", "fingerprint": "bbf1183a0363fc2a", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/scripts/backup_db.sh"}, "region": {"startLine": 1}}}]}, {"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-a7f39cdd5fa21931", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: node:22-alpine"}, "properties": {"repobilityId": "a9c9b2fb7015a1dd", "scanner": "scanner-primary", "fingerprint": "a7f39cdd5fa21931", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "frontend/Dockerfile"}, "region": {"startLine": 3}}}]}, {"ruleId": "scanner-b048d166901fd868", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: nginx:alpine"}, "properties": {"repobilityId": "0cefd8b72c12f238", "scanner": "scanner-primary", "fingerprint": "b048d166901fd868", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "frontend/Dockerfile"}, "region": {"startLine": 20}}}]}, {"ruleId": "scanner-8cd20d539467d2c5", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: python:3.11-slim"}, "properties": {"repobilityId": "2f08304f923b6f1f", "scanner": "scanner-primary", "fingerprint": "8cd20d539467d2c5", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/Dockerfile"}, "region": {"startLine": 3}}}]}, {"ruleId": "scanner-8cd20d539467d2c5", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: python:3.11-slim"}, "properties": {"repobilityId": "68011fd9d70eaa7b", "scanner": "scanner-primary", "fingerprint": "8cd20d539467d2c5", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/Dockerfile"}, "region": {"startLine": 21}}}]}, {"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-1140b4590d44ec89", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in frontend/scripts/lint-tokens.mjs:20"}, "properties": {"repobilityId": "9c70b95d10621f40", "scanner": "scanner-primary", "fingerprint": "1140b4590d44ec89", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "frontend/scripts/lint-tokens.mjs"}, "region": {"startLine": 20}}}]}, {"ruleId": "scanner-5a7181d566afa6e2", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in frontend/src/components/InstitutionBadge.tsx:62"}, "properties": {"repobilityId": "6cd600dc8b11a161", "scanner": "scanner-primary", "fingerprint": "5a7181d566afa6e2", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "frontend/src/components/InstitutionBadge.tsx"}, "region": {"startLine": 62}}}]}, {"ruleId": "scanner-a0baecde726855cc", "level": "note", "message": {"text": "Insecure pattern 'document_write' in frontend/src/components/ReportModal.tsx:178"}, "properties": {"repobilityId": "4c75b46d0c8cce1b", "scanner": "scanner-primary", "fingerprint": "a0baecde726855cc", "layer": "security", "severity": "low", "confidence": 1.0, "tags": ["owasp", "document_write"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "frontend/src/components/ReportModal.tsx"}, "region": {"startLine": 178}}}]}, {"ruleId": "scanner-d9cbbf2a9da034a7", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in frontend/src/pages/PriceIntelligence.tsx:1713"}, "properties": {"repobilityId": "399b5e69ce30b9a9", "scanner": "scanner-primary", "fingerprint": "d9cbbf2a9da034a7", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "frontend/src/pages/PriceIntelligence.tsx"}, "region": {"startLine": 1713}}}]}, {"ruleId": "scanner-b9fa3eeeb0d83f4d", "level": "error", "message": {"text": "Insecure pattern 'tls_verify_false' in backend/scripts/enrich_vendor_names_qqw.py:115"}, "properties": {"repobilityId": "f19bb8850c4bc005", "scanner": "scanner-primary", "fingerprint": "b9fa3eeeb0d83f4d", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["owasp", "tls_verify_false"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/scripts/enrich_vendor_names_qqw.py"}, "region": {"startLine": 115}}}]}, {"ruleId": "scanner-0a40b8468778aeb6", "level": "error", "message": {"text": "Insecure pattern 'tls_verify_false' in backend/scripts/load_sat_efos.py:102"}, "properties": {"repobilityId": "75d6978ec6b3906d", "scanner": "scanner-primary", "fingerprint": "0a40b8468778aeb6", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["owasp", "tls_verify_false"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/scripts/load_sat_efos.py"}, "region": {"startLine": 102}}}]}, {"ruleId": "scanner-c3b11bbaf1bdd472", "level": "error", "message": {"text": "Insecure pattern 'tls_verify_false' in backend/scripts/archive/load_asf_mdb.py:64"}, "properties": {"repobilityId": "d3fd954d30367244", "scanner": "scanner-primary", "fingerprint": "c3b11bbaf1bdd472", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["owasp", "tls_verify_false"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/scripts/archive/load_asf_mdb.py"}, "region": {"startLine": 64}}}]}, {"ruleId": "scanner-65aa740cba4a4a73", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "549a2de1ac0c3fa9", "scanner": "scanner-primary", "fingerprint": "65aa740cba4a4a73", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/codeql.yml"}, "region": {"startLine": 29}}}]}, {"ruleId": "scanner-65aa740cba4a4a73", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "a4f0ab9334543546", "scanner": "scanner-primary", "fingerprint": "65aa740cba4a4a73", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/codeql.yml"}, "region": {"startLine": 35}}}]}, {"ruleId": "scanner-65aa740cba4a4a73", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "a5721e15e3a54aa2", "scanner": "scanner-primary", "fingerprint": "65aa740cba4a4a73", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/codeql.yml"}, "region": {"startLine": 38}}}]}, {"ruleId": "scanner-6628dee3f22bf9ab", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "614983997b3af430", "scanner": "scanner-primary", "fingerprint": "6628dee3f22bf9ab", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/bundle-size.yml"}, "region": {"startLine": 24}}}]}, {"ruleId": "scanner-ad4f2b4575fd028a", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "2fa50eab3f32809a", "scanner": "scanner-primary", "fingerprint": "ad4f2b4575fd028a", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/frontend-tests.yml"}, "region": {"startLine": 22}}}]}, {"ruleId": "scanner-ad4f2b4575fd028a", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "6a19c18ee4ccb80b", "scanner": "scanner-primary", "fingerprint": "ad4f2b4575fd028a", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/frontend-tests.yml"}, "region": {"startLine": 49}}}]}, {"ruleId": "scanner-ad4f2b4575fd028a", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "2fa50eab3f32809a", "scanner": "scanner-primary", "fingerprint": "ad4f2b4575fd028a", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/frontend-tests.yml"}, "region": {"startLine": 62}}}]}, {"ruleId": "scanner-28c4a04bd807da0c", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "247bb11baae34b61", "scanner": "scanner-primary", "fingerprint": "28c4a04bd807da0c", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/deploy.yml"}, "region": {"startLine": 15}}}]}, {"ruleId": "scanner-28c4a04bd807da0c", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "1e168e1594cfcd53", "scanner": "scanner-primary", "fingerprint": "28c4a04bd807da0c", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/deploy.yml"}, "region": {"startLine": 43}}}]}, {"ruleId": "scanner-cf95dca2d4eb0c34", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "e6be7d9507caaa46", "scanner": "scanner-primary", "fingerprint": "cf95dca2d4eb0c34", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/backend-tests.yml"}, "region": {"startLine": 22}}}]}, {"ruleId": "scanner-cf95dca2d4eb0c34", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "980510eb5baaac79", "scanner": "scanner-primary", "fingerprint": "cf95dca2d4eb0c34", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/backend-tests.yml"}, "region": {"startLine": 47}}}]}, {"ruleId": "scanner-cf95dca2d4eb0c34", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "e6be7d9507caaa46", "scanner": "scanner-primary", "fingerprint": "cf95dca2d4eb0c34", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/backend-tests.yml"}, "region": {"startLine": 60}}}]}, {"ruleId": "scanner-c0840d07864313e3", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "f851cceb6e13bcb0", "scanner": "scanner-primary", "fingerprint": "c0840d07864313e3", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/lighthouse.yml"}, "region": {"startLine": 35}}}]}, {"ruleId": "scanner-d047e32fc7582a42", "level": "note", "message": {"text": "Very large file: frontend/src/api/client.ts (3786 lines)"}, "properties": {"repobilityId": "8cb108e869d3e9f0", "scanner": "scanner-primary", "fingerprint": "d047e32fc7582a42", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-98e6788a10db33ca", "level": "note", "message": {"text": "Very large file: frontend/src/api/types.ts (2872 lines)"}, "properties": {"repobilityId": "9a5c3723577f0225", "scanner": "scanner-primary", "fingerprint": "98e6788a10db33ca", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-80fa619e4a6d3a10", "level": "note", "message": {"text": "Very large file: frontend/src/components/charts/ConcentrationConstellation.tsx (1092 lines)"}, "properties": {"repobilityId": "f1c71b8e4db24be6", "scanner": "scanner-primary", "fingerprint": "80fa619e4a6d3a10", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-a27f33dd36de87d8", "level": "note", "message": {"text": "Very large file: frontend/src/components/atlas/ObservatoryScatter.tsx (1041 lines)"}, "properties": {"repobilityId": "695aab4685255c3c", "scanner": "scanner-primary", "fingerprint": "a27f33dd36de87d8", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-e95db969a3c58793", "level": "note", "message": {"text": "Very large file: frontend/src/components/atlas/AtlasZoomLayer.tsx (1274 lines)"}, "properties": {"repobilityId": "034804ad62340b83", "scanner": "scanner-primary", "fingerprint": "e95db969a3c58793", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-8c9506a54d92f2c5", "level": "note", "message": {"text": "Very large file: frontend/src/components/stories/InlineCharts.tsx (3359 lines)"}, "properties": {"repobilityId": "4ff2a20617111cde", "scanner": "scanner-primary", "fingerprint": "8c9506a54d92f2c5", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-81c466c839731a77", "level": "note", "message": {"text": "Very large file: frontend/src/components/explore/ExploreCanvas.tsx (5603 lines)"}, "properties": {"repobilityId": "1c7f662657275055", "scanner": "scanner-primary", "fingerprint": "81c466c839731a77", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-2c93902fd3c8b912", "level": "note", "message": {"text": "Very large file: frontend/src/lib/story-content.ts (5919 lines)"}, "properties": {"repobilityId": "81e8eeb52f111797", "scanner": "scanner-primary", "fingerprint": "2c93902fd3c8b912", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-3b8e3aebeab5eb72", "level": "note", "message": {"text": "Very large file: frontend/src/pages/CategoryProfile.tsx (2041 lines)"}, "properties": {"repobilityId": "4827dc4ad5bd9ddf", "scanner": "scanner-primary", "fingerprint": "3b8e3aebeab5eb72", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-6bd539f7db70460d", "level": "note", "message": {"text": "Very large file: frontend/src/pages/YearInReview.tsx (1663 lines)"}, "properties": {"repobilityId": "35e9249576a80aa2", "scanner": "scanner-primary", "fingerprint": "6bd539f7db70460d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-18291d297758d3f7", "level": "note", "message": {"text": "Very large file: frontend/src/pages/InstitutionProfile.tsx (2354 lines)"}, "properties": {"repobilityId": "2da382defbabb772", "scanner": "scanner-primary", "fingerprint": "18291d297758d3f7", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-4b70e780aebe6668", "level": "note", "message": {"text": "Very large file: frontend/src/pages/StoryNarrative.tsx (2390 lines)"}, "properties": {"repobilityId": "593dbb88475e584d", "scanner": "scanner-primary", "fingerprint": "4b70e780aebe6668", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-22282a3dc55915de", "level": "note", "message": {"text": "Very large file: frontend/src/pages/Sectors.tsx (1163 lines)"}, "properties": {"repobilityId": "5caa51479d4059a7", "scanner": "scanner-primary", "fingerprint": "22282a3dc55915de", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-eab2f1e99be6e13d", "level": "note", "message": {"text": "Very large file: frontend/src/pages/Methodology.tsx (1700 lines)"}, "properties": {"repobilityId": "9319687e96ec0fbf", "scanner": "scanner-primary", "fingerprint": "eab2f1e99be6e13d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-3df2c21f7d1b477c", "level": "note", "message": {"text": "Very large file: frontend/src/pages/RedesKnownDossier.tsx (1416 lines)"}, "properties": {"repobilityId": "cb1af847ce5347c1", "scanner": "scanner-primary", "fingerprint": "3df2c21f7d1b477c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-8327603bff38df48", "level": "note", "message": {"text": "Very large file: frontend/src/pages/PriceIntelligence.tsx (2166 lines)"}, "properties": {"repobilityId": "b43613948c30f4a4", "scanner": "scanner-primary", "fingerprint": "8327603bff38df48", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-ff1c9e89fcff9ebf", "level": "note", "message": {"text": "Very large file: frontend/src/pages/CorruptionClusters.tsx (1345 lines)"}, "properties": {"repobilityId": "34cf6cfbc3ae5633", "scanner": "scanner-primary", "fingerprint": "ff1c9e89fcff9ebf", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-10f2ec0b6c230148", "level": "note", "message": {"text": "Very large file: frontend/src/pages/CaseDetail.tsx (2585 lines)"}, "properties": {"repobilityId": "6dd41ddb0f78db3e", "scanner": "scanner-primary", "fingerprint": "10f2ec0b6c230148", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-bbd42c0f3608d713", "level": "note", "message": {"text": "Very large file: frontend/src/pages/Contracts.tsx (1731 lines)"}, "properties": {"repobilityId": "628d34f135285d8d", "scanner": "scanner-primary", "fingerprint": "bbd42c0f3608d713", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-53ef6d7a6c1aab98", "level": "note", "message": {"text": "Very large file: frontend/src/pages/PatternDossier.tsx (984 lines)"}, "properties": {"repobilityId": "531dcb6573b6cc3c", "scanner": "scanner-primary", "fingerprint": "53ef6d7a6c1aab98", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-e31c7db136db6b62", "level": "note", "message": {"text": "Very large file: frontend/src/pages/Executive.tsx (2050 lines)"}, "properties": {"repobilityId": "359dab4b1528fade", "scanner": "scanner-primary", "fingerprint": "e31c7db136db6b62", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-ba48a6196c21e321", "level": "note", "message": {"text": "Very large file: frontend/src/pages/InvestigationCaseDetail.tsx (1730 lines)"}, "properties": {"repobilityId": "d44f20d0564dbb81", "scanner": "scanner-primary", "fingerprint": "ba48a6196c21e321", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-8a5e3dea75e654f9", "level": "note", "message": {"text": "Very large file: frontend/src/pages/Administrations.tsx (1303 lines)"}, "properties": {"repobilityId": "583508773c17f87d", "scanner": "scanner-primary", "fingerprint": "8a5e3dea75e654f9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-7cf0c58614cea5fc", "level": "note", "message": {"text": "Very large file: frontend/src/pages/Atlas.tsx (2653 lines)"}, "properties": {"repobilityId": "c046bfd9dc1cf97f", "scanner": "scanner-primary", "fingerprint": "7cf0c58614cea5fc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-5c5e4736cc45217f", "level": "note", "message": {"text": "Very large file: frontend/src/pages/InstitutionLeague.tsx (1882 lines)"}, "properties": {"repobilityId": "6aa7ac38c746cd2f", "scanner": "scanner-primary", "fingerprint": "5c5e4736cc45217f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-bcaa8c6cac5a94a1", "level": "note", "message": {"text": "Very large file: frontend/src/pages/SectorProfile.tsx (2069 lines)"}, "properties": {"repobilityId": "16d6cd97e78cf7e0", "scanner": "scanner-primary", "fingerprint": "bcaa8c6cac5a94a1", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-9f7dafd64353a386", "level": "note", "message": {"text": "Very large file: backend/mcp_server.py (1369 lines)"}, "properties": {"repobilityId": "00355d172454bf24", "scanner": "scanner-primary", "fingerprint": "9f7dafd64353a386", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-0e6643220a3603b6", "level": "note", "message": {"text": "Very large file: backend/api/routers/network.py (1880 lines)"}, "properties": {"repobilityId": "190fd072b2efebcc", "scanner": "scanner-primary", "fingerprint": "0e6643220a3603b6", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-db360fb5b06edb54", "level": "note", "message": {"text": "Very large file: backend/api/routers/analysis_vendor_sector.py (1314 lines)"}, "properties": {"repobilityId": "b4c3e64690349a7f", "scanner": "scanner-primary", "fingerprint": "db360fb5b06edb54", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-a12b95105949d327", "level": "note", "message": {"text": "Very large file: backend/api/routers/stories.py (1379 lines)"}, "properties": {"repobilityId": "1613b807079a8b7f", "scanner": "scanner-primary", "fingerprint": "a12b95105949d327", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-13892916718ae9f3", "level": "note", "message": {"text": "Very large file: backend/api/routers/vendors.py (3187 lines)"}, "properties": {"repobilityId": "380668e2d1d0ec60", "scanner": "scanner-primary", "fingerprint": "13892916718ae9f3", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-531b1d4e83e387b9", "level": "note", "message": {"text": "Very large file: backend/api/routers/analysis.py (4999 lines)"}, "properties": {"repobilityId": "9976ccf10c834c0b", "scanner": "scanner-primary", "fingerprint": "531b1d4e83e387b9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-1ad84aa3cebb9b38", "level": "note", "message": {"text": "Very large file: backend/api/routers/institutions.py (2410 lines)"}, "properties": {"repobilityId": "af887608b6a3a19e", "scanner": "scanner-primary", "fingerprint": "1ad84aa3cebb9b38", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-a2be657ce27a9ecc", "level": "note", "message": {"text": "Very large file: backend/api/routers/sectors.py (1654 lines)"}, "properties": {"repobilityId": "91230b62c890235e", "scanner": "scanner-primary", "fingerprint": "a2be657ce27a9ecc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-f5f90cc059c240aa", "level": "note", "message": {"text": "Very large file: backend/scripts/etl_create_schema.py (1715 lines)"}, "properties": {"repobilityId": "06aa3a39a0664214", "scanner": "scanner-primary", "fingerprint": "f5f90cc059c240aa", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-5d48b4aa31044ca0", "level": "note", "message": {"text": "Very large file: backend/scripts/compute_subcategory_stats.py (1448 lines)"}, "properties": {"repobilityId": "630fc3fdb6828c37", "scanner": "scanner-primary", "fingerprint": "5d48b4aa31044ca0", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-ff476d0a088c0b70", "level": "note", "message": {"text": "Very large file: backend/scripts/aria_pipeline.py (1292 lines)"}, "properties": {"repobilityId": "d8d3e09d6c6323c7", "scanner": "scanner-primary", "fingerprint": "ff476d0a088c0b70", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-7aa2c9848cbc1e6f", "level": "note", "message": {"text": "Very large file: backend/scripts/etl_pipeline.py (1605 lines)"}, "properties": {"repobilityId": "5a4eab0f520a4599", "scanner": "scanner-primary", "fingerprint": "7aa2c9848cbc1e6f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-18ac8baf01417f1c", "level": "note", "message": {"text": "Very large file: backend/hyperion/atlas/rules.py (1227 lines)"}, "properties": {"repobilityId": "db5e71c25d9f5aa2", "scanner": "scanner-primary", "fingerprint": "18ac8baf01417f1c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-6893a6c8b0861585", "level": "warning", "message": {"text": "Very low test-to-source ratio"}, "properties": {"repobilityId": "54a7de3f06314bf0", "scanner": "scanner-primary", "fingerprint": "6893a6c8b0861585", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["tests", "coverage"]}}, {"ruleId": "scanner-58ac4bdd8d2e5578", "level": "note", "message": {"text": "53 TODO/FIXME markers"}, "properties": {"repobilityId": "4b38c118003e07d2", "scanner": "scanner-primary", "fingerprint": "58ac4bdd8d2e5578", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["maintenance"]}}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "2ceaf5481b1d5365", "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": "50110cf1d350724c", "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": "6a480a404cea5613", "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": "fe713589aecd923a", "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": "e1485ba5677d291e", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-0d23d984364364f8", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: frontend/.mcp.json"}, "properties": {"repobilityId": "3471173d533a12f5", "scanner": "scanner-primary", "fingerprint": "0d23d984364364f8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "mcp_config"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "frontend/.mcp.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-a1f8c2bdcfb10ecc", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/vite.config.ts:12"}, "properties": {"repobilityId": "fafb7eab26db3309", "scanner": "scanner-primary", "fingerprint": "a1f8c2bdcfb10ecc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-808524d8c4e6f594", "level": "none", "message": {"text": "Commented-code block (6 lines) in frontend/scripts/lint-tokens.mjs:23"}, "properties": {"repobilityId": "1680572e9867bedb", "scanner": "scanner-primary", "fingerprint": "808524d8c4e6f594", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-563998a4599d89c4", "level": "none", "message": {"text": "Commented-code block (6 lines) in frontend/src/main.tsx:65"}, "properties": {"repobilityId": "7ea9543f3ce0db05", "scanner": "scanner-primary", "fingerprint": "563998a4599d89c4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ef08cfe49d26bb60", "level": "note", "message": {"text": "Legacy-named symbol `ExploreLegacy` in frontend/src/App.tsx:34"}, "properties": {"repobilityId": "c03c303c4ec96162", "scanner": "scanner-primary", "fingerprint": "ef08cfe49d26bb60", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-47a57246d016775b", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/App.tsx:44"}, "properties": {"repobilityId": "476153c2bb47f67a", "scanner": "scanner-primary", "fingerprint": "47a57246d016775b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-eb4a1753947e5191", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/__tests__/utils.test.ts:72"}, "properties": {"repobilityId": "08e0f2f88373bee5", "scanner": "scanner-primary", "fingerprint": "eb4a1753947e5191", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7fe27e2324e9b0f9", "level": "none", "message": {"text": "Commented-code block (8 lines) in frontend/src/i18n/index.ts:143"}, "properties": {"repobilityId": "170270a5b53948db", "scanner": "scanner-primary", "fingerprint": "7fe27e2324e9b0f9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4ab88f5a962254d1", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/api/client.ts:210"}, "properties": {"repobilityId": "14aa3e149a7aa445", "scanner": "scanner-primary", "fingerprint": "4ab88f5a962254d1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3af7c7910e4d84a2", "level": "none", "message": {"text": "Commented-code block (9 lines) in frontend/src/components/EntityProfileDrawer.tsx:527"}, "properties": {"repobilityId": "022f2c8af7beb522", "scanner": "scanner-primary", "fingerprint": "3af7c7910e4d84a2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5ef68400731df05e", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/components/ErrorBoundary.tsx:75"}, "properties": {"repobilityId": "2231ff565b5e3f66", "scanner": "scanner-primary", "fingerprint": "5ef68400731df05e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8f3b754bff82acfe", "level": "none", "message": {"text": "Commented-code block (6 lines) in frontend/src/components/layout/Sidebar.tsx:61"}, "properties": {"repobilityId": "f3795f30db5f6f86", "scanner": "scanner-primary", "fingerprint": "8f3b754bff82acfe", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-59fdba042f0fc528", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/components/layout/EditorialPageShell.tsx:12"}, "properties": {"repobilityId": "f0c1860948089c64", "scanner": "scanner-primary", "fingerprint": "59fdba042f0fc528", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8e46cb82bddeae30", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/components/layout/Header.tsx:144"}, "properties": {"repobilityId": "ecb98a4bec301583", "scanner": "scanner-primary", "fingerprint": "8e46cb82bddeae30", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3187aeb6fe00ea4c", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/components/charts/cluster-glyphs.tsx:41"}, "properties": {"repobilityId": "29e826193a8d5a5d", "scanner": "scanner-primary", "fingerprint": "3187aeb6fe00ea4c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d6a00ffe04210150", "level": "none", "message": {"text": "Commented-code block (8 lines) in frontend/src/components/charts/ProcedureBreakdown.tsx:21"}, "properties": {"repobilityId": "5b83843ea9a55023", "scanner": "scanner-primary", "fingerprint": "d6a00ffe04210150", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7631f31b04326515", "level": "none", "message": {"text": "Commented-code block (6 lines) in frontend/src/components/charts/ConcentrationConstellation.tsx:104"}, "properties": {"repobilityId": "0604bd024bfc75ed", "scanner": "scanner-primary", "fingerprint": "7631f31b04326515", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a1f7ef81263b07c2", "level": "none", "message": {"text": "Commented-code block (6 lines) in frontend/src/components/network/CommunityForceGraph.tsx:127"}, "properties": {"repobilityId": "6d0606c49e4851eb", "scanner": "scanner-primary", "fingerprint": "a1f7ef81263b07c2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-094e0a5f219b9a2e", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/components/widgets/AriaMemoPanel.tsx:207"}, "properties": {"repobilityId": "4cc65f0db7f7e3bf", "scanner": "scanner-primary", "fingerprint": "094e0a5f219b9a2e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-97427c14375a6490", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/components/institution/InstitutionCommandPanel.tsx:157"}, "properties": {"repobilityId": "9a44891bc029c034", "scanner": "scanner-primary", "fingerprint": "97427c14375a6490", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0a00ce77297b8334", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/components/executive/LensVisualization.tsx:102"}, "properties": {"repobilityId": "d5430d226ffba18c", "scanner": "scanner-primary", "fingerprint": "0a00ce77297b8334", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-14144a5107069519", "level": "none", "message": {"text": "Commented-code block (11 lines) in frontend/src/components/atlas/VendorFile.tsx:374"}, "properties": {"repobilityId": "c62cdfa8ae595e83", "scanner": "scanner-primary", "fingerprint": "14144a5107069519", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2db7c4ae3810e0eb", "level": "note", "message": {"text": "Legacy-named symbol `rubli_atlas_saved_view_v1` in frontend/src/components/atlas/AtlasLeftRail.tsx:141"}, "properties": {"repobilityId": "bc0d58ae1aafcd7f", "scanner": "scanner-primary", "fingerprint": "2db7c4ae3810e0eb", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-95829ac232b0fdc6", "level": "none", "message": {"text": "Commented-code block (10 lines) in frontend/src/components/atlas/AtlasRightPanel.tsx:336"}, "properties": {"repobilityId": "2799806c0513eb2d", "scanner": "scanner-primary", "fingerprint": "95829ac232b0fdc6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9ef77cfd919701ad", "level": "none", "message": {"text": "Commented-code block (7 lines) in frontend/src/components/atlas/CanvasConstellation.tsx:82"}, "properties": {"repobilityId": "36e8bec2de87cd26", "scanner": "scanner-primary", "fingerprint": "9ef77cfd919701ad", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-72ebaea40b80141a", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/components/atlas/ClusterFloatingCard.tsx:84"}, "properties": {"repobilityId": "ac1391748b9b93c9", "scanner": "scanner-primary", "fingerprint": "72ebaea40b80141a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9944067de93bcb57", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/components/atlas/SpotlightCard.tsx:189"}, "properties": {"repobilityId": "7424f552ade62561", "scanner": "scanner-primary", "fingerprint": "9944067de93bcb57", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bfc3c0d0428fc334", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/components/atlas/ObservatoryScatter.tsx:58"}, "properties": {"repobilityId": "5a1ff1030f8c5079", "scanner": "scanner-primary", "fingerprint": "bfc3c0d0428fc334", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-187fd061d7ea81b1", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/components/atlas/AtlasZoomLayer.tsx:48"}, "properties": {"repobilityId": "7d2e6bd2fa7dd982", "scanner": "scanner-primary", "fingerprint": "187fd061d7ea81b1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7a4689fdbf88a4f9", "level": "none", "message": {"text": "Commented-code block (6 lines) in frontend/src/components/atlas/AtlasContext.tsx:23"}, "properties": {"repobilityId": "4eb0ceda4068c414", "scanner": "scanner-primary", "fingerprint": "7a4689fdbf88a4f9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-15690b74ceed2c9f", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/components/stories/DataPullquote.tsx:7"}, "properties": {"repobilityId": "254f97ebd8a51a58", "scanner": "scanner-primary", "fingerprint": "15690b74ceed2c9f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-adb837bdd242b8c1", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/components/stories/InlineCharts.tsx:32"}, "properties": {"repobilityId": "cddf0330b7d60882", "scanner": "scanner-primary", "fingerprint": "adb837bdd242b8c1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5dbab319e5cfeccc", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/components/category/CategoryDossierSections.tsx:413"}, "properties": {"repobilityId": "c71036d8440a85c0", "scanner": "scanner-primary", "fingerprint": "5dbab319e5cfeccc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-24f7ad949475b157", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/components/dossier/command/primitives.tsx:172"}, "properties": {"repobilityId": "075129c978f0943e", "scanner": "scanner-primary", "fingerprint": "24f7ad949475b157", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7b9efe5ecb7e78aa", "level": "note", "message": {"text": "Legacy-named symbol `rubli_explore_recent_v1` in frontend/src/components/explore/SearchOverlay.tsx:29"}, "properties": {"repobilityId": "e230d42836aeabbd", "scanner": "scanner-primary", "fingerprint": "7b9efe5ecb7e78aa", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-6ede798444b25795", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/components/explore/SearchOverlay.tsx:68"}, "properties": {"repobilityId": "210254617f340a1f", "scanner": "scanner-primary", "fingerprint": "6ede798444b25795", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cef1b4627df7b084", "level": "none", "message": {"text": "Commented-code block (6 lines) in frontend/src/components/explore/ExploreCanvas.tsx:69"}, "properties": {"repobilityId": "1e6c613391de68b9", "scanner": "scanner-primary", "fingerprint": "cef1b4627df7b084", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-393b05d335850b65", "level": "note", "message": {"text": "Legacy-named symbol `rubli_explore_pin_v1` in frontend/src/components/explore/ExploreState.tsx:50"}, "properties": {"repobilityId": "21feeadbbb91c28d", "scanner": "scanner-primary", "fingerprint": "393b05d335850b65", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-81799585cf264fc4", "level": "none", "message": {"text": "Commented-code block (7 lines) in frontend/src/components/explore/ExploreState.tsx:118"}, "properties": {"repobilityId": "ca8f147f912a5483", "scanner": "scanner-primary", "fingerprint": "81799585cf264fc4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b9eab87ae0bec452", "level": "none", "message": {"text": "Commented-code block (7 lines) in frontend/src/components/sectors/SectorTreemap.tsx:447"}, "properties": {"repobilityId": "c01aa0082de49334", "scanner": "scanner-primary", "fingerprint": "b9eab87ae0bec452", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-35e8c65037be568a", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/components/sectors/CategoryCaptureDumbbell.tsx:316"}, "properties": {"repobilityId": "d2143ece353fb563", "scanner": "scanner-primary", "fingerprint": "35e8c65037be568a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-66d6f4658a5913cc", "level": "none", "message": {"text": "Commented-code block (8 lines) in frontend/src/components/sectors/RiskSpendBeeswarm.tsx:94"}, "properties": {"repobilityId": "f49ad70f0644a6ce", "scanner": "scanner-primary", "fingerprint": "66d6f4658a5913cc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-60fb0ea11de1f3bf", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/components/editorial/BenchmarkRow.tsx:23"}, "properties": {"repobilityId": "bcba662d45ee527b", "scanner": "scanner-primary", "fingerprint": "60fb0ea11de1f3bf", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6756849262d3fc4a", "level": "none", "message": {"text": "Commented-code block (6 lines) in frontend/src/lib/atlas-stories.ts:81"}, "properties": {"repobilityId": "d82d35da6efb13d3", "scanner": "scanner-primary", "fingerprint": "6756849262d3fc4a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f46ab15550e63315", "level": "none", "message": {"text": "Commented-code block (7 lines) in frontend/src/lib/utils.ts:315"}, "properties": {"repobilityId": "e94996345d46b898", "scanner": "scanner-primary", "fingerprint": "f46ab15550e63315", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8e1254c9428520b5", "level": "none", "message": {"text": "Commented-code block (6 lines) in frontend/src/lib/constants.ts:23"}, "properties": {"repobilityId": "08eb9f1af444123a", "scanner": "scanner-primary", "fingerprint": "8e1254c9428520b5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-49613b341729cb7c", "level": "none", "message": {"text": "Commented-code block (8 lines) in frontend/src/lib/tiers.ts:40"}, "properties": {"repobilityId": "aba1fb839768a9a3", "scanner": "scanner-primary", "fingerprint": "49613b341729cb7c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cd47acaab0919fd2", "level": "none", "message": {"text": "Commented-code block (7 lines) in frontend/src/lib/nav/wayfinding.tsx:184"}, "properties": {"repobilityId": "239f50ab09e12556", "scanner": "scanner-primary", "fingerprint": "cd47acaab0919fd2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2944397a916a37ac", "level": "none", "message": {"text": "Commented-code block (7 lines) in frontend/src/lib/atlas/useAtlasLOD.ts:38"}, "properties": {"repobilityId": "a88381b42e67573b", "scanner": "scanner-primary", "fingerprint": "2944397a916a37ac", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9cab544e847234be", "level": "note", "message": {"text": "Legacy-named symbol `rubli_explore_visited_v1` in frontend/src/pages/SpatialMap.tsx:31"}, "properties": {"repobilityId": "48ae32eebc2f4b90", "scanner": "scanner-primary", "fingerprint": "9cab544e847234be", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-37bf22bbac50eb7d", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/pages/ReportCard.tsx:99"}, "properties": {"repobilityId": "5311cc170bcf8baf", "scanner": "scanner-primary", "fingerprint": "37bf22bbac50eb7d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-af96d1975ea71f10", "level": "none", "message": {"text": "Commented-code block (7 lines) in frontend/src/pages/CategoryDossier.tsx:297"}, "properties": {"repobilityId": "9e4af112367c5aae", "scanner": "scanner-primary", "fingerprint": "af96d1975ea71f10", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-100bf05d50daa5c8", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/pages/ModelTransparency.tsx:19"}, "properties": {"repobilityId": "bf93003233e93f9d", "scanner": "scanner-primary", "fingerprint": "100bf05d50daa5c8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-362670d983597a0b", "level": "none", "message": {"text": "Commented-code block (7 lines) in frontend/src/pages/StoryNarrative.tsx:120"}, "properties": {"repobilityId": "9fca863672b3e253", "scanner": "scanner-primary", "fingerprint": "362670d983597a0b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a71defdd320a5586", "level": "note", "message": {"text": "Legacy-named symbol `rubli_explore_recent_v1` in frontend/src/pages/VendorProfile.tsx:178"}, "properties": {"repobilityId": "de0e64a643c7d887", "scanner": "scanner-primary", "fingerprint": "a71defdd320a5586", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-c0d31cfabf1e0907", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/pages/Methodology.tsx:503"}, "properties": {"repobilityId": "57fdecb8f5310286", "scanner": "scanner-primary", "fingerprint": "c0d31cfabf1e0907", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c59a7f2e0b879f91", "level": "note", "message": {"text": "Legacy-named symbol `rubli_trama_pins_v1` in frontend/src/pages/RedesKnownDossier.tsx:45"}, "properties": {"repobilityId": "b327a578a547b815", "scanner": "scanner-primary", "fingerprint": "c59a7f2e0b879f91", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-e6fc56df6af51e58", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/pages/PriceIntelligence.tsx:1308"}, "properties": {"repobilityId": "764d353419015d74", "scanner": "scanner-primary", "fingerprint": "e6fc56df6af51e58", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f93e15f0579b87da", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/pages/CaseDetail.tsx:191"}, "properties": {"repobilityId": "30b2a8b2776121ab", "scanner": "scanner-primary", "fingerprint": "f93e15f0579b87da", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2327cc0fdbfc0ce2", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/pages/PatternDossier.tsx:129"}, "properties": {"repobilityId": "7f415ac3f15cf30c", "scanner": "scanner-primary", "fingerprint": "2327cc0fdbfc0ce2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b12448320be64cac", "level": "none", "message": {"text": "Commented-code block (7 lines) in frontend/src/pages/Executive.tsx:86"}, "properties": {"repobilityId": "0031c64b6460a578", "scanner": "scanner-primary", "fingerprint": "b12448320be64cac", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-25c1164904d72394", "level": "none", "message": {"text": "Commented-code block (6 lines) in frontend/src/pages/Privacy.tsx:4"}, "properties": {"repobilityId": "f01e2bb645f1bfbd", "scanner": "scanner-primary", "fingerprint": "25c1164904d72394", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-41665a4d4118a09b", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/pages/InvestigationCaseDetail.tsx:72"}, "properties": {"repobilityId": "b29751eec3bb0997", "scanner": "scanner-primary", "fingerprint": "41665a4d4118a09b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7c7c8128752472cd", "level": "none", "message": {"text": "Commented-code block (8 lines) in frontend/src/pages/Administrations.tsx:511"}, "properties": {"repobilityId": "c41e669e54cc828f", "scanner": "scanner-primary", "fingerprint": "7c7c8128752472cd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e80e35f17a576e8b", "level": "none", "message": {"text": "Commented-code block (7 lines) in frontend/src/pages/VendorDossier.tsx:66"}, "properties": {"repobilityId": "d8ab94509a471eb0", "scanner": "scanner-primary", "fingerprint": "e80e35f17a576e8b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ae2f08cbc802aa6f", "level": "note", "message": {"text": "Legacy-named symbol `rubli_atlas_visited_v1` in frontend/src/pages/Atlas.tsx:5"}, "properties": {"repobilityId": "d108e61fa0725266", "scanner": "scanner-primary", "fingerprint": "ae2f08cbc802aa6f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-b88cb077ed827f7c", "level": "none", "message": {"text": "Commented-code block (6 lines) in frontend/src/pages/Atlas.tsx:71"}, "properties": {"repobilityId": "8a953a89342d1974", "scanner": "scanner-primary", "fingerprint": "b88cb077ed827f7c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8b334ab73416e3e2", "level": "none", "message": {"text": "Commented-code block (8 lines) in frontend/src/pages/InstitutionLeague.tsx:756"}, "properties": {"repobilityId": "41a238359c15ad8e", "scanner": "scanner-primary", "fingerprint": "8b334ab73416e3e2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-345a319bb3c3bcc3", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/pages/InstitutionCompare.tsx:744"}, "properties": {"repobilityId": "1579c891c85fb51e", "scanner": "scanner-primary", "fingerprint": "345a319bb3c3bcc3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-53e8e1dee8edc993", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/pages/AriaQueue.tsx:176"}, "properties": {"repobilityId": "31987198e0ffeb40", "scanner": "scanner-primary", "fingerprint": "53e8e1dee8edc993", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-41b76f958144eb64", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/pages/SectorProfile.tsx:917"}, "properties": {"repobilityId": "e38241ff6614d813", "scanner": "scanner-primary", "fingerprint": "41b76f958144eb64", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9e303c318cc22baf", "level": "note", "message": {"text": "Legacy-named symbol `rubli_wayfinding_scroll_v1` in frontend/src/hooks/useWayfindingScroll.ts:29"}, "properties": {"repobilityId": "236ff3bae39023c9", "scanner": "scanner-primary", "fingerprint": "9e303c318cc22baf", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-036718bb73d7989a", "level": "note", "message": {"text": "Legacy-named symbol `rest_v1` in frontend/src/hooks/useWikipediaImage.ts:7"}, "properties": {"repobilityId": "299e9b3d46512a7e", "scanner": "scanner-primary", "fingerprint": "036718bb73d7989a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-b6620f256f240280", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/hooks/useWikipediaImage.ts:22"}, "properties": {"repobilityId": "9d02c91920843258", "scanner": "scanner-primary", "fingerprint": "b6620f256f240280", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3d6b66eae3d462d8", "level": "none", "message": {"text": "Commented-code block (8 lines) in frontend/src/hooks/useAnimations.tsx:187"}, "properties": {"repobilityId": "189c9e228c0b3839", "scanner": "scanner-primary", "fingerprint": "3d6b66eae3d462d8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8f04fad829b2f064", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/hooks/__tests__/useAnimations.test.tsx:78"}, "properties": {"repobilityId": "8acad5d2e59bbd4c", "scanner": "scanner-primary", "fingerprint": "8f04fad829b2f064", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2fc6e06e557093b8", "level": "none", "message": {"text": "Commented-code block (5 lines) in scripts/automated_explore.py:137"}, "properties": {"repobilityId": "adbcbd6e3f5addc9", "scanner": "scanner-primary", "fingerprint": "2fc6e06e557093b8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-590289dac3fe4b1b", "level": "none", "message": {"text": "Commented-code block (6 lines) in backend/tests/test_z2_vendor_pool_flags.py:123"}, "properties": {"repobilityId": "2e528b1a14c79409", "scanner": "scanner-primary", "fingerprint": "590289dac3fe4b1b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0feaca9712e38a71", "level": "note", "message": {"text": "Legacy-named symbol `r_old` in backend/tests/test_subnational.py:61"}, "properties": {"repobilityId": "47ae8f30ef620dd9", "scanner": "scanner-primary", "fingerprint": "0feaca9712e38a71", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-8c364b2d6bb96728", "level": "none", "message": {"text": "Commented-code block (6 lines) in backend/api/main.py:159"}, "properties": {"repobilityId": "45a44c8163f2aa1b", "scanner": "scanner-primary", "fingerprint": "8c364b2d6bb96728", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7af6822564db1a8f", "level": "note", "message": {"text": "Legacy-named symbol `network_trama_index_v1` in backend/api/routers/network.py:814"}, "properties": {"repobilityId": "97f82275965b13e3", "scanner": "scanner-primary", "fingerprint": "7af6822564db1a8f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-fe5b81531dd85bd9", "level": "none", "message": {"text": "Commented-code block (7 lines) in backend/api/routers/analysis_vendor_sector.py:590"}, "properties": {"repobilityId": "eda1f10ebb0d148b", "scanner": "scanner-primary", "fingerprint": "fe5b81531dd85bd9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-59d4c18193771eb7", "level": "note", "message": {"text": "Legacy-named symbol `_get_last_backup` in backend/api/routers/health.py:114"}, "properties": {"repobilityId": "5695facf4b92d393", "scanner": "scanner-primary", "fingerprint": "59d4c18193771eb7", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-5493664cfcd5979c", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/api/routers/vendors.py:485"}, "properties": {"repobilityId": "2d9312f939196340", "scanner": "scanner-primary", "fingerprint": "5493664cfcd5979c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a48869f75d41c041", "level": "none", "message": {"text": "Commented-code block (7 lines) in backend/api/routers/atlas.py:68"}, "properties": {"repobilityId": "6441765a39f3f89b", "scanner": "scanner-primary", "fingerprint": "a48869f75d41c041", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6c9a2a25fff97828", "level": "note", "message": {"text": "Legacy-named symbol `capture_landscape_v1` in backend/api/routers/capture.py:346"}, "properties": {"repobilityId": "00afba8ae5b2dd83", "scanner": "scanner-primary", "fingerprint": "6c9a2a25fff97828", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-a131e619b697865e", "level": "none", "message": {"text": "Commented-code block (12 lines) in backend/api/routers/capture.py:31"}, "properties": {"repobilityId": "2bf988978152f76f", "scanner": "scanner-primary", "fingerprint": "a131e619b697865e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c5681100df7f6c0e", "level": "note", "message": {"text": "Legacy-named symbol `RUBLI_v1` in backend/api/routers/cases.py:101"}, "properties": {"repobilityId": "8a641075cafa538f", "scanner": "scanner-primary", "fingerprint": "c5681100df7f6c0e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-76b1374f0dad2928", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/api/routers/intersection.py:55"}, "properties": {"repobilityId": "89a7dddf426a1434", "scanner": "scanner-primary", "fingerprint": "76b1374f0dad2928", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-292ade9d4dce4824", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/api/routers/export.py:50"}, "properties": {"repobilityId": "e5f772730f936539", "scanner": "scanner-primary", "fingerprint": "292ade9d4dce4824", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-735f3c4bfeb772f8", "level": "note", "message": {"text": "Legacy-named symbol `RUBLI_v1` in backend/api/routers/categories.py:223"}, "properties": {"repobilityId": "528199a63fe26120", "scanner": "scanner-primary", "fingerprint": "735f3c4bfeb772f8", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-2bc5bf8f6b7dee5e", "level": "none", "message": {"text": "Commented-code block (7 lines) in backend/api/routers/categories.py:217"}, "properties": {"repobilityId": "f6fb55a031cd2131", "scanner": "scanner-primary", "fingerprint": "2bc5bf8f6b7dee5e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e9052bf86454d7b4", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/api/routers/analysis.py:2462"}, "properties": {"repobilityId": "c6fd78718e09fc2e", "scanner": "scanner-primary", "fingerprint": "e9052bf86454d7b4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-76cca0e10f3c8bc5", "level": "note", "message": {"text": "Legacy-named symbol `model_copy` in backend/api/routers/institutions.py:1565"}, "properties": {"repobilityId": "7eec4902174976dd", "scanner": "scanner-primary", "fingerprint": "76cca0e10f3c8bc5", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-13b4b0d163ca6b78", "level": "none", "message": {"text": "Commented-code block (10 lines) in backend/api/routers/institutions.py:1188"}, "properties": {"repobilityId": "b61a218c63036e81", "scanner": "scanner-primary", "fingerprint": "13b4b0d163ca6b78", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-39cade1ef75a1a75", "level": "note", "message": {"text": "Legacy-named symbol `sectors_treemap_v1` in backend/api/routers/sectors.py:269"}, "properties": {"repobilityId": "0c35a188504daf8d", "scanner": "scanner-primary", "fingerprint": "39cade1ef75a1a75", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-8e627602171477cd", "level": "none", "message": {"text": "Commented-code block (6 lines) in backend/scripts/create_deploy_db.py:212"}, "properties": {"repobilityId": "bd862728a3422197", "scanner": "scanner-primary", "fingerprint": "8e627602171477cd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2ad06175b064c90a", "level": "note", "message": {"text": "Legacy-named symbol `old_backup` in backend/scripts/backup_database.py:71"}, "properties": {"repobilityId": "31f0f7ba999566fa", "scanner": "scanner-primary", "fingerprint": "2ad06175b064c90a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-cc61b60d8533c3eb", "level": "note", "message": {"text": "Legacy-named symbol `network_trama_index_v1` in backend/scripts/_precompute_network_trama.py:7"}, "properties": {"repobilityId": "587ab4999243f838", "scanner": "scanner-primary", "fingerprint": "cc61b60d8533c3eb", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-84e13edfde301cac", "level": "note", "message": {"text": "Legacy-named symbol `match_corporate_groups_v2` in backend/scripts/match_corporate_groups_v2.py:12"}, "properties": {"repobilityId": "28711c1cedc83d87", "scanner": "scanner-primary", "fingerprint": "84e13edfde301cac", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-6ddcbac0abb4dfcb", "level": "note", "message": {"text": "Legacy-named symbol `decentralized_legacy` in backend/scripts/etl_create_schema.py:1018"}, "properties": {"repobilityId": "d99d370a0a87c972", "scanner": "scanner-primary", "fingerprint": "6ddcbac0abb4dfcb", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-2799d11747e04b2e", "level": "none", "message": {"text": "Commented-code block (13 lines) in backend/scripts/_aria_cases_721_723.py:12"}, "properties": {"repobilityId": "ced4f77450a8191e", "scanner": "scanner-primary", "fingerprint": "2799d11747e04b2e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f43e857fb5526dba", "level": "none", "message": {"text": "Commented-code block (12 lines) in backend/scripts/_aria_cases_662_670.py:18"}, "properties": {"repobilityId": "2a1e3076a556551d", "scanner": "scanner-primary", "fingerprint": "f43e857fb5526dba", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0aeba63d44b790f5", "level": "none", "message": {"text": "Commented-code block (11 lines) in backend/scripts/_aria_cases_636_643.py:17"}, "properties": {"repobilityId": "3d08ea3000b49031", "scanner": "scanner-primary", "fingerprint": "0aeba63d44b790f5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-483846c2e88d37cb", "level": "note", "message": {"text": "Legacy-named symbol `days_old` in backend/scripts/centinela.py:134"}, "properties": {"repobilityId": "8d07b480d12ce114", "scanner": "scanner-primary", "fingerprint": "483846c2e88d37cb", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-eb4a016644254a92", "level": "none", "message": {"text": "Commented-code block (12 lines) in backend/scripts/_aria_cases_628_631.py:13"}, "properties": {"repobilityId": "d6964db84370c724", "scanner": "scanner-primary", "fingerprint": "eb4a016644254a92", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ef2aef808d7076e4", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/scripts/calculate_vendor_risk.py:432"}, "properties": {"repobilityId": "7ff1ec4e86e4e508", "scanner": "scanner-primary", "fingerprint": "ef2aef808d7076e4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-54d22d17a2950d03", "level": "none", "message": {"text": "Commented-code block (14 lines) in backend/scripts/_aria_cases_632_635.py:13"}, "properties": {"repobilityId": "7012e04eddf9b920", "scanner": "scanner-primary", "fingerprint": "54d22d17a2950d03", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-74f2321f2c492e22", "level": "none", "message": {"text": "Commented-code block (15 lines) in backend/scripts/_aria_cases_705_707.py:12"}, "properties": {"repobilityId": "360102a51867b3a8", "scanner": "scanner-primary", "fingerprint": "74f2321f2c492e22", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-dc1a9b6bc96d9de4", "level": "none", "message": {"text": "Commented-code block (9 lines) in backend/scripts/_aria_cases_613_616.py:13"}, "properties": {"repobilityId": "41f2c2e44e4c4077", "scanner": "scanner-primary", "fingerprint": "dc1a9b6bc96d9de4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8494cc3afbb45d5e", "level": "none", "message": {"text": "Commented-code block (17 lines) in backend/scripts/_aria_cases_724_726.py:12"}, "properties": {"repobilityId": "c7cd5d773252fc42", "scanner": "scanner-primary", "fingerprint": "8494cc3afbb45d5e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a31254e96a0b0a0a", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/scripts/_precompute_category_top_vendors.py:123"}, "properties": {"repobilityId": "72c13912488997e4", "scanner": "scanner-primary", "fingerprint": "a31254e96a0b0a0a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f86012f040db9e31", "level": "none", "message": {"text": "Commented-code block (11 lines) in backend/scripts/_aria_cases_batch_II.py:36"}, "properties": {"repobilityId": "6e9e2521fb5cd5cc", "scanner": "scanner-primary", "fingerprint": "f86012f040db9e31", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-49111883a1e08c32", "level": "none", "message": {"text": "Commented-code block (13 lines) in backend/scripts/_aria_cases_644_651.py:17"}, "properties": {"repobilityId": "b40b863a62251cdb", "scanner": "scanner-primary", "fingerprint": "49111883a1e08c32", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-21af3b086fc5a0ff", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/scripts/_insert_cases_216_223.py:38"}, "properties": {"repobilityId": "263a958178eeeb73", "scanner": "scanner-primary", "fingerprint": "21af3b086fc5a0ff", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bc87d1dc6ae35681", "level": "note", "message": {"text": "Legacy-named symbol `rate_v1` in backend/scripts/explore_detectable_patterns.py:125"}, "properties": {"repobilityId": "6052e1001654a20e", "scanner": "scanner-primary", "fingerprint": "bc87d1dc6ae35681", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-35a42201a07a578b", "level": "none", "message": {"text": "Commented-code block (11 lines) in backend/scripts/_aria_cases_batch_EEE1.py:31"}, "properties": {"repobilityId": "e54694a2480d79ee", "scanner": "scanner-primary", "fingerprint": "35a42201a07a578b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-15bfe269c4bab46e", "level": "none", "message": {"text": "Commented-code block (10 lines) in backend/scripts/_insert_cases_224_231.py:42"}, "properties": {"repobilityId": "3e327660c007c697", "scanner": "scanner-primary", "fingerprint": "15bfe269c4bab46e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-406f3707c87c44e2", "level": "none", "message": {"text": "Commented-code block (6 lines) in backend/scripts/compute_scorecards.py:598"}, "properties": {"repobilityId": "a8b43c0fa5000f86", "scanner": "scanner-primary", "fingerprint": "406f3707c87c44e2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9e8bea424dab7f7a", "level": "none", "message": {"text": "Commented-code block (10 lines) in backend/scripts/_aria_cases_batch_HH.py:36"}, "properties": {"repobilityId": "7f0761d61648473b", "scanner": "scanner-primary", "fingerprint": "9e8bea424dab7f7a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f5da81db796c6f7d", "level": "none", "message": {"text": "Commented-code block (18 lines) in backend/scripts/_aria_cases_718_720.py:12"}, "properties": {"repobilityId": "21af2e19350a2f4b", "scanner": "scanner-primary", "fingerprint": "f5da81db796c6f7d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c894ac696a24a424", "level": "none", "message": {"text": "Commented-code block (16 lines) in backend/scripts/_aria_cases_715_717.py:12"}, "properties": {"repobilityId": "62ae57a122267269", "scanner": "scanner-primary", "fingerprint": "c894ac696a24a424", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f99b493bc0f61911", "level": "note", "message": {"text": "Legacy-named symbol `run_backup` in backend/scripts/backup_db.py:80"}, "properties": {"repobilityId": "99bc6fdc4573e301", "scanner": "scanner-primary", "fingerprint": "f99b493bc0f61911", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-f00a0dd4d9ed7b69", "level": "none", "message": {"text": "Commented-code block (17 lines) in backend/scripts/_aria_cases_697_700.py:13"}, "properties": {"repobilityId": "82fa627b4cd416df", "scanner": "scanner-primary", "fingerprint": "f00a0dd4d9ed7b69", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3626a3f305fac2ea", "level": "none", "message": {"text": "Commented-code block (9 lines) in backend/scripts/_aria_cases_603_605.py:12"}, "properties": {"repobilityId": "5a7ff33e6fdbd693", "scanner": "scanner-primary", "fingerprint": "3626a3f305fac2ea", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-57efd035766898b3", "level": "note", "message": {"text": "Legacy-named symbol `days_old` in backend/scripts/aria_investigate.py:93"}, "properties": {"repobilityId": "a53d1f1e1b8ebbbb", "scanner": "scanner-primary", "fingerprint": "57efd035766898b3", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-f8c1f79879fd59fe", "level": "none", "message": {"text": "Commented-code block (11 lines) in backend/scripts/_aria_cases_712_714.py:12"}, "properties": {"repobilityId": "942424304bdbfa0f", "scanner": "scanner-primary", "fingerprint": "f8c1f79879fd59fe", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2517f3827b8e6389", "level": "none", "message": {"text": "Commented-code block (15 lines) in backend/scripts/_aria_cases_701_704.py:13"}, "properties": {"repobilityId": "856e7cb93b851ee8", "scanner": "scanner-primary", "fingerprint": "2517f3827b8e6389", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2d8330ed9af7b915", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/scripts/_score_v6_now.py:34"}, "properties": {"repobilityId": "c8bac1f217e450ff", "scanner": "scanner-primary", "fingerprint": "2d8330ed9af7b915", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ca1b06e8414e708e", "level": "none", "message": {"text": "Commented-code block (11 lines) in backend/scripts/_aria_cases_671_678.py:17"}, "properties": {"repobilityId": "26df34aed50dbfa4", "scanner": "scanner-primary", "fingerprint": "ca1b06e8414e708e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c5d953ceb6037420", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 backend/scripts/timing_test.py:46"}, "properties": {"repobilityId": "e75117b00fe783e7", "scanner": "scanner-primary", "fingerprint": "c5d953ceb6037420", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-96b9855ef33106e5", "level": "none", "message": {"text": "Commented-code block (9 lines) in backend/scripts/_aria_cases_batch_GG.py:36"}, "properties": {"repobilityId": "90d0ce7ad3e1aea8", "scanner": "scanner-primary", "fingerprint": "96b9855ef33106e5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5cab229b0777a130", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/scripts/compute_official_profiles.py:48"}, "properties": {"repobilityId": "9fdea55764664d67", "scanner": "scanner-primary", "fingerprint": "5cab229b0777a130", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6886932226d2bc9d", "level": "none", "message": {"text": "Commented-code block (12 lines) in backend/scripts/_aria_cases_620_622.py:12"}, "properties": {"repobilityId": "6ca2b8889873f4e4", "scanner": "scanner-primary", "fingerprint": "6886932226d2bc9d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-02247ce639675ba1", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/scripts/_classify_federal.py:64"}, "properties": {"repobilityId": "27a8010b96a26d0e", "scanner": "scanner-primary", "fingerprint": "02247ce639675ba1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6201d97a0245c252", "level": "none", "message": {"text": "Commented-code block (11 lines) in backend/scripts/_aria_cases_batch_KK.py:35"}, "properties": {"repobilityId": "5b0772964ca5f8d2", "scanner": "scanner-primary", "fingerprint": "6201d97a0245c252", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d3073cf0f9c4e8c1", "level": "none", "message": {"text": "Commented-code block (10 lines) in backend/scripts/_aria_cases_batch_FF.py:36"}, "properties": {"repobilityId": "4e0528a8f74447e2", "scanner": "scanner-primary", "fingerprint": "d3073cf0f9c4e8c1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-baa214649f200039", "level": "note", "message": {"text": "Legacy-named symbol `template_v1` in backend/scripts/_write_memos_307_309.py:255"}, "properties": {"repobilityId": "d6a6817b64050cd0", "scanner": "scanner-primary", "fingerprint": "baa214649f200039", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-089eb23f96af277b", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/scripts/_update_gt_fraud_windows.py:47"}, "properties": {"repobilityId": "932e9fa1bb852d29", "scanner": "scanner-primary", "fingerprint": "089eb23f96af277b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4829e08c3232b595", "level": "none", "message": {"text": "Commented-code block (10 lines) in backend/scripts/_aria_cases_610_612.py:12"}, "properties": {"repobilityId": "4619bfa00c24411f", "scanner": "scanner-primary", "fingerprint": "4829e08c3232b595", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fefd6ee0f280fbd6", "level": "none", "message": {"text": "Commented-code block (18 lines) in backend/scripts/_aria_cases_695_696.py:11"}, "properties": {"repobilityId": "0d81740ae617d9e3", "scanner": "scanner-primary", "fingerprint": "fefd6ee0f280fbd6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-27712b62ca7106ca", "level": "none", "message": {"text": "Commented-code block (11 lines) in backend/scripts/_aria_cases_652_661.py:19"}, "properties": {"repobilityId": "8c1b0a9d62f4805b", "scanner": "scanner-primary", "fingerprint": "27712b62ca7106ca", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0e67ac33cc5f38c0", "level": "note", "message": {"text": "Legacy-named symbol `rate_v1` in backend/scripts/analyze_co_bidding.py:124"}, "properties": {"repobilityId": "0999cfe56c03b9df", "scanner": "scanner-primary", "fingerprint": "0e67ac33cc5f38c0", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-557d270104ce31dc", "level": "none", "message": {"text": "Commented-code block (9 lines) in backend/scripts/_aria_cases_606_609.py:13"}, "properties": {"repobilityId": "1b37d00d7e6b05d5", "scanner": "scanner-primary", "fingerprint": "557d270104ce31dc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d567cbd72e911f9e", "level": "none", "message": {"text": "Commented-code block (14 lines) in backend/scripts/_aria_cases_708_711.py:13"}, "properties": {"repobilityId": "3f8449ae57adfd37", "scanner": "scanner-primary", "fingerprint": "d567cbd72e911f9e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4aabf5ef50368c83", "level": "none", "message": {"text": "Commented-code block (11 lines) in backend/scripts/_aria_cases_batch_OOO.py:37"}, "properties": {"repobilityId": "1057d17b86c3543e", "scanner": "scanner-primary", "fingerprint": "4aabf5ef50368c83", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-050cc6a8fbb5ac5c", "level": "note", "message": {"text": "Legacy-named symbol `ips_old` in backend/scripts/recompute_ips_with_novelty.py:53"}, "properties": {"repobilityId": "41ee6328eb342c9a", "scanner": "scanner-primary", "fingerprint": "050cc6a8fbb5ac5c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-b1c1fe9d9d23b702", "level": "none", "message": {"text": "Commented-code block (11 lines) in backend/scripts/_aria_cases_batch_JJ.py:36"}, "properties": {"repobilityId": "869bfd1abb12aaf6", "scanner": "scanner-primary", "fingerprint": "b1c1fe9d9d23b702", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cc49e801847105df", "level": "none", "message": {"text": "Commented-code block (17 lines) in backend/scripts/_aria_cases_692_694.py:12"}, "properties": {"repobilityId": "40839be1c907e1d3", "scanner": "scanner-primary", "fingerprint": "cc49e801847105df", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f83d540509f9dc86", "level": "none", "message": {"text": "Commented-code block (6 lines) in backend/scripts/_add_perf_indexes.py:47"}, "properties": {"repobilityId": "77d89bbc7aa05e49", "scanner": "scanner-primary", "fingerprint": "f83d540509f9dc86", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-176ca6c5994081ad", "level": "none", "message": {"text": "Commented-code block (11 lines) in backend/scripts/_aria_cases_685_691.py:16"}, "properties": {"repobilityId": "5ff1ff7694765f39", "scanner": "scanner-primary", "fingerprint": "176ca6c5994081ad", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cda8f897fc6a05d7", "level": "none", "message": {"text": "Commented-code block (7 lines) in backend/scripts/calibrate_risk_model_v6_enhanced.py:71"}, "properties": {"repobilityId": "db441689c25f06a5", "scanner": "scanner-primary", "fingerprint": "cda8f897fc6a05d7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-92ba091371cb6cfc", "level": "none", "message": {"text": "Commented-code block (8 lines) in backend/scripts/_aria_cases_batch_JJJ.py:30"}, "properties": {"repobilityId": "bcde33db89c80754", "scanner": "scanner-primary", "fingerprint": "92ba091371cb6cfc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8ca2384236e369a5", "level": "none", "message": {"text": "Commented-code block (8 lines) in backend/scripts/_aria_cases_batch_AA.py:37"}, "properties": {"repobilityId": "6c63b064314e7dd2", "scanner": "scanner-primary", "fingerprint": "8ca2384236e369a5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-31c2cc37e10e28e0", "level": "note", "message": {"text": "Legacy-named symbol `compute_score_old` in backend/scripts/_calibration_estimate.py:6"}, "properties": {"repobilityId": "7e51636cadba77eb", "scanner": "scanner-primary", "fingerprint": "31c2cc37e10e28e0", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-be621eb8726e06cb", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 backend/scripts/add_efos_ground_truth.py:162"}, "properties": {"repobilityId": "20b7a30bddaa2bc2", "scanner": "scanner-primary", "fingerprint": "be621eb8726e06cb", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3250106cf9cc1d56", "level": "none", "message": {"text": "Commented-code block (9 lines) in backend/scripts/_aria_cases_623_627.py:14"}, "properties": {"repobilityId": "142f506f3ecd2961", "scanner": "scanner-primary", "fingerprint": "3250106cf9cc1d56", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-12f2d76c243ab186", "level": "none", "message": {"text": "Commented-code block (9 lines) in backend/scripts/_aria_cases_617_619.py:12"}, "properties": {"repobilityId": "562c9cf6b7ece42a", "scanner": "scanner-primary", "fingerprint": "12f2d76c243ab186", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2d1b383c441dd42c", "level": "none", "message": {"text": "Commented-code block (6 lines) in backend/scripts/_aria_cases_600_602.py:12"}, "properties": {"repobilityId": "95f5527ccd038f6f", "scanner": "scanner-primary", "fingerprint": "2d1b383c441dd42c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-32cd4d88388411c3", "level": "none", "message": {"text": "Commented-code block (9 lines) in backend/scripts/_build_deploy_db.py:62"}, "properties": {"repobilityId": "20d0d98c8afc2994", "scanner": "scanner-primary", "fingerprint": "32cd4d88388411c3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-46fec3988a88a9ec", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 backend/scripts/_build_deploy_db.py:179"}, "properties": {"repobilityId": "238e2e8f3d4d383c", "scanner": "scanner-primary", "fingerprint": "46fec3988a88a9ec", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b0fa44cdbe1221c2", "level": "none", "message": {"text": "Commented-code block (8 lines) in backend/scripts/compute_new_vendor_risk_model.py:35"}, "properties": {"repobilityId": "73e499c6f3e8ad85", "scanner": "scanner-primary", "fingerprint": "b0fa44cdbe1221c2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-644bfb5ebf6234ce", "level": "none", "message": {"text": "Commented-code block (12 lines) in backend/scripts/_aria_cases_679_684.py:15"}, "properties": {"repobilityId": "7025031dde4998fb", "scanner": "scanner-primary", "fingerprint": "644bfb5ebf6234ce", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-08bc667d8a9a5242", "level": "note", "message": {"text": "Legacy-named symbol `decentralized_legacy` in backend/scripts/classify_institutions.py:101"}, "properties": {"repobilityId": "80ffd2dce642e216", "scanner": "scanner-primary", "fingerprint": "08bc667d8a9a5242", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-681c5c675b9ba00c", "level": "none", "message": {"text": "Commented-code block (6 lines) in backend/scripts/load_rupc.py:26"}, "properties": {"repobilityId": "81bab28396d50e78", "scanner": "scanner-primary", "fingerprint": "681c5c675b9ba00c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-08c5d382b65ce57f", "level": "note", "message": {"text": "Legacy-named symbol `cluster_vendors_v2` in backend/scripts/archive/cluster_vendors_v2.py:18"}, "properties": {"repobilityId": "91292ad74e874d3e", "scanner": "scanner-primary", "fingerprint": "08c5d382b65ce57f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-8e16478b3c2f96e3", "level": "note", "message": {"text": "Legacy-named symbol `rate_v1` in backend/scripts/archive/calculate_risk_scores.py:465"}, "properties": {"repobilityId": "30fcf4444e2d57f3", "scanner": "scanner-primary", "fingerprint": "8e16478b3c2f96e3", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-a926e94b71f788ba", "level": "none", "message": {"text": "Commented-code block (7 lines) in backend/scripts/archive/load_asf_mdb.py:165"}, "properties": {"repobilityId": "2f6a7a4b7534cdfa", "scanner": "scanner-primary", "fingerprint": "a926e94b71f788ba", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-111f137a1aa4dd5e", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/scripts/archive/cluster_vendors.py:173"}, "properties": {"repobilityId": "009bebae214ea0ad", "scanner": "scanner-primary", "fingerprint": "111f137a1aa4dd5e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0dfe7fd85136668d", "level": "none", "message": {"text": "Commented-code block (9 lines) in backend/hyperion/phonetic.py:38"}, "properties": {"repobilityId": "f927745f11b920fd", "scanner": "scanner-primary", "fingerprint": "0dfe7fd85136668d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a9836457f7ec50c4", "level": "note", "message": {"text": "23 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "71ec3608d30f8bcd", "scanner": "scanner-primary", "fingerprint": "a9836457f7ec50c4", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "config-drift"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "4bb6bfe0dc081d72", "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": "02c85054a661e6c9", "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": "329f07435bae0460", "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": "c5c27c3bf7f12b41", "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": "790a6860f23fd503", "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": "f82a71bc44b1107e", "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": "81bde4a97c8965fb", "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": "e2850a520530fa6b", "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": "95c7e1da7b953fe4", "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": "de7783ceaf78492f", "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": "5273d5d95b78b37e", "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": "4552a6003a2e4805", "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": "fbc92a24315a7597", "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": "0be8dc8e80a010cf", "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": "456936781d7acb8a", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-02525d39071dd2c7", "level": "note", "message": {"text": "Near-duplicate function bodies in 5 places"}, "properties": {"repobilityId": "1279d31e2162bd9b", "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": "5d9824e28b3c703e", "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": "6ffe6cdaefc8e96b", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-6718a631ead09376", "level": "note", "message": {"text": "Near-duplicate function bodies in 38 places"}, "properties": {"repobilityId": "003eec39a5fd34ca", "scanner": "scanner-primary", "fingerprint": "6718a631ead09376", "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": "b852962263d12cb9", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-cf017baa675bf381", "level": "warning", "message": {"text": "Frontend route `login` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "6685d5623a4eec39", "scanner": "scanner-primary", "fingerprint": "cf017baa675bf381", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-356241c421138370", "level": "warning", "message": {"text": "Frontend route `register` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "d69ac6ea9f68767a", "scanner": "scanner-primary", "fingerprint": "356241c421138370", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-510f9d88aa3beef9", "level": "warning", "message": {"text": "Frontend route `intro` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "477f3dd5f63128c4", "scanner": "scanner-primary", "fingerprint": "510f9d88aa3beef9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-3e5f15ad4f8276ff", "level": "warning", "message": {"text": "Frontend route `landing` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "48716c59961cdd3c", "scanner": "scanner-primary", "fingerprint": "3e5f15ad4f8276ff", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-de3602a808ab3d94", "level": "warning", "message": {"text": "Frontend route `_dev/charts` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "f13ebd531a60d0ee", "scanner": "scanner-primary", "fingerprint": "de3602a808ab3d94", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-8e11138a9f634ca9", "level": "warning", "message": {"text": "Frontend route `dashboard` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "c97671d7cb9bdc13", "scanner": "scanner-primary", "fingerprint": "8e11138a9f634ca9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-2d3e85c2e8510cb2", "level": "warning", "message": {"text": "Frontend route `executive` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "8bfb62864974ed07", "scanner": "scanner-primary", "fingerprint": "2d3e85c2e8510cb2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-85f058f890f99d07", "level": "warning", "message": {"text": "Frontend route `executive-summary` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "9c4d7ae44a78f8ab", "scanner": "scanner-primary", "fingerprint": "85f058f890f99d07", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-6ddd382d0c1353c5", "level": "warning", "message": {"text": "Frontend route `report-card` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "a0776269f55469d1", "scanner": "scanner-primary", "fingerprint": "6ddd382d0c1353c5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-afa4ad16886ffe96", "level": "warning", "message": {"text": "Frontend route `institution-ranking` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "010e4bf901b35751", "scanner": "scanner-primary", "fingerprint": "afa4ad16886ffe96", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-ace352fd901532ce", "level": "warning", "message": {"text": "Frontend route `league` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "cff4786fa660d22d", "scanner": "scanner-primary", "fingerprint": "ace352fd901532ce", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-0d249e02a8ef8b3b", "level": "warning", "message": {"text": "Frontend route `institution-league` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "ba2f8828e6f4242c", "scanner": "scanner-primary", "fingerprint": "0d249e02a8ef8b3b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-79a84e38c8572c48", "level": "warning", "message": {"text": "Frontend route `explore/legacy` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "c0f8e0b9a4ee830b", "scanner": "scanner-primary", "fingerprint": "79a84e38c8572c48", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-a48b5c1b7bfc7238", "level": "warning", "message": {"text": "Frontend route `administrations` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "1e2fa7bea5bb0a57", "scanner": "scanner-primary", "fingerprint": "a48b5c1b7bfc7238", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-82302f97663ecc57", "level": "warning", "message": {"text": "Frontend route `categories` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "4f6b4f794c8d2d3f", "scanner": "scanner-primary", "fingerprint": "82302f97663ecc57", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-910b7a6bdd8bb763", "level": "warning", "message": {"text": "Frontend route `categories/:id` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "b4fd1fffe66d8734", "scanner": "scanner-primary", "fingerprint": "910b7a6bdd8bb763", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-96d8dba10fcbcf07", "level": "warning", "message": {"text": "Frontend route `print/categories/:id` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "53bd547b47b92dab", "scanner": "scanner-primary", "fingerprint": "96d8dba10fcbcf07", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-e75060ec13abb8b3", "level": "warning", "message": {"text": "Frontend route `contracts` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "3ea744281fd2d422", "scanner": "scanner-primary", "fingerprint": "e75060ec13abb8b3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-e5555441b5eb4d65", "level": "warning", "message": {"text": "Frontend route `contracts/:id` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "9ef228dcc52d840d", "scanner": "scanner-primary", "fingerprint": "e5555441b5eb4d65", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-1a63d80a86d2bb8c", "level": "warning", "message": {"text": "Frontend route `print/contracts/:id` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "87369b1a1cc4b990", "scanner": "scanner-primary", "fingerprint": "1a63d80a86d2bb8c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-577b9f460a8ee042", "level": "warning", "message": {"text": "Frontend route `network` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "3fa043e8a4b6f906", "scanner": "scanner-primary", "fingerprint": "577b9f460a8ee042", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-c43319e6b938ae78", "level": "warning", "message": {"text": "Frontend route `workspace` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "7c61961a7047079d", "scanner": "scanner-primary", "fingerprint": "c43319e6b938ae78", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-977e6376ea32a7ef", "level": "warning", "message": {"text": "Frontend route `watchlist` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "c7fc2f773757fb2a", "scanner": "scanner-primary", "fingerprint": "977e6376ea32a7ef", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-82c01e48079753e8", "level": "warning", "message": {"text": "Frontend route `investigation/:caseId` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "821c93d3db677901", "scanner": "scanner-primary", "fingerprint": "82c01e48079753e8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-647c2f27a6f63e98", "level": "warning", "message": {"text": "Frontend route `investigation` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "0014f9f0dc8a75c8", "scanner": "scanner-primary", "fingerprint": "647c2f27a6f63e98", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-ca6213cc28a7cd8d", "level": "warning", "message": {"text": "Frontend route `cola` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "ca83a6069996e2c7", "scanner": "scanner-primary", "fingerprint": "ca6213cc28a7cd8d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-75c9f7e891a2d00d", "level": "warning", "message": {"text": "Frontend route `aria` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "53dca76a687983eb", "scanner": "scanner-primary", "fingerprint": "75c9f7e891a2d00d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-560fb35116387d79", "level": "warning", "message": {"text": "Frontend route `patterns` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "f9ba7ac5c19bf59f", "scanner": "scanner-primary", "fingerprint": "560fb35116387d79", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-05a8329811b238d3", "level": "warning", "message": {"text": "Frontend route `patterns/:code/constellation` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "88ff3a5c4be6060a", "scanner": "scanner-primary", "fingerprint": "05a8329811b238d3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-e0562d2ca0babcb9", "level": "warning", "message": {"text": "Frontend route `patterns/:code` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "b3a771279c25c412", "scanner": "scanner-primary", "fingerprint": "e0562d2ca0babcb9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-6aecc44248d9dc0d", "level": "warning", "message": {"text": "Frontend route `captura` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "f598f320695510f5", "scanner": "scanner-primary", "fingerprint": "6aecc44248d9dc0d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-205618577beec291", "level": "warning", "message": {"text": "Frontend route `relationships` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "98835bf370458118", "scanner": "scanner-primary", "fingerprint": "205618577beec291", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-bec6c4e761442fc3", "level": "warning", "message": {"text": "Frontend route `intersection` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "95b987c414c92dc3", "scanner": "scanner-primary", "fingerprint": "bec6c4e761442fc3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-bed99c57b88a8731", "level": "warning", "message": {"text": "Frontend route `capture` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "9a9fb09d6a49896f", "scanner": "scanner-primary", "fingerprint": "bed99c57b88a8731", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-1d5861e438084511", "level": "warning", "message": {"text": "Frontend route `clusters` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "b071811bd7b41c46", "scanner": "scanner-primary", "fingerprint": "1d5861e438084511", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-3be4bb8a5a52b5af", "level": "warning", "message": {"text": "Frontend route `atlas/stories/:slug` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "aab8e8d0075592d7", "scanner": "scanner-primary", "fingerprint": "3be4bb8a5a52b5af", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-75da889ed5c64004", "level": "warning", "message": {"text": "Frontend route `atlas` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "e77ec6a2bfa00cdd", "scanner": "scanner-primary", "fingerprint": "75da889ed5c64004", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-c49bbfe57bb4060a", "level": "warning", "message": {"text": "Frontend route `observatorio` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "d219e94f654d83c3", "scanner": "scanner-primary", "fingerprint": "c49bbfe57bb4060a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-03df3e442488c4ba", "level": "warning", "message": {"text": "Frontend route `observatory` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "109cb77e33b7ce6a", "scanner": "scanner-primary", "fingerprint": "03df3e442488c4ba", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-a84255e884b93388", "level": "warning", "message": {"text": "Frontend route `spatial` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "2a3a2af220069227", "scanner": "scanner-primary", "fingerprint": "a84255e884b93388", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-a21fa8a1e0e8dc2d", "level": "warning", "message": {"text": "Frontend route `sectors` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "853463203545a422", "scanner": "scanner-primary", "fingerprint": "a21fa8a1e0e8dc2d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-7fbf437ee8ea9543", "level": "warning", "message": {"text": "Frontend route `sectors/:id` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "f8f93169a7184fe9", "scanner": "scanner-primary", "fingerprint": "7fbf437ee8ea9543", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-6293bb46478f4e2c", "level": "warning", "message": {"text": "Frontend route `print/sectors/:id` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "2e04433926b7cada", "scanner": "scanner-primary", "fingerprint": "6293bb46478f4e2c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-8d989af6cbfc579c", "level": "warning", "message": {"text": "Frontend route `methodology` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "1c8062e6194e9548", "scanner": "scanner-primary", "fingerprint": "8d989af6cbfc579c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-10f4a4a8629554cd", "level": "warning", "message": {"text": "Frontend route `limitations` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "78bd42f7bfc8a1b4", "scanner": "scanner-primary", "fingerprint": "10f4a4a8629554cd", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-dbe3cfb95ea16ae6", "level": "warning", "message": {"text": "Frontend route `cases` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "1d79b4a24d0997eb", "scanner": "scanner-primary", "fingerprint": "dbe3cfb95ea16ae6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-1a3a9fe5e1c2014a", "level": "warning", "message": {"text": "Frontend route `cases/:slug` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "3470ec34c42905ce", "scanner": "scanner-primary", "fingerprint": "1a3a9fe5e1c2014a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-1e8551c2234e6390", "level": "warning", "message": {"text": "Frontend route `print/cases/:slug` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "beb1887bc9e93c5e", "scanner": "scanner-primary", "fingerprint": "1e8551c2234e6390", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-06020bcd05a9132d", "level": "warning", "message": {"text": "Frontend route `ground-truth` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "f0e99edaef56eb16", "scanner": "scanner-primary", "fingerprint": "06020bcd05a9132d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-acf9f7546b74cddb", "level": "warning", "message": {"text": "Frontend route `state-expenditure` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "3c0901323e3e13fa", "scanner": "scanner-primary", "fingerprint": "acf9f7546b74cddb", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-4a093e00066c783b", "level": "warning", "message": {"text": "Frontend route `state-expenditure/:code` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "b960cb12064ec8d9", "scanner": "scanner-primary", "fingerprint": "4a093e00066c783b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-919981016c9302eb", "level": "warning", "message": {"text": "Frontend route `year-in-review` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "d63150380bf9b81a", "scanner": "scanner-primary", "fingerprint": "919981016c9302eb", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-cb5ac80067415d84", "level": "warning", "message": {"text": "Frontend route `year-in-review/:year` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "1efc0ad6b9f861d7", "scanner": "scanner-primary", "fingerprint": "cb5ac80067415d84", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-76742324391bc8a0", "level": "warning", "message": {"text": "Frontend route `institutions/health` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "a780b55be6cf8a37", "scanner": "scanner-primary", "fingerprint": "76742324391bc8a0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-2f1bae3fae6e8961", "level": "warning", "message": {"text": "Frontend route `institutions/scorecards` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "6fd6436e99605bb8", "scanner": "scanner-primary", "fingerprint": "2f1bae3fae6e8961", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-247540eb71b9e8d4", "level": "warning", "message": {"text": "Frontend route `institutions/fichas` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "6423a382af0cf72c", "scanner": "scanner-primary", "fingerprint": "247540eb71b9e8d4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-6f154103e7390d4b", "level": "warning", "message": {"text": "Frontend route `price-intelligence` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "049a4ef9c2170935", "scanner": "scanner-primary", "fingerprint": "6f154103e7390d4b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-d5b976759d05b8f3", "level": "warning", "message": {"text": "Frontend route `model-transparency` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "0f09e3bb99996b4f", "scanner": "scanner-primary", "fingerprint": "d5b976759d05b8f3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-2c4a5416043e856a", "level": "warning", "message": {"text": "Frontend route `price-analysis` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "6fa4ef6f195d6b6f", "scanner": "scanner-primary", "fingerprint": "2c4a5416043e856a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-6a94cb436d897bc8", "level": "warning", "message": {"text": "Frontend route `model` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "50b4f70564622d41", "scanner": "scanner-primary", "fingerprint": "6a94cb436d897bc8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-1fcd80e6e237d73b", "level": "warning", "message": {"text": "Frontend route `vendors/:id` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "1acf5bd3580f1c3e", "scanner": "scanner-primary", "fingerprint": "1fcd80e6e237d73b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-3a4d2c53848a3ef2", "level": "warning", "message": {"text": "Frontend route `institutions/:id` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "5e64acfb5c84f0ab", "scanner": "scanner-primary", "fingerprint": "3a4d2c53848a3ef2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-db8942b4f41677c0", "level": "warning", "message": {"text": "Frontend route `officials/:name` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "8f03754f440c9677", "scanner": "scanner-primary", "fingerprint": "db8942b4f41677c0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-601f1d56f8e42aef", "level": "warning", "message": {"text": "Frontend route `print/vendors/:id` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "d9a681488cd93671", "scanner": "scanner-primary", "fingerprint": "601f1d56f8e42aef", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-a07386aedc02e9ea", "level": "warning", "message": {"text": "Frontend route `print/institutions/:id` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "b542df13bfe97091", "scanner": "scanner-primary", "fingerprint": "a07386aedc02e9ea", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-ec223e2c0d8b24c3", "level": "warning", "message": {"text": "Frontend route `explore` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "ac5f0b0db06a358d", "scanner": "scanner-primary", "fingerprint": "ec223e2c0d8b24c3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-17bacb17f6efb788", "level": "warning", "message": {"text": "Frontend route `settings` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "7a6f6cf42324831f", "scanner": "scanner-primary", "fingerprint": "17bacb17f6efb788", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-98c357a3f972b5fd", "level": "warning", "message": {"text": "Frontend route `money-flow` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "9f48dc07cf263bf7", "scanner": "scanner-primary", "fingerprint": "98c357a3f972b5fd", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-0129c55a157ddb58", "level": "warning", "message": {"text": "Frontend route `networks` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "99adb2411b8b289b", "scanner": "scanner-primary", "fingerprint": "0129c55a157ddb58", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-0e7780fe948cdf2a", "level": "warning", "message": {"text": "Frontend route `institution-health` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "fd2895fbd4795809", "scanner": "scanner-primary", "fingerprint": "0e7780fe948cdf2a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-be3d9b432e92e576", "level": "warning", "message": {"text": "Frontend route `vendors/compare` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "1af1ffb84d6b735b", "scanner": "scanner-primary", "fingerprint": "be3d9b432e92e576", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-b454653c21428176", "level": "warning", "message": {"text": "Frontend route `procurement-calendar` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "e44b6dacfbeb2fde", "scanner": "scanner-primary", "fingerprint": "b454653c21428176", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-8513536854a340f0", "level": "warning", "message": {"text": "Frontend route `journalists` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "a3881dd1a45eee25", "scanner": "scanner-primary", "fingerprint": "8513536854a340f0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-2380e20fc60a9a21", "level": "warning", "message": {"text": "Frontend route `stories/:slug` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "4f18a949a0e60df6", "scanner": "scanner-primary", "fingerprint": "2380e20fc60a9a21", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-de70570204fb4ce8", "level": "warning", "message": {"text": "Frontend route `stories/the-pharmaceutical-cartel` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "733b727208f5f903", "scanner": "scanner-primary", "fingerprint": "de70570204fb4ce8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-8193ce4c4c40e70c", "level": "warning", "message": {"text": "Frontend route `stories/the-intermediary-industry` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "30a51e57e01a7f2c", "scanner": "scanner-primary", "fingerprint": "8193ce4c4c40e70c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-957401f217aaf23f", "level": "warning", "message": {"text": "Frontend route `stories/the-covid-year` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "d4a6232fb292b371", "scanner": "scanner-primary", "fingerprint": "957401f217aaf23f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-0a63537e69e0c08c", "level": "warning", "message": {"text": "Frontend route `stories/the-ghost-army` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "efe3e5093707e1fa", "scanner": "scanner-primary", "fingerprint": "0a63537e69e0c08c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-f900e15ed065dde9", "level": "warning", "message": {"text": "Frontend route `stories/the-big-price` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "7ceb2409cf385454", "scanner": "scanner-primary", "fingerprint": "f900e15ed065dde9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-f0cac7e5bc16f93d", "level": "warning", "message": {"text": "Frontend route `stories/the-invisible-monopoly` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "765f0f9b0178457b", "scanner": "scanner-primary", "fingerprint": "f0cac7e5bc16f93d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-ea07df865b2d4d82", "level": "warning", "message": {"text": "Frontend route `stories/the-illusion-of-competition` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "f912fcc9a5b0d9be", "scanner": "scanner-primary", "fingerprint": "ea07df865b2d4d82", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-c28e1fa03b84d8db", "level": "warning", "message": {"text": "Frontend route `stories/institutional-capture` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "22fd75a8bd672fce", "scanner": "scanner-primary", "fingerprint": "c28e1fa03b84d8db", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-83e6224ad5de85d5", "level": "warning", "message": {"text": "Frontend route `stories/the-tide-of-awards` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "aaf52ee17a8d18a1", "scanner": "scanner-primary", "fingerprint": "83e6224ad5de85d5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-124a965ef20eccad", "level": "warning", "message": {"text": "Frontend route `stories/the-decade-of-risk` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "93de8e3c489fd376", "scanner": "scanner-primary", "fingerprint": "124a965ef20eccad", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-3ad6b599fe52c8d2", "level": "warning", "message": {"text": "Frontend route `stories/the-300k-threshold` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "4c785fb759ae69c6", "scanner": "scanner-primary", "fingerprint": "3ad6b599fe52c8d2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-9155a036af732cd6", "level": "warning", "message": {"text": "Frontend route `institutions/compare` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "50fbcd83d4d7babd", "scanner": "scanner-primary", "fingerprint": "9155a036af732cd6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-717086346123cd92", "level": "warning", "message": {"text": "Frontend route `sector` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "7e9eee56e697bada", "scanner": "scanner-primary", "fingerprint": "717086346123cd92", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-3d0f17c81017732d", "level": "warning", "message": {"text": "Frontend route `sector/:id` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "1dd63c4701a16e28", "scanner": "scanner-primary", "fingerprint": "3d0f17c81017732d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-74d7ff4daf6b1f82", "level": "warning", "message": {"text": "Frontend route `scandals` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "9fb3a00a8612af7c", "scanner": "scanner-primary", "fingerprint": "74d7ff4daf6b1f82", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-540c495144417c7d", "level": "warning", "message": {"text": "Frontend route `collusion` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "2cf8470693ef5b69", "scanner": "scanner-primary", "fingerprint": "540c495144417c7d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-b875e7d8c27caef6", "level": "warning", "message": {"text": "Frontend route `scorecards` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "22196229fc3e1a6c", "scanner": "scanner-primary", "fingerprint": "b875e7d8c27caef6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-a56712407209fa68", "level": "warning", "message": {"text": "Frontend route `vendors` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "2fb906934252f2ab", "scanner": "scanner-primary", "fingerprint": "a56712407209fa68", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-11e29cba9d7b0d1f", "level": "warning", "message": {"text": "Frontend route `institutions` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "cf93750c7a72c140", "scanner": "scanner-primary", "fingerprint": "11e29cba9d7b0d1f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-f233aed5618d9433", "level": "warning", "message": {"text": "Frontend route `investigations` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "49b5c6aa21c01453", "scanner": "scanner-primary", "fingerprint": "f233aed5618d9433", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-89a41bafcfe7d723", "level": "warning", "message": {"text": "Frontend route `for-journalists` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "89309ce230129f82", "scanner": "scanner-primary", "fingerprint": "89a41bafcfe7d723", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-99fd8191a024785f", "level": "warning", "message": {"text": "Frontend route `newsroom` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "a543308c36e92ade", "scanner": "scanner-primary", "fingerprint": "99fd8191a024785f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-fc926cf432cde6a3", "level": "warning", "message": {"text": "Frontend route `stories` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "b6947adc4b1d718f", "scanner": "scanner-primary", "fingerprint": "fc926cf432cde6a3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-28fb665485c97c4c", "level": "warning", "message": {"text": "Frontend route `metodologia` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "da49a4b89359b10b", "scanner": "scanner-primary", "fingerprint": "28fb665485c97c4c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-47c8ff4838f33a75", "level": "warning", "message": {"text": "Frontend route `cases-library` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "bef1ef6bafc18e95", "scanner": "scanner-primary", "fingerprint": "47c8ff4838f33a75", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-473d675327f56f3b", "level": "warning", "message": {"text": "Frontend route `thread` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "a76fe5ad72047799", "scanner": "scanner-primary", "fingerprint": "473d675327f56f3b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-53640bc314e4bdb1", "level": "warning", "message": {"text": "Frontend route `thread/:vendorId` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "612817914bc8ff96", "scanner": "scanner-primary", "fingerprint": "53640bc314e4bdb1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-ca2f1ffdf806e1a5", "level": "warning", "message": {"text": "Frontend route `states` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "2a0ee632af87dd0b", "scanner": "scanner-primary", "fingerprint": "ca2f1ffdf806e1a5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-67099c8b3c745019", "level": "warning", "message": {"text": "Frontend route `privacy` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "b6f4e58cb77a7498", "scanner": "scanner-primary", "fingerprint": "67099c8b3c745019", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-be29e4950307e1ba", "level": "warning", "message": {"text": "Frontend route `terms` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "947f5963b807e675", "scanner": "scanner-primary", "fingerprint": "be29e4950307e1ba", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-bf6a211975faa5c4", "level": "error", "message": {"text": "FastAPI POST `submit_issue` without auth dependency \u2014 backend/api/routers/issues.py:80"}, "properties": {"repobilityId": "ab1fa1bf6bfef0ad", "scanner": "scanner-primary", "fingerprint": "bf6a211975faa5c4", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/api/routers/issues.py"}, "region": {"startLine": 80}}}]}, {"ruleId": "scanner-45a4fee28251f686", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/stats/exchange-rates (frontend/src/lib/exchangeRates.ts:26)"}, "properties": {"repobilityId": "58d6965d15c13303", "scanner": "scanner-primary", "fingerprint": "45a4fee28251f686", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5baa8971ebe192a1", "level": "note", "message": {"text": "Unused endpoint: GET /"}, "properties": {"repobilityId": "7cc2baf4a14e00bd", "scanner": "scanner-primary", "fingerprint": "5baa8971ebe192a1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c0ac2ef565a5459b", "level": "note", "message": {"text": "Unused endpoint: GET /graph"}, "properties": {"repobilityId": "d25a4309f7597965", "scanner": "scanner-primary", "fingerprint": "c0ac2ef565a5459b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-4b7059ade8b1105e", "level": "note", "message": {"text": "Unused endpoint: GET /co-bidders/{vendor_id}"}, "properties": {"repobilityId": "01ae4e5b5aeee7cb", "scanner": "scanner-primary", "fingerprint": "4b7059ade8b1105e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-eeb14a9398390927", "level": "note", "message": {"text": "Unused endpoint: GET /institution-vendors/{institution_id}"}, "properties": {"repobilityId": "ee5476d327d88e4b", "scanner": "scanner-primary", "fingerprint": "eeb14a9398390927", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-0b9977e10e0f8d11", "level": "note", "message": {"text": "Unused endpoint: GET /related-vendors/{vendor_id}"}, "properties": {"repobilityId": "62c4649a39c0a2e5", "scanner": "scanner-primary", "fingerprint": "0b9977e10e0f8d11", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b0498bdb13716a0b", "level": "note", "message": {"text": "Unused endpoint: GET /pattern-spotlight"}, "properties": {"repobilityId": "ef484f2e9f06aa9c", "scanner": "scanner-primary", "fingerprint": "b0498bdb13716a0b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c3aac795a24eb16b", "level": "note", "message": {"text": "Unused endpoint: GET /communities"}, "properties": {"repobilityId": "78910c8bb552e5c1", "scanner": "scanner-primary", "fingerprint": "c3aac795a24eb16b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b1b7b85f40935e13", "level": "note", "message": {"text": "Unused endpoint: GET /communities/index"}, "properties": {"repobilityId": "bcb75419634edab1", "scanner": "scanner-primary", "fingerprint": "b1b7b85f40935e13", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-0e66fde548072ce5", "level": "note", "message": {"text": "Unused endpoint: GET /communities/{community_id}"}, "properties": {"repobilityId": "de16f5103c43883e", "scanner": "scanner-primary", "fingerprint": "0e66fde548072ce5", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-21847f417f72c516", "level": "note", "message": {"text": "Unused endpoint: GET /communities/{community_id}/graph"}, "properties": {"repobilityId": "0616ba7b99c397b1", "scanner": "scanner-primary", "fingerprint": "21847f417f72c516", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-4c7c8a5ef27da94b", "level": "note", "message": {"text": "Unused endpoint: GET /institution-capture"}, "properties": {"repobilityId": "f8d9af18cec5eed7", "scanner": "scanner-primary", "fingerprint": "4c7c8a5ef27da94b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5fdc1cb7b64df6cf", "level": "note", "message": {"text": "Unused endpoint: GET /institution-capture/{institution_id}/star"}, "properties": {"repobilityId": "104a0ae35f125f48", "scanner": "scanner-primary", "fingerprint": "5fdc1cb7b64df6cf", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e1b7bee247ffc801", "level": "note", "message": {"text": "Unused endpoint: GET /summary"}, "properties": {"repobilityId": "7abc18146a4fe259", "scanner": "scanner-primary", "fingerprint": "e1b7bee247ffc801", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2472a89d5f403d9d", "level": "note", "message": {"text": "Unused endpoint: GET /capture-leaders"}, "properties": {"repobilityId": "512591ba1fd58593", "scanner": "scanner-primary", "fingerprint": "2472a89d5f403d9d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6ff3410f57dca0e2", "level": "note", "message": {"text": "Unused endpoint: GET /dashboard-bundle"}, "properties": {"repobilityId": "e7eff757d8c0599c", "scanner": "scanner-primary", "fingerprint": "6ff3410f57dca0e2", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7a009b1a56794f45", "level": "note", "message": {"text": "Unused endpoint: POST /"}, "properties": {"repobilityId": "8936745d42692e75", "scanner": "scanner-primary", "fingerprint": "7a009b1a56794f45", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6f470541dff51e82", "level": "note", "message": {"text": "Unused endpoint: PUT /{folder_id}"}, "properties": {"repobilityId": "fcae8a7e919a1410", "scanner": "scanner-primary", "fingerprint": "6f470541dff51e82", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2dfbf5e3394408df", "level": "note", "message": {"text": "Unused endpoint: DELETE /{folder_id}"}, "properties": {"repobilityId": "650a1186f33c3241", "scanner": "scanner-primary", "fingerprint": "2dfbf5e3394408df", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-50ff56c89fe22e53", "level": "note", "message": {"text": "Unused endpoint: GET /export/{folder_id}"}, "properties": {"repobilityId": "a7a8e08bf9e6b6fe", "scanner": "scanner-primary", "fingerprint": "50ff56c89fe22e53", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-96a9a657802de17f", "level": "note", "message": {"text": "Unused endpoint: GET /institution-risk-factors"}, "properties": {"repobilityId": "ade5c732cef2f1a8", "scanner": "scanner-primary", "fingerprint": "96a9a657802de17f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e11d77fe18c194dd", "level": "note", "message": {"text": "Unused endpoint: GET /value-concentration"}, "properties": {"repobilityId": "cc72448f2c770580", "scanner": "scanner-primary", "fingerprint": "e11d77fe18c194dd", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f28e35d7b719ce7d", "level": "note", "message": {"text": "Unused endpoint: GET /flash-vendors"}, "properties": {"repobilityId": "cd624c9194e8adcc", "scanner": "scanner-primary", "fingerprint": "f28e35d7b719ce7d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7d6a84371f6daf10", "level": "note", "message": {"text": "Unused endpoint: GET /industry-risk-clusters"}, "properties": {"repobilityId": "fb9083564e588d59", "scanner": "scanner-primary", "fingerprint": "7d6a84371f6daf10", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-992197be5dc4e4f6", "level": "note", "message": {"text": "Unused endpoint: GET /seasonal-risk"}, "properties": {"repobilityId": "3281873ea616360f", "scanner": "scanner-primary", "fingerprint": "992197be5dc4e4f6", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-0acb1eb78ba9cfcf", "level": "note", "message": {"text": "Unused endpoint: GET /monthly-risk-summary"}, "properties": {"repobilityId": "094b5ce50dc77f08", "scanner": "scanner-primary", "fingerprint": "0acb1eb78ba9cfcf", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-242899c8cd1d9708", "level": "note", "message": {"text": "Unused endpoint: GET /procedure-risk-comparison"}, "properties": {"repobilityId": "5fa1b6be4b4a6297", "scanner": "scanner-primary", "fingerprint": "242899c8cd1d9708", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-94b21ca34066e845", "level": "note", "message": {"text": "Unused endpoint: GET /top-by-period"}, "properties": {"repobilityId": "6e50a4517b682113", "scanner": "scanner-primary", "fingerprint": "94b21ca34066e845", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5a3c817ca0cd6219", "level": "note", "message": {"text": "Unused endpoint: GET /sector-growth"}, "properties": {"repobilityId": "67bdeec384de2373", "scanner": "scanner-primary", "fingerprint": "5a3c817ca0cd6219", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b961d424f0574e4e", "level": "note", "message": {"text": "Unused endpoint: GET /year-summary/{year}"}, "properties": {"repobilityId": "b5400e53eb476d0c", "scanner": "scanner-primary", "fingerprint": "b961d424f0574e4e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f91f282218c9cda9", "level": "note", "message": {"text": "Unused endpoint: GET /movers"}, "properties": {"repobilityId": "1d4c57d2698e1f6e", "scanner": "scanner-primary", "fingerprint": "f91f282218c9cda9", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a12f85b46010cb53", "level": "note", "message": {"text": "Unused endpoint: GET /{name}"}, "properties": {"repobilityId": "d01e3c82d00b1894", "scanner": "scanner-primary", "fingerprint": "a12f85b46010cb53", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-caa6dd4dd00b83e5", "level": "note", "message": {"text": "Unused endpoint: GET /institutions"}, "properties": {"repobilityId": "a7629fcfaffd5ba2", "scanner": "scanner-primary", "fingerprint": "caa6dd4dd00b83e5", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-cd999ecda552effa", "level": "note", "message": {"text": "Unused endpoint: GET /institutions/stats"}, "properties": {"repobilityId": "839f4dd8b8fae691", "scanner": "scanner-primary", "fingerprint": "cd999ecda552effa", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d72d8177811710ca", "level": "note", "message": {"text": "Unused endpoint: GET /institutions/{institution_id}"}, "properties": {"repobilityId": "f2b5740dbd400444", "scanner": "scanner-primary", "fingerprint": "d72d8177811710ca", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6baa43c10ac94484", "level": "note", "message": {"text": "Unused endpoint: GET /vendors"}, "properties": {"repobilityId": "a9c84baa5fd76a29", "scanner": "scanner-primary", "fingerprint": "6baa43c10ac94484", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-9e4168cb661243e5", "level": "note", "message": {"text": "Unused endpoint: GET /vendors/{vendor_id}"}, "properties": {"repobilityId": "067e3a7adbcebd98", "scanner": "scanner-primary", "fingerprint": "9e4168cb661243e5", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2f4493751a9fb3f0", "level": "note", "message": {"text": "Unused endpoint: GET /vendor/{vendor_id}"}, "properties": {"repobilityId": "cab58ead2b073900", "scanner": "scanner-primary", "fingerprint": "2f4493751a9fb3f0", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ad2cad7b7c2fa841", "level": "note", "message": {"text": "Unused endpoint: GET /institution/{institution_id}"}, "properties": {"repobilityId": "e6751b06f53eafba", "scanner": "scanner-primary", "fingerprint": "ad2cad7b7c2fa841", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-16b723d0138481e0", "level": "note", "message": {"text": "Unused endpoint: GET /sector/{sector_id}"}, "properties": {"repobilityId": "6a2169c548c43833", "scanner": "scanner-primary", "fingerprint": "16b723d0138481e0", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-dfe00256772eb012", "level": "note", "message": {"text": "Unused endpoint: GET /thematic/{theme}"}, "properties": {"repobilityId": "9994a405d00e4938", "scanner": "scanner-primary", "fingerprint": "dfe00256772eb012", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e8fd4b864f850d3b", "level": "note", "message": {"text": "Unused endpoint: GET /patterns/co-bidding"}, "properties": {"repobilityId": "3e871b1f30b89dcc", "scanner": "scanner-primary", "fingerprint": "e8fd4b864f850d3b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-4f1e33fbc1596c7c", "level": "note", "message": {"text": "Unused endpoint: GET /patterns/concentration"}, "properties": {"repobilityId": "ff5b6c60eaf231a5", "scanner": "scanner-primary", "fingerprint": "4f1e33fbc1596c7c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-66b0ce7decf81f1b", "level": "note", "message": {"text": "Unused endpoint: GET /patterns/year-end"}, "properties": {"repobilityId": "9faf59a41f588992", "scanner": "scanner-primary", "fingerprint": "66b0ce7decf81f1b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6eb19a2be7a6629c", "level": "note", "message": {"text": "Unused endpoint: GET /leads"}, "properties": {"repobilityId": "7376e7ee499e9bcd", "scanner": "scanner-primary", "fingerprint": "6eb19a2be7a6629c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-aee2264e2c0eb4ba", "level": "note", "message": {"text": "Unused endpoint: GET /institution/{institution_id}/period-comparison"}, "properties": {"repobilityId": "1cf54708f5396906", "scanner": "scanner-primary", "fingerprint": "aee2264e2c0eb4ba", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3b30f4c0994a30b4", "level": "note", "message": {"text": "Unused endpoint: DELETE /"}, "properties": {"repobilityId": "6d535d8e9e8649a1", "scanner": "scanner-primary", "fingerprint": "3b30f4c0994a30b4", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-9c768cf25ee8a57b", "level": "note", "message": {"text": "Unused endpoint: GET /administration-comparison"}, "properties": {"repobilityId": "808a198270a2a1d0", "scanner": "scanner-primary", "fingerprint": "9c768cf25ee8a57b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b563313ec545b7ee", "level": "note", "message": {"text": "Unused endpoint: GET /ghost-companies"}, "properties": {"repobilityId": "8cbdbfcadf0fa2cf", "scanner": "scanner-primary", "fingerprint": "b563313ec545b7ee", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-724310db177bf140", "level": "note", "message": {"text": "Unused endpoint: GET /top-suspicious-vendors"}, "properties": {"repobilityId": "a41a2148941cdeff", "scanner": "scanner-primary", "fingerprint": "724310db177bf140", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b735a63d6ca8b777", "level": "note", "message": {"text": "Unused endpoint: GET /overpricing-patterns"}, "properties": {"repobilityId": "4e9e896255e113e9", "scanner": "scanner-primary", "fingerprint": "b735a63d6ca8b777", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}