{"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-130b8c8974ac3d20", "name": "Possibly dead Python function: start_mcp_server", "shortDescription": {"text": "Possibly dead Python function: start_mcp_server"}, "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-6c574b2446e3cf0b", "name": "Possibly dead Python function: start_governance_timer", "shortDescription": {"text": "Possibly dead Python function: start_governance_timer"}, "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-27426a3d58c5a4e2", "name": "Possibly dead Python function: start_quality_timer", "shortDescription": {"text": "Possibly dead Python function: start_quality_timer"}, "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-5c2a1b5e79e854a0", "name": "Possibly dead Python function: read_domain", "shortDescription": {"text": "Possibly dead Python function: read_domain"}, "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-ca2e18e4d45c9f1f", "name": "Possibly dead Python function: write_domain", "shortDescription": {"text": "Possibly dead Python function: write_domain"}, "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-8ab87d7f8d34da24", "name": "Possibly dead Python function: append_entry", "shortDescription": {"text": "Possibly dead Python function: append_entry"}, "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-9c17172a5de38f25", "name": "Possibly dead Python function: encode_task_text", "shortDescription": {"text": "Possibly dead Python function: encode_task_text"}, "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-be274b7b725f6f46", "name": "Possibly dead Python function: handle_mcp", "shortDescription": {"text": "Possibly dead Python function: handle_mcp"}, "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-8785da8907354ce9", "name": "Possibly dead Python function: cmd_logs", "shortDescription": {"text": "Possibly dead Python function: cmd_logs"}, "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-17fe40e6554b466d", "name": "Possibly dead Python function: cmd_update", "shortDescription": {"text": "Possibly dead Python function: cmd_update"}, "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-f31b68c012814510", "name": "Possibly dead Python function: cmd_version", "shortDescription": {"text": "Possibly dead Python function: cmd_version"}, "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-3a61302340f854a7", "name": "Possibly dead Python function: start_adaptive_policy_worker", "shortDescription": {"text": "Possibly dead Python function: start_adaptive_policy_worker"}, "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-9d7a8b10fbe1a876", "name": "Possibly dead Python function: start_trash_sweeper", "shortDescription": {"text": "Possibly dead Python function: start_trash_sweeper"}, "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-1bd6c1a0de25b618", "name": "Possibly dead Python function: recompute_theta", "shortDescription": {"text": "Possibly dead Python function: recompute_theta"}, "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-14eec3a7f5175c78", "name": "Possibly dead Python function: start_memory_summary_worker", "shortDescription": {"text": "Possibly dead Python function: start_memory_summary_worker"}, "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-d60d027b4ca29ac6", "name": "Possibly dead Python function: handle_recalled_outcome", "shortDescription": {"text": "Possibly dead Python function: handle_recalled_outcome"}, "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-5489fea8053cdcd9", "name": "Possibly dead Python function: handle_memory_written", "shortDescription": {"text": "Possibly dead Python function: handle_memory_written"}, "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-b38c445b8def5db7", "name": "Possibly dead Python function: handle_session_imported", "shortDescription": {"text": "Possibly dead Python function: handle_session_imported"}, "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-ef0bd05cf275e863", "name": "Possibly dead Python function: start_transcript_importer", "shortDescription": {"text": "Possibly dead Python function: start_transcript_importer"}, "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-fb14af6a58759efb", "name": "Possibly dead Python function: attach_task_service", "shortDescription": {"text": "Possibly dead Python function: attach_task_service"}, "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-a2335cbb30b9a23d", "name": "Possibly dead Python function: attach_project_root", "shortDescription": {"text": "Possibly dead Python function: attach_project_root"}, "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-37834d0fdd8f0081", "name": "Possibly dead Python function: build_instruction", "shortDescription": {"text": "Possibly dead Python function: build_instruction"}, "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-4e40fb1d09775f27", "name": "Possibly dead Python function: reindex", "shortDescription": {"text": "Possibly dead Python function: reindex"}, "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-f86242681ddef2ca", "name": "Possibly dead Python function: search_feedback", "shortDescription": {"text": "Possibly dead Python function: search_feedback"}, "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-862bb9ffa2c2f37b", "name": "Possibly dead Python function: unstage_doc", "shortDescription": {"text": "Possibly dead Python function: unstage_doc"}, "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-9a86edc0efefc4b4", "name": "`truncate` class without `title=` for hover reveal \u2014 services/prism-service/prism_service/web/src/components/LiveStatusS", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 services/prism-service/prism_service/web/src/components/LiveStatusStrip.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-63be520f4bafcdeb", "name": "`truncate` class without `title=` for hover reveal \u2014 services/prism-service/prism_service/web/src/components/understand/", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 services/prism-service/prism_service/web/src/components/understand/LayersView.tsx:204"}, "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-50876c58c3559d93", "name": "`truncate` class without `title=` for hover reveal \u2014 services/prism-service/prism_service/web/src/components/understand/", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 services/prism-service/prism_service/web/src/components/understand/PrismFileNode.tsx:40"}, "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-1a780be008d8af8f", "name": "React Flow <MiniMap> without dark background \u2014 services/prism-service/prism_service/web/src/components/understand/PrismL", "shortDescription": {"text": "React Flow <MiniMap> without dark background \u2014 services/prism-service/prism_service/web/src/components/understand/PrismLayerGraph.tsx:184"}, "fullDescription": {"text": "A bare <MiniMap> renders with the vendor's white default in dark themes. Wrap the canvas in a class that overrides `.react-flow__minimap` background, or pass an explicit `style`/`maskColor`/`bgColor`.\n\nWhy: P1 in CHECKLIST.md \u2014 vendor defaults bleed light through.\nRule id: fq.minimap.no-bg"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-dc958bca0b43ab20", "name": "React Flow <Controls> without dark theming \u2014 services/prism-service/prism_service/web/src/components/understand/PrismLay", "shortDescription": {"text": "React Flow <Controls> without dark theming \u2014 services/prism-service/prism_service/web/src/components/understand/PrismLayerGraph.tsx:170"}, "fullDescription": {"text": "`<Controls>` ships with white buttons. Override `.react-flow__controls` and `.react-flow__controls-button` in your stylesheet or pass a styled wrapper.\n\nWhy: P1 in CHECKLIST.md \u2014 vendor defaults bleed light through.\nRule id: fq.controls.no-bg"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2ce37f05c115e755", "name": "`truncate` class without `title=` for hover reveal \u2014 services/prism-service/prism_service/web/src/components/understand/", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 services/prism-service/prism_service/web/src/components/understand/DomainsView.tsx:142"}, "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-8211c7ceb7c87072", "name": "React Flow <MiniMap> without dark background \u2014 services/prism-service/prism_service/web/src/components/understand/PrismE", "shortDescription": {"text": "React Flow <MiniMap> without dark background \u2014 services/prism-service/prism_service/web/src/components/understand/PrismEntityGraph.tsx:125"}, "fullDescription": {"text": "A bare <MiniMap> renders with the vendor's white default in dark themes. Wrap the canvas in a class that overrides `.react-flow__minimap` background, or pass an explicit `style`/`maskColor`/`bgColor`.\n\nWhy: P1 in CHECKLIST.md \u2014 vendor defaults bleed light through.\nRule id: fq.minimap.no-bg"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ac072cdfafcb26d2", "name": "React Flow <Controls> without dark theming \u2014 services/prism-service/prism_service/web/src/components/understand/PrismEnt", "shortDescription": {"text": "React Flow <Controls> without dark theming \u2014 services/prism-service/prism_service/web/src/components/understand/PrismEntityGraph.tsx:113"}, "fullDescription": {"text": "`<Controls>` ships with white buttons. Override `.react-flow__controls` and `.react-flow__controls-button` in your stylesheet or pass a styled wrapper.\n\nWhy: P1 in CHECKLIST.md \u2014 vendor defaults bleed light through.\nRule id: fq.controls.no-bg"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b51d7f0edfce19f7", "name": "React Flow <MiniMap> without dark background \u2014 services/prism-service/prism_service/web/src/components/understand/PrismD", "shortDescription": {"text": "React Flow <MiniMap> without dark background \u2014 services/prism-service/prism_service/web/src/components/understand/PrismDomainGraph.tsx:144"}, "fullDescription": {"text": "A bare <MiniMap> renders with the vendor's white default in dark themes. Wrap the canvas in a class that overrides `.react-flow__minimap` background, or pass an explicit `style`/`maskColor`/`bgColor`.\n\nWhy: P1 in CHECKLIST.md \u2014 vendor defaults bleed light through.\nRule id: fq.minimap.no-bg"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f495d704bcb95845", "name": "React Flow <Controls> without dark theming \u2014 services/prism-service/prism_service/web/src/components/understand/PrismDom", "shortDescription": {"text": "React Flow <Controls> without dark theming \u2014 services/prism-service/prism_service/web/src/components/understand/PrismDomainGraph.tsx:130"}, "fullDescription": {"text": "`<Controls>` ships with white buttons. Override `.react-flow__controls` and `.react-flow__controls-button` in your stylesheet or pass a styled wrapper.\n\nWhy: P1 in CHECKLIST.md \u2014 vendor defaults bleed light through.\nRule id: fq.controls.no-bg"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-52d819b0f84d5d43", "name": "`truncate` class without `title=` for hover reveal \u2014 services/prism-service/prism_service/web/src/components/understand/", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 services/prism-service/prism_service/web/src/components/understand/PrismEntityNode.tsx:37"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5fa5fd129ba5b8af", "name": "React Flow <MiniMap> without dark background \u2014 services/prism-service/prism_service/web/src/components/understand/PrismF", "shortDescription": {"text": "React Flow <MiniMap> without dark background \u2014 services/prism-service/prism_service/web/src/components/understand/PrismFileGraph.tsx:217"}, "fullDescription": {"text": "A bare <MiniMap> renders with the vendor's white default in dark themes. Wrap the canvas in a class that overrides `.react-flow__minimap` background, or pass an explicit `style`/`maskColor`/`bgColor`.\n\nWhy: P1 in CHECKLIST.md \u2014 vendor defaults bleed light through.\nRule id: fq.minimap.no-bg"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ddb303a8b00f7993", "name": "React Flow <Controls> without dark theming \u2014 services/prism-service/prism_service/web/src/components/understand/PrismFil", "shortDescription": {"text": "React Flow <Controls> without dark theming \u2014 services/prism-service/prism_service/web/src/components/understand/PrismFileGraph.tsx:203"}, "fullDescription": {"text": "`<Controls>` ships with white buttons. Override `.react-flow__controls` and `.react-flow__controls-button` in your stylesheet or pass a styled wrapper.\n\nWhy: P1 in CHECKLIST.md \u2014 vendor defaults bleed light through.\nRule id: fq.controls.no-bg"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d9d80f60426986af", "name": "`truncate` class without `title=` for hover reveal \u2014 services/prism-service/prism_service/web/src/components/understand/", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 services/prism-service/prism_service/web/src/components/understand/PrismFileDetail.tsx:87"}, "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-53af8f6889339d01", "name": "`truncate` class without `title=` for hover reveal \u2014 services/prism-service/prism_service/web/src/components/understand/", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 services/prism-service/prism_service/web/src/components/understand/PrismLayerDetail.tsx:94"}, "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-dad84658f58bdeb5", "name": "`truncate` class without `title=` for hover reveal \u2014 services/prism-service/prism_service/web/src/components/conductor/S", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 services/prism-service/prism_service/web/src/components/conductor/SdlcProgress.tsx:192"}, "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-31326a70070a54fd", "name": "`truncate` class without `title=` for hover reveal \u2014 services/prism-service/prism_service/web/src/pages/LearningPage.tsx", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 services/prism-service/prism_service/web/src/pages/LearningPage.tsx:285"}, "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-dd97ed8a8d4ffa68", "name": "`truncate` class without `title=` for hover reveal \u2014 services/prism-service/prism_service/web/src/pages/TaskDetailPage.t", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 services/prism-service/prism_service/web/src/pages/TaskDetailPage.tsx:687"}, "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-e77cc7aa0118bda5", "name": "`truncate` class without `title=` for hover reveal \u2014 services/prism-service/prism_service/web/src/pages/ExplorePage.tsx:", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 services/prism-service/prism_service/web/src/pages/ExplorePage.tsx:238"}, "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-e2e3a389c45e45ad", "name": "`truncate` class without `title=` for hover reveal \u2014 services/prism-service/prism_service/web/src/pages/RetrievalsPage.t", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 services/prism-service/prism_service/web/src/pages/RetrievalsPage.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-66ceb3606f610e89", "name": "`truncate` class without `title=` for hover reveal \u2014 services/prism-service/prism_service/web/src/pages/SettingsPage.tsx", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 services/prism-service/prism_service/web/src/pages/SettingsPage.tsx:1271"}, "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-e1d98dbc60ff8d0e", "name": "`truncate` class without `title=` for hover reveal \u2014 services/prism-service/prism_service/web/src/pages/DashboardPage.ts", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 services/prism-service/prism_service/web/src/pages/DashboardPage.tsx:261"}, "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-df29e972f4bf6ac0", "name": "`truncate` class without `title=` for hover reveal \u2014 services/prism-service/prism_service/web/src/pages/ConductorPage.ts", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 services/prism-service/prism_service/web/src/pages/ConductorPage.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-642a3c118bf2919c", "name": "`truncate` class without `title=` for hover reveal \u2014 services/prism-service/prism_service/web/src/pages/TaskTextPage.tsx", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 services/prism-service/prism_service/web/src/pages/TaskTextPage.tsx:57"}, "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-d251a05f66a338d1", "name": "Stray `console.log` in TS/JS \u2014 plugins/prism-devtools/skills/skill-builder/scripts/validate-skill.js:51", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 plugins/prism-devtools/skills/skill-builder/scripts/validate-skill.js:51"}, "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-21b527f043a66e28", "name": "Privileged port 13 in use", "shortDescription": {"text": "Privileged port 13 in use"}, "fullDescription": {"text": "Port 13 is privileged (<1024). Make sure the service runs with the right caps or front it with a non-privileged port via a load balancer."}, "properties": {"scanner": "scanner-primary", "layer": "network", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-81668e643eb1f0e8", "name": "Privileged port 40 in use", "shortDescription": {"text": "Privileged port 40 in use"}, "fullDescription": {"text": "Port 40 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-de0cf68b2c83e6b6", "name": "Dockerfile runs as root: services/prism-service/Dockerfile", "shortDescription": {"text": "Dockerfile runs as root: services/prism-service/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-5ed4ed0d5f9ffb06", "name": "Docker base image is tag-pinned but not digest-pinned: node:22-slim", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: node:22-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-21abe8232cdeda20", "name": "Docker base image is tag-pinned but not digest-pinned: python:3.12-slim", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: python:3.12-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-d508af629a978f76", "name": "Insecure pattern 'subprocess_shell_true' in benchmarks/swebench/patch_run.py:83", "shortDescription": {"text": "Insecure pattern 'subprocess_shell_true' in benchmarks/swebench/patch_run.py:83"}, "fullDescription": {"text": "Found a known-risky pattern (subprocess_shell_true). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-31e2ffed8e7e3812", "name": "Insecure pattern 'exec_used' in services/prism-service/prism_service/__version__.py:582", "shortDescription": {"text": "Insecure pattern 'exec_used' in services/prism-service/prism_service/__version__.py:582"}, "fullDescription": {"text": "Found a known-risky pattern (exec_used). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ce825306a191a86f", "name": "Insecure pattern 'exec_used' in services/prism-service/prism_service/main.py:516", "shortDescription": {"text": "Insecure pattern 'exec_used' in services/prism-service/prism_service/main.py:516"}, "fullDescription": {"text": "Found a known-risky pattern (exec_used). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0284cb7b4b979c3a", "name": "Insecure pattern 'direct_innerhtml_assignment' in services/prism-service/prism_service/web/src/components/plan/Mermaid.t", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in services/prism-service/prism_service/web/src/components/plan/Mermaid.tsx:40"}, "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-afedaf32c71e5c88", "name": "Possible secret in plugins/prism-devtools/workflows/strangler-pattern-migration.yaml", "shortDescription": {"text": "Possible secret in plugins/prism-devtools/workflows/strangler-pattern-migration.yaml"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-9df2663ec77fed7d", "name": "Possible secret in plugins/prism-devtools/skills/strangler-pattern/reference/strangler-pattern-migration.yaml", "shortDescription": {"text": "Possible secret in plugins/prism-devtools/skills/strangler-pattern/reference/strangler-pattern-migration.yaml"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-e74f294b720edd78", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@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-01fb03e56eb997db", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@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-fda29672495f5721", "name": "GitHub Actions workflow grants broad write permissions", "shortDescription": {"text": "GitHub Actions workflow grants broad write permissions"}, "fullDescription": {"text": "CI tokens with write permissions increase blast radius when an action, dependency, or PR workflow is compromised. Prefer job-level least-privilege permissions."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-46c644c6227e4d4a", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@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-1838a141491ce38c", "name": "GitHub Actions workflow grants broad write permissions", "shortDescription": {"text": "GitHub Actions workflow grants broad write permissions"}, "fullDescription": {"text": "CI tokens with write permissions increase blast radius when an action, dependency, or PR workflow is compromised. Prefer job-level least-privilege permissions."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-20337c514d8f5d59", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@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-22067b0ff9b70859", "name": "GitHub Actions workflow grants broad write permissions", "shortDescription": {"text": "GitHub Actions workflow grants broad write permissions"}, "fullDescription": {"text": "CI tokens with write permissions increase blast radius when an action, dependency, or PR workflow is compromised. Prefer job-level least-privilege permissions."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a7b3e9a07b6f2a8e", "name": "pip extra-index-url can enable dependency confusion", "shortDescription": {"text": "pip extra-index-url can enable dependency confusion"}, "fullDescription": {"text": "pip --extra-index-url searches an additional package index and can resolve public packages when a private package name is missing or has a lower version. Prefer a single controlled index or explicit hashes and package source policy."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1c88ec4a91d0a22d", "name": "Very large file: services/prism-service/prism_service/__version__.py (2086 lines)", "shortDescription": {"text": "Very large file: services/prism-service/prism_service/__version__.py (2086 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-2ec06c5ea0e1d4bf", "name": "Very large file: services/prism-service/prism_service/engines/brain_engine.py (4184 lines)", "shortDescription": {"text": "Very large file: services/prism-service/prism_service/engines/brain_engine.py (4184 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-1681999a38f9c7c4", "name": "Very large file: services/prism-service/prism_service/mcp/tools.py (3636 lines)", "shortDescription": {"text": "Very large file: services/prism-service/prism_service/mcp/tools.py (3636 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-d591c2d70bd0a194", "name": "Very large file: services/prism-service/prism_service/routes/graph_static.py (1930 lines)", "shortDescription": {"text": "Very large file: services/prism-service/prism_service/routes/graph_static.py (1930 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-07a0d8d374160b6c", "name": "Very large file: services/prism-service/prism_service/web/src/pages/SettingsPage.tsx (2985 lines)", "shortDescription": {"text": "Very large file: services/prism-service/prism_service/web/src/pages/SettingsPage.tsx (2985 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-d77d7c99f655215b", "name": "Very large file: services/prism-service/prism_service/services/conductor_service.py (2479 lines)", "shortDescription": {"text": "Very large file: services/prism-service/prism_service/services/conductor_service.py (2479 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-ec93ec71444fb1d0", "name": "Very large file: services/prism-service/prism_service/services/graph_service.py (1611 lines)", "shortDescription": {"text": "Very large file: services/prism-service/prism_service/services/graph_service.py (1611 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-b03e366584483a3f", "name": "Very large file: plugins/prism-devtools/scripts/validate-docs.py (1636 lines)", "shortDescription": {"text": "Very large file: plugins/prism-devtools/scripts/validate-docs.py (1636 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-3d5370dc85fa865c", "name": "Node manifest has dependencies but no lockfile: services/prism-service/desktop/tauri-shell/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: services/prism-service/desktop/tauri-shell/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4f118adc024a7b37", "name": "Node manifest has dependencies but no lockfile: services/prism-service/prism_service/web/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: services/prism-service/prism_service/web/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-28d0cc64fe18d6f5", "name": "Node manifest has dependencies but no lockfile: plugins/prism-devtools/skills/skill-builder/scripts/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: plugins/prism-devtools/skills/skill-builder/scripts/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "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 353 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 28 placeholder/mock markers across 13 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-749d4bc1bd66df5f", "name": "Agent instructions exist but release-hardening basics are missing", "shortDescription": {"text": "Agent instructions exist but release-hardening basics are missing"}, "fullDescription": {"text": "AI-coder instruction files were found, but the repo is missing lockfile. Treat this as a contract gap: the agent is guided, but the generated output is not yet guarded by the controls that make it repeatable."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ea8f3013f588db25", "name": "Shallow git history limits provenance confidence", "shortDescription": {"text": "Shallow git history limits provenance confidence"}, "fullDescription": {"text": "The repository is a shallow clone. Origin/evolution analysis cannot distinguish fresh generation, imported legacy code, or long-lived human code with high confidence."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8424db9c75e04ba4", "name": "Very short observed git history", "shortDescription": {"text": "Very short observed git history"}, "fullDescription": {"text": "The repo has multiple source files but two or fewer visible commits. This is not a failure by itself, but it lowers confidence in evolution-based diagnosis."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-bf6ac7a56f5449c6", "name": "Agent authority lacks a verifier contract: plugins/prism-devtools/skills/version-bump/SKILL.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: plugins/prism-devtools/skills/version-bump/SKILL.md"}, "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-523fb13004598549", "name": "Agent authority lacks a verifier contract: plugins/prism-devtools/skills/qa-gate/SKILL.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: plugins/prism-devtools/skills/qa-gate/SKILL.md"}, "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-791e671c28641179", "name": "Agent authority lacks a verifier contract: plugins/prism-devtools/skills/remember/SKILL.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: plugins/prism-devtools/skills/remember/SKILL.md"}, "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-41b894b7fdf62202", "name": "Agent authority lacks a verifier contract: plugins/prism-devtools/skills/execute-checklist/SKILL.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: plugins/prism-devtools/skills/execute-checklist/SKILL.md"}, "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-ffeb7c0c3c74ba1d", "name": "Agent authority lacks a verifier contract: plugins/prism-devtools/skills/initialize-architecture/SKILL.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: plugins/prism-devtools/skills/initialize-architecture/SKILL.md"}, "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-837b8ea59c02822e", "name": "Agent authority lacks a verifier contract: plugins/prism-devtools/skills/shared/SKILL.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: plugins/prism-devtools/skills/shared/SKILL.md"}, "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-404be69ba7fd9b58", "name": "Agent authority lacks a verifier contract: plugins/prism-devtools/skills/sdlc-handoff/SKILL.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: plugins/prism-devtools/skills/sdlc-handoff/SKILL.md"}, "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-b3dca0bd0059c513", "name": "Agent authority lacks a verifier contract: plugins/prism-devtools/skills/file-first/SKILL.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: plugins/prism-devtools/skills/file-first/SKILL.md"}, "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-f6a978b92c4fefd9", "name": "Agent authority lacks a verifier contract: plugins/prism-devtools/skills/conductor/SKILL.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: plugins/prism-devtools/skills/conductor/SKILL.md"}, "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-29b538b6abbe2f40", "name": "Agent authority lacks a verifier contract: plugins/prism-devtools/skills/validate/SKILL.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: plugins/prism-devtools/skills/validate/SKILL.md"}, "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-d8e2bc0618dffc33", "name": "Agent authority lacks a verifier contract: plugins/prism-devtools/skills/nfr-assess/SKILL.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: plugins/prism-devtools/skills/nfr-assess/SKILL.md"}, "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-ddb1a4c39849e541", "name": "Network/subprocess call without timeout or try/except \u2014 benchmarks/run_experiments.py:80", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 benchmarks/run_experiments.py:80"}, "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-e385451a33457624", "name": "Network/subprocess call without timeout or try/except \u2014 benchmarks/swebench/paired_campaign.py:225", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 benchmarks/swebench/paired_campaign.py:225"}, "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-42d72e7483502956", "name": "Network/subprocess call without timeout or try/except \u2014 benchmarks/swebench/patch_scaffold_check.py:22", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 benchmarks/swebench/patch_scaffold_check.py:22"}, "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-be2e3bce4e8586dc", "name": "Network/subprocess call without timeout or try/except \u2014 benchmarks/swebench/patch_run.py:98", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 benchmarks/swebench/patch_run.py:98"}, "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-417abb62a230fa9b", "name": "Network/subprocess call without timeout or try/except \u2014 benchmarks/swebench/evaluate_predictions_wsl.py:22", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 benchmarks/swebench/evaluate_predictions_wsl.py:22"}, "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-bc22ba4e9dc6c268", "name": "Network/subprocess call without timeout or try/except \u2014 benchmarks/swebench/evaluate_predictions.py:46", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 benchmarks/swebench/evaluate_predictions.py:46"}, "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-5dc9944d510ed38c", "name": "Network/subprocess call without timeout or try/except \u2014 benchmarks/swebench/run.py:91", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 benchmarks/swebench/run.py:91"}, "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-222c3e1ecc77fed4", "name": "Network/subprocess call without timeout or try/except \u2014 benchmarks/scorecard/run.py:50", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 benchmarks/scorecard/run.py:50"}, "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-2272ca0afa7c726b", "name": "Commented-code block (7 lines) in .claude/workflows/implement.js:42", "shortDescription": {"text": "Commented-code block (7 lines) in .claude/workflows/implement.js: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-71084fdfaa4eda5e", "name": "Commented-code block (8 lines) in .claude/workflows/prototype.js:69", "shortDescription": {"text": "Commented-code block (8 lines) in .claude/workflows/prototype.js: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-724508538baf3886", "name": "Commented-code block (5 lines) in services/prism-service/tests/unit/test_task_oracle.py:89", "shortDescription": {"text": "Commented-code block (5 lines) in services/prism-service/tests/unit/test_task_oracle.py:89"}, "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-7f70dc07d5e75c8b", "name": "Commented-code block (7 lines) in services/prism-service/tests/unit/test_mcp_tool_profiles.py:24", "shortDescription": {"text": "Commented-code block (7 lines) in services/prism-service/tests/unit/test_mcp_tool_profiles.py:24"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-de0bffb685a86d34", "name": "Commented-code block (5 lines) in services/prism-service/tests/unit/test_conductor_page_animated_cleanup_ui.py:85", "shortDescription": {"text": "Commented-code block (5 lines) in services/prism-service/tests/unit/test_conductor_page_animated_cleanup_ui.py:85"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3645f4dcb5cee11c", "name": "Commented-code block (6 lines) in services/prism-service/tests/unit/test_conductor_v2_verifier_gate.py:86", "shortDescription": {"text": "Commented-code block (6 lines) in services/prism-service/tests/unit/test_conductor_v2_verifier_gate.py: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-efa60b9b3e497714", "name": "Commented-code block (6 lines) in services/prism-service/tests/unit/test_task_embedding.py:79", "shortDescription": {"text": "Commented-code block (6 lines) in services/prism-service/tests/unit/test_task_embedding.py:79"}, "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-eda4af9b91fa085f", "name": "Commented-code block (20 lines) in services/prism-service/tests/unit/test_lifespan_lock_recovery.py:46", "shortDescription": {"text": "Commented-code block (20 lines) in services/prism-service/tests/unit/test_lifespan_lock_recovery.py:46"}, "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-82088cda6eb3db2c", "name": "Legacy-named symbol `tour_builder_v1` in services/prism-service/tests/unit/test_understand_drainer.py:66", "shortDescription": {"text": "Legacy-named symbol `tour_builder_v1` in services/prism-service/tests/unit/test_understand_drainer.py:66"}, "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-fe2171f7b83de2e6", "name": "Legacy-named symbol `tour_builder_v1` in services/prism-service/tests/unit/test_analyzer_runner_classify.py:118", "shortDescription": {"text": "Legacy-named symbol `tour_builder_v1` in services/prism-service/tests/unit/test_analyzer_runner_classify.py:118"}, "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-dabd9143e3f651ed", "name": "Legacy-named symbol `a_to_legacy` in services/prism-service/tests/unit/test_brain_call_chain_call_site.py:83", "shortDescription": {"text": "Legacy-named symbol `a_to_legacy` in services/prism-service/tests/unit/test_brain_call_chain_call_site.py:83"}, "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-bece5278e6b3f884", "name": "Commented-code block (5 lines) in services/prism-service/tests/unit/test_reinforce_sdlc_gates_real_proof.py:85", "shortDescription": {"text": "Commented-code block (5 lines) in services/prism-service/tests/unit/test_reinforce_sdlc_gates_real_proof.py:85"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c844b1b71eada32b", "name": "Legacy-named symbol `sha_old` in services/prism-service/tests/unit/test_source_service.py:124", "shortDescription": {"text": "Legacy-named symbol `sha_old` in services/prism-service/tests/unit/test_source_service.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-2aed45e2af2aa793", "name": "Commented-code block (6 lines) in services/prism-service/tests/unit/test_cuped.py:86", "shortDescription": {"text": "Commented-code block (6 lines) in services/prism-service/tests/unit/test_cuped.py: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-856a9ba395ada5a9", "name": "Commented-code block (7 lines) in services/prism-service/prism_service/config.py:45", "shortDescription": {"text": "Commented-code block (7 lines) in services/prism-service/prism_service/config.py:45"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-37abc8ef1241026e", "name": "Commented-code block (9 lines) in services/prism-service/prism_service/project_context.py:93", "shortDescription": {"text": "Commented-code block (9 lines) in services/prism-service/prism_service/project_context.py:93"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d7f2d7b3359b419e", "name": "Commented-code block (5 lines) in services/prism-service/prism_service/main.py:330", "shortDescription": {"text": "Commented-code block (5 lines) in services/prism-service/prism_service/main.py:330"}, "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-4d25d564b2ad4c74", "name": "Commented-code block (5 lines) in services/prism-service/prism_service/engines/understand_engine.py:189", "shortDescription": {"text": "Commented-code block (5 lines) in services/prism-service/prism_service/engines/understand_engine.py: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-f380af617f4244bb", "name": "Commented-code block (6 lines) in services/prism-service/prism_service/engines/brain_engine.py:26", "shortDescription": {"text": "Commented-code block (6 lines) in services/prism-service/prism_service/engines/brain_engine.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-f6e8a7d706dcd6fa", "name": "Network/subprocess call without timeout or try/except \u2014 services/prism-service/prism_service/engines/brain_engine.py:355", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 services/prism-service/prism_service/engines/brain_engine.py:3559"}, "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-31105edc82d07e55", "name": "Commented-code block (6 lines) in services/prism-service/prism_service/models/workflow.py:8", "shortDescription": {"text": "Commented-code block (6 lines) in services/prism-service/prism_service/models/workflow.py:8"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c3b9a1167cf184b6", "name": "Commented-code block (8 lines) in services/prism-service/prism_service/models/task.py:27", "shortDescription": {"text": "Commented-code block (8 lines) in services/prism-service/prism_service/models/task.py:27"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b97561d4624f6b15", "name": "Commented-code block (5 lines) in services/prism-service/prism_service/api/memory.py:18", "shortDescription": {"text": "Commented-code block (5 lines) in services/prism-service/prism_service/api/memory.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-0fc2ba0ad7a03984", "name": "Commented-code block (5 lines) in services/prism-service/prism_service/api/brain.py:101", "shortDescription": {"text": "Commented-code block (5 lines) in services/prism-service/prism_service/api/brain.py:101"}, "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-07db8f10fd611a7c", "name": "Commented-code block (5 lines) in services/prism-service/prism_service/api/graph.py:33", "shortDescription": {"text": "Commented-code block (5 lines) in services/prism-service/prism_service/api/graph.py:33"}, "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-0c924a71d5048c53", "name": "Commented-code block (5 lines) in services/prism-service/prism_service/api/tasks.py:63", "shortDescription": {"text": "Commented-code block (5 lines) in services/prism-service/prism_service/api/tasks.py:63"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a87f9cebcfaf3f4d", "name": "Commented-code block (5 lines) in services/prism-service/prism_service/mcp/tools.py:1508", "shortDescription": {"text": "Commented-code block (5 lines) in services/prism-service/prism_service/mcp/tools.py:1508"}, "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-6dbbeb81885c09d2", "name": "Commented-code block (6 lines) in services/prism-service/prism_service/mcp/server.py:55", "shortDescription": {"text": "Commented-code block (6 lines) in services/prism-service/prism_service/mcp/server.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-56f3f44b75ea3ece", "name": "Commented-code block (5 lines) in services/prism-service/prism_service/cli/prism_cli.py:148", "shortDescription": {"text": "Commented-code block (5 lines) in services/prism-service/prism_service/cli/prism_cli.py:148"}, "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-5444336d0022d225", "name": "Network/subprocess call without timeout or try/except \u2014 services/prism-service/prism_service/cli/prism_cli.py:81", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 services/prism-service/prism_service/cli/prism_cli.py:81"}, "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-f0b93ea967e440c7", "name": "Commented-code block (5 lines) in services/prism-service/prism_service/assets/stop_record_hook.py:162", "shortDescription": {"text": "Commented-code block (5 lines) in services/prism-service/prism_service/assets/stop_record_hook.py:162"}, "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-ea93d9fef2af4996", "name": "Commented-code block (6 lines) in services/prism-service/prism_service/web/src/App.tsx:10", "shortDescription": {"text": "Commented-code block (6 lines) in services/prism-service/prism_service/web/src/App.tsx:10"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b919b9d29fe2e2dc", "name": "Commented-code block (5 lines) in services/prism-service/prism_service/web/src/components/EvidenceView.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in services/prism-service/prism_service/web/src/components/EvidenceView.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8b2dc1315831fd45", "name": "Commented-code block (6 lines) in services/prism-service/prism_service/web/src/components/Sidebar.tsx:37", "shortDescription": {"text": "Commented-code block (6 lines) in services/prism-service/prism_service/web/src/components/Sidebar.tsx: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-63b5e4e7705be589", "name": "Commented-code block (5 lines) in services/prism-service/prism_service/web/src/components/ui.tsx:72", "shortDescription": {"text": "Commented-code block (5 lines) in services/prism-service/prism_service/web/src/components/ui.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-8b9bf5c484b4ff3e", "name": "Commented-code block (5 lines) in services/prism-service/prism_service/web/src/components/understand/PrismDomainNode.tsx", "shortDescription": {"text": "Commented-code block (5 lines) in services/prism-service/prism_service/web/src/components/understand/PrismDomainNode.tsx:22"}, "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-5ed5c9926f340d06", "name": "Commented-code block (5 lines) in services/prism-service/prism_service/web/src/components/understand/PrismLayerNode.tsx:", "shortDescription": {"text": "Commented-code block (5 lines) in services/prism-service/prism_service/web/src/components/understand/PrismLayerNode.tsx:29"}, "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-666638bf3c044a96", "name": "Commented-code block (7 lines) in services/prism-service/prism_service/web/src/components/conductor/TokenTurns.tsx:1", "shortDescription": {"text": "Commented-code block (7 lines) in services/prism-service/prism_service/web/src/components/conductor/TokenTurns.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-57ac900f89d4bafe", "name": "Commented-code block (7 lines) in services/prism-service/prism_service/web/src/components/conductor/SdlcProgress.tsx:1", "shortDescription": {"text": "Commented-code block (7 lines) in services/prism-service/prism_service/web/src/components/conductor/SdlcProgress.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-491f46a43fc25887", "name": "Commented-code block (6 lines) in services/prism-service/prism_service/web/src/components/conductor/TaskActivityGantt.ts", "shortDescription": {"text": "Commented-code block (6 lines) in services/prism-service/prism_service/web/src/components/conductor/TaskActivityGantt.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f43b1757185a74ee", "name": "`fetch()` without try/.catch or AbortSignal \u2014 services/prism-service/prism_service/web/src/lib/project.ts:62", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 services/prism-service/prism_service/web/src/lib/project.ts:62"}, "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-9cb10e6129e8ae98", "name": "Commented-code block (7 lines) in services/prism-service/prism_service/web/src/pages/TaskDetailPage.tsx:75", "shortDescription": {"text": "Commented-code block (7 lines) in services/prism-service/prism_service/web/src/pages/TaskDetailPage.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-0bc629b0771acf19", "name": "Commented-code block (7 lines) in services/prism-service/prism_service/web/src/pages/ExplorePage.tsx:14", "shortDescription": {"text": "Commented-code block (7 lines) in services/prism-service/prism_service/web/src/pages/ExplorePage.tsx: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-e2a6fb32ca5062ea", "name": "Commented-code block (6 lines) in services/prism-service/prism_service/web/src/pages/TasksPage.tsx:25", "shortDescription": {"text": "Commented-code block (6 lines) in services/prism-service/prism_service/web/src/pages/TasksPage.tsx:25"}, "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-60681c6a9cea8b71", "name": "Commented-code block (5 lines) in services/prism-service/prism_service/web/src/pages/SettingsPage.tsx:1444", "shortDescription": {"text": "Commented-code block (5 lines) in services/prism-service/prism_service/web/src/pages/SettingsPage.tsx:1444"}, "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-140ac6e965291807", "name": "Commented-code block (8 lines) in services/prism-service/prism_service/web/src/pages/MemoryPage.tsx:87", "shortDescription": {"text": "Commented-code block (8 lines) in services/prism-service/prism_service/web/src/pages/MemoryPage.tsx:87"}, "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-9ca2333f53bf1431", "name": "Commented-code block (5 lines) in services/prism-service/prism_service/web/src/pages/UnderstandPage.tsx:34", "shortDescription": {"text": "Commented-code block (5 lines) in services/prism-service/prism_service/web/src/pages/UnderstandPage.tsx: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-92ebaa7531bbadaa", "name": "Commented-code block (10 lines) in services/prism-service/prism_service/web/src/pages/ConductorPage.tsx:115", "shortDescription": {"text": "Commented-code block (10 lines) in services/prism-service/prism_service/web/src/pages/ConductorPage.tsx:115"}, "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-9f0d57b3fa849d11", "name": "Commented-code block (5 lines) in services/prism-service/prism_service/inference/claude_cli.py:68", "shortDescription": {"text": "Commented-code block (5 lines) in services/prism-service/prism_service/inference/claude_cli.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-ca08eaa6b9ae0c40", "name": "Network/subprocess call without timeout or try/except \u2014 services/prism-service/prism_service/inference/claude_cli.py:233", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 services/prism-service/prism_service/inference/claude_cli.py:233"}, "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-3eb57967c05adf1d", "name": "Commented-code block (5 lines) in services/prism-service/prism_service/services/verifier_service.py:177", "shortDescription": {"text": "Commented-code block (5 lines) in services/prism-service/prism_service/services/verifier_service.py:177"}, "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-f581b6098fca0eaa", "name": "Legacy-named symbol `_decay_unused` in services/prism-service/prism_service/services/governance.py:54", "shortDescription": {"text": "Legacy-named symbol `_decay_unused` in services/prism-service/prism_service/services/governance.py:54"}, "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-284a9df7fbae53f2", "name": "Commented-code block (5 lines) in services/prism-service/prism_service/services/understand_view.py:327", "shortDescription": {"text": "Commented-code block (5 lines) in services/prism-service/prism_service/services/understand_view.py:327"}, "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-75306444b4df0579", "name": "Commented-code block (6 lines) in services/prism-service/prism_service/services/memory_service.py:16", "shortDescription": {"text": "Commented-code block (6 lines) in services/prism-service/prism_service/services/memory_service.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-b39aa83c1064e353", "name": "Commented-code block (5 lines) in services/prism-service/prism_service/services/task_service.py:112", "shortDescription": {"text": "Commented-code block (5 lines) in services/prism-service/prism_service/services/task_service.py:112"}, "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-fa05e1469cf4e392", "name": "Commented-code block (6 lines) in services/prism-service/prism_service/services/claude_transcripts.py:45", "shortDescription": {"text": "Commented-code block (6 lines) in services/prism-service/prism_service/services/claude_transcripts.py:45"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-285bb2c2cf64bd8c", "name": "Commented-code block (9 lines) in services/prism-service/prism_service/services/source_service.py:343", "shortDescription": {"text": "Commented-code block (9 lines) in services/prism-service/prism_service/services/source_service.py:343"}, "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-bb1dc5f30c0501ae", "name": "Commented-code block (5 lines) in services/prism-service/prism_service/services/conductor_service.py:381", "shortDescription": {"text": "Commented-code block (5 lines) in services/prism-service/prism_service/services/conductor_service.py:381"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0e4fcf4615753246", "name": "Commented-code block (5 lines) in services/prism-service/prism_service/services/reflection_runner.py:28", "shortDescription": {"text": "Commented-code block (5 lines) in services/prism-service/prism_service/services/reflection_runner.py:28"}, "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-9838c7cf1604750b", "name": "Commented-code block (8 lines) in services/prism-service/prism_service/services/auto_updater.py:71", "shortDescription": {"text": "Commented-code block (8 lines) in services/prism-service/prism_service/services/auto_updater.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-572139a9c6159d9c", "name": "Commented-code block (7 lines) in services/prism-service/prism_service/services/memory_ops_worker.py:65", "shortDescription": {"text": "Commented-code block (7 lines) in services/prism-service/prism_service/services/memory_ops_worker.py: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-07a1acf3bdb6424e", "name": "Stub function `apply_verdict` (body is just `pass`/`return`) \u2014 services/prism-service/prism_service/services/memory_ops_", "shortDescription": {"text": "Stub function `apply_verdict` (body is just `pass`/`return`) \u2014 services/prism-service/prism_service/services/memory_ops_worker.py:176"}, "fullDescription": {"text": "Likely an AI scaffold that was never filled in. Remove or implement."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7c8d9cd36663fe35", "name": "Commented-code block (5 lines) in services/prism-service/prism_service/services/brain_service.py:400", "shortDescription": {"text": "Commented-code block (5 lines) in services/prism-service/prism_service/services/brain_service.py:400"}, "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-4bb59de451a32951", "name": "Commented-code block (5 lines) in services/prism-service/prism_service/services/graph_service.py:97", "shortDescription": {"text": "Commented-code block (5 lines) in services/prism-service/prism_service/services/graph_service.py:97"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f36ff840c8887c8f", "name": "Commented-code block (7 lines) in services/prism-service/prism_service/services/memory_ops/forget.py:38", "shortDescription": {"text": "Commented-code block (7 lines) in services/prism-service/prism_service/services/memory_ops/forget.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-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:\nbenchmarks/contextpack/run.py:call, benchmarks/contextpack/run.py:call, benchmarks/contextpack/run.py:call\n\nThis is *the* AI-coder failure mode (4\u00d7 more duplication in vibe-coded repos \u2014 see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2c04133e54348533", "name": "Near-duplicate function bodies in 2 places", "shortDescription": {"text": "Near-duplicate function bodies in 2 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nbenchmarks/swebench/evaluate_predictions_wsl.py:main, benchmarks/swebench/evaluate_predictions.py:main\n\nThis is *the* AI-coder failure mode (4\u00d7 more duplication in vibe-coded repos \u2014 see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-02525d39071dd2c7", "name": "Near-duplicate function bodies in 5 places", "shortDescription": {"text": "Near-duplicate function bodies in 5 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nplugins/prism-devtools/scripts/validate-docs.py:validate, plugins/prism-devtools/scripts/validate-docs.py:validate, plugins/prism-devtools/scripts/validate-docs.py:validate, plugins/prism-devtools/scripts/validate-docs.py:validate\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-5b43faffc9cb9689", "name": "Frontend route `/explore` has no Link/navigate to it \u2014 services/prism-service/prism_service/web/src/App.tsx", "shortDescription": {"text": "Frontend route `/explore` has no Link/navigate to it \u2014 services/prism-service/prism_service/web/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-ef8965c0b77c0d7f", "name": "Frontend route `/graph` has no Link/navigate to it \u2014 services/prism-service/prism_service/web/src/App.tsx", "shortDescription": {"text": "Frontend route `/graph` has no Link/navigate to it \u2014 services/prism-service/prism_service/web/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-fa4c883f353cd22a", "name": "Frontend route `/memory/:id` has no Link/navigate to it \u2014 services/prism-service/prism_service/web/src/App.tsx", "shortDescription": {"text": "Frontend route `/memory/:id` has no Link/navigate to it \u2014 services/prism-service/prism_service/web/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-41f99fbc94e13380", "name": "Frontend route `/tasks/:id` has no Link/navigate to it \u2014 services/prism-service/prism_service/web/src/App.tsx", "shortDescription": {"text": "Frontend route `/tasks/:id` has no Link/navigate to it \u2014 services/prism-service/prism_service/web/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-8738fb6d6437f426", "name": "Frontend route `/tasks/:id/:section` has no Link/navigate to it \u2014 services/prism-service/prism_service/web/src/App.tsx", "shortDescription": {"text": "Frontend route `/tasks/:id/:section` has no Link/navigate to it \u2014 services/prism-service/prism_service/web/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-c1cedd5522ca9536", "name": "Frontend route `/settings/:section` has no Link/navigate to it \u2014 services/prism-service/prism_service/web/src/App.tsx", "shortDescription": {"text": "Frontend route `/settings/:section` has no Link/navigate to it \u2014 services/prism-service/prism_service/web/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-0d0137696fc01bd6", "name": "FastAPI POST `resync` without auth dependency \u2014 services/prism-service/prism_service/api/staleness.py:88", "shortDescription": {"text": "FastAPI POST `resync` without auth dependency \u2014 services/prism-service/prism_service/api/staleness.py:88"}, "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-329681a738fa2825", "name": "FastAPI POST `create_project` without auth dependency \u2014 services/prism-service/prism_service/api/projects.py:73", "shortDescription": {"text": "FastAPI POST `create_project` without auth dependency \u2014 services/prism-service/prism_service/api/projects.py:73"}, "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-fa89a01f61baba7b", "name": "FastAPI DELETE `delete_project` without auth dependency \u2014 services/prism-service/prism_service/api/projects.py:153", "shortDescription": {"text": "FastAPI DELETE `delete_project` without auth dependency \u2014 services/prism-service/prism_service/api/projects.py:153"}, "fullDescription": {"text": "`@router.delete` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-78fb655d6b458412", "name": "FastAPI POST `ingest` without auth dependency \u2014 services/prism-service/prism_service/api/agent_runs.py:27", "shortDescription": {"text": "FastAPI POST `ingest` without auth dependency \u2014 services/prism-service/prism_service/api/agent_runs.py:27"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e882cb120fc1b4e8", "name": "FastAPI POST `configure` without auth dependency \u2014 services/prism-service/prism_service/api/understand.py:39", "shortDescription": {"text": "FastAPI POST `configure` without auth dependency \u2014 services/prism-service/prism_service/api/understand.py:39"}, "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-dbd1bf1236aecf9f", "name": "FastAPI POST `refresh` without auth dependency \u2014 services/prism-service/prism_service/api/understand.py:100", "shortDescription": {"text": "FastAPI POST `refresh` without auth dependency \u2014 services/prism-service/prism_service/api/understand.py:100"}, "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-5a6bcbfddaf9f43d", "name": "FastAPI POST `set_policy` without auth dependency \u2014 services/prism-service/prism_service/api/learning.py:59", "shortDescription": {"text": "FastAPI POST `set_policy` without auth dependency \u2014 services/prism-service/prism_service/api/learning.py:59"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-207f9ed3e243e63d", "name": "FastAPI POST `entry_action` without auth dependency \u2014 services/prism-service/prism_service/api/memory.py:146", "shortDescription": {"text": "FastAPI POST `entry_action` without auth dependency \u2014 services/prism-service/prism_service/api/memory.py:146"}, "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-b09f4dc9ea005e85", "name": "FastAPI POST `set_claude_config` without auth dependency \u2014 services/prism-service/prism_service/api/memory.py:219", "shortDescription": {"text": "FastAPI POST `set_claude_config` without auth dependency \u2014 services/prism-service/prism_service/api/memory.py:219"}, "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-3c1a4be1d399f716", "name": "FastAPI POST `import_claude_memories` without auth dependency \u2014 services/prism-service/prism_service/api/memory.py:242", "shortDescription": {"text": "FastAPI POST `import_claude_memories` without auth dependency \u2014 services/prism-service/prism_service/api/memory.py:242"}, "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-fb46a5f5febaaa32", "name": "FastAPI POST `reindex` without auth dependency \u2014 services/prism-service/prism_service/api/brain.py:49", "shortDescription": {"text": "FastAPI POST `reindex` without auth dependency \u2014 services/prism-service/prism_service/api/brain.py:49"}, "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-176d89aad9f85691", "name": "FastAPI POST `understand` without auth dependency \u2014 services/prism-service/prism_service/api/brain.py:71", "shortDescription": {"text": "FastAPI POST `understand` without auth dependency \u2014 services/prism-service/prism_service/api/brain.py:71"}, "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-c17fa37f70fe409b", "name": "FastAPI POST `ask` without auth dependency \u2014 services/prism-service/prism_service/api/brain.py:109", "shortDescription": {"text": "FastAPI POST `ask` without auth dependency \u2014 services/prism-service/prism_service/api/brain.py:109"}, "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-97a655265ba1a2ff", "name": "FastAPI POST `rebuild` without auth dependency \u2014 services/prism-service/prism_service/api/graph.py:49", "shortDescription": {"text": "FastAPI POST `rebuild` without auth dependency \u2014 services/prism-service/prism_service/api/graph.py:49"}, "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-71dcd4669747ab7f", "name": "FastAPI POST `enrich` without auth dependency \u2014 services/prism-service/prism_service/api/graph.py:153", "shortDescription": {"text": "FastAPI POST `enrich` without auth dependency \u2014 services/prism-service/prism_service/api/graph.py:153"}, "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-cd32ad56b02ce6c6", "name": "FastAPI POST `edges_between` without auth dependency \u2014 services/prism-service/prism_service/api/graph.py:193", "shortDescription": {"text": "FastAPI POST `edges_between` without auth dependency \u2014 services/prism-service/prism_service/api/graph.py:193"}, "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-b5fe8a11415343ad", "name": "FastAPI POST `create_task` without auth dependency \u2014 services/prism-service/prism_service/api/tasks.py:112", "shortDescription": {"text": "FastAPI POST `create_task` without auth dependency \u2014 services/prism-service/prism_service/api/tasks.py:112"}, "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-77842e01e3dd4d6a", "name": "FastAPI PATCH `update_task` without auth dependency \u2014 services/prism-service/prism_service/api/tasks.py:280", "shortDescription": {"text": "FastAPI PATCH `update_task` without auth dependency \u2014 services/prism-service/prism_service/api/tasks.py:280"}, "fullDescription": {"text": "`@router.patch` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a434f75ca64b9a74", "name": "FastAPI POST `clear` without auth dependency \u2014 services/prism-service/prism_service/api/github_auth.py:92", "shortDescription": {"text": "FastAPI POST `clear` without auth dependency \u2014 services/prism-service/prism_service/api/github_auth.py:92"}, "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-6bc6efdb1b7bfa71", "name": "FastAPI POST `configure` without auth dependency \u2014 services/prism-service/prism_service/api/github_auth.py:102", "shortDescription": {"text": "FastAPI POST `configure` without auth dependency \u2014 services/prism-service/prism_service/api/github_auth.py:102"}, "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-ac005e99919e8d95", "name": "FastAPI POST `set_client_id` without auth dependency \u2014 services/prism-service/prism_service/api/github_auth.py:127", "shortDescription": {"text": "FastAPI POST `set_client_id` without auth dependency \u2014 services/prism-service/prism_service/api/github_auth.py:127"}, "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-5772fe685243eba6", "name": "FastAPI POST `clear_client_id` without auth dependency \u2014 services/prism-service/prism_service/api/github_auth.py:136", "shortDescription": {"text": "FastAPI POST `clear_client_id` without auth dependency \u2014 services/prism-service/prism_service/api/github_auth.py:136"}, "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-f4a5ed542d68106d", "name": "FastAPI POST `device_start` without auth dependency \u2014 services/prism-service/prism_service/api/github_auth.py:142", "shortDescription": {"text": "FastAPI POST `device_start` without auth dependency \u2014 services/prism-service/prism_service/api/github_auth.py:142"}, "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-9e65004b9a5d7f8c", "name": "FastAPI POST `device_poll` without auth dependency \u2014 services/prism-service/prism_service/api/github_auth.py:167", "shortDescription": {"text": "FastAPI POST `device_poll` without auth dependency \u2014 services/prism-service/prism_service/api/github_auth.py:167"}, "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-b3edaaa77b47760a", "name": "FastAPI POST `check` without auth dependency \u2014 services/prism-service/prism_service/api/update.py:24", "shortDescription": {"text": "FastAPI POST `check` without auth dependency \u2014 services/prism-service/prism_service/api/update.py:24"}, "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-dbcbb37608a6abdd", "name": "FastAPI POST `apply` without auth dependency \u2014 services/prism-service/prism_service/api/update.py:33", "shortDescription": {"text": "FastAPI POST `apply` without auth dependency \u2014 services/prism-service/prism_service/api/update.py:33"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5f9249b94bf19893", "name": "FastAPI POST `feedback` without auth dependency \u2014 services/prism-service/prism_service/api/retrievals.py:22", "shortDescription": {"text": "FastAPI POST `feedback` without auth dependency \u2014 services/prism-service/prism_service/api/retrievals.py:22"}, "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-c8dbc534141d9e61", "name": "FastAPI POST `run_reflection` without auth dependency \u2014 services/prism-service/prism_service/api/consolidation.py:278", "shortDescription": {"text": "FastAPI POST `run_reflection` without auth dependency \u2014 services/prism-service/prism_service/api/consolidation.py:278"}, "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-d21533c6d7c24d7c", "name": "FastAPI POST `backfill` without auth dependency \u2014 services/prism-service/prism_service/api/consolidation.py:298", "shortDescription": {"text": "FastAPI POST `backfill` without auth dependency \u2014 services/prism-service/prism_service/api/consolidation.py:298"}, "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-6644b472f216459f", "name": "FastAPI POST `drain` without auth dependency \u2014 services/prism-service/prism_service/api/consolidation.py:310", "shortDescription": {"text": "FastAPI POST `drain` without auth dependency \u2014 services/prism-service/prism_service/api/consolidation.py:310"}, "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-6f7db31fc087509e", "name": "FastAPI POST `prune_noise` without auth dependency \u2014 services/prism-service/prism_service/api/consolidation.py:331", "shortDescription": {"text": "FastAPI POST `prune_noise` without auth dependency \u2014 services/prism-service/prism_service/api/consolidation.py:331"}, "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-5434964f3ccb0bdf", "name": "FastAPI POST `gate` without auth dependency \u2014 services/prism-service/prism_service/api/conductor.py:50", "shortDescription": {"text": "FastAPI POST `gate` without auth dependency \u2014 services/prism-service/prism_service/api/conductor.py:50"}, "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-cd18602d9d945a35", "name": "FastAPI POST `advance` without auth dependency \u2014 services/prism-service/prism_service/api/conductor.py:75", "shortDescription": {"text": "FastAPI POST `advance` without auth dependency \u2014 services/prism-service/prism_service/api/conductor.py:75"}, "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-63d1d3dc57773bee", "name": "FastAPI POST `import_transcripts` without auth dependency \u2014 services/prism-service/prism_service/api/sessions.py:27", "shortDescription": {"text": "FastAPI POST `import_transcripts` without auth dependency \u2014 services/prism-service/prism_service/api/sessions.py:27"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9d4b1832f3960c58", "name": "Dangling fetch: POST /api/staleness/resync?project=${encodeURIComponent(project)} (services/prism-service/prism_service/", "shortDescription": {"text": "Dangling fetch: POST /api/staleness/resync?project=${encodeURIComponent(project)} (services/prism-service/prism_service/web/src/pages/DashboardPage.tsx:97)"}, "fullDescription": {"text": "`services/prism-service/prism_service/web/src/pages/DashboardPage.tsx:97` calls `POST /api/staleness/resync?project=${encodeURIComponent(project)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/staleness/resync`\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-ab87269b4f0680b5", "name": "Dangling fetch: POST /api/memory/entry/${encodeURIComponent(id)}/action?project=${project} (services/prism-service/prism", "shortDescription": {"text": "Dangling fetch: POST /api/memory/entry/${encodeURIComponent(id)}/action?project=${project} (services/prism-service/prism_service/web/src/pages/MemoryDetailPage.tsx:136)"}, "fullDescription": {"text": "`services/prism-service/prism_service/web/src/pages/MemoryDetailPage.tsx:136` calls `POST /api/memory/entry/${encodeURIComponent(id)}/action?project=${project}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/memory/entry/<p>/action`\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-1b1d5926fda286fa", "name": "Unused endpoint: GET /{full_path:path}", "shortDescription": {"text": "Unused endpoint: GET /{full_path:path}"}, "fullDescription": {"text": "`services/prism-service/prism_service/main.py` declares `GET /{full_path:path}` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5baa8971ebe192a1", "name": "Unused endpoint: GET /", "shortDescription": {"text": "Unused endpoint: GET /"}, "fullDescription": {"text": "`services/prism-service/prism_service/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-0f857555f8b0566f", "name": "Unused endpoint: POST /resync", "shortDescription": {"text": "Unused endpoint: POST /resync"}, "fullDescription": {"text": "`services/prism-service/prism_service/api/staleness.py` declares `POST /resync` 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": "`services/prism-service/prism_service/api/projects.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-c562c83979dce866", "name": "Unused endpoint: DELETE /{name}", "shortDescription": {"text": "Unused endpoint: DELETE /{name}"}, "fullDescription": {"text": "`services/prism-service/prism_service/api/projects.py` declares `DELETE /{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-65a667bcc38fb792", "name": "Unused endpoint: POST /ingest", "shortDescription": {"text": "Unused endpoint: POST /ingest"}, "fullDescription": {"text": "`services/prism-service/prism_service/api/agent_runs.py` declares `POST /ingest` 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-fdca669cac118df3", "name": "Unused endpoint: POST /configure", "shortDescription": {"text": "Unused endpoint: POST /configure"}, "fullDescription": {"text": "`services/prism-service/prism_service/api/understand.py` declares `POST /configure` 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-7ce17d6b092a81ca", "name": "Unused endpoint: POST /refresh", "shortDescription": {"text": "Unused endpoint: POST /refresh"}, "fullDescription": {"text": "`services/prism-service/prism_service/api/understand.py` declares `POST /refresh` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-117ab7cbec004be9", "name": "Unused endpoint: GET /tour", "shortDescription": {"text": "Unused endpoint: GET /tour"}, "fullDescription": {"text": "`services/prism-service/prism_service/api/understand.py` declares `GET /tour` 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-ddcb55939a25b6d6", "name": "Unused endpoint: GET /layers", "shortDescription": {"text": "Unused endpoint: GET /layers"}, "fullDescription": {"text": "`services/prism-service/prism_service/api/understand.py` declares `GET /layers` 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-6ad2194d377bd37e", "name": "Unused endpoint: GET /domains", "shortDescription": {"text": "Unused endpoint: GET /domains"}, "fullDescription": {"text": "`services/prism-service/prism_service/api/understand.py` declares `GET /domains` 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-b8cc386d3657ce88", "name": "Unused endpoint: GET /onboarding", "shortDescription": {"text": "Unused endpoint: GET /onboarding"}, "fullDescription": {"text": "`services/prism-service/prism_service/api/understand.py` declares `GET /onboarding` 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-b75643cc29d4d3ec", "name": "Unused endpoint: GET /violations", "shortDescription": {"text": "Unused endpoint: GET /violations"}, "fullDescription": {"text": "`services/prism-service/prism_service/api/understand.py` declares `GET /violations` 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-553b8348335609cb", "name": "Unused endpoint: GET /api/learning", "shortDescription": {"text": "Unused endpoint: GET /api/learning"}, "fullDescription": {"text": "`services/prism-service/prism_service/api/learning.py` declares `GET /api/learning` 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-cd6f04b60952d9e1", "name": "Unused endpoint: GET /api/learning/policy", "shortDescription": {"text": "Unused endpoint: GET /api/learning/policy"}, "fullDescription": {"text": "`services/prism-service/prism_service/api/learning.py` declares `GET /api/learning/policy` 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-24127e99f5c184fb", "name": "Unused endpoint: GET /state", "shortDescription": {"text": "Unused endpoint: GET /state"}, "fullDescription": {"text": "`services/prism-service/prism_service/api/dashboard.py` declares `GET /state` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2a366262a6be358f", "name": "Unused endpoint: GET /activity", "shortDescription": {"text": "Unused endpoint: GET /activity"}, "fullDescription": {"text": "`services/prism-service/prism_service/api/dashboard.py` declares `GET /activity` 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-b378c4799e9d2287", "name": "Unused endpoint: GET /entries", "shortDescription": {"text": "Unused endpoint: GET /entries"}, "fullDescription": {"text": "`services/prism-service/prism_service/api/memory.py` declares `GET /entries` 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-9a668c37f14537a6", "name": "Unused endpoint: GET /fading", "shortDescription": {"text": "Unused endpoint: GET /fading"}, "fullDescription": {"text": "`services/prism-service/prism_service/api/memory.py` declares `GET /fading` 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-207b637f21b23990", "name": "Unused endpoint: GET /entry/{entry_id}", "shortDescription": {"text": "Unused endpoint: GET /entry/{entry_id}"}, "fullDescription": {"text": "`services/prism-service/prism_service/api/memory.py` declares `GET /entry/{entry_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-06f60bbb2f90be5f", "name": "Unused endpoint: POST /entry/{entry_id}/action", "shortDescription": {"text": "Unused endpoint: POST /entry/{entry_id}/action"}, "fullDescription": {"text": "`services/prism-service/prism_service/api/memory.py` declares `POST /entry/{entry_id}/action` 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-4fda65ad8308eda0", "name": "Unused endpoint: GET /claude-config", "shortDescription": {"text": "Unused endpoint: GET /claude-config"}, "fullDescription": {"text": "`services/prism-service/prism_service/api/memory.py` declares `GET /claude-config` 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-1fb619dd5a2fa699", "name": "Unused endpoint: POST /claude-config", "shortDescription": {"text": "Unused endpoint: POST /claude-config"}, "fullDescription": {"text": "`services/prism-service/prism_service/api/memory.py` declares `POST /claude-config` 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-d84ec401acd5ff2f", "name": "Unused endpoint: POST /import-claude-memories", "shortDescription": {"text": "Unused endpoint: POST /import-claude-memories"}, "fullDescription": {"text": "`services/prism-service/prism_service/api/memory.py` declares `POST /import-claude-memories` 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-bad01ac2222e29f1", "name": "Unused endpoint: GET /{run_id}", "shortDescription": {"text": "Unused endpoint: GET /{run_id}"}, "fullDescription": {"text": "`services/prism-service/prism_service/api/claude_runs.py` declares `GET /{run_id}` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e0d89c4313ce69ee", "name": "Unused endpoint: GET /{run_id}/stream", "shortDescription": {"text": "Unused endpoint: GET /{run_id}/stream"}, "fullDescription": {"text": "`services/prism-service/prism_service/api/claude_runs.py` declares `GET /{run_id}/stream` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d16e4fa529c520e9", "name": "Unused endpoint: GET /search", "shortDescription": {"text": "Unused endpoint: GET /search"}, "fullDescription": {"text": "`services/prism-service/prism_service/api/brain.py` declares `GET /search` 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-c6ec3fd6b89f0ae4", "name": "Unused endpoint: POST /reindex", "shortDescription": {"text": "Unused endpoint: POST /reindex"}, "fullDescription": {"text": "`services/prism-service/prism_service/api/brain.py` declares `POST /reindex` 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-7e4a25dfb8e94044", "name": "Unused endpoint: POST /understand", "shortDescription": {"text": "Unused endpoint: POST /understand"}, "fullDescription": {"text": "`services/prism-service/prism_service/api/brain.py` declares `POST /understand` 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-8e1fadad2500f063", "name": "Unused endpoint: POST /ask", "shortDescription": {"text": "Unused endpoint: POST /ask"}, "fullDescription": {"text": "`services/prism-service/prism_service/api/brain.py` declares `POST /ask` 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": "`services/prism-service/prism_service/api/graph.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-3598957025c480cd", "name": "Unused endpoint: POST /rebuild", "shortDescription": {"text": "Unused endpoint: POST /rebuild"}, "fullDescription": {"text": "`services/prism-service/prism_service/api/graph.py` declares `POST /rebuild` 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": "`services/prism-service/prism_service/api/graph.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-18f274aa0f8615a9", "name": "Unused endpoint: GET /central", "shortDescription": {"text": "Unused endpoint: GET /central"}, "fullDescription": {"text": "`services/prism-service/prism_service/api/graph.py` declares `GET /central` 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-d4c994a69d60af30", "name": "Unused endpoint: GET /community-files", "shortDescription": {"text": "Unused endpoint: GET /community-files"}, "fullDescription": {"text": "`services/prism-service/prism_service/api/graph.py` declares `GET /community-files` 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-04cec92f5d523a87", "name": "Unused endpoint: GET /file-detail", "shortDescription": {"text": "Unused endpoint: GET /file-detail"}, "fullDescription": {"text": "`services/prism-service/prism_service/api/graph.py` declares `GET /file-detail` 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-435f11cb90fdd400", "name": "Unused endpoint: POST /enrich", "shortDescription": {"text": "Unused endpoint: POST /enrich"}, "fullDescription": {"text": "`services/prism-service/prism_service/api/graph.py` declares `POST /enrich` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-eebc938d65878adf", "name": "Unused endpoint: GET /enrich/status", "shortDescription": {"text": "Unused endpoint: GET /enrich/status"}, "fullDescription": {"text": "`services/prism-service/prism_service/api/graph.py` declares `GET /enrich/status` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a46b08dd9361112e", "name": "Unused endpoint: POST /edges-between", "shortDescription": {"text": "Unused endpoint: POST /edges-between"}, "fullDescription": {"text": "`services/prism-service/prism_service/api/graph.py` declares `POST /edges-between` 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-cf16ae0930dc161a", "name": "Unused endpoint: GET /api/tasks", "shortDescription": {"text": "Unused endpoint: GET /api/tasks"}, "fullDescription": {"text": "`services/prism-service/prism_service/api/tasks.py` declares `GET /api/tasks` 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-dd377e6beb63fde7", "name": "Unused endpoint: POST /api/tasks", "shortDescription": {"text": "Unused endpoint: POST /api/tasks"}, "fullDescription": {"text": "`services/prism-service/prism_service/api/tasks.py` declares `POST /api/tasks` 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-87e86123d5c3a261", "name": "Unused endpoint: GET /api/tasks/next", "shortDescription": {"text": "Unused endpoint: GET /api/tasks/next"}, "fullDescription": {"text": "`services/prism-service/prism_service/api/tasks.py` declares `GET /api/tasks/next` 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-574e0277428b2c6c", "name": "Unused endpoint: GET /api/tasks/{task_id}", "shortDescription": {"text": "Unused endpoint: GET /api/tasks/{task_id}"}, "fullDescription": {"text": "`services/prism-service/prism_service/api/tasks.py` declares `GET /api/tasks/{task_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-8affeb0d6aeff6df", "name": "Unused endpoint: POST /clear", "shortDescription": {"text": "Unused endpoint: POST /clear"}, "fullDescription": {"text": "`services/prism-service/prism_service/api/github_auth.py` declares `POST /clear` 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-bfbdefd23666e6d4", "name": "Unused endpoint: GET /client-id", "shortDescription": {"text": "Unused endpoint: GET /client-id"}, "fullDescription": {"text": "`services/prism-service/prism_service/api/github_auth.py` declares `GET /client-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-9bfe7e3fd276a5f3", "name": "Unused endpoint: POST /client-id", "shortDescription": {"text": "Unused endpoint: POST /client-id"}, "fullDescription": {"text": "`services/prism-service/prism_service/api/github_auth.py` declares `POST /client-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-de0c834597a4260b", "name": "Unused endpoint: POST /client-id/clear", "shortDescription": {"text": "Unused endpoint: POST /client-id/clear"}, "fullDescription": {"text": "`services/prism-service/prism_service/api/github_auth.py` declares `POST /client-id/clear` 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-81c6abaf9775ea63", "name": "Unused endpoint: POST /device/start", "shortDescription": {"text": "Unused endpoint: POST /device/start"}, "fullDescription": {"text": "`services/prism-service/prism_service/api/github_auth.py` declares `POST /device/start` 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-f0db019aa20e73ae", "name": "Unused endpoint: POST /device/poll", "shortDescription": {"text": "Unused endpoint: POST /device/poll"}, "fullDescription": {"text": "`services/prism-service/prism_service/api/github_auth.py` declares `POST /device/poll` 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-97985d2859bdebf1", "name": "Unused endpoint: GET /repos", "shortDescription": {"text": "Unused endpoint: GET /repos"}, "fullDescription": {"text": "`services/prism-service/prism_service/api/github_auth.py` declares `GET /repos` 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/19620"}, "properties": {"repository": "siegeon/.prism", "repoUrl": "https://github.com/siegeon/.prism", "branch": "main"}, "results": [{"ruleId": "scanner-130b8c8974ac3d20", "level": "note", "message": {"text": "Possibly dead Python function: start_mcp_server"}, "properties": {"repobilityId": "3f019e7c29f3893d", "scanner": "scanner-primary", "fingerprint": "130b8c8974ac3d20", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/prism-service/prism_service/main.py:138"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-6c574b2446e3cf0b", "level": "note", "message": {"text": "Possibly dead Python function: start_governance_timer"}, "properties": {"repobilityId": "3420c6560bfdfd03", "scanner": "scanner-primary", "fingerprint": "6c574b2446e3cf0b", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/prism-service/prism_service/main.py:144"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-27426a3d58c5a4e2", "level": "note", "message": {"text": "Possibly dead Python function: start_quality_timer"}, "properties": {"repobilityId": "b146ae2533eb52c9", "scanner": "scanner-primary", "fingerprint": "27426a3d58c5a4e2", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/prism-service/prism_service/main.py:239"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-5c2a1b5e79e854a0", "level": "note", "message": {"text": "Possibly dead Python function: read_domain"}, "properties": {"repobilityId": "04d7d59163ab79d9", "scanner": "scanner-primary", "fingerprint": "5c2a1b5e79e854a0", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/prism-service/prism_service/engines/mulch.py:7"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-ca2e18e4d45c9f1f", "level": "note", "message": {"text": "Possibly dead Python function: write_domain"}, "properties": {"repobilityId": "22f07b60a9aa2c4c", "scanner": "scanner-primary", "fingerprint": "ca2e18e4d45c9f1f", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/prism-service/prism_service/engines/mulch.py:23"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-8ab87d7f8d34da24", "level": "note", "message": {"text": "Possibly dead Python function: append_entry"}, "properties": {"repobilityId": "e4579df88aa2ceec", "scanner": "scanner-primary", "fingerprint": "8ab87d7f8d34da24", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/prism-service/prism_service/engines/mulch.py:31"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-9c17172a5de38f25", "level": "note", "message": {"text": "Possibly dead Python function: encode_task_text"}, "properties": {"repobilityId": "554d00b5ce875dbb", "scanner": "scanner-primary", "fingerprint": "9c17172a5de38f25", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/prism-service/prism_service/engines/brain_engine.py:76"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-be274b7b725f6f46", "level": "note", "message": {"text": "Possibly dead Python function: handle_mcp"}, "properties": {"repobilityId": "37f19549034d7ccd", "scanner": "scanner-primary", "fingerprint": "be274b7b725f6f46", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/prism-service/prism_service/mcp/server.py:90"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-8785da8907354ce9", "level": "note", "message": {"text": "Possibly dead Python function: cmd_logs"}, "properties": {"repobilityId": "983c48780a905c98", "scanner": "scanner-primary", "fingerprint": "8785da8907354ce9", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/prism-service/prism_service/cli/prism_cli.py:267"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-17fe40e6554b466d", "level": "note", "message": {"text": "Possibly dead Python function: cmd_update"}, "properties": {"repobilityId": "7277b67464eb4477", "scanner": "scanner-primary", "fingerprint": "17fe40e6554b466d", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/prism-service/prism_service/cli/prism_cli.py:291"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-f31b68c012814510", "level": "note", "message": {"text": "Possibly dead Python function: cmd_version"}, "properties": {"repobilityId": "80cc8d10f4d699d8", "scanner": "scanner-primary", "fingerprint": "f31b68c012814510", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/prism-service/prism_service/cli/prism_cli.py:299"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3a61302340f854a7", "level": "note", "message": {"text": "Possibly dead Python function: start_adaptive_policy_worker"}, "properties": {"repobilityId": "b19110d73fe706d1", "scanner": "scanner-primary", "fingerprint": "3a61302340f854a7", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/prism-service/prism_service/services/adaptive_policy.py:331"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-9d7a8b10fbe1a876", "level": "note", "message": {"text": "Possibly dead Python function: start_trash_sweeper"}, "properties": {"repobilityId": "4b105030327580b7", "scanner": "scanner-primary", "fingerprint": "9d7a8b10fbe1a876", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/prism-service/prism_service/services/trash.py:111"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-1bd6c1a0de25b618", "level": "note", "message": {"text": "Possibly dead Python function: recompute_theta"}, "properties": {"repobilityId": "a5c5bda5f7e56b0f", "scanner": "scanner-primary", "fingerprint": "1bd6c1a0de25b618", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/prism-service/prism_service/services/scoring_service.py:148"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-14eec3a7f5175c78", "level": "note", "message": {"text": "Possibly dead Python function: start_memory_summary_worker"}, "properties": {"repobilityId": "fe9740ee66f40d76", "scanner": "scanner-primary", "fingerprint": "14eec3a7f5175c78", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/prism-service/prism_service/services/memory_summary_worker.py:225"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-d60d027b4ca29ac6", "level": "note", "message": {"text": "Possibly dead Python function: handle_recalled_outcome"}, "properties": {"repobilityId": "0e7912ed33d90410", "scanner": "scanner-primary", "fingerprint": "d60d027b4ca29ac6", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/prism-service/prism_service/services/event_handlers.py:66"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-5489fea8053cdcd9", "level": "note", "message": {"text": "Possibly dead Python function: handle_memory_written"}, "properties": {"repobilityId": "5a9c9211ecce3454", "scanner": "scanner-primary", "fingerprint": "5489fea8053cdcd9", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/prism-service/prism_service/services/event_handlers.py:145"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-b38c445b8def5db7", "level": "note", "message": {"text": "Possibly dead Python function: handle_session_imported"}, "properties": {"repobilityId": "14e16dd14e78cbb1", "scanner": "scanner-primary", "fingerprint": "b38c445b8def5db7", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/prism-service/prism_service/services/event_handlers.py:242"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-ef0bd05cf275e863", "level": "note", "message": {"text": "Possibly dead Python function: start_transcript_importer"}, "properties": {"repobilityId": "4bd3416924e9aa69", "scanner": "scanner-primary", "fingerprint": "ef0bd05cf275e863", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/prism-service/prism_service/services/claude_transcripts.py:616"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-fb14af6a58759efb", "level": "note", "message": {"text": "Possibly dead Python function: attach_task_service"}, "properties": {"repobilityId": "1b14071c2fe5505f", "scanner": "scanner-primary", "fingerprint": "fb14af6a58759efb", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/prism-service/prism_service/services/conductor_service.py:422"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-a2335cbb30b9a23d", "level": "note", "message": {"text": "Possibly dead Python function: attach_project_root"}, "properties": {"repobilityId": "95c9a283511190c1", "scanner": "scanner-primary", "fingerprint": "a2335cbb30b9a23d", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/prism-service/prism_service/services/conductor_service.py:446"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-37834d0fdd8f0081", "level": "note", "message": {"text": "Possibly dead Python function: build_instruction"}, "properties": {"repobilityId": "1f7ba93950f120d6", "scanner": "scanner-primary", "fingerprint": "37834d0fdd8f0081", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/prism-service/prism_service/services/conductor_service.py:457"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-4e40fb1d09775f27", "level": "note", "message": {"text": "Possibly dead Python function: reindex"}, "properties": {"repobilityId": "e92bd58e3b9107e3", "scanner": "scanner-primary", "fingerprint": "4e40fb1d09775f27", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/prism-service/prism_service/services/conductor_service.py:494"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-f86242681ddef2ca", "level": "note", "message": {"text": "Possibly dead Python function: search_feedback"}, "properties": {"repobilityId": "ced97ffa998e6cdc", "scanner": "scanner-primary", "fingerprint": "f86242681ddef2ca", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/prism-service/prism_service/services/brain_service.py:139"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-862bb9ffa2c2f37b", "level": "note", "message": {"text": "Possibly dead Python function: unstage_doc"}, "properties": {"repobilityId": "4ed2428baf339e67", "scanner": "scanner-primary", "fingerprint": "862bb9ffa2c2f37b", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/prism-service/prism_service/services/graph_service.py:548"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-9a86edc0efefc4b4", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 services/prism-service/prism_service/web/src/components/LiveStatusStrip.tsx:62"}, "properties": {"repobilityId": "c9f7ef9e7a6e0956", "scanner": "scanner-primary", "fingerprint": "9a86edc0efefc4b4", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-63be520f4bafcdeb", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 services/prism-service/prism_service/web/src/components/understand/LayersView.tsx:204"}, "properties": {"repobilityId": "b66c224812cd7049", "scanner": "scanner-primary", "fingerprint": "63be520f4bafcdeb", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-50876c58c3559d93", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 services/prism-service/prism_service/web/src/components/understand/PrismFileNode.tsx:40"}, "properties": {"repobilityId": "18b5a00dd4f6337c", "scanner": "scanner-primary", "fingerprint": "50876c58c3559d93", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1a780be008d8af8f", "level": "note", "message": {"text": "React Flow <MiniMap> without dark background \u2014 services/prism-service/prism_service/web/src/components/understand/PrismLayerGraph.tsx:184"}, "properties": {"repobilityId": "9051bf3d7574306c", "scanner": "scanner-primary", "fingerprint": "1a780be008d8af8f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.minimap.no-bg"]}}, {"ruleId": "scanner-dc958bca0b43ab20", "level": "note", "message": {"text": "React Flow <Controls> without dark theming \u2014 services/prism-service/prism_service/web/src/components/understand/PrismLayerGraph.tsx:170"}, "properties": {"repobilityId": "d6056dbab69f10ab", "scanner": "scanner-primary", "fingerprint": "dc958bca0b43ab20", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.controls.no-bg"]}}, {"ruleId": "scanner-2ce37f05c115e755", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 services/prism-service/prism_service/web/src/components/understand/DomainsView.tsx:142"}, "properties": {"repobilityId": "8321d496d06527bc", "scanner": "scanner-primary", "fingerprint": "2ce37f05c115e755", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-8211c7ceb7c87072", "level": "note", "message": {"text": "React Flow <MiniMap> without dark background \u2014 services/prism-service/prism_service/web/src/components/understand/PrismEntityGraph.tsx:125"}, "properties": {"repobilityId": "10a86b5911809aa4", "scanner": "scanner-primary", "fingerprint": "8211c7ceb7c87072", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.minimap.no-bg"]}}, {"ruleId": "scanner-ac072cdfafcb26d2", "level": "note", "message": {"text": "React Flow <Controls> without dark theming \u2014 services/prism-service/prism_service/web/src/components/understand/PrismEntityGraph.tsx:113"}, "properties": {"repobilityId": "6e97e28916cff1fb", "scanner": "scanner-primary", "fingerprint": "ac072cdfafcb26d2", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.controls.no-bg"]}}, {"ruleId": "scanner-b51d7f0edfce19f7", "level": "note", "message": {"text": "React Flow <MiniMap> without dark background \u2014 services/prism-service/prism_service/web/src/components/understand/PrismDomainGraph.tsx:144"}, "properties": {"repobilityId": "c8dca5744f125215", "scanner": "scanner-primary", "fingerprint": "b51d7f0edfce19f7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.minimap.no-bg"]}}, {"ruleId": "scanner-f495d704bcb95845", "level": "note", "message": {"text": "React Flow <Controls> without dark theming \u2014 services/prism-service/prism_service/web/src/components/understand/PrismDomainGraph.tsx:130"}, "properties": {"repobilityId": "f542ab5a5eae5ef7", "scanner": "scanner-primary", "fingerprint": "f495d704bcb95845", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.controls.no-bg"]}}, {"ruleId": "scanner-52d819b0f84d5d43", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 services/prism-service/prism_service/web/src/components/understand/PrismEntityNode.tsx:37"}, "properties": {"repobilityId": "ba9973023b6a36be", "scanner": "scanner-primary", "fingerprint": "52d819b0f84d5d43", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-5fa5fd129ba5b8af", "level": "note", "message": {"text": "React Flow <MiniMap> without dark background \u2014 services/prism-service/prism_service/web/src/components/understand/PrismFileGraph.tsx:217"}, "properties": {"repobilityId": "3a684b189184f5b0", "scanner": "scanner-primary", "fingerprint": "5fa5fd129ba5b8af", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.minimap.no-bg"]}}, {"ruleId": "scanner-ddb303a8b00f7993", "level": "note", "message": {"text": "React Flow <Controls> without dark theming \u2014 services/prism-service/prism_service/web/src/components/understand/PrismFileGraph.tsx:203"}, "properties": {"repobilityId": "6df3eb178e59a012", "scanner": "scanner-primary", "fingerprint": "ddb303a8b00f7993", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.controls.no-bg"]}}, {"ruleId": "scanner-d9d80f60426986af", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 services/prism-service/prism_service/web/src/components/understand/PrismFileDetail.tsx:87"}, "properties": {"repobilityId": "c74e0846639338ed", "scanner": "scanner-primary", "fingerprint": "d9d80f60426986af", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-53af8f6889339d01", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 services/prism-service/prism_service/web/src/components/understand/PrismLayerDetail.tsx:94"}, "properties": {"repobilityId": "afd34c43de8588cc", "scanner": "scanner-primary", "fingerprint": "53af8f6889339d01", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-dad84658f58bdeb5", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 services/prism-service/prism_service/web/src/components/conductor/SdlcProgress.tsx:192"}, "properties": {"repobilityId": "e877f32693ed0425", "scanner": "scanner-primary", "fingerprint": "dad84658f58bdeb5", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-31326a70070a54fd", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 services/prism-service/prism_service/web/src/pages/LearningPage.tsx:285"}, "properties": {"repobilityId": "fd6efc8318a426ae", "scanner": "scanner-primary", "fingerprint": "31326a70070a54fd", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-dd97ed8a8d4ffa68", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 services/prism-service/prism_service/web/src/pages/TaskDetailPage.tsx:687"}, "properties": {"repobilityId": "07567b0044229256", "scanner": "scanner-primary", "fingerprint": "dd97ed8a8d4ffa68", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e77cc7aa0118bda5", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 services/prism-service/prism_service/web/src/pages/ExplorePage.tsx:238"}, "properties": {"repobilityId": "89475201ce6776ad", "scanner": "scanner-primary", "fingerprint": "e77cc7aa0118bda5", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e2e3a389c45e45ad", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 services/prism-service/prism_service/web/src/pages/RetrievalsPage.tsx:63"}, "properties": {"repobilityId": "050d599eacc7b306", "scanner": "scanner-primary", "fingerprint": "e2e3a389c45e45ad", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-66ceb3606f610e89", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 services/prism-service/prism_service/web/src/pages/SettingsPage.tsx:1271"}, "properties": {"repobilityId": "7bbe6bd8e2b7e646", "scanner": "scanner-primary", "fingerprint": "66ceb3606f610e89", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e1d98dbc60ff8d0e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 services/prism-service/prism_service/web/src/pages/DashboardPage.tsx:261"}, "properties": {"repobilityId": "524dc36bf48677d8", "scanner": "scanner-primary", "fingerprint": "e1d98dbc60ff8d0e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-df29e972f4bf6ac0", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 services/prism-service/prism_service/web/src/pages/ConductorPage.tsx:199"}, "properties": {"repobilityId": "d27500a9bd1a228e", "scanner": "scanner-primary", "fingerprint": "df29e972f4bf6ac0", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-642a3c118bf2919c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 services/prism-service/prism_service/web/src/pages/TaskTextPage.tsx:57"}, "properties": {"repobilityId": "50f6c6d4a2067bf7", "scanner": "scanner-primary", "fingerprint": "642a3c118bf2919c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d251a05f66a338d1", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 plugins/prism-devtools/skills/skill-builder/scripts/validate-skill.js:51"}, "properties": {"repobilityId": "95a0006132178968", "scanner": "scanner-primary", "fingerprint": "d251a05f66a338d1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-21b527f043a66e28", "level": "warning", "message": {"text": "Privileged port 13 in use"}, "properties": {"repobilityId": "79d721e4d6f64798", "scanner": "scanner-primary", "fingerprint": "21b527f043a66e28", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "plugins/prism-devtools/skills/qa-gate/artifacts/story-001-post-implementation-gate.yaml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-81668e643eb1f0e8", "level": "warning", "message": {"text": "Privileged port 40 in use"}, "properties": {"repobilityId": "28c59d470d4929c6", "scanner": "scanner-primary", "fingerprint": "81668e643eb1f0e8", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "plugins/prism-devtools/skills/qa-gate/artifacts/story-001-post-implementation-gate.yaml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-de0cf68b2c83e6b6", "level": "warning", "message": {"text": "Dockerfile runs as root: services/prism-service/Dockerfile"}, "properties": {"repobilityId": "d68b30e2582c9bc2", "scanner": "scanner-primary", "fingerprint": "de0cf68b2c83e6b6", "layer": "hardware", "severity": "medium", "confidence": 1.0, "tags": ["security", "container"]}}, {"ruleId": "scanner-5ed4ed0d5f9ffb06", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: node:22-slim"}, "properties": {"repobilityId": "67cf38fe3d8d7de1", "scanner": "scanner-primary", "fingerprint": "5ed4ed0d5f9ffb06", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/prism-service/Dockerfile"}, "region": {"startLine": 2}}}]}, {"ruleId": "scanner-21abe8232cdeda20", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: python:3.12-slim"}, "properties": {"repobilityId": "729e0d110f796787", "scanner": "scanner-primary", "fingerprint": "21abe8232cdeda20", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/prism-service/Dockerfile"}, "region": {"startLine": 10}}}]}, {"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-d508af629a978f76", "level": "warning", "message": {"text": "Insecure pattern 'subprocess_shell_true' in benchmarks/swebench/patch_run.py:83"}, "properties": {"repobilityId": "91bda802713391d6", "scanner": "scanner-primary", "fingerprint": "d508af629a978f76", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "subprocess_shell_true"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "benchmarks/swebench/patch_run.py"}, "region": {"startLine": 83}}}]}, {"ruleId": "scanner-31e2ffed8e7e3812", "level": "error", "message": {"text": "Insecure pattern 'exec_used' in services/prism-service/prism_service/__version__.py:582"}, "properties": {"repobilityId": "8234c7224c607fdc", "scanner": "scanner-primary", "fingerprint": "31e2ffed8e7e3812", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["owasp", "exec_used"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/prism-service/prism_service/__version__.py"}, "region": {"startLine": 582}}}]}, {"ruleId": "scanner-ce825306a191a86f", "level": "error", "message": {"text": "Insecure pattern 'exec_used' in services/prism-service/prism_service/main.py:516"}, "properties": {"repobilityId": "f044f8773b9d9ea5", "scanner": "scanner-primary", "fingerprint": "ce825306a191a86f", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["owasp", "exec_used"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/prism-service/prism_service/main.py"}, "region": {"startLine": 516}}}]}, {"ruleId": "scanner-0284cb7b4b979c3a", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in services/prism-service/prism_service/web/src/components/plan/Mermaid.tsx:40"}, "properties": {"repobilityId": "7eac5ea9c926f3a6", "scanner": "scanner-primary", "fingerprint": "0284cb7b4b979c3a", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/prism-service/prism_service/web/src/components/plan/Mermaid.tsx"}, "region": {"startLine": 40}}}]}, {"ruleId": "scanner-afedaf32c71e5c88", "level": "error", "message": {"text": "Possible secret in plugins/prism-devtools/workflows/strangler-pattern-migration.yaml"}, "properties": {"repobilityId": "0c5fbf901e37606e", "scanner": "scanner-primary", "fingerprint": "afedaf32c71e5c88", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "plugins/prism-devtools/workflows/strangler-pattern-migration.yaml"}, "region": {"startLine": 115}}}]}, {"ruleId": "scanner-9df2663ec77fed7d", "level": "error", "message": {"text": "Possible secret in plugins/prism-devtools/skills/strangler-pattern/reference/strangler-pattern-migration.yaml"}, "properties": {"repobilityId": "a1c028d83bd25a98", "scanner": "scanner-primary", "fingerprint": "9df2663ec77fed7d", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "plugins/prism-devtools/skills/strangler-pattern/reference/strangler-pattern-migration.yaml"}, "region": {"startLine": 115}}}]}, {"ruleId": "scanner-e74f294b720edd78", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "c3cca0f15059a609", "scanner": "scanner-primary", "fingerprint": "e74f294b720edd78", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/pr-checks.yml"}, "region": {"startLine": 24}}}]}, {"ruleId": "scanner-e74f294b720edd78", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "96cf82f3d23dbc34", "scanner": "scanner-primary", "fingerprint": "e74f294b720edd78", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/pr-checks.yml"}, "region": {"startLine": 27}}}]}, {"ruleId": "scanner-e74f294b720edd78", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "4b44d8cf41d0de5d", "scanner": "scanner-primary", "fingerprint": "e74f294b720edd78", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/pr-checks.yml"}, "region": {"startLine": 37}}}]}, {"ruleId": "scanner-01fb03e56eb997db", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "cef17bc19998debf", "scanner": "scanner-primary", "fingerprint": "01fb03e56eb997db", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/autotag.yml"}, "region": {"startLine": 25}}}]}, {"ruleId": "scanner-fda29672495f5721", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "c8984c4a70cd6d88", "scanner": "scanner-primary", "fingerprint": "fda29672495f5721", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/autotag.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-46c644c6227e4d4a", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "2644034c718fb80d", "scanner": "scanner-primary", "fingerprint": "46c644c6227e4d4a", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/release.yml"}, "region": {"startLine": 29}}}]}, {"ruleId": "scanner-46c644c6227e4d4a", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "15b01c1e36e9f12b", "scanner": "scanner-primary", "fingerprint": "46c644c6227e4d4a", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/release.yml"}, "region": {"startLine": 32}}}]}, {"ruleId": "scanner-46c644c6227e4d4a", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "c71c4053464cd39c", "scanner": "scanner-primary", "fingerprint": "46c644c6227e4d4a", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/release.yml"}, "region": {"startLine": 35}}}]}, {"ruleId": "scanner-46c644c6227e4d4a", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "d08151bb856f4436", "scanner": "scanner-primary", "fingerprint": "46c644c6227e4d4a", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/release.yml"}, "region": {"startLine": 55}}}]}, {"ruleId": "scanner-46c644c6227e4d4a", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "0ad86557a2848db6", "scanner": "scanner-primary", "fingerprint": "46c644c6227e4d4a", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/release.yml"}, "region": {"startLine": 76}}}]}, {"ruleId": "scanner-46c644c6227e4d4a", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "eeb76410cc935c30", "scanner": "scanner-primary", "fingerprint": "46c644c6227e4d4a", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/release.yml"}, "region": {"startLine": 81}}}]}, {"ruleId": "scanner-46c644c6227e4d4a", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "f0dc584a111ffc00", "scanner": "scanner-primary", "fingerprint": "46c644c6227e4d4a", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/release.yml"}, "region": {"startLine": 115}}}]}, {"ruleId": "scanner-1838a141491ce38c", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "b8fd4f5048f96576", "scanner": "scanner-primary", "fingerprint": "1838a141491ce38c", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/release.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-20337c514d8f5d59", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "6a045bc5d100a89a", "scanner": "scanner-primary", "fingerprint": "20337c514d8f5d59", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/release-tauri.yml"}, "region": {"startLine": 45}}}]}, {"ruleId": "scanner-20337c514d8f5d59", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "15d46135dc267ea0", "scanner": "scanner-primary", "fingerprint": "20337c514d8f5d59", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/release-tauri.yml"}, "region": {"startLine": 48}}}]}, {"ruleId": "scanner-20337c514d8f5d59", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "12e7ed8d4f3b1af6", "scanner": "scanner-primary", "fingerprint": "20337c514d8f5d59", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/release-tauri.yml"}, "region": {"startLine": 53}}}]}, {"ruleId": "scanner-20337c514d8f5d59", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "cd3f89088609dc5b", "scanner": "scanner-primary", "fingerprint": "20337c514d8f5d59", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/release-tauri.yml"}, "region": {"startLine": 77}}}]}, {"ruleId": "scanner-20337c514d8f5d59", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "7b2c0e3f25839522", "scanner": "scanner-primary", "fingerprint": "20337c514d8f5d59", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/release-tauri.yml"}, "region": {"startLine": 143}}}]}, {"ruleId": "scanner-22067b0ff9b70859", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "034cacac07d66d2c", "scanner": "scanner-primary", "fingerprint": "22067b0ff9b70859", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/release-tauri.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-a7b3e9a07b6f2a8e", "level": "error", "message": {"text": "pip extra-index-url can enable dependency confusion"}, "properties": {"repobilityId": "0c5aaff38cab7df7", "scanner": "scanner-primary", "fingerprint": "a7b3e9a07b6f2a8e", "layer": "cicd", "severity": "high", "confidence": 1.0, "tags": ["supply-chain", "pypi", "dependency-confusion"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/prism-service/requirements.txt"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-1c88ec4a91d0a22d", "level": "note", "message": {"text": "Very large file: services/prism-service/prism_service/__version__.py (2086 lines)"}, "properties": {"repobilityId": "fe67de691d10f078", "scanner": "scanner-primary", "fingerprint": "1c88ec4a91d0a22d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-2ec06c5ea0e1d4bf", "level": "note", "message": {"text": "Very large file: services/prism-service/prism_service/engines/brain_engine.py (4184 lines)"}, "properties": {"repobilityId": "4b28d052a8113c20", "scanner": "scanner-primary", "fingerprint": "2ec06c5ea0e1d4bf", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-1681999a38f9c7c4", "level": "note", "message": {"text": "Very large file: services/prism-service/prism_service/mcp/tools.py (3636 lines)"}, "properties": {"repobilityId": "26cb59b4cbae024d", "scanner": "scanner-primary", "fingerprint": "1681999a38f9c7c4", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-d591c2d70bd0a194", "level": "note", "message": {"text": "Very large file: services/prism-service/prism_service/routes/graph_static.py (1930 lines)"}, "properties": {"repobilityId": "74496af7fcad7ac5", "scanner": "scanner-primary", "fingerprint": "d591c2d70bd0a194", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-07a0d8d374160b6c", "level": "note", "message": {"text": "Very large file: services/prism-service/prism_service/web/src/pages/SettingsPage.tsx (2985 lines)"}, "properties": {"repobilityId": "b053b06f9501eba7", "scanner": "scanner-primary", "fingerprint": "07a0d8d374160b6c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-d77d7c99f655215b", "level": "note", "message": {"text": "Very large file: services/prism-service/prism_service/services/conductor_service.py (2479 lines)"}, "properties": {"repobilityId": "5a472e64371262bc", "scanner": "scanner-primary", "fingerprint": "d77d7c99f655215b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-ec93ec71444fb1d0", "level": "note", "message": {"text": "Very large file: services/prism-service/prism_service/services/graph_service.py (1611 lines)"}, "properties": {"repobilityId": "910222577421e2af", "scanner": "scanner-primary", "fingerprint": "ec93ec71444fb1d0", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-b03e366584483a3f", "level": "note", "message": {"text": "Very large file: plugins/prism-devtools/scripts/validate-docs.py (1636 lines)"}, "properties": {"repobilityId": "2d37f3112f5825aa", "scanner": "scanner-primary", "fingerprint": "b03e366584483a3f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-3d5370dc85fa865c", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: services/prism-service/desktop/tauri-shell/package.json"}, "properties": {"repobilityId": "64b29107a9f2f283", "scanner": "scanner-primary", "fingerprint": "3d5370dc85fa865c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/prism-service/desktop/tauri-shell/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-4f118adc024a7b37", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: services/prism-service/prism_service/web/package.json"}, "properties": {"repobilityId": "0d94efa0ef509ca6", "scanner": "scanner-primary", "fingerprint": "4f118adc024a7b37", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/prism-service/prism_service/web/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-28d0cc64fe18d6f5", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: plugins/prism-devtools/skills/skill-builder/scripts/package.json"}, "properties": {"repobilityId": "b62a92beea7d6491", "scanner": "scanner-primary", "fingerprint": "28d0cc64fe18d6f5", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "plugins/prism-devtools/skills/skill-builder/scripts/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "78752a0c1e8dae55", "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": "ed35da0d7948aae6", "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": "03d92a135e3941ec", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-749d4bc1bd66df5f", "level": "warning", "message": {"text": "Agent instructions exist but release-hardening basics are missing"}, "properties": {"repobilityId": "b18714efd78dfaff", "scanner": "scanner-primary", "fingerprint": "749d4bc1bd66df5f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-ea8f3013f588db25", "level": "note", "message": {"text": "Shallow git history limits provenance confidence"}, "properties": {"repobilityId": "424d7aa71bd8ea5e", "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": "c5342450cbe67c67", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-bf6ac7a56f5449c6", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: plugins/prism-devtools/skills/version-bump/SKILL.md"}, "properties": {"repobilityId": "902822bf109f5520", "scanner": "scanner-primary", "fingerprint": "bf6ac7a56f5449c6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "skill_file"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "plugins/prism-devtools/skills/version-bump/SKILL.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-523fb13004598549", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: plugins/prism-devtools/skills/qa-gate/SKILL.md"}, "properties": {"repobilityId": "1bcacad40cb4c989", "scanner": "scanner-primary", "fingerprint": "523fb13004598549", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "skill_file"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "plugins/prism-devtools/skills/qa-gate/SKILL.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-791e671c28641179", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: plugins/prism-devtools/skills/remember/SKILL.md"}, "properties": {"repobilityId": "acb27d82ba91eefe", "scanner": "scanner-primary", "fingerprint": "791e671c28641179", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "skill_file"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "plugins/prism-devtools/skills/remember/SKILL.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-41b894b7fdf62202", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: plugins/prism-devtools/skills/execute-checklist/SKILL.md"}, "properties": {"repobilityId": "ec800c42d76d2d20", "scanner": "scanner-primary", "fingerprint": "41b894b7fdf62202", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "skill_file"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "plugins/prism-devtools/skills/execute-checklist/SKILL.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-ffeb7c0c3c74ba1d", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: plugins/prism-devtools/skills/initialize-architecture/SKILL.md"}, "properties": {"repobilityId": "f294fa0ff48b9314", "scanner": "scanner-primary", "fingerprint": "ffeb7c0c3c74ba1d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "skill_file"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "plugins/prism-devtools/skills/initialize-architecture/SKILL.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-837b8ea59c02822e", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: plugins/prism-devtools/skills/shared/SKILL.md"}, "properties": {"repobilityId": "54518eb9aacf87ff", "scanner": "scanner-primary", "fingerprint": "837b8ea59c02822e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "skill_file"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "plugins/prism-devtools/skills/shared/SKILL.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-404be69ba7fd9b58", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: plugins/prism-devtools/skills/sdlc-handoff/SKILL.md"}, "properties": {"repobilityId": "eb3ec2ac6444b5b6", "scanner": "scanner-primary", "fingerprint": "404be69ba7fd9b58", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "skill_file"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "plugins/prism-devtools/skills/sdlc-handoff/SKILL.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-b3dca0bd0059c513", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: plugins/prism-devtools/skills/file-first/SKILL.md"}, "properties": {"repobilityId": "2bf5409928d74fd7", "scanner": "scanner-primary", "fingerprint": "b3dca0bd0059c513", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "skill_file"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "plugins/prism-devtools/skills/file-first/SKILL.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-f6a978b92c4fefd9", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: plugins/prism-devtools/skills/conductor/SKILL.md"}, "properties": {"repobilityId": "d16aef7386ea264c", "scanner": "scanner-primary", "fingerprint": "f6a978b92c4fefd9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "skill_file"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "plugins/prism-devtools/skills/conductor/SKILL.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-29b538b6abbe2f40", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: plugins/prism-devtools/skills/validate/SKILL.md"}, "properties": {"repobilityId": "3ba3e162fc582bfc", "scanner": "scanner-primary", "fingerprint": "29b538b6abbe2f40", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "skill_file"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "plugins/prism-devtools/skills/validate/SKILL.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-d8e2bc0618dffc33", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: plugins/prism-devtools/skills/nfr-assess/SKILL.md"}, "properties": {"repobilityId": "2e8ba00839d045b1", "scanner": "scanner-primary", "fingerprint": "d8e2bc0618dffc33", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "skill_file"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "plugins/prism-devtools/skills/nfr-assess/SKILL.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-ddb1a4c39849e541", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 benchmarks/run_experiments.py:80"}, "properties": {"repobilityId": "706faf9943351dd4", "scanner": "scanner-primary", "fingerprint": "ddb1a4c39849e541", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e385451a33457624", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 benchmarks/swebench/paired_campaign.py:225"}, "properties": {"repobilityId": "bc76d86c28c7ffd9", "scanner": "scanner-primary", "fingerprint": "e385451a33457624", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-42d72e7483502956", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 benchmarks/swebench/patch_scaffold_check.py:22"}, "properties": {"repobilityId": "a8e08f9e774d684f", "scanner": "scanner-primary", "fingerprint": "42d72e7483502956", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-be2e3bce4e8586dc", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 benchmarks/swebench/patch_run.py:98"}, "properties": {"repobilityId": "aab2f5106e9a23bc", "scanner": "scanner-primary", "fingerprint": "be2e3bce4e8586dc", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-417abb62a230fa9b", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 benchmarks/swebench/evaluate_predictions_wsl.py:22"}, "properties": {"repobilityId": "04b0ca9f8eb7f497", "scanner": "scanner-primary", "fingerprint": "417abb62a230fa9b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-bc22ba4e9dc6c268", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 benchmarks/swebench/evaluate_predictions.py:46"}, "properties": {"repobilityId": "14fc2a7ac38d1317", "scanner": "scanner-primary", "fingerprint": "bc22ba4e9dc6c268", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-5dc9944d510ed38c", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 benchmarks/swebench/run.py:91"}, "properties": {"repobilityId": "0c41fb3cd7e79b6e", "scanner": "scanner-primary", "fingerprint": "5dc9944d510ed38c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-222c3e1ecc77fed4", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 benchmarks/scorecard/run.py:50"}, "properties": {"repobilityId": "f39ed2ec056fa1c7", "scanner": "scanner-primary", "fingerprint": "222c3e1ecc77fed4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2272ca0afa7c726b", "level": "none", "message": {"text": "Commented-code block (7 lines) in .claude/workflows/implement.js:42"}, "properties": {"repobilityId": "690789a3e621537d", "scanner": "scanner-primary", "fingerprint": "2272ca0afa7c726b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-71084fdfaa4eda5e", "level": "none", "message": {"text": "Commented-code block (8 lines) in .claude/workflows/prototype.js:69"}, "properties": {"repobilityId": "3869686671bbeec6", "scanner": "scanner-primary", "fingerprint": "71084fdfaa4eda5e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-724508538baf3886", "level": "none", "message": {"text": "Commented-code block (5 lines) in services/prism-service/tests/unit/test_task_oracle.py:89"}, "properties": {"repobilityId": "d21d41f52ee57716", "scanner": "scanner-primary", "fingerprint": "724508538baf3886", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7f70dc07d5e75c8b", "level": "none", "message": {"text": "Commented-code block (7 lines) in services/prism-service/tests/unit/test_mcp_tool_profiles.py:24"}, "properties": {"repobilityId": "82fb2873c2e4754e", "scanner": "scanner-primary", "fingerprint": "7f70dc07d5e75c8b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-de0bffb685a86d34", "level": "none", "message": {"text": "Commented-code block (5 lines) in services/prism-service/tests/unit/test_conductor_page_animated_cleanup_ui.py:85"}, "properties": {"repobilityId": "6ee6b409b3b318a5", "scanner": "scanner-primary", "fingerprint": "de0bffb685a86d34", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3645f4dcb5cee11c", "level": "none", "message": {"text": "Commented-code block (6 lines) in services/prism-service/tests/unit/test_conductor_v2_verifier_gate.py:86"}, "properties": {"repobilityId": "12687ab75d0f66ef", "scanner": "scanner-primary", "fingerprint": "3645f4dcb5cee11c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-efa60b9b3e497714", "level": "none", "message": {"text": "Commented-code block (6 lines) in services/prism-service/tests/unit/test_task_embedding.py:79"}, "properties": {"repobilityId": "744c3df8a4239b8c", "scanner": "scanner-primary", "fingerprint": "efa60b9b3e497714", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-eda4af9b91fa085f", "level": "none", "message": {"text": "Commented-code block (20 lines) in services/prism-service/tests/unit/test_lifespan_lock_recovery.py:46"}, "properties": {"repobilityId": "80dd85d171b4be04", "scanner": "scanner-primary", "fingerprint": "eda4af9b91fa085f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-82088cda6eb3db2c", "level": "note", "message": {"text": "Legacy-named symbol `tour_builder_v1` in services/prism-service/tests/unit/test_understand_drainer.py:66"}, "properties": {"repobilityId": "53d104659c45f194", "scanner": "scanner-primary", "fingerprint": "82088cda6eb3db2c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-fe2171f7b83de2e6", "level": "note", "message": {"text": "Legacy-named symbol `tour_builder_v1` in services/prism-service/tests/unit/test_analyzer_runner_classify.py:118"}, "properties": {"repobilityId": "16f8896314fba3f3", "scanner": "scanner-primary", "fingerprint": "fe2171f7b83de2e6", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-dabd9143e3f651ed", "level": "note", "message": {"text": "Legacy-named symbol `a_to_legacy` in services/prism-service/tests/unit/test_brain_call_chain_call_site.py:83"}, "properties": {"repobilityId": "8761602142551d46", "scanner": "scanner-primary", "fingerprint": "dabd9143e3f651ed", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-bece5278e6b3f884", "level": "none", "message": {"text": "Commented-code block (5 lines) in services/prism-service/tests/unit/test_reinforce_sdlc_gates_real_proof.py:85"}, "properties": {"repobilityId": "dba3312db071c436", "scanner": "scanner-primary", "fingerprint": "bece5278e6b3f884", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c844b1b71eada32b", "level": "note", "message": {"text": "Legacy-named symbol `sha_old` in services/prism-service/tests/unit/test_source_service.py:124"}, "properties": {"repobilityId": "7f0a2121f050ec9e", "scanner": "scanner-primary", "fingerprint": "c844b1b71eada32b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-2aed45e2af2aa793", "level": "none", "message": {"text": "Commented-code block (6 lines) in services/prism-service/tests/unit/test_cuped.py:86"}, "properties": {"repobilityId": "617d5b98794fe853", "scanner": "scanner-primary", "fingerprint": "2aed45e2af2aa793", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-856a9ba395ada5a9", "level": "none", "message": {"text": "Commented-code block (7 lines) in services/prism-service/prism_service/config.py:45"}, "properties": {"repobilityId": "3d28409c57b14c31", "scanner": "scanner-primary", "fingerprint": "856a9ba395ada5a9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-37abc8ef1241026e", "level": "none", "message": {"text": "Commented-code block (9 lines) in services/prism-service/prism_service/project_context.py:93"}, "properties": {"repobilityId": "b523171813167657", "scanner": "scanner-primary", "fingerprint": "37abc8ef1241026e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d7f2d7b3359b419e", "level": "none", "message": {"text": "Commented-code block (5 lines) in services/prism-service/prism_service/main.py:330"}, "properties": {"repobilityId": "196858ec01a58df6", "scanner": "scanner-primary", "fingerprint": "d7f2d7b3359b419e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4d25d564b2ad4c74", "level": "none", "message": {"text": "Commented-code block (5 lines) in services/prism-service/prism_service/engines/understand_engine.py:189"}, "properties": {"repobilityId": "2170954a42ab5336", "scanner": "scanner-primary", "fingerprint": "4d25d564b2ad4c74", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f380af617f4244bb", "level": "none", "message": {"text": "Commented-code block (6 lines) in services/prism-service/prism_service/engines/brain_engine.py:26"}, "properties": {"repobilityId": "a1420e2303ef4f90", "scanner": "scanner-primary", "fingerprint": "f380af617f4244bb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f6e8a7d706dcd6fa", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 services/prism-service/prism_service/engines/brain_engine.py:3559"}, "properties": {"repobilityId": "aa6d54515bd399a2", "scanner": "scanner-primary", "fingerprint": "f6e8a7d706dcd6fa", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-31105edc82d07e55", "level": "none", "message": {"text": "Commented-code block (6 lines) in services/prism-service/prism_service/models/workflow.py:8"}, "properties": {"repobilityId": "011a11a1cc6a7386", "scanner": "scanner-primary", "fingerprint": "31105edc82d07e55", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c3b9a1167cf184b6", "level": "none", "message": {"text": "Commented-code block (8 lines) in services/prism-service/prism_service/models/task.py:27"}, "properties": {"repobilityId": "a96e939ffd3036e5", "scanner": "scanner-primary", "fingerprint": "c3b9a1167cf184b6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b97561d4624f6b15", "level": "none", "message": {"text": "Commented-code block (5 lines) in services/prism-service/prism_service/api/memory.py:18"}, "properties": {"repobilityId": "455f28e96292bd66", "scanner": "scanner-primary", "fingerprint": "b97561d4624f6b15", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0fc2ba0ad7a03984", "level": "none", "message": {"text": "Commented-code block (5 lines) in services/prism-service/prism_service/api/brain.py:101"}, "properties": {"repobilityId": "69039ec103a02712", "scanner": "scanner-primary", "fingerprint": "0fc2ba0ad7a03984", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-07db8f10fd611a7c", "level": "none", "message": {"text": "Commented-code block (5 lines) in services/prism-service/prism_service/api/graph.py:33"}, "properties": {"repobilityId": "56a51adcbf62ab7e", "scanner": "scanner-primary", "fingerprint": "07db8f10fd611a7c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0c924a71d5048c53", "level": "none", "message": {"text": "Commented-code block (5 lines) in services/prism-service/prism_service/api/tasks.py:63"}, "properties": {"repobilityId": "3007c034c309a9b8", "scanner": "scanner-primary", "fingerprint": "0c924a71d5048c53", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a87f9cebcfaf3f4d", "level": "none", "message": {"text": "Commented-code block (5 lines) in services/prism-service/prism_service/mcp/tools.py:1508"}, "properties": {"repobilityId": "9dab7fca6723c463", "scanner": "scanner-primary", "fingerprint": "a87f9cebcfaf3f4d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6dbbeb81885c09d2", "level": "none", "message": {"text": "Commented-code block (6 lines) in services/prism-service/prism_service/mcp/server.py:55"}, "properties": {"repobilityId": "fdfa93793da97749", "scanner": "scanner-primary", "fingerprint": "6dbbeb81885c09d2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-56f3f44b75ea3ece", "level": "none", "message": {"text": "Commented-code block (5 lines) in services/prism-service/prism_service/cli/prism_cli.py:148"}, "properties": {"repobilityId": "f7498392c96b0562", "scanner": "scanner-primary", "fingerprint": "56f3f44b75ea3ece", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5444336d0022d225", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 services/prism-service/prism_service/cli/prism_cli.py:81"}, "properties": {"repobilityId": "958f6b0720989709", "scanner": "scanner-primary", "fingerprint": "5444336d0022d225", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f0b93ea967e440c7", "level": "none", "message": {"text": "Commented-code block (5 lines) in services/prism-service/prism_service/assets/stop_record_hook.py:162"}, "properties": {"repobilityId": "3b703a12496c1066", "scanner": "scanner-primary", "fingerprint": "f0b93ea967e440c7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ea93d9fef2af4996", "level": "none", "message": {"text": "Commented-code block (6 lines) in services/prism-service/prism_service/web/src/App.tsx:10"}, "properties": {"repobilityId": "ec62d3b991512afc", "scanner": "scanner-primary", "fingerprint": "ea93d9fef2af4996", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b919b9d29fe2e2dc", "level": "none", "message": {"text": "Commented-code block (5 lines) in services/prism-service/prism_service/web/src/components/EvidenceView.tsx:1"}, "properties": {"repobilityId": "20662fcb7fb72cd9", "scanner": "scanner-primary", "fingerprint": "b919b9d29fe2e2dc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8b2dc1315831fd45", "level": "none", "message": {"text": "Commented-code block (6 lines) in services/prism-service/prism_service/web/src/components/Sidebar.tsx:37"}, "properties": {"repobilityId": "5bfd66a2480abd0b", "scanner": "scanner-primary", "fingerprint": "8b2dc1315831fd45", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-63b5e4e7705be589", "level": "none", "message": {"text": "Commented-code block (5 lines) in services/prism-service/prism_service/web/src/components/ui.tsx:72"}, "properties": {"repobilityId": "5918c132edca0cee", "scanner": "scanner-primary", "fingerprint": "63b5e4e7705be589", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8b9bf5c484b4ff3e", "level": "none", "message": {"text": "Commented-code block (5 lines) in services/prism-service/prism_service/web/src/components/understand/PrismDomainNode.tsx:22"}, "properties": {"repobilityId": "049c9ec684d7f3b7", "scanner": "scanner-primary", "fingerprint": "8b9bf5c484b4ff3e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5ed5c9926f340d06", "level": "none", "message": {"text": "Commented-code block (5 lines) in services/prism-service/prism_service/web/src/components/understand/PrismLayerNode.tsx:29"}, "properties": {"repobilityId": "243f7b3b799c351c", "scanner": "scanner-primary", "fingerprint": "5ed5c9926f340d06", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-666638bf3c044a96", "level": "none", "message": {"text": "Commented-code block (7 lines) in services/prism-service/prism_service/web/src/components/conductor/TokenTurns.tsx:1"}, "properties": {"repobilityId": "9aee6ffb97e4514c", "scanner": "scanner-primary", "fingerprint": "666638bf3c044a96", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-57ac900f89d4bafe", "level": "none", "message": {"text": "Commented-code block (7 lines) in services/prism-service/prism_service/web/src/components/conductor/SdlcProgress.tsx:1"}, "properties": {"repobilityId": "5e8fe3c04698e2a5", "scanner": "scanner-primary", "fingerprint": "57ac900f89d4bafe", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-491f46a43fc25887", "level": "none", "message": {"text": "Commented-code block (6 lines) in services/prism-service/prism_service/web/src/components/conductor/TaskActivityGantt.tsx:1"}, "properties": {"repobilityId": "2b5e23a9bc970f53", "scanner": "scanner-primary", "fingerprint": "491f46a43fc25887", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f43b1757185a74ee", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 services/prism-service/prism_service/web/src/lib/project.ts:62"}, "properties": {"repobilityId": "4e32f31e8e6220fd", "scanner": "scanner-primary", "fingerprint": "f43b1757185a74ee", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9cb10e6129e8ae98", "level": "none", "message": {"text": "Commented-code block (7 lines) in services/prism-service/prism_service/web/src/pages/TaskDetailPage.tsx:75"}, "properties": {"repobilityId": "a057e07a3d6c2252", "scanner": "scanner-primary", "fingerprint": "9cb10e6129e8ae98", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0bc629b0771acf19", "level": "none", "message": {"text": "Commented-code block (7 lines) in services/prism-service/prism_service/web/src/pages/ExplorePage.tsx:14"}, "properties": {"repobilityId": "e6302f6fdcd46805", "scanner": "scanner-primary", "fingerprint": "0bc629b0771acf19", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e2a6fb32ca5062ea", "level": "none", "message": {"text": "Commented-code block (6 lines) in services/prism-service/prism_service/web/src/pages/TasksPage.tsx:25"}, "properties": {"repobilityId": "c390d6e084d598e5", "scanner": "scanner-primary", "fingerprint": "e2a6fb32ca5062ea", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-60681c6a9cea8b71", "level": "none", "message": {"text": "Commented-code block (5 lines) in services/prism-service/prism_service/web/src/pages/SettingsPage.tsx:1444"}, "properties": {"repobilityId": "a59aed880cd38ddd", "scanner": "scanner-primary", "fingerprint": "60681c6a9cea8b71", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-140ac6e965291807", "level": "none", "message": {"text": "Commented-code block (8 lines) in services/prism-service/prism_service/web/src/pages/MemoryPage.tsx:87"}, "properties": {"repobilityId": "0789a83bce6fd482", "scanner": "scanner-primary", "fingerprint": "140ac6e965291807", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9ca2333f53bf1431", "level": "none", "message": {"text": "Commented-code block (5 lines) in services/prism-service/prism_service/web/src/pages/UnderstandPage.tsx:34"}, "properties": {"repobilityId": "b8068b4b3bac8c4f", "scanner": "scanner-primary", "fingerprint": "9ca2333f53bf1431", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-92ebaa7531bbadaa", "level": "none", "message": {"text": "Commented-code block (10 lines) in services/prism-service/prism_service/web/src/pages/ConductorPage.tsx:115"}, "properties": {"repobilityId": "4480710a8fe9cc80", "scanner": "scanner-primary", "fingerprint": "92ebaa7531bbadaa", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9f0d57b3fa849d11", "level": "none", "message": {"text": "Commented-code block (5 lines) in services/prism-service/prism_service/inference/claude_cli.py:68"}, "properties": {"repobilityId": "07f97ac1ca5690bb", "scanner": "scanner-primary", "fingerprint": "9f0d57b3fa849d11", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ca08eaa6b9ae0c40", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 services/prism-service/prism_service/inference/claude_cli.py:233"}, "properties": {"repobilityId": "92fab33095bac7f5", "scanner": "scanner-primary", "fingerprint": "ca08eaa6b9ae0c40", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3eb57967c05adf1d", "level": "none", "message": {"text": "Commented-code block (5 lines) in services/prism-service/prism_service/services/verifier_service.py:177"}, "properties": {"repobilityId": "df6a991297f6a157", "scanner": "scanner-primary", "fingerprint": "3eb57967c05adf1d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f581b6098fca0eaa", "level": "note", "message": {"text": "Legacy-named symbol `_decay_unused` in services/prism-service/prism_service/services/governance.py:54"}, "properties": {"repobilityId": "1120e3c21f0c3102", "scanner": "scanner-primary", "fingerprint": "f581b6098fca0eaa", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-284a9df7fbae53f2", "level": "none", "message": {"text": "Commented-code block (5 lines) in services/prism-service/prism_service/services/understand_view.py:327"}, "properties": {"repobilityId": "a34b0b77885def01", "scanner": "scanner-primary", "fingerprint": "284a9df7fbae53f2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-75306444b4df0579", "level": "none", "message": {"text": "Commented-code block (6 lines) in services/prism-service/prism_service/services/memory_service.py:16"}, "properties": {"repobilityId": "4d52b1c1c349b749", "scanner": "scanner-primary", "fingerprint": "75306444b4df0579", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b39aa83c1064e353", "level": "none", "message": {"text": "Commented-code block (5 lines) in services/prism-service/prism_service/services/task_service.py:112"}, "properties": {"repobilityId": "8e4c4875185af24a", "scanner": "scanner-primary", "fingerprint": "b39aa83c1064e353", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fa05e1469cf4e392", "level": "none", "message": {"text": "Commented-code block (6 lines) in services/prism-service/prism_service/services/claude_transcripts.py:45"}, "properties": {"repobilityId": "c904e774a912a762", "scanner": "scanner-primary", "fingerprint": "fa05e1469cf4e392", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-285bb2c2cf64bd8c", "level": "none", "message": {"text": "Commented-code block (9 lines) in services/prism-service/prism_service/services/source_service.py:343"}, "properties": {"repobilityId": "1d1df9d4e285dc57", "scanner": "scanner-primary", "fingerprint": "285bb2c2cf64bd8c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bb1dc5f30c0501ae", "level": "none", "message": {"text": "Commented-code block (5 lines) in services/prism-service/prism_service/services/conductor_service.py:381"}, "properties": {"repobilityId": "296502e9d810c438", "scanner": "scanner-primary", "fingerprint": "bb1dc5f30c0501ae", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0e4fcf4615753246", "level": "none", "message": {"text": "Commented-code block (5 lines) in services/prism-service/prism_service/services/reflection_runner.py:28"}, "properties": {"repobilityId": "640169d9f9466e93", "scanner": "scanner-primary", "fingerprint": "0e4fcf4615753246", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9838c7cf1604750b", "level": "none", "message": {"text": "Commented-code block (8 lines) in services/prism-service/prism_service/services/auto_updater.py:71"}, "properties": {"repobilityId": "0b8315dfa3dfa80e", "scanner": "scanner-primary", "fingerprint": "9838c7cf1604750b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-572139a9c6159d9c", "level": "none", "message": {"text": "Commented-code block (7 lines) in services/prism-service/prism_service/services/memory_ops_worker.py:65"}, "properties": {"repobilityId": "9a6eace4eda432ef", "scanner": "scanner-primary", "fingerprint": "572139a9c6159d9c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-07a1acf3bdb6424e", "level": "note", "message": {"text": "Stub function `apply_verdict` (body is just `pass`/`return`) \u2014 services/prism-service/prism_service/services/memory_ops_worker.py:176"}, "properties": {"repobilityId": "e9c9e3d9256b9076", "scanner": "scanner-primary", "fingerprint": "07a1acf3bdb6424e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "empty-handler", "dead-code"]}}, {"ruleId": "scanner-7c8d9cd36663fe35", "level": "none", "message": {"text": "Commented-code block (5 lines) in services/prism-service/prism_service/services/brain_service.py:400"}, "properties": {"repobilityId": "8532d973fb977979", "scanner": "scanner-primary", "fingerprint": "7c8d9cd36663fe35", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4bb59de451a32951", "level": "none", "message": {"text": "Commented-code block (5 lines) in services/prism-service/prism_service/services/graph_service.py:97"}, "properties": {"repobilityId": "35998b7a56634cfe", "scanner": "scanner-primary", "fingerprint": "4bb59de451a32951", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f36ff840c8887c8f", "level": "none", "message": {"text": "Commented-code block (7 lines) in services/prism-service/prism_service/services/memory_ops/forget.py:38"}, "properties": {"repobilityId": "a7c9c79dde3c56cb", "scanner": "scanner-primary", "fingerprint": "f36ff840c8887c8f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-be46ea126aa5d8dc", "level": "note", "message": {"text": "Near-duplicate function bodies in 3 places"}, "properties": {"repobilityId": "ea5744ac29fd2ab4", "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": "fdbbbe9f71d461d9", "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": "5a239b2aa7fdcac7", "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": "f8319d32253674d1", "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": "f4bde004fd24f598", "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": "ec1846b37c39d9e6", "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": "8a34ac5a73b5eb58", "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": "96b9a005acf790e6", "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": "6a71f77f48b5ce7d", "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": "2a9eb16131f4dad3", "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": "c7c2e3af5d7c818a", "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": "f545f3876d3b52bd", "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": "c796227eed2ffdbf", "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": "e7799eea7cf96871", "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": "d7b42c11590195a1", "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": "6835e5db2f6ac5c7", "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": "88af5a6a8ff0590b", "scanner": "scanner-primary", "fingerprint": "02525d39071dd2c7", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-5b43faffc9cb9689", "level": "warning", "message": {"text": "Frontend route `/explore` has no Link/navigate to it \u2014 services/prism-service/prism_service/web/src/App.tsx"}, "properties": {"repobilityId": "c84175ea9cc71bb3", "scanner": "scanner-primary", "fingerprint": "5b43faffc9cb9689", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-ef8965c0b77c0d7f", "level": "warning", "message": {"text": "Frontend route `/graph` has no Link/navigate to it \u2014 services/prism-service/prism_service/web/src/App.tsx"}, "properties": {"repobilityId": "bd4c6837864493ea", "scanner": "scanner-primary", "fingerprint": "ef8965c0b77c0d7f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-fa4c883f353cd22a", "level": "warning", "message": {"text": "Frontend route `/memory/:id` has no Link/navigate to it \u2014 services/prism-service/prism_service/web/src/App.tsx"}, "properties": {"repobilityId": "b4d3349eec8de494", "scanner": "scanner-primary", "fingerprint": "fa4c883f353cd22a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-41f99fbc94e13380", "level": "warning", "message": {"text": "Frontend route `/tasks/:id` has no Link/navigate to it \u2014 services/prism-service/prism_service/web/src/App.tsx"}, "properties": {"repobilityId": "3748a37e5330c416", "scanner": "scanner-primary", "fingerprint": "41f99fbc94e13380", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-8738fb6d6437f426", "level": "warning", "message": {"text": "Frontend route `/tasks/:id/:section` has no Link/navigate to it \u2014 services/prism-service/prism_service/web/src/App.tsx"}, "properties": {"repobilityId": "aff75766af9ed5fc", "scanner": "scanner-primary", "fingerprint": "8738fb6d6437f426", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-c1cedd5522ca9536", "level": "warning", "message": {"text": "Frontend route `/settings/:section` has no Link/navigate to it \u2014 services/prism-service/prism_service/web/src/App.tsx"}, "properties": {"repobilityId": "9984edd95862c725", "scanner": "scanner-primary", "fingerprint": "c1cedd5522ca9536", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-0d0137696fc01bd6", "level": "error", "message": {"text": "FastAPI POST `resync` without auth dependency \u2014 services/prism-service/prism_service/api/staleness.py:88"}, "properties": {"repobilityId": "0e7bcd716d083091", "scanner": "scanner-primary", "fingerprint": "0d0137696fc01bd6", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/prism-service/prism_service/api/staleness.py"}, "region": {"startLine": 88}}}]}, {"ruleId": "scanner-329681a738fa2825", "level": "error", "message": {"text": "FastAPI POST `create_project` without auth dependency \u2014 services/prism-service/prism_service/api/projects.py:73"}, "properties": {"repobilityId": "27d7fa596ab3bafa", "scanner": "scanner-primary", "fingerprint": "329681a738fa2825", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/prism-service/prism_service/api/projects.py"}, "region": {"startLine": 73}}}]}, {"ruleId": "scanner-fa89a01f61baba7b", "level": "error", "message": {"text": "FastAPI DELETE `delete_project` without auth dependency \u2014 services/prism-service/prism_service/api/projects.py:153"}, "properties": {"repobilityId": "e327fd4d4efa7f40", "scanner": "scanner-primary", "fingerprint": "fa89a01f61baba7b", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/prism-service/prism_service/api/projects.py"}, "region": {"startLine": 153}}}]}, {"ruleId": "scanner-78fb655d6b458412", "level": "error", "message": {"text": "FastAPI POST `ingest` without auth dependency \u2014 services/prism-service/prism_service/api/agent_runs.py:27"}, "properties": {"repobilityId": "25c426e54261999c", "scanner": "scanner-primary", "fingerprint": "78fb655d6b458412", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/prism-service/prism_service/api/agent_runs.py"}, "region": {"startLine": 27}}}]}, {"ruleId": "scanner-e882cb120fc1b4e8", "level": "error", "message": {"text": "FastAPI POST `configure` without auth dependency \u2014 services/prism-service/prism_service/api/understand.py:39"}, "properties": {"repobilityId": "bd712c2e2f0bb0cb", "scanner": "scanner-primary", "fingerprint": "e882cb120fc1b4e8", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/prism-service/prism_service/api/understand.py"}, "region": {"startLine": 39}}}]}, {"ruleId": "scanner-dbd1bf1236aecf9f", "level": "error", "message": {"text": "FastAPI POST `refresh` without auth dependency \u2014 services/prism-service/prism_service/api/understand.py:100"}, "properties": {"repobilityId": "959769cb95da3849", "scanner": "scanner-primary", "fingerprint": "dbd1bf1236aecf9f", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/prism-service/prism_service/api/understand.py"}, "region": {"startLine": 100}}}]}, {"ruleId": "scanner-5a6bcbfddaf9f43d", "level": "error", "message": {"text": "FastAPI POST `set_policy` without auth dependency \u2014 services/prism-service/prism_service/api/learning.py:59"}, "properties": {"repobilityId": "e7d95a03f9ab837b", "scanner": "scanner-primary", "fingerprint": "5a6bcbfddaf9f43d", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/prism-service/prism_service/api/learning.py"}, "region": {"startLine": 59}}}]}, {"ruleId": "scanner-207f9ed3e243e63d", "level": "error", "message": {"text": "FastAPI POST `entry_action` without auth dependency \u2014 services/prism-service/prism_service/api/memory.py:146"}, "properties": {"repobilityId": "6ad8174e1bf6bd9e", "scanner": "scanner-primary", "fingerprint": "207f9ed3e243e63d", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/prism-service/prism_service/api/memory.py"}, "region": {"startLine": 146}}}]}, {"ruleId": "scanner-b09f4dc9ea005e85", "level": "error", "message": {"text": "FastAPI POST `set_claude_config` without auth dependency \u2014 services/prism-service/prism_service/api/memory.py:219"}, "properties": {"repobilityId": "38961a55ab6d48dc", "scanner": "scanner-primary", "fingerprint": "b09f4dc9ea005e85", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/prism-service/prism_service/api/memory.py"}, "region": {"startLine": 219}}}]}, {"ruleId": "scanner-3c1a4be1d399f716", "level": "error", "message": {"text": "FastAPI POST `import_claude_memories` without auth dependency \u2014 services/prism-service/prism_service/api/memory.py:242"}, "properties": {"repobilityId": "f09c91e190f5f08a", "scanner": "scanner-primary", "fingerprint": "3c1a4be1d399f716", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/prism-service/prism_service/api/memory.py"}, "region": {"startLine": 242}}}]}, {"ruleId": "scanner-fb46a5f5febaaa32", "level": "error", "message": {"text": "FastAPI POST `reindex` without auth dependency \u2014 services/prism-service/prism_service/api/brain.py:49"}, "properties": {"repobilityId": "743f01facdf1d2ff", "scanner": "scanner-primary", "fingerprint": "fb46a5f5febaaa32", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/prism-service/prism_service/api/brain.py"}, "region": {"startLine": 49}}}]}, {"ruleId": "scanner-176d89aad9f85691", "level": "error", "message": {"text": "FastAPI POST `understand` without auth dependency \u2014 services/prism-service/prism_service/api/brain.py:71"}, "properties": {"repobilityId": "94564a11caf9ab41", "scanner": "scanner-primary", "fingerprint": "176d89aad9f85691", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/prism-service/prism_service/api/brain.py"}, "region": {"startLine": 71}}}]}, {"ruleId": "scanner-c17fa37f70fe409b", "level": "error", "message": {"text": "FastAPI POST `ask` without auth dependency \u2014 services/prism-service/prism_service/api/brain.py:109"}, "properties": {"repobilityId": "f0d7dda7e9d68499", "scanner": "scanner-primary", "fingerprint": "c17fa37f70fe409b", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/prism-service/prism_service/api/brain.py"}, "region": {"startLine": 109}}}]}, {"ruleId": "scanner-97a655265ba1a2ff", "level": "error", "message": {"text": "FastAPI POST `rebuild` without auth dependency \u2014 services/prism-service/prism_service/api/graph.py:49"}, "properties": {"repobilityId": "5580276d921043eb", "scanner": "scanner-primary", "fingerprint": "97a655265ba1a2ff", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/prism-service/prism_service/api/graph.py"}, "region": {"startLine": 49}}}]}, {"ruleId": "scanner-71dcd4669747ab7f", "level": "error", "message": {"text": "FastAPI POST `enrich` without auth dependency \u2014 services/prism-service/prism_service/api/graph.py:153"}, "properties": {"repobilityId": "f1d627eaf5b081cc", "scanner": "scanner-primary", "fingerprint": "71dcd4669747ab7f", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/prism-service/prism_service/api/graph.py"}, "region": {"startLine": 153}}}]}, {"ruleId": "scanner-cd32ad56b02ce6c6", "level": "error", "message": {"text": "FastAPI POST `edges_between` without auth dependency \u2014 services/prism-service/prism_service/api/graph.py:193"}, "properties": {"repobilityId": "2a32369ad8c08d85", "scanner": "scanner-primary", "fingerprint": "cd32ad56b02ce6c6", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/prism-service/prism_service/api/graph.py"}, "region": {"startLine": 193}}}]}, {"ruleId": "scanner-b5fe8a11415343ad", "level": "error", "message": {"text": "FastAPI POST `create_task` without auth dependency \u2014 services/prism-service/prism_service/api/tasks.py:112"}, "properties": {"repobilityId": "dfa4ae31a4241b23", "scanner": "scanner-primary", "fingerprint": "b5fe8a11415343ad", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/prism-service/prism_service/api/tasks.py"}, "region": {"startLine": 112}}}]}, {"ruleId": "scanner-77842e01e3dd4d6a", "level": "error", "message": {"text": "FastAPI PATCH `update_task` without auth dependency \u2014 services/prism-service/prism_service/api/tasks.py:280"}, "properties": {"repobilityId": "4c23ac3041f9b55c", "scanner": "scanner-primary", "fingerprint": "77842e01e3dd4d6a", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/prism-service/prism_service/api/tasks.py"}, "region": {"startLine": 280}}}]}, {"ruleId": "scanner-a434f75ca64b9a74", "level": "error", "message": {"text": "FastAPI POST `clear` without auth dependency \u2014 services/prism-service/prism_service/api/github_auth.py:92"}, "properties": {"repobilityId": "e10278b8d276f140", "scanner": "scanner-primary", "fingerprint": "a434f75ca64b9a74", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/prism-service/prism_service/api/github_auth.py"}, "region": {"startLine": 92}}}]}, {"ruleId": "scanner-6bc6efdb1b7bfa71", "level": "error", "message": {"text": "FastAPI POST `configure` without auth dependency \u2014 services/prism-service/prism_service/api/github_auth.py:102"}, "properties": {"repobilityId": "6e5311bb27602122", "scanner": "scanner-primary", "fingerprint": "6bc6efdb1b7bfa71", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/prism-service/prism_service/api/github_auth.py"}, "region": {"startLine": 102}}}]}, {"ruleId": "scanner-ac005e99919e8d95", "level": "error", "message": {"text": "FastAPI POST `set_client_id` without auth dependency \u2014 services/prism-service/prism_service/api/github_auth.py:127"}, "properties": {"repobilityId": "cc84aa05a0151c14", "scanner": "scanner-primary", "fingerprint": "ac005e99919e8d95", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/prism-service/prism_service/api/github_auth.py"}, "region": {"startLine": 127}}}]}, {"ruleId": "scanner-5772fe685243eba6", "level": "error", "message": {"text": "FastAPI POST `clear_client_id` without auth dependency \u2014 services/prism-service/prism_service/api/github_auth.py:136"}, "properties": {"repobilityId": "73d18a031c78eb9f", "scanner": "scanner-primary", "fingerprint": "5772fe685243eba6", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/prism-service/prism_service/api/github_auth.py"}, "region": {"startLine": 136}}}]}, {"ruleId": "scanner-f4a5ed542d68106d", "level": "error", "message": {"text": "FastAPI POST `device_start` without auth dependency \u2014 services/prism-service/prism_service/api/github_auth.py:142"}, "properties": {"repobilityId": "7308e5fba31ddccf", "scanner": "scanner-primary", "fingerprint": "f4a5ed542d68106d", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/prism-service/prism_service/api/github_auth.py"}, "region": {"startLine": 142}}}]}, {"ruleId": "scanner-9e65004b9a5d7f8c", "level": "error", "message": {"text": "FastAPI POST `device_poll` without auth dependency \u2014 services/prism-service/prism_service/api/github_auth.py:167"}, "properties": {"repobilityId": "d4cafb2c50a7cfe1", "scanner": "scanner-primary", "fingerprint": "9e65004b9a5d7f8c", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/prism-service/prism_service/api/github_auth.py"}, "region": {"startLine": 167}}}]}, {"ruleId": "scanner-b3edaaa77b47760a", "level": "error", "message": {"text": "FastAPI POST `check` without auth dependency \u2014 services/prism-service/prism_service/api/update.py:24"}, "properties": {"repobilityId": "84772be29435f0ac", "scanner": "scanner-primary", "fingerprint": "b3edaaa77b47760a", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/prism-service/prism_service/api/update.py"}, "region": {"startLine": 24}}}]}, {"ruleId": "scanner-dbcbb37608a6abdd", "level": "error", "message": {"text": "FastAPI POST `apply` without auth dependency \u2014 services/prism-service/prism_service/api/update.py:33"}, "properties": {"repobilityId": "3ad108e61ba4be72", "scanner": "scanner-primary", "fingerprint": "dbcbb37608a6abdd", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/prism-service/prism_service/api/update.py"}, "region": {"startLine": 33}}}]}, {"ruleId": "scanner-5f9249b94bf19893", "level": "error", "message": {"text": "FastAPI POST `feedback` without auth dependency \u2014 services/prism-service/prism_service/api/retrievals.py:22"}, "properties": {"repobilityId": "ac59d333b0bb676a", "scanner": "scanner-primary", "fingerprint": "5f9249b94bf19893", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/prism-service/prism_service/api/retrievals.py"}, "region": {"startLine": 22}}}]}, {"ruleId": "scanner-c8dbc534141d9e61", "level": "error", "message": {"text": "FastAPI POST `run_reflection` without auth dependency \u2014 services/prism-service/prism_service/api/consolidation.py:278"}, "properties": {"repobilityId": "05285d65d4f858d7", "scanner": "scanner-primary", "fingerprint": "c8dbc534141d9e61", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/prism-service/prism_service/api/consolidation.py"}, "region": {"startLine": 278}}}]}, {"ruleId": "scanner-d21533c6d7c24d7c", "level": "error", "message": {"text": "FastAPI POST `backfill` without auth dependency \u2014 services/prism-service/prism_service/api/consolidation.py:298"}, "properties": {"repobilityId": "9e904692248676b2", "scanner": "scanner-primary", "fingerprint": "d21533c6d7c24d7c", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/prism-service/prism_service/api/consolidation.py"}, "region": {"startLine": 298}}}]}, {"ruleId": "scanner-6644b472f216459f", "level": "error", "message": {"text": "FastAPI POST `drain` without auth dependency \u2014 services/prism-service/prism_service/api/consolidation.py:310"}, "properties": {"repobilityId": "bfcf304822fb6b5b", "scanner": "scanner-primary", "fingerprint": "6644b472f216459f", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/prism-service/prism_service/api/consolidation.py"}, "region": {"startLine": 310}}}]}, {"ruleId": "scanner-6f7db31fc087509e", "level": "error", "message": {"text": "FastAPI POST `prune_noise` without auth dependency \u2014 services/prism-service/prism_service/api/consolidation.py:331"}, "properties": {"repobilityId": "f46d121ec816281e", "scanner": "scanner-primary", "fingerprint": "6f7db31fc087509e", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/prism-service/prism_service/api/consolidation.py"}, "region": {"startLine": 331}}}]}, {"ruleId": "scanner-5434964f3ccb0bdf", "level": "error", "message": {"text": "FastAPI POST `gate` without auth dependency \u2014 services/prism-service/prism_service/api/conductor.py:50"}, "properties": {"repobilityId": "60cd26ddda477448", "scanner": "scanner-primary", "fingerprint": "5434964f3ccb0bdf", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/prism-service/prism_service/api/conductor.py"}, "region": {"startLine": 50}}}]}, {"ruleId": "scanner-cd18602d9d945a35", "level": "error", "message": {"text": "FastAPI POST `advance` without auth dependency \u2014 services/prism-service/prism_service/api/conductor.py:75"}, "properties": {"repobilityId": "67e838108df480a4", "scanner": "scanner-primary", "fingerprint": "cd18602d9d945a35", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/prism-service/prism_service/api/conductor.py"}, "region": {"startLine": 75}}}]}, {"ruleId": "scanner-63d1d3dc57773bee", "level": "error", "message": {"text": "FastAPI POST `import_transcripts` without auth dependency \u2014 services/prism-service/prism_service/api/sessions.py:27"}, "properties": {"repobilityId": "91bf21f9a8b00a41", "scanner": "scanner-primary", "fingerprint": "63d1d3dc57773bee", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/prism-service/prism_service/api/sessions.py"}, "region": {"startLine": 27}}}]}, {"ruleId": "scanner-9d4b1832f3960c58", "level": "error", "message": {"text": "Dangling fetch: POST /api/staleness/resync?project=${encodeURIComponent(project)} (services/prism-service/prism_service/web/src/pages/DashboardPage.tsx:97)"}, "properties": {"repobilityId": "a21d303cb947ff1d", "scanner": "scanner-primary", "fingerprint": "9d4b1832f3960c58", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ab87269b4f0680b5", "level": "error", "message": {"text": "Dangling fetch: POST /api/memory/entry/${encodeURIComponent(id)}/action?project=${project} (services/prism-service/prism_service/web/src/pages/MemoryDetailPage.tsx:136)"}, "properties": {"repobilityId": "1bc51d2c1aaa6033", "scanner": "scanner-primary", "fingerprint": "ab87269b4f0680b5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1b1d5926fda286fa", "level": "note", "message": {"text": "Unused endpoint: GET /{full_path:path}"}, "properties": {"repobilityId": "6ffee9f19329fb10", "scanner": "scanner-primary", "fingerprint": "1b1d5926fda286fa", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5baa8971ebe192a1", "level": "note", "message": {"text": "Unused endpoint: GET /"}, "properties": {"repobilityId": "f5b192143dc4f304", "scanner": "scanner-primary", "fingerprint": "5baa8971ebe192a1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-0f857555f8b0566f", "level": "note", "message": {"text": "Unused endpoint: POST /resync"}, "properties": {"repobilityId": "289359df5ce0d3ce", "scanner": "scanner-primary", "fingerprint": "0f857555f8b0566f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7a009b1a56794f45", "level": "note", "message": {"text": "Unused endpoint: POST /"}, "properties": {"repobilityId": "9b754b28fc8764da", "scanner": "scanner-primary", "fingerprint": "7a009b1a56794f45", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c562c83979dce866", "level": "note", "message": {"text": "Unused endpoint: DELETE /{name}"}, "properties": {"repobilityId": "054231fc36e56614", "scanner": "scanner-primary", "fingerprint": "c562c83979dce866", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-65a667bcc38fb792", "level": "note", "message": {"text": "Unused endpoint: POST /ingest"}, "properties": {"repobilityId": "a93818a1f1b895cc", "scanner": "scanner-primary", "fingerprint": "65a667bcc38fb792", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-fdca669cac118df3", "level": "note", "message": {"text": "Unused endpoint: POST /configure"}, "properties": {"repobilityId": "c36506a9be850366", "scanner": "scanner-primary", "fingerprint": "fdca669cac118df3", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7ce17d6b092a81ca", "level": "note", "message": {"text": "Unused endpoint: POST /refresh"}, "properties": {"repobilityId": "0f897e54f6c9fc9c", "scanner": "scanner-primary", "fingerprint": "7ce17d6b092a81ca", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-117ab7cbec004be9", "level": "note", "message": {"text": "Unused endpoint: GET /tour"}, "properties": {"repobilityId": "4c09e69ad2451637", "scanner": "scanner-primary", "fingerprint": "117ab7cbec004be9", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ddcb55939a25b6d6", "level": "note", "message": {"text": "Unused endpoint: GET /layers"}, "properties": {"repobilityId": "5854fbde480a7bd4", "scanner": "scanner-primary", "fingerprint": "ddcb55939a25b6d6", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6ad2194d377bd37e", "level": "note", "message": {"text": "Unused endpoint: GET /domains"}, "properties": {"repobilityId": "0a172fd43aea75b0", "scanner": "scanner-primary", "fingerprint": "6ad2194d377bd37e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b8cc386d3657ce88", "level": "note", "message": {"text": "Unused endpoint: GET /onboarding"}, "properties": {"repobilityId": "2793fcd923d06521", "scanner": "scanner-primary", "fingerprint": "b8cc386d3657ce88", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b75643cc29d4d3ec", "level": "note", "message": {"text": "Unused endpoint: GET /violations"}, "properties": {"repobilityId": "78a1833e0a30ff82", "scanner": "scanner-primary", "fingerprint": "b75643cc29d4d3ec", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-553b8348335609cb", "level": "note", "message": {"text": "Unused endpoint: GET /api/learning"}, "properties": {"repobilityId": "fb58252a56114625", "scanner": "scanner-primary", "fingerprint": "553b8348335609cb", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-cd6f04b60952d9e1", "level": "note", "message": {"text": "Unused endpoint: GET /api/learning/policy"}, "properties": {"repobilityId": "4ddb45858aa4902b", "scanner": "scanner-primary", "fingerprint": "cd6f04b60952d9e1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-24127e99f5c184fb", "level": "note", "message": {"text": "Unused endpoint: GET /state"}, "properties": {"repobilityId": "e710c3f32da5128c", "scanner": "scanner-primary", "fingerprint": "24127e99f5c184fb", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2a366262a6be358f", "level": "note", "message": {"text": "Unused endpoint: GET /activity"}, "properties": {"repobilityId": "676b2eeaffda2a9c", "scanner": "scanner-primary", "fingerprint": "2a366262a6be358f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b378c4799e9d2287", "level": "note", "message": {"text": "Unused endpoint: GET /entries"}, "properties": {"repobilityId": "de765da997156ca4", "scanner": "scanner-primary", "fingerprint": "b378c4799e9d2287", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-9a668c37f14537a6", "level": "note", "message": {"text": "Unused endpoint: GET /fading"}, "properties": {"repobilityId": "2ca184cd3865c587", "scanner": "scanner-primary", "fingerprint": "9a668c37f14537a6", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-207b637f21b23990", "level": "note", "message": {"text": "Unused endpoint: GET /entry/{entry_id}"}, "properties": {"repobilityId": "cebc1c3a32f157cf", "scanner": "scanner-primary", "fingerprint": "207b637f21b23990", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-06f60bbb2f90be5f", "level": "note", "message": {"text": "Unused endpoint: POST /entry/{entry_id}/action"}, "properties": {"repobilityId": "bbbc866bc6cb7906", "scanner": "scanner-primary", "fingerprint": "06f60bbb2f90be5f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-4fda65ad8308eda0", "level": "note", "message": {"text": "Unused endpoint: GET /claude-config"}, "properties": {"repobilityId": "76ab2cc3c8e3887e", "scanner": "scanner-primary", "fingerprint": "4fda65ad8308eda0", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1fb619dd5a2fa699", "level": "note", "message": {"text": "Unused endpoint: POST /claude-config"}, "properties": {"repobilityId": "47ee758f989dbd4f", "scanner": "scanner-primary", "fingerprint": "1fb619dd5a2fa699", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d84ec401acd5ff2f", "level": "note", "message": {"text": "Unused endpoint: POST /import-claude-memories"}, "properties": {"repobilityId": "ab25965ada77724f", "scanner": "scanner-primary", "fingerprint": "d84ec401acd5ff2f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-bad01ac2222e29f1", "level": "note", "message": {"text": "Unused endpoint: GET /{run_id}"}, "properties": {"repobilityId": "b019653122f14edd", "scanner": "scanner-primary", "fingerprint": "bad01ac2222e29f1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e0d89c4313ce69ee", "level": "note", "message": {"text": "Unused endpoint: GET /{run_id}/stream"}, "properties": {"repobilityId": "90ee173d32849d7f", "scanner": "scanner-primary", "fingerprint": "e0d89c4313ce69ee", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d16e4fa529c520e9", "level": "note", "message": {"text": "Unused endpoint: GET /search"}, "properties": {"repobilityId": "5be43647a9e8607c", "scanner": "scanner-primary", "fingerprint": "d16e4fa529c520e9", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c6ec3fd6b89f0ae4", "level": "note", "message": {"text": "Unused endpoint: POST /reindex"}, "properties": {"repobilityId": "d2f69adf1e8e543a", "scanner": "scanner-primary", "fingerprint": "c6ec3fd6b89f0ae4", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7e4a25dfb8e94044", "level": "note", "message": {"text": "Unused endpoint: POST /understand"}, "properties": {"repobilityId": "d7c785403acaf204", "scanner": "scanner-primary", "fingerprint": "7e4a25dfb8e94044", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8e1fadad2500f063", "level": "note", "message": {"text": "Unused endpoint: POST /ask"}, "properties": {"repobilityId": "fb44dbff012b37fd", "scanner": "scanner-primary", "fingerprint": "8e1fadad2500f063", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e1b7bee247ffc801", "level": "note", "message": {"text": "Unused endpoint: GET /summary"}, "properties": {"repobilityId": "4affe04db19be629", "scanner": "scanner-primary", "fingerprint": "e1b7bee247ffc801", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3598957025c480cd", "level": "note", "message": {"text": "Unused endpoint: POST /rebuild"}, "properties": {"repobilityId": "708259921292f65e", "scanner": "scanner-primary", "fingerprint": "3598957025c480cd", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c3aac795a24eb16b", "level": "note", "message": {"text": "Unused endpoint: GET /communities"}, "properties": {"repobilityId": "b79122d9afe47a21", "scanner": "scanner-primary", "fingerprint": "c3aac795a24eb16b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-18f274aa0f8615a9", "level": "note", "message": {"text": "Unused endpoint: GET /central"}, "properties": {"repobilityId": "8e7eec9c255e432d", "scanner": "scanner-primary", "fingerprint": "18f274aa0f8615a9", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d4c994a69d60af30", "level": "note", "message": {"text": "Unused endpoint: GET /community-files"}, "properties": {"repobilityId": "8964652b823415bb", "scanner": "scanner-primary", "fingerprint": "d4c994a69d60af30", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-04cec92f5d523a87", "level": "note", "message": {"text": "Unused endpoint: GET /file-detail"}, "properties": {"repobilityId": "9eee035e8aa2c598", "scanner": "scanner-primary", "fingerprint": "04cec92f5d523a87", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-435f11cb90fdd400", "level": "note", "message": {"text": "Unused endpoint: POST /enrich"}, "properties": {"repobilityId": "4adb9cf114ada0b4", "scanner": "scanner-primary", "fingerprint": "435f11cb90fdd400", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-eebc938d65878adf", "level": "note", "message": {"text": "Unused endpoint: GET /enrich/status"}, "properties": {"repobilityId": "fbcb3cb3682340c7", "scanner": "scanner-primary", "fingerprint": "eebc938d65878adf", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a46b08dd9361112e", "level": "note", "message": {"text": "Unused endpoint: POST /edges-between"}, "properties": {"repobilityId": "6f0b29d14b2de1b2", "scanner": "scanner-primary", "fingerprint": "a46b08dd9361112e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-cf16ae0930dc161a", "level": "note", "message": {"text": "Unused endpoint: GET /api/tasks"}, "properties": {"repobilityId": "a54ebdac6ba85ae6", "scanner": "scanner-primary", "fingerprint": "cf16ae0930dc161a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-dd377e6beb63fde7", "level": "note", "message": {"text": "Unused endpoint: POST /api/tasks"}, "properties": {"repobilityId": "2864c4fab7b3a5c7", "scanner": "scanner-primary", "fingerprint": "dd377e6beb63fde7", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-87e86123d5c3a261", "level": "note", "message": {"text": "Unused endpoint: GET /api/tasks/next"}, "properties": {"repobilityId": "44ac4ba9a486f6e6", "scanner": "scanner-primary", "fingerprint": "87e86123d5c3a261", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-574e0277428b2c6c", "level": "note", "message": {"text": "Unused endpoint: GET /api/tasks/{task_id}"}, "properties": {"repobilityId": "0315c31caaec2f62", "scanner": "scanner-primary", "fingerprint": "574e0277428b2c6c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8affeb0d6aeff6df", "level": "note", "message": {"text": "Unused endpoint: POST /clear"}, "properties": {"repobilityId": "da976f46d5da9b8a", "scanner": "scanner-primary", "fingerprint": "8affeb0d6aeff6df", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-bfbdefd23666e6d4", "level": "note", "message": {"text": "Unused endpoint: GET /client-id"}, "properties": {"repobilityId": "d3e28b2b0620cf5a", "scanner": "scanner-primary", "fingerprint": "bfbdefd23666e6d4", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-9bfe7e3fd276a5f3", "level": "note", "message": {"text": "Unused endpoint: POST /client-id"}, "properties": {"repobilityId": "d76111b005cba205", "scanner": "scanner-primary", "fingerprint": "9bfe7e3fd276a5f3", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-de0c834597a4260b", "level": "note", "message": {"text": "Unused endpoint: POST /client-id/clear"}, "properties": {"repobilityId": "6fe5e20e57840587", "scanner": "scanner-primary", "fingerprint": "de0c834597a4260b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-81c6abaf9775ea63", "level": "note", "message": {"text": "Unused endpoint: POST /device/start"}, "properties": {"repobilityId": "53adf8b0b46da201", "scanner": "scanner-primary", "fingerprint": "81c6abaf9775ea63", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f0db019aa20e73ae", "level": "note", "message": {"text": "Unused endpoint: POST /device/poll"}, "properties": {"repobilityId": "0ee0798e37eb909d", "scanner": "scanner-primary", "fingerprint": "f0db019aa20e73ae", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-97985d2859bdebf1", "level": "note", "message": {"text": "Unused endpoint: GET /repos"}, "properties": {"repobilityId": "1375c545bf46c82c", "scanner": "scanner-primary", "fingerprint": "97985d2859bdebf1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}