{"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-38643e50e0f7c0ee", "name": "Possibly dead Python function: http_request", "shortDescription": {"text": "Possibly dead Python function: http_request"}, "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-1a951b63793e03bc", "name": "Possibly dead Python function: http_request", "shortDescription": {"text": "Possibly dead Python function: http_request"}, "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-10146e082e51ceac", "name": "Possibly dead Python function: sse_reader", "shortDescription": {"text": "Possibly dead Python function: sse_reader"}, "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-35ebe4c94b542964", "name": "Possibly dead Python function: do_GET", "shortDescription": {"text": "Possibly dead Python function: do_GET"}, "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-4cc0bc6b7956eaf0", "name": "Possibly dead Python function: log_message", "shortDescription": {"text": "Possibly dead Python function: log_message"}, "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-e815b960e3f8b47c", "name": "Possibly dead Python function: handle_sigterm", "shortDescription": {"text": "Possibly dead Python function: handle_sigterm"}, "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-c2bebdb6e3a3daf8", "name": "Possibly dead Python function: initialize", "shortDescription": {"text": "Possibly dead Python function: initialize"}, "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-90fca4e340585931", "name": "Possibly dead Python function: delete_below_depth", "shortDescription": {"text": "Possibly dead Python function: delete_below_depth"}, "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-33f4524ab9349e36", "name": "Possibly dead Python function: delete_session_nodes", "shortDescription": {"text": "Possibly dead Python function: delete_session_nodes"}, "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-5f3bcb18c65f4b7c", "name": "Possibly dead Python function: reassign_session_nodes", "shortDescription": {"text": "Possibly dead Python function: reassign_session_nodes"}, "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-ff72ea96c3715474", "name": "Possibly dead Python function: count_at_depth", "shortDescription": {"text": "Possibly dead Python function: count_at_depth"}, "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-65927323038f97b4", "name": "Possibly dead Python function: count_messages_tokens", "shortDescription": {"text": "Possibly dead Python function: count_messages_tokens"}, "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-247c6d21f9ec8f96", "name": "Possibly dead Python function: append_batch", "shortDescription": {"text": "Possibly dead Python function: append_batch"}, "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-baee85539774f35e", "name": "Possibly dead Python function: delete_session_messages", "shortDescription": {"text": "Possibly dead Python function: delete_session_messages"}, "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-3baf3a039cca3b18", "name": "Possibly dead Python function: gc_externalized_tool_result", "shortDescription": {"text": "Possibly dead Python function: gc_externalized_tool_result"}, "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-30d5b6b5cae77d4b", "name": "Possibly dead Python function: pin", "shortDescription": {"text": "Possibly dead Python function: pin"}, "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-8ce24d266736bd12", "name": "Possibly dead Python function: unpin", "shortDescription": {"text": "Possibly dead Python function: unpin"}, "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-7c6f67f13275575d", "name": "Possibly dead Python function: to_openai_msg", "shortDescription": {"text": "Possibly dead Python function: to_openai_msg"}, "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-f44ec9a20c8b10a6", "name": "Stray `console.log` in TS/JS \u2014 scripts/install-hooks.js:34", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/install-hooks.js:34"}, "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-4becbfcf35bbf9b1", "name": "`truncate` class without `title=` for hover reveal \u2014 web/src/views/SessionsListView.tsx:39", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 web/src/views/SessionsListView.tsx:39"}, "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-38e6ec4de56cb97f", "name": "`truncate` class without `title=` for hover reveal \u2014 web/src/views/ChatView.tsx:344", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 web/src/views/ChatView.tsx:344"}, "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-fea0f78c669a6259", "name": "Stray `console.log` in TS/JS \u2014 legacy/verify_schema.ts:14", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 legacy/verify_schema.ts:14"}, "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-a6b6912f56cb0268", "name": "`truncate` class without `title=` for hover reveal \u2014 legacy/web/src/components/AgentDetailMemoryTab.tsx:120", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 legacy/web/src/components/AgentDetailMemoryTab.tsx:120"}, "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-f162caeccd400964", "name": "`truncate` class without `title=` for hover reveal \u2014 legacy/web/src/components/ChatHeader.tsx:59", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 legacy/web/src/components/ChatHeader.tsx:59"}, "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-920735bbc586ce20", "name": "`truncate` class without `title=` for hover reveal \u2014 legacy/web/src/components/TemplateDiffBanner.tsx:146", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 legacy/web/src/components/TemplateDiffBanner.tsx:146"}, "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-dfa214ddb46831b2", "name": "`truncate` class without `title=` for hover reveal \u2014 legacy/web/src/components/AgentDetailToolsTab.tsx:82", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 legacy/web/src/components/AgentDetailToolsTab.tsx:82"}, "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-48cce6883c1924aa", "name": "`truncate` class without `title=` for hover reveal \u2014 legacy/web/src/components/AgentDetailTasksTab.tsx:54", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 legacy/web/src/components/AgentDetailTasksTab.tsx:54"}, "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-a58ea5a38d12b139", "name": "`truncate` class without `title=` for hover reveal \u2014 legacy/web/src/components/Sidebar.tsx:176", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 legacy/web/src/components/Sidebar.tsx:176"}, "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-9b5ed14d67e48f84", "name": "`truncate` class without `title=` for hover reveal \u2014 legacy/web/src/components/ProvidersTab.tsx:178", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 legacy/web/src/components/ProvidersTab.tsx:178"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0981b8f61344373b", "name": "`truncate` class without `title=` for hover reveal \u2014 legacy/web/src/components/DynamicProviderCard.tsx:58", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 legacy/web/src/components/DynamicProviderCard.tsx:58"}, "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-1efab1b53b9fa9ab", "name": "`truncate` class without `title=` for hover reveal \u2014 legacy/web/src/components/ChatSidebar.tsx:85", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 legacy/web/src/components/ChatSidebar.tsx:85"}, "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-37bb83941121d90b", "name": "`truncate` class without `title=` for hover reveal \u2014 legacy/web/src/components/MultiSelectPicker.tsx:93", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 legacy/web/src/components/MultiSelectPicker.tsx:93"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-af79322234550518", "name": "`truncate` class without `title=` for hover reveal \u2014 legacy/web/src/components/AgentDetailGrantsTab.tsx:139", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 legacy/web/src/components/AgentDetailGrantsTab.tsx:139"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-45a72b6c14c3a58b", "name": "`truncate` class without `title=` for hover reveal \u2014 legacy/web/src/components/AgentDetailDelegationsTab.tsx:237", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 legacy/web/src/components/AgentDetailDelegationsTab.tsx:237"}, "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-b8a137882d6c798c", "name": "`truncate` class without `title=` for hover reveal \u2014 legacy/web/src/components/AgentListItem.tsx:37", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 legacy/web/src/components/AgentListItem.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-36c040ec467c2297", "name": "`truncate` class without `title=` for hover reveal \u2014 legacy/web/src/components/CommandLogTimeline.tsx:95", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 legacy/web/src/components/CommandLogTimeline.tsx:95"}, "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-0434c8a23866312b", "name": "`truncate` class without `title=` for hover reveal \u2014 legacy/web/src/components/AgentDetailInnerLifeTab.tsx:75", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 legacy/web/src/components/AgentDetailInnerLifeTab.tsx:75"}, "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-ea6af5f037b63c48", "name": "`truncate` class without `title=` for hover reveal \u2014 legacy/web/src/components/circle/CircleOverviewTab.tsx:57", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 legacy/web/src/components/circle/CircleOverviewTab.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-b82169b9722b7550", "name": "`truncate` class without `title=` for hover reveal \u2014 legacy/web/src/components/introspection/IntrospectionSidebar.tsx:11", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 legacy/web/src/components/introspection/IntrospectionSidebar.tsx:112"}, "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-9322738094b740e3", "name": "`truncate` class without `title=` for hover reveal \u2014 legacy/web/src/components/memory/BlockCard.tsx:34", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 legacy/web/src/components/memory/BlockCard.tsx:34"}, "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-ff91b4a5fd3a65cf", "name": "`truncate` class without `title=` for hover reveal \u2014 legacy/web/src/components/memory/TimelineView.tsx:98", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 legacy/web/src/components/memory/TimelineView.tsx:98"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d3859828f59ebf98", "name": "`truncate` class without `title=` for hover reveal \u2014 legacy/web/src/components/memory/MemoryContent.tsx:245", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 legacy/web/src/components/memory/MemoryContent.tsx:245"}, "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-c7bb917dbcd805ac", "name": "`truncate` class without `title=` for hover reveal \u2014 legacy/web/src/app/orchestration/page.tsx:102", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 legacy/web/src/app/orchestration/page.tsx:102"}, "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-17c455fa1685ef75", "name": "`truncate` class without `title=` for hover reveal \u2014 legacy/web/src/app/dashboard/page.tsx:208", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 legacy/web/src/app/dashboard/page.tsx:208"}, "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-1eee289cdb92da91", "name": "`truncate` class without `title=` for hover reveal \u2014 legacy/web/src/app/providers/page.tsx:179", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 legacy/web/src/app/providers/page.tsx:179"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7870db8d83cb0392", "name": "`truncate` class without `title=` for hover reveal \u2014 legacy/web/src/app/agents/_id/memory-graph/page.tsx:121", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 legacy/web/src/app/agents/_id/memory-graph/page.tsx:121"}, "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-69e541f0d27dbfd6", "name": "`truncate` class without `title=` for hover reveal \u2014 legacy/web/src/app/operator-requests/page.tsx:101", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 legacy/web/src/app/operator-requests/page.tsx:101"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d57034bac134eeb4", "name": "`truncate` class without `title=` for hover reveal \u2014 legacy/web/src/app/memory/_id/page.tsx:108", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 legacy/web/src/app/memory/_id/page.tsx:108"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e2f6d80bf9954d45", "name": "`truncate` class without `title=` for hover reveal \u2014 legacy/web/src/app/channels/page.tsx:86", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 legacy/web/src/app/channels/page.tsx:86"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-dfa2b4a03246d540", "name": "`truncate` class without `title=` for hover reveal \u2014 legacy/web/src/app/circles/page.tsx:132", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 legacy/web/src/app/circles/page.tsx:132"}, "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-1c717f795547a614", "name": "Stray `console.log` in TS/JS \u2014 legacy/tools/discord-bridge/src/index.ts:153", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 legacy/tools/discord-bridge/src/index.ts:153"}, "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-3cd7cb8871838728", "name": "Stray `console.log` in TS/JS \u2014 legacy/tools/bridges/manager.ts:59", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 legacy/tools/bridges/manager.ts:59"}, "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-b2509e962443f167", "name": "Stray `console.log` in TS/JS \u2014 legacy/tools/bridges/cli/create-task.ts:152", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 legacy/tools/bridges/cli/create-task.ts:152"}, "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-a5be8c7a6c8ec4c2", "name": "Stray `console.log` in TS/JS \u2014 legacy/tools/shadow-proxy/report.ts:155", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 legacy/tools/shadow-proxy/report.ts:155"}, "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-8c7b6df819c1d33d", "name": "Stray `console.log` in TS/JS \u2014 legacy/tools/shadow-proxy/proxy.ts:366", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 legacy/tools/shadow-proxy/proxy.ts:366"}, "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-31d39c8b66d28f9a", "name": "Stray `console.log` in TS/JS \u2014 legacy/core/migrator.js:20", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 legacy/core/migrator.js:20"}, "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-831f7533531cb7f6", "name": "Stray `console.log` in TS/JS \u2014 legacy/core/tmp_check_db.js:11", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 legacy/core/tmp_check_db.js:11"}, "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-ca14ecc76235e3c7", "name": "Stray `console.log` in TS/JS \u2014 legacy/core/agent-runtime/src/logger.ts:15", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 legacy/core/agent-runtime/src/logger.ts:15"}, "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-3ee639e38ac42730", "name": "Stray `console.log` in TS/JS \u2014 legacy/core/agent-runtime/src/__tests__/new-tools.test.ts:71", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 legacy/core/agent-runtime/src/__tests__/new-tools.test.ts:71"}, "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-fe346e17219a1335", "name": "Stray `console.log` in TS/JS \u2014 legacy/core/src/dogfeed/run.ts:32", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 legacy/core/src/dogfeed/run.ts:32"}, "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-cc71c5ad1363913b", "name": "Stray `console.log` in TS/JS \u2014 legacy/core/src/audit/AuditExport.test.ts:13", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 legacy/core/src/audit/AuditExport.test.ts:13"}, "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-758489d61b681a1d", "name": "Stray `console.log` in TS/JS \u2014 legacy/core/src/lib/logger.ts:9", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 legacy/core/src/lib/logger.ts:9"}, "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-f87e80f6c9d36c1a", "name": "Stray `console.log` in TS/JS \u2014 legacy/core/src/services/vector.service.benchmark.ts:8", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 legacy/core/src/services/vector.service.benchmark.ts:8"}, "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-3f539569c2bb99a9", "name": "Stray `console.log` in TS/JS \u2014 legacy/core/src/skills/cli.ts:39", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 legacy/core/src/skills/cli.ts:39"}, "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-abc9fe42e8e022a1", "name": "Stray `console.log` in TS/JS \u2014 legacy/core/src/skills/builtins/shell-exec.test.ts:64", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 legacy/core/src/skills/builtins/shell-exec.test.ts:64"}, "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-279ad00f804b8c44", "name": "Stray `console.log` in TS/JS \u2014 e2e/fixtures/stack.ts:57", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 e2e/fixtures/stack.ts:57"}, "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-706d75ad04beb5b7", "name": "Privileged port 17 in use", "shortDescription": {"text": "Privileged port 17 in use"}, "fullDescription": {"text": "Port 17 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-0d43358e62a1955c", "name": "Dockerfile runs as root: rust/Dockerfile", "shortDescription": {"text": "Dockerfile runs as root: rust/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-070b032892efa699", "name": "Docker base image is tag-pinned but not digest-pinned: rust:1-slim-bookworm", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: rust:1-slim-bookworm"}, "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-da2d469a95e5b8f2", "name": "Docker base image is tag-pinned but not digest-pinned: debian:bookworm-slim", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: debian:bookworm-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-a5823f1252b6cda1", "name": "Dockerfile runs as root: web/Dockerfile", "shortDescription": {"text": "Dockerfile runs as root: web/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-845b11d47f4d2ea7", "name": "Docker base image is tag-pinned but not digest-pinned: oven/bun:1-alpine", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: oven/bun:1-alpine"}, "fullDescription": {"text": "Container tags can be retagged upstream. Pin production base images to a reviewed digest (`image@sha256:...`) when reproducibility and supply-chain integrity matter."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0f2f8d1aedc84788", "name": "Docker base image is tag-pinned but not digest-pinned: nginx:alpine", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: nginx:alpine"}, "fullDescription": {"text": "Container tags can be retagged upstream. Pin production base images to a reviewed digest (`image@sha256:...`) when reproducibility and supply-chain integrity matter."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4a867c2fc3ffa3c7", "name": "Dockerfile runs as root: legacy/docker/dogfeed-agent/Dockerfile", "shortDescription": {"text": "Dockerfile runs as root: legacy/docker/dogfeed-agent/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-b3c51ada7fe418b8", "name": "Docker base image is tag-pinned but not digest-pinned: node:22-bookworm-slim", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: node:22-bookworm-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-e91ddedab7070330", "name": "Dockerfile pipes a remote installer into a shell", "shortDescription": {"text": "Dockerfile pipes a remote installer into a shell"}, "fullDescription": {"text": "Executing downloaded code during image build gives the remote endpoint build-time code execution. Prefer pinned packages or verify downloaded installers by checksum/signature."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e3124016d0442ce0", "name": "Dockerfile runs as root: legacy/egress-proxy/Dockerfile", "shortDescription": {"text": "Dockerfile runs as root: legacy/egress-proxy/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-c42010a2d6bd76fb", "name": "Docker base image uses a mutable or implicit tag: ubuntu/squid:latest", "shortDescription": {"text": "Docker base image uses a mutable or implicit tag: ubuntu/squid:latest"}, "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": "medium", "confidence": 1.0}}, {"id": "scanner-1bc970ebf8b25a57", "name": "Dockerfile runs as root: legacy/web/Dockerfile", "shortDescription": {"text": "Dockerfile runs as root: legacy/web/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-e87a42bd86bc8c25", "name": "Docker base image is tag-pinned but not digest-pinned: oven/bun:1-alpine", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: oven/bun:1-alpine"}, "fullDescription": {"text": "Container tags can be retagged upstream. Pin production base images to a reviewed digest (`image@sha256:...`) when reproducibility and supply-chain integrity matter."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f515afc9a76625a2", "name": "Docker base image is tag-pinned but not digest-pinned: nginx:alpine", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: nginx:alpine"}, "fullDescription": {"text": "Container tags can be retagged upstream. Pin production base images to a reviewed digest (`image@sha256:...`) when reproducibility and supply-chain integrity matter."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2b4754cb16d2c74f", "name": "Dockerfile runs as root: legacy/examples/byoh-python/Dockerfile", "shortDescription": {"text": "Dockerfile runs as root: legacy/examples/byoh-python/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-60ef0bbb7590acb5", "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-8bed139077a6eb0d", "name": "Dockerfile runs as root: legacy/examples/byoh-shell/Dockerfile", "shortDescription": {"text": "Dockerfile runs as root: legacy/examples/byoh-shell/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-8e5350a432fa05b1", "name": "Docker base image is tag-pinned but not digest-pinned: alpine:3.19", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: alpine:3.19"}, "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-5506b6120953af7f", "name": "Dockerfile runs as root: legacy/tools/shadow-proxy/Dockerfile", "shortDescription": {"text": "Dockerfile runs as root: legacy/tools/shadow-proxy/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-4dc8cf066093b00e", "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-dbb612295750ec31", "name": "Dockerfile runs as root: legacy/core/Dockerfile", "shortDescription": {"text": "Dockerfile runs as root: legacy/core/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-05724245c3a08737", "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-fa1b548c4205760e", "name": "Dockerfile pipes a remote installer into a shell", "shortDescription": {"text": "Dockerfile pipes a remote installer into a shell"}, "fullDescription": {"text": "Executing downloaded code during image build gives the remote endpoint build-time code execution. Prefer pinned packages or verify downloaded installers by checksum/signature."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "high", "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-b9fbb86686665252", "name": "Insecure pattern 'eval_used' in scripts/runtime-verify.sh:48", "shortDescription": {"text": "Insecure pattern 'eval_used' in scripts/runtime-verify.sh:48"}, "fullDescription": {"text": "Found a known-risky pattern (eval_used). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8eed6d378614c01a", "name": "Possible secret in rust/crates/sera-gateway/src/routes/inference_proxy.rs", "shortDescription": {"text": "Possible secret in rust/crates/sera-gateway/src/routes/inference_proxy.rs"}, "fullDescription": {"text": "Detected pattern matching generic_api_key. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-224a31a992fdf46d", "name": "Possible secret in rust/crates/sera-tools/src/corrections/seed.rs", "shortDescription": {"text": "Possible secret in rust/crates/sera-tools/src/corrections/seed.rs"}, "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-c3dee21377ad4f5e", "name": "Possible secret in rust/crates/sera-oci/src/puller.rs", "shortDescription": {"text": "Possible secret in rust/crates/sera-oci/src/puller.rs"}, "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-cef5343a148e34cb", "name": "Possible secret in rust/crates/sera-config/src/core_config.rs", "shortDescription": {"text": "Possible secret in rust/crates/sera-config/src/core_config.rs"}, "fullDescription": {"text": "Detected pattern matching generic_api_key. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-ee02c4745bbc9526", "name": "Insecure pattern 'exec_used' in rust/crates/sera-workflow/src/coordination.rs:97", "shortDescription": {"text": "Insecure pattern 'exec_used' in rust/crates/sera-workflow/src/coordination.rs:97"}, "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-4277340ce7b391bc", "name": "Insecure pattern 'local_storage_auth_token' in legacy/web/src/app/login/page.tsx:28", "shortDescription": {"text": "Insecure pattern 'local_storage_auth_token' in legacy/web/src/app/login/page.tsx:28"}, "fullDescription": {"text": "Found a known-risky pattern (local_storage_auth_token). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4ff73d5fe72ee144", "name": "Insecure pattern 'node_child_process' in legacy/tools/bridges/manager.ts:11", "shortDescription": {"text": "Insecure pattern 'node_child_process' in legacy/tools/bridges/manager.ts:11"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-03653eeaeb9a83ff", "name": "Insecure pattern 'node_child_process' in legacy/tools/bridges/omo-bridge/index.ts:14", "shortDescription": {"text": "Insecure pattern 'node_child_process' in legacy/tools/bridges/omo-bridge/index.ts:14"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-229d5de6d2d81295", "name": "Insecure pattern 'node_child_process' in legacy/tools/bridges/omx-bridge/index.ts:14", "shortDescription": {"text": "Insecure pattern 'node_child_process' in legacy/tools/bridges/omx-bridge/index.ts:14"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-1658995018ae8903", "name": "Insecure pattern 'node_child_process' in legacy/tools/bridges/shared/bridge-base.ts:14", "shortDescription": {"text": "Insecure pattern 'node_child_process' in legacy/tools/bridges/shared/bridge-base.ts:14"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-280fe8f1f49a321e", "name": "Insecure pattern 'node_child_process' in legacy/tools/bridges/omc-bridge/index.ts:14", "shortDescription": {"text": "Insecure pattern 'node_child_process' in legacy/tools/bridges/omc-bridge/index.ts:14"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-84cb84c19635a605", "name": "Insecure pattern 'node_child_process' in legacy/tools/bridges/gemini-bridge/index.ts:14", "shortDescription": {"text": "Insecure pattern 'node_child_process' in legacy/tools/bridges/gemini-bridge/index.ts:14"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-27e57668db675a66", "name": "Insecure pattern 'node_child_process' in legacy/core/agent-runtime/src/tools/hooks.ts:6", "shortDescription": {"text": "Insecure pattern 'node_child_process' in legacy/core/agent-runtime/src/tools/hooks.ts:6"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a546307312ec451f", "name": "Insecure pattern 'node_child_process' in legacy/core/agent-runtime/src/tools/shell-handler.ts:5", "shortDescription": {"text": "Insecure pattern 'node_child_process' in legacy/core/agent-runtime/src/tools/shell-handler.ts:5"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-7e8a1ff1010c3b0a", "name": "Insecure pattern 'node_child_process' in legacy/core/agent-runtime/src/tools/search-handlers.ts:8", "shortDescription": {"text": "Insecure pattern 'node_child_process' in legacy/core/agent-runtime/src/tools/search-handlers.ts:8"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-eeda410c5bbf9b08", "name": "Insecure pattern 'cors_wildcard' in legacy/core/src/index.ts:203", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in legacy/core/src/index.ts:203"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-bfe98c074245bbb0", "name": "Insecure pattern 'node_child_process' in legacy/core/src/dogfeed/verify-merge.ts:9", "shortDescription": {"text": "Insecure pattern 'node_child_process' in legacy/core/src/dogfeed/verify-merge.ts:9"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a43591297f4ff304", "name": "Insecure pattern 'node_child_process' in legacy/core/src/sources/GitHubEventSource.ts:1", "shortDescription": {"text": "Insecure pattern 'node_child_process' in legacy/core/src/sources/GitHubEventSource.ts:1"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4f7a5e54e3a9cbc3", "name": "Insecure pattern 'exec_used' in legacy/core/src/sandbox/SandboxManager.ts:354", "shortDescription": {"text": "Insecure pattern 'exec_used' in legacy/core/src/sandbox/SandboxManager.ts:354"}, "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-bf75493658c26c10", "name": "Insecure pattern 'node_child_process' in legacy/core/src/sandbox/WorktreeManager.ts:9", "shortDescription": {"text": "Insecure pattern 'node_child_process' in legacy/core/src/sandbox/WorktreeManager.ts:9"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c4f9554e606bb663", "name": "Insecure pattern 'node_child_process' in legacy/core/src/agents/DiskQuotaService.ts:1", "shortDescription": {"text": "Insecure pattern 'node_child_process' in legacy/core/src/agents/DiskQuotaService.ts:1"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-365d57015ff4cb88", "name": "Insecure pattern 'node_child_process' in legacy/core/src/agents/Orchestrator.ts:2", "shortDescription": {"text": "Insecure pattern 'node_child_process' in legacy/core/src/agents/Orchestrator.ts:2"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c0074feed58a0c5a", "name": "Insecure pattern 'node_child_process' in legacy/core/src/services/DogfeedService.ts:12", "shortDescription": {"text": "Insecure pattern 'node_child_process' in legacy/core/src/services/DogfeedService.ts:12"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f1a27ce672836420", "name": "Insecure pattern 'node_child_process' in legacy/core/src/skills/builtins/shell-exec.ts:1", "shortDescription": {"text": "Insecure pattern 'node_child_process' in legacy/core/src/skills/builtins/shell-exec.ts:1"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e6f49e3962fd5f8f", "name": "Insecure pattern 'node_child_process' in legacy/core/src/lsp/LspClient.ts:1", "shortDescription": {"text": "Insecure pattern 'node_child_process' in legacy/core/src/lsp/LspClient.ts:1"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-871406212c3265b3", "name": "Insecure pattern 'node_child_process' in sdk/typescript/sera-plugin-sdk/scripts/generate-proto.mjs:14", "shortDescription": {"text": "Insecure pattern 'node_child_process' in sdk/typescript/sera-plugin-sdk/scripts/generate-proto.mjs:14"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-65aa740cba4a4a73", "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@v6 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-6d6b0733dcc7a778", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "arduino/setup-protoc@v3 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-27924aa79fa4a517", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "mozilla-actions/sccache-action@v0.0.10 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0763d85002569570", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/upload-pages-artifact@v5 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-14ce8614dd03f409", "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-ec51c7347d8f26c4", "name": "package.json defines install-time lifecycle scripts", "shortDescription": {"text": "package.json defines install-time lifecycle scripts"}, "fullDescription": {"text": "preinstall/install/postinstall/prepare scripts execute during dependency installation. Review them carefully for network calls, obfuscation, shell execution, or credential access."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d82b2ae84ec10505", "name": "Very large file: rust/crates/sera-auth/src/capability.rs (1550 lines)", "shortDescription": {"text": "Very large file: rust/crates/sera-auth/src/capability.rs (1550 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-119781c4a04b9485", "name": "Very large file: rust/crates/sera-memory/src/sqlite_store.rs (1692 lines)", "shortDescription": {"text": "Very large file: rust/crates/sera-memory/src/sqlite_store.rs (1692 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-91a2ab628cbd0c1f", "name": "Very large file: rust/crates/sera-gateway/src/discord.rs (5123 lines)", "shortDescription": {"text": "Very large file: rust/crates/sera-gateway/src/discord.rs (5123 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-1f78ace9c61edd70", "name": "Very large file: rust/crates/sera-gateway/src/routes/inference_proxy.rs (2114 lines)", "shortDescription": {"text": "Very large file: rust/crates/sera-gateway/src/routes/inference_proxy.rs (2114 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-02bf5570c3015934", "name": "Very large file: rust/crates/sera-runtime/src/llm_client.rs (2519 lines)", "shortDescription": {"text": "Very large file: rust/crates/sera-runtime/src/llm_client.rs (2519 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-06c1fc1d1b6f7af5", "name": "Very large file: rust/crates/sera-runtime/src/default_runtime.rs (2080 lines)", "shortDescription": {"text": "Very large file: rust/crates/sera-runtime/src/default_runtime.rs (2080 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-3b150be212a645f2", "name": "Very large file: rust/crates/sera-runtime/src/turn.rs (2069 lines)", "shortDescription": {"text": "Very large file: rust/crates/sera-runtime/src/turn.rs (2069 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e6b47502128c760b", "name": "Very large file: rust/crates/sera-runtime/src/tools/skill_management.rs (2211 lines)", "shortDescription": {"text": "Very large file: rust/crates/sera-runtime/src/tools/skill_management.rs (2211 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-e18a68f767f6aa44", "name": "Very large file: rust/crates/sera-types/src/memory.rs (1931 lines)", "shortDescription": {"text": "Very large file: rust/crates/sera-types/src/memory.rs (1931 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-51baad5e302f272b", "name": "Very large file: rust/crates/sera-db/src/lane_queue.rs (1318 lines)", "shortDescription": {"text": "Very large file: rust/crates/sera-db/src/lane_queue.rs (1318 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-a5d085a3f8cdddd5", "name": "Very large file: rust/crates/sera-tui/src/app/mod.rs (2325 lines)", "shortDescription": {"text": "Very large file: rust/crates/sera-tui/src/app/mod.rs (2325 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-c0331b09017b17a3", "name": "Very large file: rust/crates/sera-tui/src/views/session.rs (1401 lines)", "shortDescription": {"text": "Very large file: rust/crates/sera-tui/src/views/session.rs (1401 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-d4a7c02eafdbadd8", "name": "Very large file: rust/crates/sera-memory-hindsight/src/lib.rs (1366 lines)", "shortDescription": {"text": "Very large file: rust/crates/sera-memory-hindsight/src/lib.rs (1366 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-9908fdb281d9003d", "name": "Very large file: rust/crates/sera-workflow/src/coordination.rs (2159 lines)", "shortDescription": {"text": "Very large file: rust/crates/sera-workflow/src/coordination.rs (2159 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-b268139ff300584b", "name": "Very large file: rust/crates/sera-workflow/src/tests.rs (1625 lines)", "shortDescription": {"text": "Very large file: rust/crates/sera-workflow/src/tests.rs (1625 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-e4b504a38e171ea2", "name": "Very large file: rust/crates/sera-models/src/routing.rs (1798 lines)", "shortDescription": {"text": "Very large file: rust/crates/sera-models/src/routing.rs (1798 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-b75c4988d8424b14", "name": "Very large file: legacy/core/src/mcp/SeraMCPServer.ts (1906 lines)", "shortDescription": {"text": "Very large file: legacy/core/src/mcp/SeraMCPServer.ts (1906 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-3ab5d313dda8e5f9", "name": "Debug logging residue appears in source files", "shortDescription": {"text": "Debug logging residue appears in source files"}, "fullDescription": {"text": "Found 142 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 308 placeholder/mock markers across 99 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-9d79c4077342a7d0", "name": "Runtime service client appears to use placeholder configuration", "shortDescription": {"text": "Runtime service client appears to use placeholder configuration"}, "fullDescription": {"text": "A runtime source file appears to wire Supabase/Firebase/AI/payment-style clients to placeholder URLs, keys, or fallback values. In the Fable corpus this often means the UI/API shape is present while the backend service is not actually configured."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2d0c7b7ab8f8aacf", "name": "Critical user flow still appears backed by mock or placeholder data", "shortDescription": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "fullDescription": {"text": "A payment/auth/admin/order/billing-style flow contains mock, fake, TODO, dummy, or placeholder markers in runtime source. In the Fable corpus this is a high-leverage completeness smell: the app can look finished while the money, identity, or tenant flow is still scaffolded."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ea8f3013f588db25", "name": "Shallow git history limits provenance confidence", "shortDescription": {"text": "Shallow git history limits provenance confidence"}, "fullDescription": {"text": "The repository is a shallow clone. Origin/evolution analysis cannot distinguish fresh generation, imported legacy code, or long-lived human code with high confidence."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8424db9c75e04ba4", "name": "Very short observed git history", "shortDescription": {"text": "Very short observed git history"}, "fullDescription": {"text": "The repo has multiple source files but two or fewer visible commits. This is not a failure by itself, but it lowers confidence in evolution-based diagnosis."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5821e279d76aa0c2", "name": "Agent instruction/config may expose a secret: rust/CLAUDE.md", "shortDescription": {"text": "Agent instruction/config may expose a secret: rust/CLAUDE.md"}, "fullDescription": {"text": "Agent-facing files are routinely pasted into LLM/tool contexts. Move literal tokens, keys, and passwords into a secret manager or document them as placeholders only."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-70303ec9919a44eb", "name": "Agent authority lacks a verifier contract: legacy/docs/architecture/agents.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: legacy/docs/architecture/agents.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-2f29fb2b03fa99de", "name": "Agent authority lacks a verifier contract: legacy/docs/concepts/agents.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: legacy/docs/concepts/agents.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-41d798b70d78e665", "name": "Agent authority lacks a verifier contract: legacy/tools/discord-bridge/CLAUDE.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: legacy/tools/discord-bridge/CLAUDE.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-e725d2ab884fbd49", "name": "Multiple root agent instruction files without precedence", "shortDescription": {"text": "Multiple root agent instruction files without precedence"}, "fullDescription": {"text": "The repo has multiple top-level AI-coder instruction files. Without precedence rules, different agents may follow different policies."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-bd423a172a111d08", "name": "Network/subprocess call without timeout or try/except \u2014 ops/e2e/operator_task_smoke.py:39", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 ops/e2e/operator_task_smoke.py:39"}, "fullDescription": {"text": "`subprocess.check_output(...)` 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-64ffe2c6456c1ffc", "name": "`fetch()` without try/.catch or AbortSignal \u2014 web/src/lib/api.ts:37", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 web/src/lib/api.ts:37"}, "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-8be9358d0ab31922", "name": "`fetch()` without try/.catch or AbortSignal \u2014 legacy/web/src/app/auth/callback/page.tsx:46", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 legacy/web/src/app/auth/callback/page.tsx:46"}, "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-6ae124de67801fe2", "name": "`fetch()` without try/.catch or AbortSignal \u2014 legacy/web/src/app/audit/page.tsx:143", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 legacy/web/src/app/audit/page.tsx:143"}, "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-0f1e8bc1867752aa", "name": "`fetch()` without try/.catch or AbortSignal \u2014 legacy/web/src/lib/api/client.ts:95", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 legacy/web/src/lib/api/client.ts:95"}, "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-c9f69a5511fb3c5c", "name": "Commented-code block (5 lines) in legacy/tools/bridges/task-router.ts:223", "shortDescription": {"text": "Commented-code block (5 lines) in legacy/tools/bridges/task-router.ts:223"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6eeeb0ae80932f99", "name": "`fetch()` without try/.catch or AbortSignal \u2014 legacy/tools/bridges/task-router.ts:73", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 legacy/tools/bridges/task-router.ts:73"}, "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-6972210bc17da409", "name": "`fetch()` without try/.catch or AbortSignal \u2014 legacy/tools/bridges/shared/bridge-base.ts:150", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 legacy/tools/bridges/shared/bridge-base.ts:150"}, "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-7ce83023151600f9", "name": "`fetch()` without try/.catch or AbortSignal \u2014 legacy/tools/bridges/cli/create-task.ts:67", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 legacy/tools/bridges/cli/create-task.ts:67"}, "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-2e45b7be1f2f7865", "name": "Commented-code block (9 lines) in legacy/core/agent-runtime/src/contextManager.test.ts:537", "shortDescription": {"text": "Commented-code block (9 lines) in legacy/core/agent-runtime/src/contextManager.test.ts:537"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a87f44d4f4f9c7e8", "name": "Legacy-named symbol `read_v2` in legacy/core/agent-runtime/src/__tests__/toolArgumentRepair.test.ts:158", "shortDescription": {"text": "Legacy-named symbol `read_v2` in legacy/core/agent-runtime/src/__tests__/toolArgumentRepair.test.ts:158"}, "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-dcdb7a654425d12b", "name": "Commented-code block (12 lines) in legacy/core/agent-runtime/src/__tests__/memoryFlush.test.ts:118", "shortDescription": {"text": "Commented-code block (12 lines) in legacy/core/agent-runtime/src/__tests__/memoryFlush.test.ts:118"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b1ba469e9e6ce659", "name": "`fetch()` without try/.catch or AbortSignal \u2014 legacy/core/agent-runtime/src/tools/web-handler.ts:2", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 legacy/core/agent-runtime/src/tools/web-handler.ts:2"}, "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-52b528fb860d6380", "name": "`fetch()` without try/.catch or AbortSignal \u2014 legacy/core/src/dogfeed/verify-merge.ts:56", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 legacy/core/src/dogfeed/verify-merge.ts:56"}, "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-fb24f5c8bf68e5d3", "name": "`fetch()` without try/.catch or AbortSignal \u2014 legacy/core/src/sources/GitHubEventSource.ts:158", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 legacy/core/src/sources/GitHubEventSource.ts:158"}, "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-3d04ed43d970573a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 legacy/core/src/routes/auth.ts:106", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 legacy/core/src/routes/auth.ts:106"}, "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-cbe66c41bf10a536", "name": "Commented-code block (6 lines) in legacy/core/src/routes/delegation.security.test.ts:42", "shortDescription": {"text": "Commented-code block (6 lines) in legacy/core/src/routes/delegation.security.test.ts: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-e176c943fdb9e9b2", "name": "Commented-code block (5 lines) in legacy/core/src/sandbox/PermissionRequestService.ts:286", "shortDescription": {"text": "Commented-code block (5 lines) in legacy/core/src/sandbox/PermissionRequestService.ts:286"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1ff59802632934ec", "name": "Commented-code block (6 lines) in legacy/core/src/sandbox/ContainerSecurityMapper.ts:42", "shortDescription": {"text": "Commented-code block (6 lines) in legacy/core/src/sandbox/ContainerSecurityMapper.ts: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-7aad0a31d894957c", "name": "Commented-code block (5 lines) in legacy/core/src/agents/Orchestrator.ts:176", "shortDescription": {"text": "Commented-code block (5 lines) in legacy/core/src/agents/Orchestrator.ts:176"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3dde6a4f23f1a452", "name": "Commented-code block (5 lines) in legacy/core/src/agents/process/HierarchicalProcess.test.ts:115", "shortDescription": {"text": "Commented-code block (5 lines) in legacy/core/src/agents/process/HierarchicalProcess.test.ts: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-32482b838d63cd4d", "name": "Legacy-named symbol `searchLegacy` in legacy/core/src/memory/MemoryCompactionService.test.ts:13", "shortDescription": {"text": "Legacy-named symbol `searchLegacy` in legacy/core/src/memory/MemoryCompactionService.test.ts:13"}, "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-cd092765e4b49a38", "name": "Legacy-named symbol `searchLegacy` in legacy/core/src/memory/KnowledgeGitService.test.ts:26", "shortDescription": {"text": "Legacy-named symbol `searchLegacy` in legacy/core/src/memory/KnowledgeGitService.test.ts:26"}, "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-dc39ee34a20880c0", "name": "Legacy-named symbol `_kgs_unused` in legacy/core/src/memory/KnowledgeGitService.ts:59", "shortDescription": {"text": "Legacy-named symbol `_kgs_unused` in legacy/core/src/memory/KnowledgeGitService.ts:59"}, "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-89f304e6522a86b2", "name": "Legacy-named symbol `searchLegacy` in legacy/core/src/memory/Reflector.test.ts:15", "shortDescription": {"text": "Legacy-named symbol `searchLegacy` in legacy/core/src/memory/Reflector.test.ts:15"}, "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-b26a25cc9e96a9f9", "name": "Legacy-named symbol `searchLegacy` in legacy/core/src/memory/manager.ts:229", "shortDescription": {"text": "Legacy-named symbol `searchLegacy` in legacy/core/src/memory/manager.ts:229"}, "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-227efdeadc8d74a2", "name": "Legacy-named symbol `searchLegacy` in legacy/core/src/memory/scope-permissions.test.ts:26", "shortDescription": {"text": "Legacy-named symbol `searchLegacy` in legacy/core/src/memory/scope-permissions.test.ts:26"}, "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-baccfbd6d8523b65", "name": "Commented-code block (5 lines) in legacy/core/src/services/vector.service.test.ts:148", "shortDescription": {"text": "Commented-code block (5 lines) in legacy/core/src/services/vector.service.test.ts: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-94aade9454e1a9d7", "name": "Legacy-named symbol `searchLegacy` in legacy/core/src/services/vector.service.ts:444", "shortDescription": {"text": "Legacy-named symbol `searchLegacy` in legacy/core/src/services/vector.service.ts:444"}, "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-a566b0a0bdca19d1", "name": "Commented-code block (13 lines) in legacy/core/src/channels/adapters/DiscordAdapter.ts:44", "shortDescription": {"text": "Commented-code block (13 lines) in legacy/core/src/channels/adapters/DiscordAdapter.ts:44"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-75522bdefea2079a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 legacy/core/src/skills/adapters/SkillSourceAdapter.ts:20", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 legacy/core/src/skills/adapters/SkillSourceAdapter.ts:20"}, "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-0d4f8cdaa545db1c", "name": "`fetch()` without try/.catch or AbortSignal \u2014 legacy/core/src/skills/adapters/SkillRegistryService.ts:79", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 legacy/core/src/skills/adapters/SkillRegistryService.ts:79"}, "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-7642b5713f29d9e8", "name": "`fetch()` without try/.catch or AbortSignal \u2014 legacy/core/src/skills/builtins/manage-agent.ts:111", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 legacy/core/src/skills/builtins/manage-agent.ts:111"}, "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-f2124ef48024eb2e", "name": "Legacy-named symbol `_kq_unused` in legacy/core/src/skills/builtins/knowledge-query.ts:16", "shortDescription": {"text": "Legacy-named symbol `_kq_unused` in legacy/core/src/skills/builtins/knowledge-query.ts:16"}, "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-1c9cdb6a5c2e91ef", "name": "Legacy-named symbol `_kd_unused` in legacy/core/src/skills/builtins/knowledge-delete.ts:57", "shortDescription": {"text": "Legacy-named symbol `_kd_unused` in legacy/core/src/skills/builtins/knowledge-delete.ts:57"}, "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-0541de765c4dc36e", "name": "Legacy-named symbol `_ks_unused` in legacy/core/src/skills/builtins/knowledge-store.ts:171", "shortDescription": {"text": "Legacy-named symbol `_ks_unused` in legacy/core/src/skills/builtins/knowledge-store.ts:171"}, "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-312eeeaac7567653", "name": "`fetch()` without try/.catch or AbortSignal \u2014 legacy/core/src/skills/builtins/delegate-task.ts:279", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 legacy/core/src/skills/builtins/delegate-task.ts:279"}, "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-9ffd7a3efeb82c75", "name": "Legacy-named symbol `_kr_unused` in legacy/core/src/skills/builtins/knowledge-rewrite.ts:86", "shortDescription": {"text": "Legacy-named symbol `_kr_unused` in legacy/core/src/skills/builtins/knowledge-rewrite.ts:86"}, "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-bdaa3bc859084c37", "name": "Legacy-named symbol `_ku_unused` in legacy/core/src/skills/builtins/knowledge-update.ts:88", "shortDescription": {"text": "Legacy-named symbol `_ku_unused` in legacy/core/src/skills/builtins/knowledge-update.ts:88"}, "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-05cc7bb187d77f7e", "name": "Commented-code block (5 lines) in legacy/core/src/llm/ContextAssembler.ts:153", "shortDescription": {"text": "Commented-code block (5 lines) in legacy/core/src/llm/ContextAssembler.ts:153"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7fc0d94d583078ba", "name": "`fetch()` without try/.catch or AbortSignal \u2014 legacy/core/src/llm/DynamicProviderManager.ts:143", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 legacy/core/src/llm/DynamicProviderManager.ts:143"}, "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-0a684b1bb5ce0e34", "name": "Commented-code block (5 lines) in sdk/typescript/sera-plugin-sdk/scripts/generate-proto.mjs:4", "shortDescription": {"text": "Commented-code block (5 lines) in sdk/typescript/sera-plugin-sdk/scripts/generate-proto.mjs:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-379a33678ae64747", "name": "77 env vars used in code but missing from .env.example", "shortDescription": {"text": "77 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `AGENT_CHAT_PORT`, `AGENT_HEARTBEAT_INTERVAL_MS`, `AGENT_LIFECYCLE_MODE`, `AGENT_NAME`, `ANTHROPIC_API_KEY`, `CENTRIFUGO_API_KEY`, `CHANNEL_RATE_LIMIT_MAX_MESSAGES`, `CHANNEL_RATE_LIMIT_WINDOW_MS` + 69 more. Add them (with a placeholder/comment) to .env.example so onboarding doesn't break."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2c04133e54348533", "name": "Near-duplicate function bodies in 2 places", "shortDescription": {"text": "Near-duplicate function bodies in 2 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nops/validate/sera-validate.py:profile_security_negative, ops/validate/sera-validate.py:profile_accuracy_output_correctness\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-77c122b8814aadbb", "name": "Near-duplicate function bodies in 29 places", "shortDescription": {"text": "Near-duplicate function bodies in 29 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nsdk/python/sera-plugin-sdk/src/sera_plugin_sdk/types.py:to_wire, sdk/python/sera-plugin-sdk/src/sera_plugin_sdk/types.py:to_wire, sdk/python/sera-plugin-sdk/src/sera_plugin_sdk/types.py:to_wire, sdk/python/sera-plugin-sdk/src/sera_plugin_sdk/types.py:to_wire\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-00b613bfa4b4b5a6", "name": "Frontend route `agents` has no Link/navigate to it \u2014 legacy/web/src/main.tsx", "shortDescription": {"text": "Frontend route `agents` has no Link/navigate to it \u2014 legacy/web/src/main.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-0697b47f4845c88d", "name": "Frontend route `agents/:id` has no Link/navigate to it \u2014 legacy/web/src/main.tsx", "shortDescription": {"text": "Frontend route `agents/:id` has no Link/navigate to it \u2014 legacy/web/src/main.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-e0cd57893344a7eb", "name": "Frontend route `chat` has no Link/navigate to it \u2014 legacy/web/src/main.tsx", "shortDescription": {"text": "Frontend route `chat` has no Link/navigate to it \u2014 legacy/web/src/main.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-39b75c92b2d1eb37", "name": "Frontend route `sessions` has no Link/navigate to it \u2014 web/src/main.tsx", "shortDescription": {"text": "Frontend route `sessions` has no Link/navigate to it \u2014 web/src/main.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-0759fc38dfc4a122", "name": "Frontend route `sessions/:id` has no Link/navigate to it \u2014 web/src/main.tsx", "shortDescription": {"text": "Frontend route `sessions/:id` has no Link/navigate to it \u2014 web/src/main.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-2313c8fa03f405a6", "name": "Frontend route `hooks` has no Link/navigate to it \u2014 web/src/main.tsx", "shortDescription": {"text": "Frontend route `hooks` has no Link/navigate to it \u2014 web/src/main.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-823ab7ca3b5f7c09", "name": "Frontend route `/auth/callback` has no Link/navigate to it \u2014 legacy/web/src/main.tsx", "shortDescription": {"text": "Frontend route `/auth/callback` has no Link/navigate to it \u2014 legacy/web/src/main.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-6ca2309d45f7c405", "name": "Frontend route `templates` has no Link/navigate to it \u2014 legacy/web/src/main.tsx", "shortDescription": {"text": "Frontend route `templates` has no Link/navigate to it \u2014 legacy/web/src/main.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-79210b72b573c722", "name": "Frontend route `agents/:id/memory-graph` has no Link/navigate to it \u2014 legacy/web/src/main.tsx", "shortDescription": {"text": "Frontend route `agents/:id/memory-graph` has no Link/navigate to it \u2014 legacy/web/src/main.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-f796bc829387ffce", "name": "Frontend route `circles` has no Link/navigate to it \u2014 legacy/web/src/main.tsx", "shortDescription": {"text": "Frontend route `circles` has no Link/navigate to it \u2014 legacy/web/src/main.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-6efe8a0d754c2d4c", "name": "Frontend route `circles/:id` has no Link/navigate to it \u2014 legacy/web/src/main.tsx", "shortDescription": {"text": "Frontend route `circles/:id` has no Link/navigate to it \u2014 legacy/web/src/main.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-5fce93b8c29496ec", "name": "Frontend route `insights` has no Link/navigate to it \u2014 legacy/web/src/main.tsx", "shortDescription": {"text": "Frontend route `insights` has no Link/navigate to it \u2014 legacy/web/src/main.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-7e550f216674f8c5", "name": "Frontend route `audit` has no Link/navigate to it \u2014 legacy/web/src/main.tsx", "shortDescription": {"text": "Frontend route `audit` has no Link/navigate to it \u2014 legacy/web/src/main.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-617a1bb1591207d0", "name": "Frontend route `health` has no Link/navigate to it \u2014 legacy/web/src/main.tsx", "shortDescription": {"text": "Frontend route `health` has no Link/navigate to it \u2014 legacy/web/src/main.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-6abdf532120f10dd", "name": "Frontend route `schedules` has no Link/navigate to it \u2014 legacy/web/src/main.tsx", "shortDescription": {"text": "Frontend route `schedules` has no Link/navigate to it \u2014 legacy/web/src/main.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-effd4cf734f39443", "name": "Frontend route `settings` has no Link/navigate to it \u2014 legacy/web/src/main.tsx", "shortDescription": {"text": "Frontend route `settings` has no Link/navigate to it \u2014 legacy/web/src/main.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-a740326a1cc919e6", "name": "Frontend route `mcp-servers` has no Link/navigate to it \u2014 legacy/web/src/main.tsx", "shortDescription": {"text": "Frontend route `mcp-servers` has no Link/navigate to it \u2014 legacy/web/src/main.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-48e71aa2f00d3e08", "name": "Frontend route `operator-requests` has no Link/navigate to it \u2014 legacy/web/src/main.tsx", "shortDescription": {"text": "Frontend route `operator-requests` has no Link/navigate to it \u2014 legacy/web/src/main.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-07e62d539da6ec5f", "name": "Frontend route `channels` has no Link/navigate to it \u2014 legacy/web/src/main.tsx", "shortDescription": {"text": "Frontend route `channels` has no Link/navigate to it \u2014 legacy/web/src/main.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-5440f751adb7450b", "name": "Frontend route `providers` has no Link/navigate to it \u2014 legacy/web/src/main.tsx", "shortDescription": {"text": "Frontend route `providers` has no Link/navigate to it \u2014 legacy/web/src/main.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-21f01ab109441830", "name": "Frontend route `memory` has no Link/navigate to it \u2014 legacy/web/src/main.tsx", "shortDescription": {"text": "Frontend route `memory` has no Link/navigate to it \u2014 legacy/web/src/main.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-bea21726ce3981fd", "name": "Frontend route `memory/:id` has no Link/navigate to it \u2014 legacy/web/src/main.tsx", "shortDescription": {"text": "Frontend route `memory/:id` has no Link/navigate to it \u2014 legacy/web/src/main.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-bf8024eac3113eba", "name": "Frontend route `introspection` has no Link/navigate to it \u2014 legacy/web/src/main.tsx", "shortDescription": {"text": "Frontend route `introspection` has no Link/navigate to it \u2014 legacy/web/src/main.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-dc76389d9ce7e382", "name": "Frontend route `orchestration` has no Link/navigate to it \u2014 legacy/web/src/main.tsx", "shortDescription": {"text": "Frontend route `orchestration` has no Link/navigate to it \u2014 legacy/web/src/main.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-a9aec73bb64cb0a0", "name": "Frontend route `403` has no Link/navigate to it \u2014 legacy/web/src/main.tsx", "shortDescription": {"text": "Frontend route `403` has no Link/navigate to it \u2014 legacy/web/src/main.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-c980e938eec38aca", "name": "Dangling fetch: POST /providers/${encodeURIComponent(modelName)}/test (legacy/web/src/components/providers/TestConnectio", "shortDescription": {"text": "Dangling fetch: POST /providers/${encodeURIComponent(modelName)}/test (legacy/web/src/components/providers/TestConnectionButton.tsx:13)"}, "fullDescription": {"text": "`legacy/web/src/components/providers/TestConnectionButton.tsx:13` calls `POST /providers/${encodeURIComponent(modelName)}/test` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/providers/<p>/test`\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-0e722fdcde2fcf7a", "name": "Dangling fetch: POST /api/auth/logout (legacy/web/src/contexts/AuthContext.tsx:43)", "shortDescription": {"text": "Dangling fetch: POST /api/auth/logout (legacy/web/src/contexts/AuthContext.tsx:43)"}, "fullDescription": {"text": "`legacy/web/src/contexts/AuthContext.tsx:43` calls `POST /api/auth/logout` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/auth/logout`\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-296c4e18654bb89a", "name": "Dangling fetch: POST /api/auth/oidc/callback (legacy/web/src/app/auth/callback/page.tsx:46)", "shortDescription": {"text": "Dangling fetch: POST /api/auth/oidc/callback (legacy/web/src/app/auth/callback/page.tsx:46)"}, "fullDescription": {"text": "`legacy/web/src/app/auth/callback/page.tsx:46` calls `POST /api/auth/oidc/callback` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/auth/oidc/callback`\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-ecf75b8cb7134ecc", "name": "Dangling fetch: GET /sessions (legacy/web/src/app/dashboard/page.tsx:42)", "shortDescription": {"text": "Dangling fetch: GET /sessions (legacy/web/src/app/dashboard/page.tsx:42)"}, "fullDescription": {"text": "`legacy/web/src/app/dashboard/page.tsx:42` calls `GET /sessions` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/sessions`\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-eff40d833b979359", "name": "Dangling fetch: POST /system/circuit-breakers/${encodeURIComponent(provider)}/reset (legacy/web/src/lib/api/health.ts:16", "shortDescription": {"text": "Dangling fetch: POST /system/circuit-breakers/${encodeURIComponent(provider)}/reset (legacy/web/src/lib/api/health.ts:16)"}, "fullDescription": {"text": "`legacy/web/src/lib/api/health.ts:16` calls `POST /system/circuit-breakers/${encodeURIComponent(provider)}/reset` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/system/circuit-breakers/<p>/reset`\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-12a04c58ce961773", "name": "Dangling fetch: POST /intercom/publish (legacy/web/src/lib/api/intercom.ts:10)", "shortDescription": {"text": "Dangling fetch: POST /intercom/publish (legacy/web/src/lib/api/intercom.ts:10)"}, "fullDescription": {"text": "`legacy/web/src/lib/api/intercom.ts:10` calls `POST /intercom/publish` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/intercom/publish`\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-2ce47a910a9e090f", "name": "Dangling fetch: POST /intercom/dm (legacy/web/src/lib/api/intercom.ts:21)", "shortDescription": {"text": "Dangling fetch: POST /intercom/dm (legacy/web/src/lib/api/intercom.ts:21)"}, "fullDescription": {"text": "`legacy/web/src/lib/api/intercom.ts:21` calls `POST /intercom/dm` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/intercom/dm`\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-af84eec5b7ff6cb0", "name": "Dangling fetch: GET /intercom/history?${params.toString()} (legacy/web/src/lib/api/intercom.ts:33)", "shortDescription": {"text": "Dangling fetch: GET /intercom/history?${params.toString()} (legacy/web/src/lib/api/intercom.ts:33)"}, "fullDescription": {"text": "`legacy/web/src/lib/api/intercom.ts:33` calls `GET /intercom/history?${params.toString()}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/intercom/history`\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-a0ce092697ddd47d", "name": "Dangling fetch: GET /intercom/channels?${params.toString()} (legacy/web/src/lib/api/intercom.ts:38)", "shortDescription": {"text": "Dangling fetch: GET /intercom/channels?${params.toString()} (legacy/web/src/lib/api/intercom.ts:38)"}, "fullDescription": {"text": "`legacy/web/src/lib/api/intercom.ts:38` calls `GET /intercom/channels?${params.toString()}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/intercom/channels`\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-c3934c5078f501c9", "name": "Dangling fetch: GET /agents/${encodeURIComponent(agentId)}/tasks${params} (legacy/web/src/lib/api/orchestration.ts:14)", "shortDescription": {"text": "Dangling fetch: GET /agents/${encodeURIComponent(agentId)}/tasks${params} (legacy/web/src/lib/api/orchestration.ts:14)"}, "fullDescription": {"text": "`legacy/web/src/lib/api/orchestration.ts:14` calls `GET /agents/${encodeURIComponent(agentId)}/tasks${params}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/agents/<p>/tasks/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-fdd08f7d71fdc7b5", "name": "Dangling fetch: POST /agents/${encodeURIComponent(agentId)}/tasks (legacy/web/src/lib/api/orchestration.ts:22)", "shortDescription": {"text": "Dangling fetch: POST /agents/${encodeURIComponent(agentId)}/tasks (legacy/web/src/lib/api/orchestration.ts:22)"}, "fullDescription": {"text": "`legacy/web/src/lib/api/orchestration.ts:22` calls `POST /agents/${encodeURIComponent(agentId)}/tasks` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/agents/<p>/tasks`\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-906f661b9de3ff62", "name": "Dangling fetch: GET /mcp-servers (legacy/web/src/lib/api/mcp.ts:22)", "shortDescription": {"text": "Dangling fetch: GET /mcp-servers (legacy/web/src/lib/api/mcp.ts:22)"}, "fullDescription": {"text": "`legacy/web/src/lib/api/mcp.ts:22` calls `GET /mcp-servers` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/mcp-servers`\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-7490495844318785", "name": "Dangling fetch: GET /mcp-servers/${encodeURIComponent(name)} (legacy/web/src/lib/api/mcp.ts:26)", "shortDescription": {"text": "Dangling fetch: GET /mcp-servers/${encodeURIComponent(name)} (legacy/web/src/lib/api/mcp.ts:26)"}, "fullDescription": {"text": "`legacy/web/src/lib/api/mcp.ts:26` calls `GET /mcp-servers/${encodeURIComponent(name)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/mcp-servers/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5237668ee794ce27", "name": "Dangling fetch: GET /mcp-servers/${encodeURIComponent(name)}/health (legacy/web/src/lib/api/mcp.ts:30)", "shortDescription": {"text": "Dangling fetch: GET /mcp-servers/${encodeURIComponent(name)}/health (legacy/web/src/lib/api/mcp.ts:30)"}, "fullDescription": {"text": "`legacy/web/src/lib/api/mcp.ts:30` calls `GET /mcp-servers/${encodeURIComponent(name)}/health` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/mcp-servers/<p>/health`\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-4b0153baef819bb6", "name": "Dangling fetch: POST /mcp-servers/${encodeURIComponent(name)}/reload (legacy/web/src/lib/api/mcp.ts:34)", "shortDescription": {"text": "Dangling fetch: POST /mcp-servers/${encodeURIComponent(name)}/reload (legacy/web/src/lib/api/mcp.ts:34)"}, "fullDescription": {"text": "`legacy/web/src/lib/api/mcp.ts:34` calls `POST /mcp-servers/${encodeURIComponent(name)}/reload` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/mcp-servers/<p>/reload`\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-a51998ac29cfb803", "name": "Dangling fetch: POST /mcp-servers (legacy/web/src/lib/api/mcp.ts:41)", "shortDescription": {"text": "Dangling fetch: POST /mcp-servers (legacy/web/src/lib/api/mcp.ts:41)"}, "fullDescription": {"text": "`legacy/web/src/lib/api/mcp.ts:41` calls `POST /mcp-servers` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/mcp-servers`\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-b9a918f1f69dba60", "name": "Dangling fetch: DELETE /mcp-servers/${encodeURIComponent(name)} (legacy/web/src/lib/api/mcp.ts:48)", "shortDescription": {"text": "Dangling fetch: DELETE /mcp-servers/${encodeURIComponent(name)} (legacy/web/src/lib/api/mcp.ts:48)"}, "fullDescription": {"text": "`legacy/web/src/lib/api/mcp.ts:48` calls `DELETE /mcp-servers/${encodeURIComponent(name)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/mcp-servers/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-703fcd34ec357c52", "name": "Dangling fetch: PATCH /channels/${encodeURIComponent(id)} (legacy/web/src/lib/api/notifications.ts:58)", "shortDescription": {"text": "Dangling fetch: PATCH /channels/${encodeURIComponent(id)} (legacy/web/src/lib/api/notifications.ts:58)"}, "fullDescription": {"text": "`legacy/web/src/lib/api/notifications.ts:58` calls `PATCH /channels/${encodeURIComponent(id)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/channels/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8acf99a5bcc55aa7", "name": "Dangling fetch: DELETE /channels/${encodeURIComponent(id)} (legacy/web/src/lib/api/notifications.ts:65)", "shortDescription": {"text": "Dangling fetch: DELETE /channels/${encodeURIComponent(id)} (legacy/web/src/lib/api/notifications.ts:65)"}, "fullDescription": {"text": "`legacy/web/src/lib/api/notifications.ts:65` calls `DELETE /channels/${encodeURIComponent(id)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/channels/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f445e42cf3d7c9ab", "name": "Dangling fetch: POST /channels/${encodeURIComponent(id)}/test (legacy/web/src/lib/api/notifications.ts:71)", "shortDescription": {"text": "Dangling fetch: POST /channels/${encodeURIComponent(id)}/test (legacy/web/src/lib/api/notifications.ts:71)"}, "fullDescription": {"text": "`legacy/web/src/lib/api/notifications.ts:71` calls `POST /channels/${encodeURIComponent(id)}/test` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/channels/<p>/test`\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-53a47f61847a5040", "name": "Dangling fetch: GET /notifications/routing (legacy/web/src/lib/api/notifications.ts:77)", "shortDescription": {"text": "Dangling fetch: GET /notifications/routing (legacy/web/src/lib/api/notifications.ts:77)"}, "fullDescription": {"text": "`legacy/web/src/lib/api/notifications.ts:77` calls `GET /notifications/routing` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/notifications/routing`\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-9a7d5de7bd541242", "name": "Dangling fetch: POST /notifications/routing (legacy/web/src/lib/api/notifications.ts:81)", "shortDescription": {"text": "Dangling fetch: POST /notifications/routing (legacy/web/src/lib/api/notifications.ts:81)"}, "fullDescription": {"text": "`legacy/web/src/lib/api/notifications.ts:81` calls `POST /notifications/routing` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/notifications/routing`\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-f2cb6b466cbfcf1d", "name": "Dangling fetch: PATCH /notifications/routing/${encodeURIComponent(id)} (legacy/web/src/lib/api/notifications.ts:91)", "shortDescription": {"text": "Dangling fetch: PATCH /notifications/routing/${encodeURIComponent(id)} (legacy/web/src/lib/api/notifications.ts:91)"}, "fullDescription": {"text": "`legacy/web/src/lib/api/notifications.ts:91` calls `PATCH /notifications/routing/${encodeURIComponent(id)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/notifications/routing/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-583229cc396505e1", "name": "Dangling fetch: DELETE /notifications/routing/${encodeURIComponent(id)} (legacy/web/src/lib/api/notifications.ts:98)", "shortDescription": {"text": "Dangling fetch: DELETE /notifications/routing/${encodeURIComponent(id)} (legacy/web/src/lib/api/notifications.ts:98)"}, "fullDescription": {"text": "`legacy/web/src/lib/api/notifications.ts:98` calls `DELETE /notifications/routing/${encodeURIComponent(id)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/notifications/routing/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-987cb9c27dab7640", "name": "Dangling fetch: GET /channels/${encodeURIComponent(id)}/health (legacy/web/src/lib/api/notifications.ts:109)", "shortDescription": {"text": "Dangling fetch: GET /channels/${encodeURIComponent(id)}/health (legacy/web/src/lib/api/notifications.ts:109)"}, "fullDescription": {"text": "`legacy/web/src/lib/api/notifications.ts:109` calls `GET /channels/${encodeURIComponent(id)}/health` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/channels/<p>/health`\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-68b7dc172527bf1b", "name": "Dangling fetch: GET /circles (legacy/web/src/lib/api/circles.ts:5)", "shortDescription": {"text": "Dangling fetch: GET /circles (legacy/web/src/lib/api/circles.ts:5)"}, "fullDescription": {"text": "`legacy/web/src/lib/api/circles.ts:5` calls `GET /circles` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/circles`\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-e41ae2081810cc65", "name": "Dangling fetch: POST /circles (legacy/web/src/lib/api/circles.ts:11)", "shortDescription": {"text": "Dangling fetch: POST /circles (legacy/web/src/lib/api/circles.ts:11)"}, "fullDescription": {"text": "`legacy/web/src/lib/api/circles.ts:11` calls `POST /circles` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/circles`\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-fa6ebc7bfb285026", "name": "Dangling fetch: GET /circles/${encodeURIComponent(name)} (legacy/web/src/lib/api/circles.ts:18)", "shortDescription": {"text": "Dangling fetch: GET /circles/${encodeURIComponent(name)} (legacy/web/src/lib/api/circles.ts:18)"}, "fullDescription": {"text": "`legacy/web/src/lib/api/circles.ts:18` calls `GET /circles/${encodeURIComponent(name)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/circles/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-281dc337d935a261", "name": "Dangling fetch: PUT /circles/${encodeURIComponent(name)} (legacy/web/src/lib/api/circles.ts:25)", "shortDescription": {"text": "Dangling fetch: PUT /circles/${encodeURIComponent(name)} (legacy/web/src/lib/api/circles.ts:25)"}, "fullDescription": {"text": "`legacy/web/src/lib/api/circles.ts:25` calls `PUT /circles/${encodeURIComponent(name)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/circles/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1285306c99e7a40c", "name": "Dangling fetch: DELETE /circles/${encodeURIComponent(name)} (legacy/web/src/lib/api/circles.ts:32)", "shortDescription": {"text": "Dangling fetch: DELETE /circles/${encodeURIComponent(name)} (legacy/web/src/lib/api/circles.ts:32)"}, "fullDescription": {"text": "`legacy/web/src/lib/api/circles.ts:32` calls `DELETE /circles/${encodeURIComponent(name)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/circles/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-336382c7fa66fb08", "name": "Dangling fetch: PUT /circles/${encodeURIComponent(name)}/context (legacy/web/src/lib/api/circles.ts:38)", "shortDescription": {"text": "Dangling fetch: PUT /circles/${encodeURIComponent(name)}/context (legacy/web/src/lib/api/circles.ts:38)"}, "fullDescription": {"text": "`legacy/web/src/lib/api/circles.ts:38` calls `PUT /circles/${encodeURIComponent(name)}/context` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/circles/<p>/context`\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-250dbf1492ac9aa5", "name": "Dangling fetch: POST /providers (legacy/web/src/lib/api/providers.ts:13)", "shortDescription": {"text": "Dangling fetch: POST /providers (legacy/web/src/lib/api/providers.ts:13)"}, "fullDescription": {"text": "`legacy/web/src/lib/api/providers.ts:13` calls `POST /providers` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/providers`\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-8f7e7634e248c89b", "name": "Dangling fetch: DELETE /providers/${encodeURIComponent(name)} (legacy/web/src/lib/api/providers.ts:20)", "shortDescription": {"text": "Dangling fetch: DELETE /providers/${encodeURIComponent(name)} (legacy/web/src/lib/api/providers.ts:20)"}, "fullDescription": {"text": "`legacy/web/src/lib/api/providers.ts:20` calls `DELETE /providers/${encodeURIComponent(name)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/providers/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a3398fa8fbfc987b", "name": "Dangling fetch: GET /providers/list (legacy/web/src/lib/api/providers.ts:26)", "shortDescription": {"text": "Dangling fetch: GET /providers/list (legacy/web/src/lib/api/providers.ts:26)"}, "fullDescription": {"text": "`legacy/web/src/lib/api/providers.ts:26` calls `GET /providers/list` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/providers/list`\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-abb79bd23012ce59", "name": "Dangling fetch: PUT /providers/${encodeURIComponent(id)} (legacy/web/src/lib/api/providers.ts:33)", "shortDescription": {"text": "Dangling fetch: PUT /providers/${encodeURIComponent(id)} (legacy/web/src/lib/api/providers.ts:33)"}, "fullDescription": {"text": "`legacy/web/src/lib/api/providers.ts:33` calls `PUT /providers/${encodeURIComponent(id)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/providers/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-257ef6669fecf6b1", "name": "Dangling fetch: PATCH /providers/${encodeURIComponent(modelName)} (legacy/web/src/lib/api/providers.ts:53)", "shortDescription": {"text": "Dangling fetch: PATCH /providers/${encodeURIComponent(modelName)} (legacy/web/src/lib/api/providers.ts:53)"}, "fullDescription": {"text": "`legacy/web/src/lib/api/providers.ts:53` calls `PATCH /providers/${encodeURIComponent(modelName)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/providers/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b0f5909252442079", "name": "Dangling fetch: POST /providers/${encodeURIComponent(id)}/test (legacy/web/src/lib/api/providers.ts:62)", "shortDescription": {"text": "Dangling fetch: POST /providers/${encodeURIComponent(id)}/test (legacy/web/src/lib/api/providers.ts:62)"}, "fullDescription": {"text": "`legacy/web/src/lib/api/providers.ts:62` calls `POST /providers/${encodeURIComponent(id)}/test` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/providers/<p>/test`\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-97334c59edfb9431", "name": "Dangling fetch: PUT /providers/default-model (legacy/web/src/lib/api/providers.ts:70)", "shortDescription": {"text": "Dangling fetch: PUT /providers/default-model (legacy/web/src/lib/api/providers.ts:70)"}, "fullDescription": {"text": "`legacy/web/src/lib/api/providers.ts:70` calls `PUT /providers/default-model` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/providers/default-model`\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-d346599b72d91919", "name": "Dangling fetch: GET /providers/dynamic (legacy/web/src/lib/api/providers.ts:118)", "shortDescription": {"text": "Dangling fetch: GET /providers/dynamic (legacy/web/src/lib/api/providers.ts:118)"}, "fullDescription": {"text": "`legacy/web/src/lib/api/providers.ts:118` calls `GET /providers/dynamic` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/providers/dynamic`\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-456d5d312405fc52", "name": "Dangling fetch: GET /providers/dynamic/statuses (legacy/web/src/lib/api/providers.ts:122)", "shortDescription": {"text": "Dangling fetch: GET /providers/dynamic/statuses (legacy/web/src/lib/api/providers.ts:122)"}, "fullDescription": {"text": "`legacy/web/src/lib/api/providers.ts:122` calls `GET /providers/dynamic/statuses` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/providers/dynamic/statuses`\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-5bdf919c640a9b61", "name": "Dangling fetch: POST /providers/dynamic (legacy/web/src/lib/api/providers.ts:126)", "shortDescription": {"text": "Dangling fetch: POST /providers/dynamic (legacy/web/src/lib/api/providers.ts:126)"}, "fullDescription": {"text": "`legacy/web/src/lib/api/providers.ts:126` calls `POST /providers/dynamic` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/providers/dynamic`\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-df2232f4704ada3b", "name": "Dangling fetch: DELETE /providers/dynamic/${encodeURIComponent(id)} (legacy/web/src/lib/api/providers.ts:133)", "shortDescription": {"text": "Dangling fetch: DELETE /providers/dynamic/${encodeURIComponent(id)} (legacy/web/src/lib/api/providers.ts:133)"}, "fullDescription": {"text": "`legacy/web/src/lib/api/providers.ts:133` calls `DELETE /providers/dynamic/${encodeURIComponent(id)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/providers/dynamic/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f2d1c28bb46dc957", "name": "Dangling fetch: POST /providers/dynamic/test (legacy/web/src/lib/api/providers.ts:142)", "shortDescription": {"text": "Dangling fetch: POST /providers/dynamic/test (legacy/web/src/lib/api/providers.ts:142)"}, "fullDescription": {"text": "`legacy/web/src/lib/api/providers.ts:142` calls `POST /providers/dynamic/test` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/providers/dynamic/test`\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-31c0fc196072f67c", "name": "Dangling fetch: GET /providers/templates (legacy/web/src/lib/api/providers.ts:165)", "shortDescription": {"text": "Dangling fetch: GET /providers/templates (legacy/web/src/lib/api/providers.ts:165)"}, "fullDescription": {"text": "`legacy/web/src/lib/api/providers.ts:165` calls `GET /providers/templates` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/providers/templates`\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-bb101a6da7a2b6f3", "name": "Dangling fetch: GET /providers/health-all (legacy/web/src/lib/api/providers.ts:180)", "shortDescription": {"text": "Dangling fetch: GET /providers/health-all (legacy/web/src/lib/api/providers.ts:180)"}, "fullDescription": {"text": "`legacy/web/src/lib/api/providers.ts:180` calls `GET /providers/health-all` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/providers/health-all`\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-eb5fe017922b57bb", "name": "Dangling fetch: POST /providers (legacy/web/src/lib/api/providers.ts:196)", "shortDescription": {"text": "Dangling fetch: POST /providers (legacy/web/src/lib/api/providers.ts:196)"}, "fullDescription": {"text": "`legacy/web/src/lib/api/providers.ts:196` calls `POST /providers` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/providers`\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-4f75366cbca348c7", "name": "Dangling fetch: GET /providers/default-model (legacy/web/src/lib/api/providers.ts:205)", "shortDescription": {"text": "Dangling fetch: GET /providers/default-model (legacy/web/src/lib/api/providers.ts:205)"}, "fullDescription": {"text": "`legacy/web/src/lib/api/providers.ts:205` calls `GET /providers/default-model` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/providers/default-model`\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-879d074551ec34b8", "name": "Dangling fetch: PUT /providers/default-model (legacy/web/src/lib/api/providers.ts:211)", "shortDescription": {"text": "Dangling fetch: PUT /providers/default-model (legacy/web/src/lib/api/providers.ts:211)"}, "fullDescription": {"text": "`legacy/web/src/lib/api/providers.ts:211` calls `PUT /providers/default-model` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/providers/default-model`\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-3c2092343e929fa9", "name": "Dangling fetch: GET /skills (legacy/web/src/lib/api/skills.ts:5)", "shortDescription": {"text": "Dangling fetch: GET /skills (legacy/web/src/lib/api/skills.ts:5)"}, "fullDescription": {"text": "`legacy/web/src/lib/api/skills.ts:5` calls `GET /skills` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/skills`\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-0c33c68e4e071427", "name": "Dangling fetch: POST /skills (legacy/web/src/lib/api/skills.ts:9)", "shortDescription": {"text": "Dangling fetch: POST /skills (legacy/web/src/lib/api/skills.ts:9)"}, "fullDescription": {"text": "`legacy/web/src/lib/api/skills.ts:9` calls `POST /skills` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/skills`\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-26da272ec50e8a34", "name": "Dangling fetch: DELETE /skills/${encodeURIComponent(name)} (legacy/web/src/lib/api/skills.ts:16)", "shortDescription": {"text": "Dangling fetch: DELETE /skills/${encodeURIComponent(name)} (legacy/web/src/lib/api/skills.ts:16)"}, "fullDescription": {"text": "`legacy/web/src/lib/api/skills.ts:16` calls `DELETE /skills/${encodeURIComponent(name)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/skills/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2f2ce7dcf8549d4e", "name": "Dangling fetch: GET /skills/registry/search?${params.toString()} (legacy/web/src/lib/api/skills.ts:25)", "shortDescription": {"text": "Dangling fetch: GET /skills/registry/search?${params.toString()} (legacy/web/src/lib/api/skills.ts:25)"}, "fullDescription": {"text": "`legacy/web/src/lib/api/skills.ts:25` calls `GET /skills/registry/search?${params.toString()}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/skills/registry/search`\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-bb3164d5ce8f3ede", "name": "Dangling fetch: POST /skills/import (legacy/web/src/lib/api/skills.ts:29)", "shortDescription": {"text": "Dangling fetch: POST /skills/import (legacy/web/src/lib/api/skills.ts:29)"}, "fullDescription": {"text": "`legacy/web/src/lib/api/skills.ts:29` calls `POST /skills/import` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/skills/import`\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-ce60143fe57f051f", "name": "Dangling fetch: POST /schedules (legacy/web/src/lib/api/schedules.ts:20)", "shortDescription": {"text": "Dangling fetch: POST /schedules (legacy/web/src/lib/api/schedules.ts:20)"}, "fullDescription": {"text": "`legacy/web/src/lib/api/schedules.ts:20` calls `POST /schedules` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/schedules`\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-29f7252be718cfd2", "name": "Dangling fetch: PATCH /schedules/${encodeURIComponent(id)} (legacy/web/src/lib/api/schedules.ts:33)", "shortDescription": {"text": "Dangling fetch: PATCH /schedules/${encodeURIComponent(id)} (legacy/web/src/lib/api/schedules.ts:33)"}, "fullDescription": {"text": "`legacy/web/src/lib/api/schedules.ts:33` calls `PATCH /schedules/${encodeURIComponent(id)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/schedules/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-06103f3b4fe1cb01", "name": "Dangling fetch: DELETE /schedules/${encodeURIComponent(id)} (legacy/web/src/lib/api/schedules.ts:40)", "shortDescription": {"text": "Dangling fetch: DELETE /schedules/${encodeURIComponent(id)} (legacy/web/src/lib/api/schedules.ts:40)"}, "fullDescription": {"text": "`legacy/web/src/lib/api/schedules.ts:40` calls `DELETE /schedules/${encodeURIComponent(id)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/schedules/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-405df2b0ff065dfa", "name": "Dangling fetch: POST /schedules/${encodeURIComponent(id)}/trigger${query} (legacy/web/src/lib/api/schedules.ts:50)", "shortDescription": {"text": "Dangling fetch: POST /schedules/${encodeURIComponent(id)}/trigger${query} (legacy/web/src/lib/api/schedules.ts:50)"}, "fullDescription": {"text": "`legacy/web/src/lib/api/schedules.ts:50` calls `POST /schedules/${encodeURIComponent(id)}/trigger${query}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/schedules/<p>/trigger/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2b65d62d61b20404", "name": "Dangling fetch: GET /embedding/config (legacy/web/src/lib/api/embedding.ts:50)", "shortDescription": {"text": "Dangling fetch: GET /embedding/config (legacy/web/src/lib/api/embedding.ts:50)"}, "fullDescription": {"text": "`legacy/web/src/lib/api/embedding.ts:50` calls `GET /embedding/config` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/embedding/config`\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-826e08b5677390b4", "name": "Dangling fetch: PUT /embedding/config (legacy/web/src/lib/api/embedding.ts:59)", "shortDescription": {"text": "Dangling fetch: PUT /embedding/config (legacy/web/src/lib/api/embedding.ts:59)"}, "fullDescription": {"text": "`legacy/web/src/lib/api/embedding.ts:59` calls `PUT /embedding/config` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/embedding/config`\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-7d320306393d00db", "name": "Dangling fetch: POST /embedding/test (legacy/web/src/lib/api/embedding.ts:63)", "shortDescription": {"text": "Dangling fetch: POST /embedding/test (legacy/web/src/lib/api/embedding.ts:63)"}, "fullDescription": {"text": "`legacy/web/src/lib/api/embedding.ts:63` calls `POST /embedding/test` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/embedding/test`\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-0a3c3093d458d384", "name": "Dangling fetch: GET /embedding/status (legacy/web/src/lib/api/embedding.ts:81)", "shortDescription": {"text": "Dangling fetch: GET /embedding/status (legacy/web/src/lib/api/embedding.ts:81)"}, "fullDescription": {"text": "`legacy/web/src/lib/api/embedding.ts:81` calls `GET /embedding/status` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/embedding/status`\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-3206a8acad408173", "name": "Dangling fetch: GET /embedding/known-models (legacy/web/src/lib/api/embedding.ts:85)", "shortDescription": {"text": "Dangling fetch: GET /embedding/known-models (legacy/web/src/lib/api/embedding.ts:85)"}, "fullDescription": {"text": "`legacy/web/src/lib/api/embedding.ts:85` calls `GET /embedding/known-models` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/embedding/known-models`\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-2949926ad3f9e557", "name": "Dangling fetch: POST /delegation/issue (legacy/web/src/lib/api/delegation.ts:16)", "shortDescription": {"text": "Dangling fetch: POST /delegation/issue (legacy/web/src/lib/api/delegation.ts:16)"}, "fullDescription": {"text": "`legacy/web/src/lib/api/delegation.ts:16` calls `POST /delegation/issue` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/delegation/issue`\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-96944090ed5453fa", "name": "Dangling fetch: GET /audit/verify (legacy/web/src/lib/api/audit.ts:63)", "shortDescription": {"text": "Dangling fetch: GET /audit/verify (legacy/web/src/lib/api/audit.ts:63)"}, "fullDescription": {"text": "`legacy/web/src/lib/api/audit.ts:63` calls `GET /audit/verify` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/audit/verify`\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-20371a70a1e164e8", "name": "Dangling fetch: POST /execute (legacy/web/src/lib/api/chat.ts:45)", "shortDescription": {"text": "Dangling fetch: POST /execute (legacy/web/src/lib/api/chat.ts:45)"}, "fullDescription": {"text": "`legacy/web/src/lib/api/chat.ts:45` calls `POST /execute` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/execute`\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-9d7420bed7a5502f", "name": "Dangling fetch: GET /operator-requests${params} (legacy/web/src/lib/api/operator-requests.ts:18)", "shortDescription": {"text": "Dangling fetch: GET /operator-requests${params} (legacy/web/src/lib/api/operator-requests.ts:18)"}, "fullDescription": {"text": "`legacy/web/src/lib/api/operator-requests.ts:18` calls `GET /operator-requests${params}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/operator-requests/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1694a65c3cde73ca", "name": "Dangling fetch: POST /operator-requests/${encodeURIComponent(id)}/respond (legacy/web/src/lib/api/operator-requests.ts:2", "shortDescription": {"text": "Dangling fetch: POST /operator-requests/${encodeURIComponent(id)}/respond (legacy/web/src/lib/api/operator-requests.ts:26)"}, "fullDescription": {"text": "`legacy/web/src/lib/api/operator-requests.ts:26` calls `POST /operator-requests/${encodeURIComponent(id)}/respond` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/operator-requests/<p>/respond`\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-298692e091651ee1", "name": "Dangling fetch: GET /agents/instances/${encodeURIComponent(id)} (legacy/web/src/lib/api/agents.ts:27)", "shortDescription": {"text": "Dangling fetch: GET /agents/instances/${encodeURIComponent(id)} (legacy/web/src/lib/api/agents.ts:27)"}, "fullDescription": {"text": "`legacy/web/src/lib/api/agents.ts:27` calls `GET /agents/instances/${encodeURIComponent(id)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/agents/instances/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3fee19c8a0715789", "name": "Dangling fetch: POST /agents/instances (legacy/web/src/lib/api/agents.ts:31)", "shortDescription": {"text": "Dangling fetch: POST /agents/instances (legacy/web/src/lib/api/agents.ts:31)"}, "fullDescription": {"text": "`legacy/web/src/lib/api/agents.ts:31` calls `POST /agents/instances` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/agents/instances`\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-2eeb85203380b1e9", "name": "Dangling fetch: POST /agents/instances/${encodeURIComponent(id)}/start (legacy/web/src/lib/api/agents.ts:38)", "shortDescription": {"text": "Dangling fetch: POST /agents/instances/${encodeURIComponent(id)}/start (legacy/web/src/lib/api/agents.ts:38)"}, "fullDescription": {"text": "`legacy/web/src/lib/api/agents.ts:38` calls `POST /agents/instances/${encodeURIComponent(id)}/start` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/agents/instances/<p>/start`\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-bf01dcbb5b04e3bf", "name": "Dangling fetch: POST /agents/instances/${encodeURIComponent(id)}/stop (legacy/web/src/lib/api/agents.ts:44)", "shortDescription": {"text": "Dangling fetch: POST /agents/instances/${encodeURIComponent(id)}/stop (legacy/web/src/lib/api/agents.ts:44)"}, "fullDescription": {"text": "`legacy/web/src/lib/api/agents.ts:44` calls `POST /agents/instances/${encodeURIComponent(id)}/stop` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/agents/instances/<p>/stop`\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-8ba8a8c62141223a", "name": "Dangling fetch: PATCH /agents/instances/${encodeURIComponent(id)} (legacy/web/src/lib/api/agents.ts:59)", "shortDescription": {"text": "Dangling fetch: PATCH /agents/instances/${encodeURIComponent(id)} (legacy/web/src/lib/api/agents.ts:59)"}, "fullDescription": {"text": "`legacy/web/src/lib/api/agents.ts:59` calls `PATCH /agents/instances/${encodeURIComponent(id)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/agents/instances/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-817ee92beb2adf92", "name": "Dangling fetch: DELETE /agents/instances/${encodeURIComponent(id)} (legacy/web/src/lib/api/agents.ts:66)", "shortDescription": {"text": "Dangling fetch: DELETE /agents/instances/${encodeURIComponent(id)} (legacy/web/src/lib/api/agents.ts:66)"}, "fullDescription": {"text": "`legacy/web/src/lib/api/agents.ts:66` calls `DELETE /agents/instances/${encodeURIComponent(id)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/agents/instances/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ac4d3d3f8134be0b", "name": "Dangling fetch: POST /agents/validate (legacy/web/src/lib/api/agents.ts:78)", "shortDescription": {"text": "Dangling fetch: POST /agents/validate (legacy/web/src/lib/api/agents.ts:78)"}, "fullDescription": {"text": "`legacy/web/src/lib/api/agents.ts:78` calls `POST /agents/validate` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/agents/validate`\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-98291c0fe7ca13c4", "name": "Dangling fetch: GET /memory/${encodeURIComponent(id)}/blocks${params} (legacy/web/src/lib/api/agents.ts:92)", "shortDescription": {"text": "Dangling fetch: GET /memory/${encodeURIComponent(id)}/blocks${params} (legacy/web/src/lib/api/agents.ts:92)"}, "fullDescription": {"text": "`legacy/web/src/lib/api/agents.ts:92` calls `GET /memory/${encodeURIComponent(id)}/blocks${params}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/memory/<p>/blocks/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b868d3954b9cae45", "name": "Dangling fetch: GET /schedules?agentId=${encodeURIComponent(id)} (legacy/web/src/lib/api/agents.ts:97)", "shortDescription": {"text": "Dangling fetch: GET /schedules?agentId=${encodeURIComponent(id)} (legacy/web/src/lib/api/agents.ts:97)"}, "fullDescription": {"text": "`legacy/web/src/lib/api/agents.ts:97` calls `GET /schedules?agentId=${encodeURIComponent(id)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/schedules`\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-87ff57280073f567", "name": "Dangling fetch: GET /agents/${encodeURIComponent(id)}/tasks${params} (legacy/web/src/lib/api/agents.ts:114)", "shortDescription": {"text": "Dangling fetch: GET /agents/${encodeURIComponent(id)}/tasks${params} (legacy/web/src/lib/api/agents.ts:114)"}, "fullDescription": {"text": "`legacy/web/src/lib/api/agents.ts:114` calls `GET /agents/${encodeURIComponent(id)}/tasks${params}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/agents/<p>/tasks/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2713fe3de1549ef2", "name": "Dangling fetch: POST /agents/${encodeURIComponent(agentId)}/tasks/${encodeURIComponent(taskId)}/cancel (legacy/web/src/l", "shortDescription": {"text": "Dangling fetch: POST /agents/${encodeURIComponent(agentId)}/tasks/${encodeURIComponent(taskId)}/cancel (legacy/web/src/lib/api/agents.ts:118)"}, "fullDescription": {"text": "`legacy/web/src/lib/api/agents.ts:118` calls `POST /agents/${encodeURIComponent(agentId)}/tasks/${encodeURIComponent(taskId)}/cancel` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/agents/<p>/tasks/<p>/cancel`\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-cf586b52b2c3a755", "name": "Dangling fetch: POST /agents/${encodeURIComponent(agentId)}/tasks/clear-stale${params} (legacy/web/src/lib/api/agents.ts", "shortDescription": {"text": "Dangling fetch: POST /agents/${encodeURIComponent(agentId)}/tasks/clear-stale${params} (legacy/web/src/lib/api/agents.ts:126)"}, "fullDescription": {"text": "`legacy/web/src/lib/api/agents.ts:126` calls `POST /agents/${encodeURIComponent(agentId)}/tasks/clear-stale${params}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/agents/<p>/tasks/clear-stale/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b9483e1b2d9708f7", "name": "Dangling fetch: POST /agents/${encodeURIComponent(id)}/tasks (legacy/web/src/lib/api/agents.ts:133)", "shortDescription": {"text": "Dangling fetch: POST /agents/${encodeURIComponent(id)}/tasks (legacy/web/src/lib/api/agents.ts:133)"}, "fullDescription": {"text": "`legacy/web/src/lib/api/agents.ts:133` calls `POST /agents/${encodeURIComponent(id)}/tasks` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/agents/<p>/tasks`\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-21719d5ddecc0c03", "name": "Dangling fetch: GET /agents/${encodeURIComponent(id)}/thoughts${params} (legacy/web/src/lib/api/agents.ts:141)", "shortDescription": {"text": "Dangling fetch: GET /agents/${encodeURIComponent(id)}/thoughts${params} (legacy/web/src/lib/api/agents.ts:141)"}, "fullDescription": {"text": "`legacy/web/src/lib/api/agents.ts:141` calls `GET /agents/${encodeURIComponent(id)}/thoughts${params}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/agents/<p>/thoughts/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3c1f35fc56ae5a29", "name": "Dangling fetch: POST /agents/${encodeURIComponent(id)}/grants (legacy/web/src/lib/api/agents.ts:165)", "shortDescription": {"text": "Dangling fetch: POST /agents/${encodeURIComponent(id)}/grants (legacy/web/src/lib/api/agents.ts:165)"}, "fullDescription": {"text": "`legacy/web/src/lib/api/agents.ts:165` calls `POST /agents/${encodeURIComponent(id)}/grants` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/agents/<p>/grants`\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-0a53ff2fb7e05e65", "name": "Dangling fetch: DELETE /agents/${encodeURIComponent(id)}/grants/${encodeURIComponent(grantId)} (legacy/web/src/lib/api/a", "shortDescription": {"text": "Dangling fetch: DELETE /agents/${encodeURIComponent(id)}/grants/${encodeURIComponent(grantId)} (legacy/web/src/lib/api/agents.ts:172)"}, "fullDescription": {"text": "`legacy/web/src/lib/api/agents.ts:172` calls `DELETE /agents/${encodeURIComponent(id)}/grants/${encodeURIComponent(grantId)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/agents/<p>/grants/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-92ae4f3d04bbd3af", "name": "Dangling fetch: GET /permission-requests${params} (legacy/web/src/lib/api/agents.ts:181)", "shortDescription": {"text": "Dangling fetch: GET /permission-requests${params} (legacy/web/src/lib/api/agents.ts:181)"}, "fullDescription": {"text": "`legacy/web/src/lib/api/agents.ts:181` calls `GET /permission-requests${params}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/permission-requests/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-16a8f82700916b8c", "name": "Dangling fetch: POST /permission-requests/${encodeURIComponent(requestId)}/decision (legacy/web/src/lib/api/agents.ts:18", "shortDescription": {"text": "Dangling fetch: POST /permission-requests/${encodeURIComponent(requestId)}/decision (legacy/web/src/lib/api/agents.ts:188)"}, "fullDescription": {"text": "`legacy/web/src/lib/api/agents.ts:188` calls `POST /permission-requests/${encodeURIComponent(requestId)}/decision` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/permission-requests/<p>/decision`\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-ede3d4e22a53a8d6", "name": "Dangling fetch: GET /agents/${encodeURIComponent(agentId)}/template-diff (legacy/web/src/lib/api/agents.ts:197)", "shortDescription": {"text": "Dangling fetch: GET /agents/${encodeURIComponent(agentId)}/template-diff (legacy/web/src/lib/api/agents.ts:197)"}, "fullDescription": {"text": "`legacy/web/src/lib/api/agents.ts:197` calls `GET /agents/${encodeURIComponent(agentId)}/template-diff` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/agents/<p>/template-diff`\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-a89b9059ad8a953f", "name": "Dangling fetch: POST /agents/${encodeURIComponent(agentId)}/apply-template-update (legacy/web/src/lib/api/agents.ts:204)", "shortDescription": {"text": "Dangling fetch: POST /agents/${encodeURIComponent(agentId)}/apply-template-update (legacy/web/src/lib/api/agents.ts:204)"}, "fullDescription": {"text": "`legacy/web/src/lib/api/agents.ts:204` calls `POST /agents/${encodeURIComponent(agentId)}/apply-template-update` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/agents/<p>/apply-template-update`\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-fc6be8ea6a5247a1", "name": "Dangling fetch: GET /agents/${encodeURIComponent(id)}/health-check (legacy/web/src/lib/api/agents.ts:237)", "shortDescription": {"text": "Dangling fetch: GET /agents/${encodeURIComponent(id)}/health-check (legacy/web/src/lib/api/agents.ts:237)"}, "fullDescription": {"text": "`legacy/web/src/lib/api/agents.ts:237` calls `GET /agents/${encodeURIComponent(id)}/health-check` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/agents/<p>/health-check`\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-30cb0b090bacb4b1", "name": "Dangling fetch: GET /agents/${encodeURIComponent(id)}/system-prompt (legacy/web/src/lib/api/agents.ts:241)", "shortDescription": {"text": "Dangling fetch: GET /agents/${encodeURIComponent(id)}/system-prompt (legacy/web/src/lib/api/agents.ts:241)"}, "fullDescription": {"text": "`legacy/web/src/lib/api/agents.ts:241` calls `GET /agents/${encodeURIComponent(id)}/system-prompt` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/agents/<p>/system-prompt`\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-0dc1db74458a7093", "name": "Dangling fetch: GET /sessions?agentInstanceId=${encodeURIComponent(agentId)} (legacy/web/src/lib/api/agents.ts:251)", "shortDescription": {"text": "Dangling fetch: GET /sessions?agentInstanceId=${encodeURIComponent(agentId)} (legacy/web/src/lib/api/agents.ts:251)"}, "fullDescription": {"text": "`legacy/web/src/lib/api/agents.ts:251` calls `GET /sessions?agentInstanceId=${encodeURIComponent(agentId)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/sessions`\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-3d3abacc3e27c588", "name": "Dangling fetch: POST /agents/${encodeURIComponent(agentId)}/skip-template-update (legacy/web/src/lib/api/agents.ts:255)", "shortDescription": {"text": "Dangling fetch: POST /agents/${encodeURIComponent(agentId)}/skip-template-update (legacy/web/src/lib/api/agents.ts:255)"}, "fullDescription": {"text": "`legacy/web/src/lib/api/agents.ts:255` calls `POST /agents/${encodeURIComponent(agentId)}/skip-template-update` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/agents/<p>/skip-template-update`\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-c10fb25a7181bab3", "name": "Dangling fetch: GET /agents/pending-updates (legacy/web/src/lib/api/agents.ts:271)", "shortDescription": {"text": "Dangling fetch: GET /agents/pending-updates (legacy/web/src/lib/api/agents.ts:271)"}, "fullDescription": {"text": "`legacy/web/src/lib/api/agents.ts:271` calls `GET /agents/pending-updates` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/agents/pending-updates`\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-ab9031402b53986d", "name": "Dangling fetch: POST /memory/blocks/${encodeURIComponent(type)} (legacy/web/src/lib/api/memory.ts:14)", "shortDescription": {"text": "Dangling fetch: POST /memory/blocks/${encodeURIComponent(type)} (legacy/web/src/lib/api/memory.ts:14)"}, "fullDescription": {"text": "`legacy/web/src/lib/api/memory.ts:14` calls `POST /memory/blocks/${encodeURIComponent(type)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/memory/blocks/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-50765d24dcacb15d", "name": "Dangling fetch: PUT /memory/${encodeURIComponent(agentId)}/blocks/${encodeURIComponent(blockId)} (legacy/web/src/lib/api", "shortDescription": {"text": "Dangling fetch: PUT /memory/${encodeURIComponent(agentId)}/blocks/${encodeURIComponent(blockId)} (legacy/web/src/lib/api/memory.ts:69)"}, "fullDescription": {"text": "`legacy/web/src/lib/api/memory.ts:69` calls `PUT /memory/${encodeURIComponent(agentId)}/blocks/${encodeURIComponent(blockId)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/memory/<p>/blocks/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8fdd0264d219ba6e", "name": "Dangling fetch: DELETE /memory/${encodeURIComponent(agentId)}/blocks/${encodeURIComponent(blockId)} (legacy/web/src/lib/", "shortDescription": {"text": "Dangling fetch: DELETE /memory/${encodeURIComponent(agentId)}/blocks/${encodeURIComponent(blockId)} (legacy/web/src/lib/api/memory.ts:76)"}, "fullDescription": {"text": "`legacy/web/src/lib/api/memory.ts:76` calls `DELETE /memory/${encodeURIComponent(agentId)}/blocks/${encodeURIComponent(blockId)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/memory/<p>/blocks/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b770d697c11c0139", "name": "Dangling fetch: POST /memory/${encodeURIComponent(agentId)}/compact (legacy/web/src/lib/api/memory.ts:83)", "shortDescription": {"text": "Dangling fetch: POST /memory/${encodeURIComponent(agentId)}/compact (legacy/web/src/lib/api/memory.ts:83)"}, "fullDescription": {"text": "`legacy/web/src/lib/api/memory.ts:83` calls `POST /memory/${encodeURIComponent(agentId)}/compact` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/memory/<p>/compact`\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-c05540a60fdd6ae0", "name": "Dangling fetch: GET /memory/${encodeURIComponent(agentId)}/stats (legacy/web/src/lib/api/memory.ts:87)", "shortDescription": {"text": "Dangling fetch: GET /memory/${encodeURIComponent(agentId)}/stats (legacy/web/src/lib/api/memory.ts:87)"}, "fullDescription": {"text": "`legacy/web/src/lib/api/memory.ts:87` calls `GET /memory/${encodeURIComponent(agentId)}/stats` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/memory/<p>/stats`\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-6eb2b7a36f6c1916", "name": "Dangling fetch: GET /memory/${encodeURIComponent(agentId)}/graph (legacy/web/src/lib/api/memory.ts:91)", "shortDescription": {"text": "Dangling fetch: GET /memory/${encodeURIComponent(agentId)}/graph (legacy/web/src/lib/api/memory.ts:91)"}, "fullDescription": {"text": "`legacy/web/src/lib/api/memory.ts:91` calls `GET /memory/${encodeURIComponent(agentId)}/graph` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/memory/<p>/graph`\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-60659454d5cfcddc", "name": "Dangling fetch: GET /memory/${encodeURIComponent(agentId)}/links${qs} (legacy/web/src/lib/api/memory.ts:99)", "shortDescription": {"text": "Dangling fetch: GET /memory/${encodeURIComponent(agentId)}/links${qs} (legacy/web/src/lib/api/memory.ts:99)"}, "fullDescription": {"text": "`legacy/web/src/lib/api/memory.ts:99` calls `GET /memory/${encodeURIComponent(agentId)}/links${qs}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/memory/<p>/links/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d54b7af0c025ea27", "name": "Dangling fetch: POST /memory/${encodeURIComponent(agentId)}/blocks/${encodeURIComponent(blockId)}/promote (legacy/web/sr", "shortDescription": {"text": "Dangling fetch: POST /memory/${encodeURIComponent(agentId)}/blocks/${encodeURIComponent(blockId)}/promote (legacy/web/src/lib/api/memory.ts:119)"}, "fullDescription": {"text": "`legacy/web/src/lib/api/memory.ts:119` calls `POST /memory/${encodeURIComponent(agentId)}/blocks/${encodeURIComponent(blockId)}/promote` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/memory/<p>/blocks/<p>/promote`\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-02ee31489b099346", "name": "Dangling fetch: GET /memory/overview (legacy/web/src/lib/api/memory.ts:164)", "shortDescription": {"text": "Dangling fetch: GET /memory/overview (legacy/web/src/lib/api/memory.ts:164)"}, "fullDescription": {"text": "`legacy/web/src/lib/api/memory.ts:164` calls `GET /memory/overview` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/memory/overview`\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-e5af50ff65251adb", "name": "Dangling fetch: GET /memory/recent${qs} (legacy/web/src/lib/api/memory.ts:169)", "shortDescription": {"text": "Dangling fetch: GET /memory/recent${qs} (legacy/web/src/lib/api/memory.ts:169)"}, "fullDescription": {"text": "`legacy/web/src/lib/api/memory.ts:169` calls `GET /memory/recent${qs}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/memory/recent/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3584727030cf2342", "name": "Dangling fetch: GET /memory/search?${params.toString()} (legacy/web/src/lib/api/memory.ts:175)", "shortDescription": {"text": "Dangling fetch: GET /memory/search?${params.toString()} (legacy/web/src/lib/api/memory.ts:175)"}, "fullDescription": {"text": "`legacy/web/src/lib/api/memory.ts:175` calls `GET /memory/search?${params.toString()}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/memory/search`\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-516a7875e61c23ab", "name": "Dangling fetch: GET /memory/explorer-graph (legacy/web/src/lib/api/memory.ts:179)", "shortDescription": {"text": "Dangling fetch: GET /memory/explorer-graph (legacy/web/src/lib/api/memory.ts:179)"}, "fullDescription": {"text": "`legacy/web/src/lib/api/memory.ts:179` calls `GET /memory/explorer-graph` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/memory/explorer-graph`\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-e6b2cc651bce49ba", "name": "Dangling fetch: GET /memory/${encodeURIComponent(agentId)}/core (legacy/web/src/lib/api/memory.ts:196)", "shortDescription": {"text": "Dangling fetch: GET /memory/${encodeURIComponent(agentId)}/core (legacy/web/src/lib/api/memory.ts:196)"}, "fullDescription": {"text": "`legacy/web/src/lib/api/memory.ts:196` calls `GET /memory/${encodeURIComponent(agentId)}/core` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/memory/<p>/core`\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-f277a5533b6a9bab", "name": "Dangling fetch: PUT /memory/${encodeURIComponent(agentId)}/core/${encodeURIComponent(name)} (legacy/web/src/lib/api/memo", "shortDescription": {"text": "Dangling fetch: PUT /memory/${encodeURIComponent(agentId)}/core/${encodeURIComponent(name)} (legacy/web/src/lib/api/memory.ts:204)"}, "fullDescription": {"text": "`legacy/web/src/lib/api/memory.ts:204` calls `PUT /memory/${encodeURIComponent(agentId)}/core/${encodeURIComponent(name)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/memory/<p>/core/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d800153c92673fe9", "name": "Dangling fetch: GET /budget/agents/${encodeURIComponent(agentId)}/budget (legacy/web/src/lib/api/usage.ts:94)", "shortDescription": {"text": "Dangling fetch: GET /budget/agents/${encodeURIComponent(agentId)}/budget (legacy/web/src/lib/api/usage.ts:94)"}, "fullDescription": {"text": "`legacy/web/src/lib/api/usage.ts:94` calls `GET /budget/agents/${encodeURIComponent(agentId)}/budget` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/budget/agents/<p>/budget`\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-10da4c07d672a3df", "name": "Dangling fetch: PATCH /budget/agents/${encodeURIComponent(agentId)}/budget (legacy/web/src/lib/api/usage.ts:113)", "shortDescription": {"text": "Dangling fetch: PATCH /budget/agents/${encodeURIComponent(agentId)}/budget (legacy/web/src/lib/api/usage.ts:113)"}, "fullDescription": {"text": "`legacy/web/src/lib/api/usage.ts:113` calls `PATCH /budget/agents/${encodeURIComponent(agentId)}/budget` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/budget/agents/<p>/budget`\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-a5297ecedf2c8a9d", "name": "Dangling fetch: POST /budget/agents/${encodeURIComponent(agentId)}/budget/reset (legacy/web/src/lib/api/usage.ts:120)", "shortDescription": {"text": "Dangling fetch: POST /budget/agents/${encodeURIComponent(agentId)}/budget/reset (legacy/web/src/lib/api/usage.ts:120)"}, "fullDescription": {"text": "`legacy/web/src/lib/api/usage.ts:120` calls `POST /budget/agents/${encodeURIComponent(agentId)}/budget/reset` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/budget/agents/<p>/budget/reset`\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-5ba48066d9600a70", "name": "Dangling fetch: GET /sessions/${id} (legacy/web/src/hooks/useChatPage.ts:263)", "shortDescription": {"text": "Dangling fetch: GET /sessions/${id} (legacy/web/src/hooks/useChatPage.ts:263)"}, "fullDescription": {"text": "`legacy/web/src/hooks/useChatPage.ts:263` calls `GET /sessions/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/sessions/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0eb50eb04a683eb0", "name": "Dangling fetch: DELETE /sessions/${id} (legacy/web/src/hooks/useChatPage.ts:312)", "shortDescription": {"text": "Dangling fetch: DELETE /sessions/${id} (legacy/web/src/hooks/useChatPage.ts:312)"}, "fullDescription": {"text": "`legacy/web/src/hooks/useChatPage.ts:312` calls `DELETE /sessions/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/sessions/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a9b475bc13682f56", "name": "Dangling fetch: PUT /sessions/${id} (legacy/web/src/hooks/useChatPage.ts:326)", "shortDescription": {"text": "Dangling fetch: PUT /sessions/${id} (legacy/web/src/hooks/useChatPage.ts:326)"}, "fullDescription": {"text": "`legacy/web/src/hooks/useChatPage.ts:326` calls `PUT /sessions/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/sessions/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ee41ea3042f06ab6", "name": "Dangling fetch: POST /api/agents/instances (legacy/tools/bridges/shared/bridge-base.ts:150)", "shortDescription": {"text": "Dangling fetch: POST /api/agents/instances (legacy/tools/bridges/shared/bridge-base.ts:150)"}, "fullDescription": {"text": "`legacy/tools/bridges/shared/bridge-base.ts:150` calls `POST /api/agents/instances` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/agents/instances`\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-b801e3af78aa10da", "name": "Dangling fetch: GET /api/agents/instances?name=${encodeURIComponent(name)} (legacy/tools/bridges/shared/bridge-base.ts:1", "shortDescription": {"text": "Dangling fetch: GET /api/agents/instances?name=${encodeURIComponent(name)} (legacy/tools/bridges/shared/bridge-base.ts:172)"}, "fullDescription": {"text": "`legacy/tools/bridges/shared/bridge-base.ts:172` calls `GET /api/agents/instances?name=${encodeURIComponent(name)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/agents/instances`\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-afcf6c58bceae530", "name": "Dangling fetch: GET /api/agents/${agentId}/tasks/next (legacy/tools/bridges/shared/bridge-base.ts:202)", "shortDescription": {"text": "Dangling fetch: GET /api/agents/${agentId}/tasks/next (legacy/tools/bridges/shared/bridge-base.ts:202)"}, "fullDescription": {"text": "`legacy/tools/bridges/shared/bridge-base.ts:202` calls `GET /api/agents/${agentId}/tasks/next` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/agents/<p>/tasks/next`\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-8c99585b87978d95", "name": "Dangling fetch: POST /api/agents/${agentId}/tasks/${taskId}/complete (legacy/tools/bridges/shared/bridge-base.ts:315)", "shortDescription": {"text": "Dangling fetch: POST /api/agents/${agentId}/tasks/${taskId}/complete (legacy/tools/bridges/shared/bridge-base.ts:315)"}, "fullDescription": {"text": "`legacy/tools/bridges/shared/bridge-base.ts:315` calls `POST /api/agents/${agentId}/tasks/${taskId}/complete` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/agents/<p>/tasks/<p>/complete`\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-accc6f368b452545", "name": "Dangling fetch: GET http://${squidHost}:${squidPort} (legacy/core/src/index.ts:311)", "shortDescription": {"text": "Dangling fetch: GET http://${squidHost}:${squidPort} (legacy/core/src/index.ts:311)"}, "fullDescription": {"text": "`legacy/core/src/index.ts:311` calls `GET http://${squidHost}:${squidPort}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/<p>:/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0a924d71a045de42", "name": "Dangling fetch: POST http://localhost:${port}/api/chat (legacy/core/src/mcp/SeraMCPServer.ts:1108)", "shortDescription": {"text": "Dangling fetch: POST http://localhost:${port}/api/chat (legacy/core/src/mcp/SeraMCPServer.ts:1108)"}, "fullDescription": {"text": "`legacy/core/src/mcp/SeraMCPServer.ts:1108` calls `POST http://localhost:${port}/api/chat` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost:/<p>/api/chat`\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-7eb5f47cd6c0f4c4", "name": "Dangling fetch: GET https://openrouter.ai/api/v1/models (legacy/core/src/services/ModelDiscoveryService.ts:140)", "shortDescription": {"text": "Dangling fetch: GET https://openrouter.ai/api/v1/models (legacy/core/src/services/ModelDiscoveryService.ts:140)"}, "fullDescription": {"text": "`legacy/core/src/services/ModelDiscoveryService.ts:140` calls `GET https://openrouter.ai/api/v1/models` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/openrouter.ai/api/v1/models`\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-01fb45d835de71ce", "name": "Dangling fetch: GET https://api.kilo.ai/api/gateway/models (legacy/core/src/services/ModelDiscoveryService.ts:233)", "shortDescription": {"text": "Dangling fetch: GET https://api.kilo.ai/api/gateway/models (legacy/core/src/services/ModelDiscoveryService.ts:233)"}, "fullDescription": {"text": "`legacy/core/src/services/ModelDiscoveryService.ts:233` calls `GET https://api.kilo.ai/api/gateway/models` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.kilo.ai/api/gateway/models`\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-cf07c959a5a042b9", "name": "Dangling fetch: POST https://discord.com/api/v10/channels/${chatId}/messages (legacy/core/src/channels/adapters/DiscordA", "shortDescription": {"text": "Dangling fetch: POST https://discord.com/api/v10/channels/${chatId}/messages (legacy/core/src/channels/adapters/DiscordAdapter.ts:195)"}, "fullDescription": {"text": "`legacy/core/src/channels/adapters/DiscordAdapter.ts:195` calls `POST https://discord.com/api/v10/channels/${chatId}/messages` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/discord.com/api/v10/channels/<p>/messages`\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-fd42b01bd4df140f", "name": "Dangling fetch: GET https://discord.com/api/webhooks/${id}/${token} (legacy/core/src/channels/adapters/DiscordChannel.ts", "shortDescription": {"text": "Dangling fetch: GET https://discord.com/api/webhooks/${id}/${token} (legacy/core/src/channels/adapters/DiscordChannel.ts:148)"}, "fullDescription": {"text": "`legacy/core/src/channels/adapters/DiscordChannel.ts:148` calls `GET https://discord.com/api/webhooks/${id}/${token}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/discord.com/api/webhooks/<p>/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ff90bc0a0edf360f", "name": "Dangling fetch: POST https://graph.facebook.com/v17.0/${this.phoneNumberId}/messages (legacy/core/src/channels/adapters/", "shortDescription": {"text": "Dangling fetch: POST https://graph.facebook.com/v17.0/${this.phoneNumberId}/messages (legacy/core/src/channels/adapters/WhatsAppAdapter.ts:79)"}, "fullDescription": {"text": "`legacy/core/src/channels/adapters/WhatsAppAdapter.ts:79` calls `POST https://graph.facebook.com/v17.0/${this.phoneNumberId}/messages` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/graph.facebook.com/v17.0/<p>/messages`\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-73f193fac419edd2", "name": "Dangling fetch: GET https://html.duckduckgo.com/html/ (legacy/core/src/skills/builtins/web-search.ts:44)", "shortDescription": {"text": "Dangling fetch: GET https://html.duckduckgo.com/html/ (legacy/core/src/skills/builtins/web-search.ts:44)"}, "fullDescription": {"text": "`legacy/core/src/skills/builtins/web-search.ts:44` calls `GET https://html.duckduckgo.com/html/` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/html.duckduckgo.com/html`\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-6eb452fbfb454d20", "name": "Unused endpoint: USE /api/auth", "shortDescription": {"text": "Unused endpoint: USE /api/auth"}, "fullDescription": {"text": "`legacy/core/src/index.ts` declares `USE /api/auth` 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-793734da956ac9f3", "name": "Unused endpoint: USE /api/secrets", "shortDescription": {"text": "Unused endpoint: USE /api/secrets"}, "fullDescription": {"text": "`legacy/core/src/index.ts` declares `USE /api/secrets` 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-50d9d80b509ac18d", "name": "Unused endpoint: USE /api/sandbox", "shortDescription": {"text": "Unused endpoint: USE /api/sandbox"}, "fullDescription": {"text": "`legacy/core/src/index.ts` declares `USE /api/sandbox` 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-eb89ef52495e2dcb", "name": "Unused endpoint: USE /api/intercom", "shortDescription": {"text": "Unused endpoint: USE /api/intercom"}, "fullDescription": {"text": "`legacy/core/src/index.ts` declares `USE /api/intercom` 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-094608bf688f5d04", "name": "Unused endpoint: USE /api/agents", "shortDescription": {"text": "Unused endpoint: USE /api/agents"}, "fullDescription": {"text": "`legacy/core/src/index.ts` declares `USE /api/agents` 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-930dd09b1ac0ce98", "name": "Unused endpoint: USE /v1/tools", "shortDescription": {"text": "Unused endpoint: USE /v1/tools"}, "fullDescription": {"text": "`legacy/core/src/index.ts` declares `USE /v1/tools` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-74653654fc29fc2a", "name": "Unused endpoint: USE /api/circles", "shortDescription": {"text": "Unused endpoint: USE /api/circles"}, "fullDescription": {"text": "`legacy/core/src/index.ts` declares `USE /api/circles` 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-da0513e63d05de03", "name": "Unused endpoint: USE /api/pipelines", "shortDescription": {"text": "Unused endpoint: USE /api/pipelines"}, "fullDescription": {"text": "`legacy/core/src/index.ts` declares `USE /api/pipelines` 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-67ce3ff14156f4ad", "name": "Unused endpoint: USE /api/skills", "shortDescription": {"text": "Unused endpoint: USE /api/skills"}, "fullDescription": {"text": "`legacy/core/src/index.ts` declares `USE /api/skills` 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-b5e11eb967d9dbc9", "name": "Unused endpoint: USE /api/memory", "shortDescription": {"text": "Unused endpoint: USE /api/memory"}, "fullDescription": {"text": "`legacy/core/src/index.ts` declares `USE /api/memory` 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-8636dd48e48d1da9", "name": "Unused endpoint: USE /api/sessions", "shortDescription": {"text": "Unused endpoint: USE /api/sessions"}, "fullDescription": {"text": "`legacy/core/src/index.ts` declares `USE /api/sessions` 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-dde3adb27bf7eebe", "name": "Unused endpoint: USE /api", "shortDescription": {"text": "Unused endpoint: USE /api"}, "fullDescription": {"text": "`legacy/core/src/index.ts` declares `USE /api` 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-f18f59071917dbf8", "name": "Unused endpoint: USE /v1/llm", "shortDescription": {"text": "Unused endpoint: USE /v1/llm"}, "fullDescription": {"text": "`legacy/core/src/index.ts` declares `USE /v1/llm` 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-f481f0adc9316c33", "name": "Unused endpoint: USE /api/budget", "shortDescription": {"text": "Unused endpoint: USE /api/budget"}, "fullDescription": {"text": "`legacy/core/src/index.ts` declares `USE /api/budget` 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-72a0cbd427624b29", "name": "Unused endpoint: USE /api/providers", "shortDescription": {"text": "Unused endpoint: USE /api/providers"}, "fullDescription": {"text": "`legacy/core/src/index.ts` declares `USE /api/providers` 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-b7dbcf047b5d4d80", "name": "Unused endpoint: USE /api/system", "shortDescription": {"text": "Unused endpoint: USE /api/system"}, "fullDescription": {"text": "`legacy/core/src/index.ts` declares `USE /api/system` 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-86f77a97d977c2d6", "name": "Unused endpoint: USE /api/embedding", "shortDescription": {"text": "Unused endpoint: USE /api/embedding"}, "fullDescription": {"text": "`legacy/core/src/index.ts` declares `USE /api/embedding` 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-09b894ec55f215bb", "name": "Unused endpoint: USE /api/metering", "shortDescription": {"text": "Unused endpoint: USE /api/metering"}, "fullDescription": {"text": "`legacy/core/src/index.ts` declares `USE /api/metering` 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-ac2e8a1655395ddd", "name": "Unused endpoint: USE /api/audit", "shortDescription": {"text": "Unused endpoint: USE /api/audit"}, "fullDescription": {"text": "`legacy/core/src/index.ts` declares `USE /api/audit` 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-53f3e16101dd8de9", "name": "Unused endpoint: USE /api/permission-requests", "shortDescription": {"text": "Unused endpoint: USE /api/permission-requests"}, "fullDescription": {"text": "`legacy/core/src/index.ts` declares `USE /api/permission-requests` 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-429ab099bb88de4d", "name": "Unused endpoint: USE /api/schedules", "shortDescription": {"text": "Unused endpoint: USE /api/schedules"}, "fullDescription": {"text": "`legacy/core/src/index.ts` declares `USE /api/schedules` 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-c1766e6d593b047a", "name": "Unused endpoint: USE /v1", "shortDescription": {"text": "Unused endpoint: USE /v1"}, "fullDescription": {"text": "`legacy/core/src/index.ts` declares `USE /v1` 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-fb7b792a59d198ed", "name": "Unused endpoint: USE /api/lsp", "shortDescription": {"text": "Unused endpoint: USE /api/lsp"}, "fullDescription": {"text": "`legacy/core/src/index.ts` declares `USE /api/lsp` 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-d5e923a407143585", "name": "Unused endpoint: USE /api/federation", "shortDescription": {"text": "Unused endpoint: USE /api/federation"}, "fullDescription": {"text": "`legacy/core/src/index.ts` declares `USE /api/federation` 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-203ec659ed8ada77", "name": "Unused endpoint: USE /api/webhooks", "shortDescription": {"text": "Unused endpoint: USE /api/webhooks"}, "fullDescription": {"text": "`legacy/core/src/index.ts` declares `USE /api/webhooks` 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-4e6d31d74e300faa", "name": "Unused endpoint: USE /api/registry", "shortDescription": {"text": "Unused endpoint: USE /api/registry"}, "fullDescription": {"text": "`legacy/core/src/index.ts` declares `USE /api/registry` 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-fa25f5656f8fbf45", "name": "Unused endpoint: USE /api/mcp-servers", "shortDescription": {"text": "Unused endpoint: USE /api/mcp-servers"}, "fullDescription": {"text": "`legacy/core/src/index.ts` declares `USE /api/mcp-servers` 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-03f8a4379fbc2763", "name": "Unused endpoint: USE /api/operator-requests", "shortDescription": {"text": "Unused endpoint: USE /api/operator-requests"}, "fullDescription": {"text": "`legacy/core/src/index.ts` declares `USE /api/operator-requests` 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-7f548d8a28c0f3bb", "name": "Unused endpoint: USE /api/agents/:id/tasks", "shortDescription": {"text": "Unused endpoint: USE /api/agents/:id/tasks"}, "fullDescription": {"text": "`legacy/core/src/index.ts` declares `USE /api/agents/:id/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-0c1b6ce2fd726244", "name": "Unused endpoint: USE /api/knowledge", "shortDescription": {"text": "Unused endpoint: USE /api/knowledge"}, "fullDescription": {"text": "`legacy/core/src/index.ts` declares `USE /api/knowledge` 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-bdd21aa57c360c23", "name": "Unused endpoint: USE /api/delegation", "shortDescription": {"text": "Unused endpoint: USE /api/delegation"}, "fullDescription": {"text": "`legacy/core/src/index.ts` declares `USE /api/delegation` 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-c3a8b7932f72b92f", "name": "Unused endpoint: USE /api/notifications", "shortDescription": {"text": "Unused endpoint: USE /api/notifications"}, "fullDescription": {"text": "`legacy/core/src/index.ts` declares `USE /api/notifications` 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-fbeb35d232a968b6", "name": "Unused endpoint: USE /api/channels", "shortDescription": {"text": "Unused endpoint: USE /api/channels"}, "fullDescription": {"text": "`legacy/core/src/index.ts` declares `USE /api/channels` 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-16ab996ffc42e297", "name": "Unused endpoint: USE /api/orchestration", "shortDescription": {"text": "Unused endpoint: USE /api/orchestration"}, "fullDescription": {"text": "`legacy/core/src/index.ts` declares `USE /api/orchestration` 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-55125999d15d30ae", "name": "Unused endpoint: USE /api/traces", "shortDescription": {"text": "Unused endpoint: USE /api/traces"}, "fullDescription": {"text": "`legacy/core/src/index.ts` declares `USE /api/traces` 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-69a693dfc33637f4", "name": "Unused endpoint: POST /run", "shortDescription": {"text": "Unused endpoint: POST /run"}, "fullDescription": {"text": "`legacy/core/src/routes/dogfeed.ts` declares `POST /run` 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-fd0e06afbaab19b3", "name": "Unused endpoint: GET /tasks", "shortDescription": {"text": "Unused endpoint: GET /tasks"}, "fullDescription": {"text": "`legacy/core/src/routes/dogfeed.ts` declares `GET /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-ac4451b7e0a3b08a", "name": "Unused endpoint: GET /next", "shortDescription": {"text": "Unused endpoint: GET /next"}, "fullDescription": {"text": "`legacy/core/src/routes/dogfeed.ts` declares `GET /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-5dc321a40a2f0ef2", "name": "Unused endpoint: GET /oidc-config", "shortDescription": {"text": "Unused endpoint: GET /oidc-config"}, "fullDescription": {"text": "`legacy/core/src/routes/auth.ts` declares `GET /oidc-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-6a4dfcad3eb1618a", "name": "Unused endpoint: GET /login", "shortDescription": {"text": "Unused endpoint: GET /login"}, "fullDescription": {"text": "`legacy/core/src/routes/auth.ts` declares `GET /login` 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-a85420f072a900b1", "name": "Unused endpoint: POST /oidc/callback", "shortDescription": {"text": "Unused endpoint: POST /oidc/callback"}, "fullDescription": {"text": "`legacy/core/src/routes/auth.ts` declares `POST /oidc/callback` 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-99fc36db98c134ce", "name": "Unused endpoint: POST /logout", "shortDescription": {"text": "Unused endpoint: POST /logout"}, "fullDescription": {"text": "`legacy/core/src/routes/auth.ts` declares `POST /logout` 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-fd1dc91abf32142d", "name": "Unused endpoint: GET /me", "shortDescription": {"text": "Unused endpoint: GET /me"}, "fullDescription": {"text": "`legacy/core/src/routes/auth.ts` declares `GET /me` 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-c32b4607df0975e2", "name": "Unused endpoint: GET /api-keys", "shortDescription": {"text": "Unused endpoint: GET /api-keys"}, "fullDescription": {"text": "`legacy/core/src/routes/auth.ts` declares `GET /api-keys` 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-224cbb7548a6b13c", "name": "Unused endpoint: POST /api-keys", "shortDescription": {"text": "Unused endpoint: POST /api-keys"}, "fullDescription": {"text": "`legacy/core/src/routes/auth.ts` declares `POST /api-keys` 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-eb6cbd163e296cdb", "name": "Unused endpoint: DELETE /api-keys/:id", "shortDescription": {"text": "Unused endpoint: DELETE /api-keys/:id"}, "fullDescription": {"text": "`legacy/core/src/routes/auth.ts` declares `DELETE /api-keys/: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-7a009b1a56794f45", "name": "Unused endpoint: POST /", "shortDescription": {"text": "Unused endpoint: POST /"}, "fullDescription": {"text": "`legacy/core/src/routes/webhooks.ts` 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-5baa8971ebe192a1", "name": "Unused endpoint: GET /", "shortDescription": {"text": "Unused endpoint: GET /"}, "fullDescription": {"text": "`legacy/core/src/routes/webhooks.ts` 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-961ab6e17e54b478", "name": "Unused endpoint: POST /incoming/:slug", "shortDescription": {"text": "Unused endpoint: POST /incoming/:slug"}, "fullDescription": {"text": "`legacy/core/src/routes/webhooks.ts` declares `POST /incoming/:slug` 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-97222a6b8eba6c8e", "name": "Unused endpoint: POST /spawn", "shortDescription": {"text": "Unused endpoint: POST /spawn"}, "fullDescription": {"text": "`legacy/core/src/routes/sandbox.ts` declares `POST /spawn` 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/21392"}, "properties": {"repository": "TKCen/sera", "repoUrl": "https://github.com/TKCen/sera", "branch": "main"}, "results": [{"ruleId": "scanner-38643e50e0f7c0ee", "level": "note", "message": {"text": "Possibly dead Python function: http_request"}, "properties": {"repobilityId": "54d06c00e811dd83", "scanner": "scanner-primary", "fingerprint": "38643e50e0f7c0ee", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ops/validate/profiles/performance.py:91"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-1a951b63793e03bc", "level": "note", "message": {"text": "Possibly dead Python function: http_request"}, "properties": {"repobilityId": "54d06c00e811dd83", "scanner": "scanner-primary", "fingerprint": "1a951b63793e03bc", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ops/validate/profiles/accuracy.py:40"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-10146e082e51ceac", "level": "note", "message": {"text": "Possibly dead Python function: sse_reader"}, "properties": {"repobilityId": "a89e56b820943621", "scanner": "scanner-primary", "fingerprint": "10146e082e51ceac", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ops/e2e/operator_task_smoke.py:75"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-35ebe4c94b542964", "level": "note", "message": {"text": "Possibly dead Python function: do_GET"}, "properties": {"repobilityId": "2d943bb45e4f13bd", "scanner": "scanner-primary", "fingerprint": "35ebe4c94b542964", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "legacy/examples/byoh-python/agent.py:42"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-4cc0bc6b7956eaf0", "level": "note", "message": {"text": "Possibly dead Python function: log_message"}, "properties": {"repobilityId": "965f3150b4af5b2e", "scanner": "scanner-primary", "fingerprint": "4cc0bc6b7956eaf0", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "legacy/examples/byoh-python/agent.py:54"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-e815b960e3f8b47c", "level": "note", "message": {"text": "Possibly dead Python function: handle_sigterm"}, "properties": {"repobilityId": "10b84a1d0cbbcf00", "scanner": "scanner-primary", "fingerprint": "e815b960e3f8b47c", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "legacy/examples/byoh-python/agent.py:99"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-c2bebdb6e3a3daf8", "level": "note", "message": {"text": "Possibly dead Python function: initialize"}, "properties": {"repobilityId": "024b267ec08e6038", "scanner": "scanner-primary", "fingerprint": "c2bebdb6e3a3daf8", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "sdk/python/sera-plugin-sdk/hatch_build.py:26"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-90fca4e340585931", "level": "note", "message": {"text": "Possibly dead Python function: delete_below_depth"}, "properties": {"repobilityId": "29189d37998d1a68", "scanner": "scanner-primary", "fingerprint": "90fca4e340585931", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "sdk/python/sera-context-lcm/src/sera_context_lcm/_lcm_core/dag.py:224"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-33f4524ab9349e36", "level": "note", "message": {"text": "Possibly dead Python function: delete_session_nodes"}, "properties": {"repobilityId": "e7d10b50bfaaddea", "scanner": "scanner-primary", "fingerprint": "33f4524ab9349e36", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "sdk/python/sera-context-lcm/src/sera_context_lcm/_lcm_core/dag.py:240"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-5f3bcb18c65f4b7c", "level": "note", "message": {"text": "Possibly dead Python function: reassign_session_nodes"}, "properties": {"repobilityId": "fcda878b2faa6781", "scanner": "scanner-primary", "fingerprint": "5f3bcb18c65f4b7c", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "sdk/python/sera-context-lcm/src/sera_context_lcm/_lcm_core/dag.py:251"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-ff72ea96c3715474", "level": "note", "message": {"text": "Possibly dead Python function: count_at_depth"}, "properties": {"repobilityId": "69a881264e60d41a", "scanner": "scanner-primary", "fingerprint": "ff72ea96c3715474", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "sdk/python/sera-context-lcm/src/sera_context_lcm/_lcm_core/dag.py:294"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-65927323038f97b4", "level": "note", "message": {"text": "Possibly dead Python function: count_messages_tokens"}, "properties": {"repobilityId": "5ac0bb332cddf86c", "scanner": "scanner-primary", "fingerprint": "65927323038f97b4", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "sdk/python/sera-context-lcm/src/sera_context_lcm/_lcm_core/tokens.py:57"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-247c6d21f9ec8f96", "level": "note", "message": {"text": "Possibly dead Python function: append_batch"}, "properties": {"repobilityId": "5822a66b16034eeb", "scanner": "scanner-primary", "fingerprint": "247c6d21f9ec8f96", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "sdk/python/sera-context-lcm/src/sera_context_lcm/_lcm_core/store.py:253"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-baee85539774f35e", "level": "note", "message": {"text": "Possibly dead Python function: delete_session_messages"}, "properties": {"repobilityId": "cdd57a8db5675a16", "scanner": "scanner-primary", "fingerprint": "baee85539774f35e", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "sdk/python/sera-context-lcm/src/sera_context_lcm/_lcm_core/store.py:288"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3baf3a039cca3b18", "level": "note", "message": {"text": "Possibly dead Python function: gc_externalized_tool_result"}, "properties": {"repobilityId": "e92e4d1df315bede", "scanner": "scanner-primary", "fingerprint": "3baf3a039cca3b18", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "sdk/python/sera-context-lcm/src/sera_context_lcm/_lcm_core/store.py:298"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-30d5b6b5cae77d4b", "level": "note", "message": {"text": "Possibly dead Python function: pin"}, "properties": {"repobilityId": "677a9531c5d71e4c", "scanner": "scanner-primary", "fingerprint": "30d5b6b5cae77d4b", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "sdk/python/sera-context-lcm/src/sera_context_lcm/_lcm_core/store.py:323"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-8ce24d266736bd12", "level": "note", "message": {"text": "Possibly dead Python function: unpin"}, "properties": {"repobilityId": "717f648633f56ca5", "scanner": "scanner-primary", "fingerprint": "8ce24d266736bd12", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "sdk/python/sera-context-lcm/src/sera_context_lcm/_lcm_core/store.py:331"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-7c6f67f13275575d", "level": "note", "message": {"text": "Possibly dead Python function: to_openai_msg"}, "properties": {"repobilityId": "b6430eb523b0be89", "scanner": "scanner-primary", "fingerprint": "7c6f67f13275575d", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "sdk/python/sera-context-lcm/src/sera_context_lcm/_lcm_core/store.py:589"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-f44ec9a20c8b10a6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/install-hooks.js:34"}, "properties": {"repobilityId": "239a26ceefd84446", "scanner": "scanner-primary", "fingerprint": "f44ec9a20c8b10a6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4becbfcf35bbf9b1", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 web/src/views/SessionsListView.tsx:39"}, "properties": {"repobilityId": "d07cd73f4ded0f63", "scanner": "scanner-primary", "fingerprint": "4becbfcf35bbf9b1", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-38e6ec4de56cb97f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 web/src/views/ChatView.tsx:344"}, "properties": {"repobilityId": "898b1f86f96c9e21", "scanner": "scanner-primary", "fingerprint": "38e6ec4de56cb97f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-fea0f78c669a6259", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 legacy/verify_schema.ts:14"}, "properties": {"repobilityId": "80ffbb06c3c3ca06", "scanner": "scanner-primary", "fingerprint": "fea0f78c669a6259", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a6b6912f56cb0268", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 legacy/web/src/components/AgentDetailMemoryTab.tsx:120"}, "properties": {"repobilityId": "3b091f42da8aff19", "scanner": "scanner-primary", "fingerprint": "a6b6912f56cb0268", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f162caeccd400964", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 legacy/web/src/components/ChatHeader.tsx:59"}, "properties": {"repobilityId": "2bb993314f31ca33", "scanner": "scanner-primary", "fingerprint": "f162caeccd400964", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-920735bbc586ce20", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 legacy/web/src/components/TemplateDiffBanner.tsx:146"}, "properties": {"repobilityId": "e59bd25976432a76", "scanner": "scanner-primary", "fingerprint": "920735bbc586ce20", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-dfa214ddb46831b2", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 legacy/web/src/components/AgentDetailToolsTab.tsx:82"}, "properties": {"repobilityId": "47d5b923a67796b8", "scanner": "scanner-primary", "fingerprint": "dfa214ddb46831b2", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-48cce6883c1924aa", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 legacy/web/src/components/AgentDetailTasksTab.tsx:54"}, "properties": {"repobilityId": "ee753156ca23917e", "scanner": "scanner-primary", "fingerprint": "48cce6883c1924aa", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a58ea5a38d12b139", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 legacy/web/src/components/Sidebar.tsx:176"}, "properties": {"repobilityId": "db58c7adcb2b49f9", "scanner": "scanner-primary", "fingerprint": "a58ea5a38d12b139", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-9b5ed14d67e48f84", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 legacy/web/src/components/ProvidersTab.tsx:178"}, "properties": {"repobilityId": "fc2b03ee71972675", "scanner": "scanner-primary", "fingerprint": "9b5ed14d67e48f84", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0981b8f61344373b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 legacy/web/src/components/DynamicProviderCard.tsx:58"}, "properties": {"repobilityId": "be026618714c58a1", "scanner": "scanner-primary", "fingerprint": "0981b8f61344373b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1efab1b53b9fa9ab", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 legacy/web/src/components/ChatSidebar.tsx:85"}, "properties": {"repobilityId": "d09a260570b52996", "scanner": "scanner-primary", "fingerprint": "1efab1b53b9fa9ab", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-37bb83941121d90b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 legacy/web/src/components/MultiSelectPicker.tsx:93"}, "properties": {"repobilityId": "724aacbfc113f0b9", "scanner": "scanner-primary", "fingerprint": "37bb83941121d90b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-af79322234550518", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 legacy/web/src/components/AgentDetailGrantsTab.tsx:139"}, "properties": {"repobilityId": "ce7a429d30bb98fa", "scanner": "scanner-primary", "fingerprint": "af79322234550518", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-45a72b6c14c3a58b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 legacy/web/src/components/AgentDetailDelegationsTab.tsx:237"}, "properties": {"repobilityId": "fe0de48db36f4fe4", "scanner": "scanner-primary", "fingerprint": "45a72b6c14c3a58b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b8a137882d6c798c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 legacy/web/src/components/AgentListItem.tsx:37"}, "properties": {"repobilityId": "a290a475bebd45fd", "scanner": "scanner-primary", "fingerprint": "b8a137882d6c798c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-36c040ec467c2297", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 legacy/web/src/components/CommandLogTimeline.tsx:95"}, "properties": {"repobilityId": "34b45c7f57aed7af", "scanner": "scanner-primary", "fingerprint": "36c040ec467c2297", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0434c8a23866312b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 legacy/web/src/components/AgentDetailInnerLifeTab.tsx:75"}, "properties": {"repobilityId": "12335ca5c25f1c11", "scanner": "scanner-primary", "fingerprint": "0434c8a23866312b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ea6af5f037b63c48", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 legacy/web/src/components/circle/CircleOverviewTab.tsx:57"}, "properties": {"repobilityId": "e7fa3e75290c17be", "scanner": "scanner-primary", "fingerprint": "ea6af5f037b63c48", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b82169b9722b7550", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 legacy/web/src/components/introspection/IntrospectionSidebar.tsx:112"}, "properties": {"repobilityId": "d15942840d9e627b", "scanner": "scanner-primary", "fingerprint": "b82169b9722b7550", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-9322738094b740e3", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 legacy/web/src/components/memory/BlockCard.tsx:34"}, "properties": {"repobilityId": "d60767ea904cd413", "scanner": "scanner-primary", "fingerprint": "9322738094b740e3", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ff91b4a5fd3a65cf", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 legacy/web/src/components/memory/TimelineView.tsx:98"}, "properties": {"repobilityId": "802ae7eefd3d1fc1", "scanner": "scanner-primary", "fingerprint": "ff91b4a5fd3a65cf", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d3859828f59ebf98", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 legacy/web/src/components/memory/MemoryContent.tsx:245"}, "properties": {"repobilityId": "70cd2882c5472524", "scanner": "scanner-primary", "fingerprint": "d3859828f59ebf98", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c7bb917dbcd805ac", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 legacy/web/src/app/orchestration/page.tsx:102"}, "properties": {"repobilityId": "facb6db40dec4d82", "scanner": "scanner-primary", "fingerprint": "c7bb917dbcd805ac", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-17c455fa1685ef75", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 legacy/web/src/app/dashboard/page.tsx:208"}, "properties": {"repobilityId": "fe8ec39895f9ff62", "scanner": "scanner-primary", "fingerprint": "17c455fa1685ef75", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1eee289cdb92da91", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 legacy/web/src/app/providers/page.tsx:179"}, "properties": {"repobilityId": "4209be57fba61a04", "scanner": "scanner-primary", "fingerprint": "1eee289cdb92da91", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-7870db8d83cb0392", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 legacy/web/src/app/agents/_id/memory-graph/page.tsx:121"}, "properties": {"repobilityId": "51e1dabbe114970b", "scanner": "scanner-primary", "fingerprint": "7870db8d83cb0392", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-69e541f0d27dbfd6", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 legacy/web/src/app/operator-requests/page.tsx:101"}, "properties": {"repobilityId": "95fe8ec9cda9c80b", "scanner": "scanner-primary", "fingerprint": "69e541f0d27dbfd6", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d57034bac134eeb4", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 legacy/web/src/app/memory/_id/page.tsx:108"}, "properties": {"repobilityId": "58e22808ec7dbc4a", "scanner": "scanner-primary", "fingerprint": "d57034bac134eeb4", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e2f6d80bf9954d45", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 legacy/web/src/app/channels/page.tsx:86"}, "properties": {"repobilityId": "72b8717a23d7e720", "scanner": "scanner-primary", "fingerprint": "e2f6d80bf9954d45", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-dfa2b4a03246d540", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 legacy/web/src/app/circles/page.tsx:132"}, "properties": {"repobilityId": "efe2b1fa07d13917", "scanner": "scanner-primary", "fingerprint": "dfa2b4a03246d540", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1c717f795547a614", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 legacy/tools/discord-bridge/src/index.ts:153"}, "properties": {"repobilityId": "a5ca68b48920ea32", "scanner": "scanner-primary", "fingerprint": "1c717f795547a614", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3cd7cb8871838728", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 legacy/tools/bridges/manager.ts:59"}, "properties": {"repobilityId": "3d29dd750d737428", "scanner": "scanner-primary", "fingerprint": "3cd7cb8871838728", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b2509e962443f167", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 legacy/tools/bridges/cli/create-task.ts:152"}, "properties": {"repobilityId": "53be1407baab7033", "scanner": "scanner-primary", "fingerprint": "b2509e962443f167", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a5be8c7a6c8ec4c2", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 legacy/tools/shadow-proxy/report.ts:155"}, "properties": {"repobilityId": "10471b1d4137ee08", "scanner": "scanner-primary", "fingerprint": "a5be8c7a6c8ec4c2", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8c7b6df819c1d33d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 legacy/tools/shadow-proxy/proxy.ts:366"}, "properties": {"repobilityId": "e56fa18a16313cba", "scanner": "scanner-primary", "fingerprint": "8c7b6df819c1d33d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-31d39c8b66d28f9a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 legacy/core/migrator.js:20"}, "properties": {"repobilityId": "ad3c7e6e692f47a3", "scanner": "scanner-primary", "fingerprint": "31d39c8b66d28f9a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-831f7533531cb7f6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 legacy/core/tmp_check_db.js:11"}, "properties": {"repobilityId": "28631513ce525067", "scanner": "scanner-primary", "fingerprint": "831f7533531cb7f6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ca14ecc76235e3c7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 legacy/core/agent-runtime/src/logger.ts:15"}, "properties": {"repobilityId": "2768d0c7aa32ace3", "scanner": "scanner-primary", "fingerprint": "ca14ecc76235e3c7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3ee639e38ac42730", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 legacy/core/agent-runtime/src/__tests__/new-tools.test.ts:71"}, "properties": {"repobilityId": "d0f9aea03b47f3f3", "scanner": "scanner-primary", "fingerprint": "3ee639e38ac42730", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-fe346e17219a1335", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 legacy/core/src/dogfeed/run.ts:32"}, "properties": {"repobilityId": "3a377175aa13a1e9", "scanner": "scanner-primary", "fingerprint": "fe346e17219a1335", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-cc71c5ad1363913b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 legacy/core/src/audit/AuditExport.test.ts:13"}, "properties": {"repobilityId": "91a8920b690a7ad7", "scanner": "scanner-primary", "fingerprint": "cc71c5ad1363913b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-758489d61b681a1d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 legacy/core/src/lib/logger.ts:9"}, "properties": {"repobilityId": "d04034c99624e5c7", "scanner": "scanner-primary", "fingerprint": "758489d61b681a1d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f87e80f6c9d36c1a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 legacy/core/src/services/vector.service.benchmark.ts:8"}, "properties": {"repobilityId": "bece0c815271077e", "scanner": "scanner-primary", "fingerprint": "f87e80f6c9d36c1a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3f539569c2bb99a9", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 legacy/core/src/skills/cli.ts:39"}, "properties": {"repobilityId": "9a7377641f4010db", "scanner": "scanner-primary", "fingerprint": "3f539569c2bb99a9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-abc9fe42e8e022a1", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 legacy/core/src/skills/builtins/shell-exec.test.ts:64"}, "properties": {"repobilityId": "50e4d4fecc4efd99", "scanner": "scanner-primary", "fingerprint": "abc9fe42e8e022a1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-279ad00f804b8c44", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 e2e/fixtures/stack.ts:57"}, "properties": {"repobilityId": "43b5605ee3d64597", "scanner": "scanner-primary", "fingerprint": "279ad00f804b8c44", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-706d75ad04beb5b7", "level": "warning", "message": {"text": "Privileged port 17 in use"}, "properties": {"repobilityId": "0bf38fb8f89ec589", "scanner": "scanner-primary", "fingerprint": "706d75ad04beb5b7", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/codeql.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-0d43358e62a1955c", "level": "warning", "message": {"text": "Dockerfile runs as root: rust/Dockerfile"}, "properties": {"repobilityId": "86c49327460a3233", "scanner": "scanner-primary", "fingerprint": "0d43358e62a1955c", "layer": "hardware", "severity": "medium", "confidence": 1.0, "tags": ["security", "container"]}}, {"ruleId": "scanner-070b032892efa699", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: rust:1-slim-bookworm"}, "properties": {"repobilityId": "3e47b2ffe3aee655", "scanner": "scanner-primary", "fingerprint": "070b032892efa699", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "rust/Dockerfile"}, "region": {"startLine": 11}}}]}, {"ruleId": "scanner-da2d469a95e5b8f2", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: debian:bookworm-slim"}, "properties": {"repobilityId": "d0ccd6223b5e3922", "scanner": "scanner-primary", "fingerprint": "da2d469a95e5b8f2", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "rust/Dockerfile"}, "region": {"startLine": 29}}}]}, {"ruleId": "scanner-a5823f1252b6cda1", "level": "warning", "message": {"text": "Dockerfile runs as root: web/Dockerfile"}, "properties": {"repobilityId": "ee2f067d8416357d", "scanner": "scanner-primary", "fingerprint": "a5823f1252b6cda1", "layer": "hardware", "severity": "medium", "confidence": 1.0, "tags": ["security", "container"]}}, {"ruleId": "scanner-845b11d47f4d2ea7", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: oven/bun:1-alpine"}, "properties": {"repobilityId": "83600fe7c6b98967", "scanner": "scanner-primary", "fingerprint": "845b11d47f4d2ea7", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "web/Dockerfile"}, "region": {"startLine": 4}}}]}, {"ruleId": "scanner-0f2f8d1aedc84788", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: nginx:alpine"}, "properties": {"repobilityId": "6cbc51b3ddaad477", "scanner": "scanner-primary", "fingerprint": "0f2f8d1aedc84788", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "web/Dockerfile"}, "region": {"startLine": 16}}}]}, {"ruleId": "scanner-4a867c2fc3ffa3c7", "level": "warning", "message": {"text": "Dockerfile runs as root: legacy/docker/dogfeed-agent/Dockerfile"}, "properties": {"repobilityId": "58fc557045f4f88c", "scanner": "scanner-primary", "fingerprint": "4a867c2fc3ffa3c7", "layer": "hardware", "severity": "medium", "confidence": 1.0, "tags": ["security", "container"]}}, {"ruleId": "scanner-b3c51ada7fe418b8", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: node:22-bookworm-slim"}, "properties": {"repobilityId": "72b9a32cc85e5c33", "scanner": "scanner-primary", "fingerprint": "b3c51ada7fe418b8", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "legacy/docker/dogfeed-agent/Dockerfile"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-e91ddedab7070330", "level": "error", "message": {"text": "Dockerfile pipes a remote installer into a shell"}, "properties": {"repobilityId": "a63adee879060f30", "scanner": "scanner-primary", "fingerprint": "e91ddedab7070330", "layer": "hardware", "severity": "high", "confidence": 1.0, "tags": ["supply-chain", "docker", "remote-installer"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "legacy/docker/dogfeed-agent/Dockerfile"}, "region": {"startLine": 13}}}]}, {"ruleId": "scanner-e3124016d0442ce0", "level": "warning", "message": {"text": "Dockerfile runs as root: legacy/egress-proxy/Dockerfile"}, "properties": {"repobilityId": "f191d4b610a8c120", "scanner": "scanner-primary", "fingerprint": "e3124016d0442ce0", "layer": "hardware", "severity": "medium", "confidence": 1.0, "tags": ["security", "container"]}}, {"ruleId": "scanner-c42010a2d6bd76fb", "level": "warning", "message": {"text": "Docker base image uses a mutable or implicit tag: ubuntu/squid:latest"}, "properties": {"repobilityId": "b8536d1b79a1350d", "scanner": "scanner-primary", "fingerprint": "c42010a2d6bd76fb", "layer": "hardware", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "legacy/egress-proxy/Dockerfile"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-1bc970ebf8b25a57", "level": "warning", "message": {"text": "Dockerfile runs as root: legacy/web/Dockerfile"}, "properties": {"repobilityId": "0200e419243cca29", "scanner": "scanner-primary", "fingerprint": "1bc970ebf8b25a57", "layer": "hardware", "severity": "medium", "confidence": 1.0, "tags": ["security", "container"]}}, {"ruleId": "scanner-e87a42bd86bc8c25", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: oven/bun:1-alpine"}, "properties": {"repobilityId": "ae2ba98a98313c18", "scanner": "scanner-primary", "fingerprint": "e87a42bd86bc8c25", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "legacy/web/Dockerfile"}, "region": {"startLine": 4}}}]}, {"ruleId": "scanner-f515afc9a76625a2", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: nginx:alpine"}, "properties": {"repobilityId": "57e63062acc564c4", "scanner": "scanner-primary", "fingerprint": "f515afc9a76625a2", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "legacy/web/Dockerfile"}, "region": {"startLine": 15}}}]}, {"ruleId": "scanner-2b4754cb16d2c74f", "level": "warning", "message": {"text": "Dockerfile runs as root: legacy/examples/byoh-python/Dockerfile"}, "properties": {"repobilityId": "90d9123b56974269", "scanner": "scanner-primary", "fingerprint": "2b4754cb16d2c74f", "layer": "hardware", "severity": "medium", "confidence": 1.0, "tags": ["security", "container"]}}, {"ruleId": "scanner-60ef0bbb7590acb5", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: python:3.12-slim"}, "properties": {"repobilityId": "77b088c668708ffb", "scanner": "scanner-primary", "fingerprint": "60ef0bbb7590acb5", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "legacy/examples/byoh-python/Dockerfile"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-8bed139077a6eb0d", "level": "warning", "message": {"text": "Dockerfile runs as root: legacy/examples/byoh-shell/Dockerfile"}, "properties": {"repobilityId": "2d40185812a97762", "scanner": "scanner-primary", "fingerprint": "8bed139077a6eb0d", "layer": "hardware", "severity": "medium", "confidence": 1.0, "tags": ["security", "container"]}}, {"ruleId": "scanner-8e5350a432fa05b1", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: alpine:3.19"}, "properties": {"repobilityId": "9b58be6bbc1aa96d", "scanner": "scanner-primary", "fingerprint": "8e5350a432fa05b1", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "legacy/examples/byoh-shell/Dockerfile"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-5506b6120953af7f", "level": "warning", "message": {"text": "Dockerfile runs as root: legacy/tools/shadow-proxy/Dockerfile"}, "properties": {"repobilityId": "f0a3107cc1a8ef5f", "scanner": "scanner-primary", "fingerprint": "5506b6120953af7f", "layer": "hardware", "severity": "medium", "confidence": 1.0, "tags": ["security", "container"]}}, {"ruleId": "scanner-4dc8cf066093b00e", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: node:22-slim"}, "properties": {"repobilityId": "78f0cc114e19fbab", "scanner": "scanner-primary", "fingerprint": "4dc8cf066093b00e", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "legacy/tools/shadow-proxy/Dockerfile"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-dbb612295750ec31", "level": "warning", "message": {"text": "Dockerfile runs as root: legacy/core/Dockerfile"}, "properties": {"repobilityId": "3acfb415b81e50bd", "scanner": "scanner-primary", "fingerprint": "dbb612295750ec31", "layer": "hardware", "severity": "medium", "confidence": 1.0, "tags": ["security", "container"]}}, {"ruleId": "scanner-05724245c3a08737", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: node:22-slim"}, "properties": {"repobilityId": "4437d05d303a6325", "scanner": "scanner-primary", "fingerprint": "05724245c3a08737", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "legacy/core/Dockerfile"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-05724245c3a08737", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: node:22-slim"}, "properties": {"repobilityId": "9d00c129fb7b5b88", "scanner": "scanner-primary", "fingerprint": "05724245c3a08737", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "legacy/core/Dockerfile"}, "region": {"startLine": 14}}}]}, {"ruleId": "scanner-fa1b548c4205760e", "level": "error", "message": {"text": "Dockerfile pipes a remote installer into a shell"}, "properties": {"repobilityId": "e8f402112e244105", "scanner": "scanner-primary", "fingerprint": "fa1b548c4205760e", "layer": "hardware", "severity": "high", "confidence": 1.0, "tags": ["supply-chain", "docker", "remote-installer"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "legacy/core/Dockerfile"}, "region": {"startLine": 4}}}]}, {"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-b9fbb86686665252", "level": "error", "message": {"text": "Insecure pattern 'eval_used' in scripts/runtime-verify.sh:48"}, "properties": {"repobilityId": "06cad18fe3fd7e82", "scanner": "scanner-primary", "fingerprint": "b9fbb86686665252", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["owasp", "eval_used"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/runtime-verify.sh"}, "region": {"startLine": 48}}}]}, {"ruleId": "scanner-8eed6d378614c01a", "level": "error", "message": {"text": "Possible secret in rust/crates/sera-gateway/src/routes/inference_proxy.rs"}, "properties": {"repobilityId": "06303a09c05be7b7", "scanner": "scanner-primary", "fingerprint": "8eed6d378614c01a", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "rust/crates/sera-gateway/src/routes/inference_proxy.rs"}, "region": {"startLine": 1182}}}]}, {"ruleId": "scanner-8eed6d378614c01a", "level": "error", "message": {"text": "Possible secret in rust/crates/sera-gateway/src/routes/inference_proxy.rs"}, "properties": {"repobilityId": "06303a09c05be7b7", "scanner": "scanner-primary", "fingerprint": "8eed6d378614c01a", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "rust/crates/sera-gateway/src/routes/inference_proxy.rs"}, "region": {"startLine": 1687}}}]}, {"ruleId": "scanner-224a31a992fdf46d", "level": "error", "message": {"text": "Possible secret in rust/crates/sera-tools/src/corrections/seed.rs"}, "properties": {"repobilityId": "ef5cc20b5e6297ca", "scanner": "scanner-primary", "fingerprint": "224a31a992fdf46d", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "rust/crates/sera-tools/src/corrections/seed.rs"}, "region": {"startLine": 253}}}]}, {"ruleId": "scanner-c3dee21377ad4f5e", "level": "error", "message": {"text": "Possible secret in rust/crates/sera-oci/src/puller.rs"}, "properties": {"repobilityId": "a7c9e74d0d385896", "scanner": "scanner-primary", "fingerprint": "c3dee21377ad4f5e", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "rust/crates/sera-oci/src/puller.rs"}, "region": {"startLine": 287}}}]}, {"ruleId": "scanner-c3dee21377ad4f5e", "level": "error", "message": {"text": "Possible secret in rust/crates/sera-oci/src/puller.rs"}, "properties": {"repobilityId": "a7c9e74d0d385896", "scanner": "scanner-primary", "fingerprint": "c3dee21377ad4f5e", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "rust/crates/sera-oci/src/puller.rs"}, "region": {"startLine": 303}}}]}, {"ruleId": "scanner-cef5343a148e34cb", "level": "error", "message": {"text": "Possible secret in rust/crates/sera-config/src/core_config.rs"}, "properties": {"repobilityId": "f821cbe640b203b6", "scanner": "scanner-primary", "fingerprint": "cef5343a148e34cb", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "rust/crates/sera-config/src/core_config.rs"}, "region": {"startLine": 347}}}]}, {"ruleId": "scanner-cef5343a148e34cb", "level": "error", "message": {"text": "Possible secret in rust/crates/sera-config/src/core_config.rs"}, "properties": {"repobilityId": "f821cbe640b203b6", "scanner": "scanner-primary", "fingerprint": "cef5343a148e34cb", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "rust/crates/sera-config/src/core_config.rs"}, "region": {"startLine": 418}}}]}, {"ruleId": "scanner-cef5343a148e34cb", "level": "error", "message": {"text": "Possible secret in rust/crates/sera-config/src/core_config.rs"}, "properties": {"repobilityId": "f821cbe640b203b6", "scanner": "scanner-primary", "fingerprint": "cef5343a148e34cb", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "rust/crates/sera-config/src/core_config.rs"}, "region": {"startLine": 458}}}]}, {"ruleId": "scanner-ee02c4745bbc9526", "level": "error", "message": {"text": "Insecure pattern 'exec_used' in rust/crates/sera-workflow/src/coordination.rs:97"}, "properties": {"repobilityId": "3404b8746fc2776f", "scanner": "scanner-primary", "fingerprint": "ee02c4745bbc9526", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["owasp", "exec_used"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "rust/crates/sera-workflow/src/coordination.rs"}, "region": {"startLine": 97}}}]}, {"ruleId": "scanner-4277340ce7b391bc", "level": "warning", "message": {"text": "Insecure pattern 'local_storage_auth_token' in legacy/web/src/app/login/page.tsx:28"}, "properties": {"repobilityId": "436a69dbbae1b126", "scanner": "scanner-primary", "fingerprint": "4277340ce7b391bc", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "local_storage_auth_token"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "legacy/web/src/app/login/page.tsx"}, "region": {"startLine": 28}}}]}, {"ruleId": "scanner-4ff73d5fe72ee144", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in legacy/tools/bridges/manager.ts:11"}, "properties": {"repobilityId": "e017ccbf42dcb616", "scanner": "scanner-primary", "fingerprint": "4ff73d5fe72ee144", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "legacy/tools/bridges/manager.ts"}, "region": {"startLine": 11}}}]}, {"ruleId": "scanner-03653eeaeb9a83ff", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in legacy/tools/bridges/omo-bridge/index.ts:14"}, "properties": {"repobilityId": "d68a1699cfd3c159", "scanner": "scanner-primary", "fingerprint": "03653eeaeb9a83ff", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "legacy/tools/bridges/omo-bridge/index.ts"}, "region": {"startLine": 14}}}]}, {"ruleId": "scanner-229d5de6d2d81295", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in legacy/tools/bridges/omx-bridge/index.ts:14"}, "properties": {"repobilityId": "d3646ac80eb25f63", "scanner": "scanner-primary", "fingerprint": "229d5de6d2d81295", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "legacy/tools/bridges/omx-bridge/index.ts"}, "region": {"startLine": 14}}}]}, {"ruleId": "scanner-1658995018ae8903", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in legacy/tools/bridges/shared/bridge-base.ts:14"}, "properties": {"repobilityId": "c6efb32d7f0804ef", "scanner": "scanner-primary", "fingerprint": "1658995018ae8903", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "legacy/tools/bridges/shared/bridge-base.ts"}, "region": {"startLine": 14}}}]}, {"ruleId": "scanner-280fe8f1f49a321e", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in legacy/tools/bridges/omc-bridge/index.ts:14"}, "properties": {"repobilityId": "2c32f376e42937ba", "scanner": "scanner-primary", "fingerprint": "280fe8f1f49a321e", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "legacy/tools/bridges/omc-bridge/index.ts"}, "region": {"startLine": 14}}}]}, {"ruleId": "scanner-84cb84c19635a605", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in legacy/tools/bridges/gemini-bridge/index.ts:14"}, "properties": {"repobilityId": "b570ae63b1296b07", "scanner": "scanner-primary", "fingerprint": "84cb84c19635a605", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "legacy/tools/bridges/gemini-bridge/index.ts"}, "region": {"startLine": 14}}}]}, {"ruleId": "scanner-27e57668db675a66", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in legacy/core/agent-runtime/src/tools/hooks.ts:6"}, "properties": {"repobilityId": "f9ad7a1d3b5b9c71", "scanner": "scanner-primary", "fingerprint": "27e57668db675a66", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "legacy/core/agent-runtime/src/tools/hooks.ts"}, "region": {"startLine": 6}}}]}, {"ruleId": "scanner-a546307312ec451f", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in legacy/core/agent-runtime/src/tools/shell-handler.ts:5"}, "properties": {"repobilityId": "af2144a9be371124", "scanner": "scanner-primary", "fingerprint": "a546307312ec451f", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "legacy/core/agent-runtime/src/tools/shell-handler.ts"}, "region": {"startLine": 5}}}]}, {"ruleId": "scanner-7e8a1ff1010c3b0a", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in legacy/core/agent-runtime/src/tools/search-handlers.ts:8"}, "properties": {"repobilityId": "44e42d43018dd097", "scanner": "scanner-primary", "fingerprint": "7e8a1ff1010c3b0a", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "legacy/core/agent-runtime/src/tools/search-handlers.ts"}, "region": {"startLine": 8}}}]}, {"ruleId": "scanner-eeda410c5bbf9b08", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in legacy/core/src/index.ts:203"}, "properties": {"repobilityId": "528f1d9f0753007c", "scanner": "scanner-primary", "fingerprint": "eeda410c5bbf9b08", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "legacy/core/src/index.ts"}, "region": {"startLine": 203}}}]}, {"ruleId": "scanner-bfe98c074245bbb0", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in legacy/core/src/dogfeed/verify-merge.ts:9"}, "properties": {"repobilityId": "7db93459b3755d7c", "scanner": "scanner-primary", "fingerprint": "bfe98c074245bbb0", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "legacy/core/src/dogfeed/verify-merge.ts"}, "region": {"startLine": 9}}}]}, {"ruleId": "scanner-a43591297f4ff304", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in legacy/core/src/sources/GitHubEventSource.ts:1"}, "properties": {"repobilityId": "ab812f384728f7e1", "scanner": "scanner-primary", "fingerprint": "a43591297f4ff304", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "legacy/core/src/sources/GitHubEventSource.ts"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-4f7a5e54e3a9cbc3", "level": "error", "message": {"text": "Insecure pattern 'exec_used' in legacy/core/src/sandbox/SandboxManager.ts:354"}, "properties": {"repobilityId": "e926f0bcfbda9dd3", "scanner": "scanner-primary", "fingerprint": "4f7a5e54e3a9cbc3", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["owasp", "exec_used"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "legacy/core/src/sandbox/SandboxManager.ts"}, "region": {"startLine": 354}}}]}, {"ruleId": "scanner-bf75493658c26c10", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in legacy/core/src/sandbox/WorktreeManager.ts:9"}, "properties": {"repobilityId": "9a0f473666ae3dd6", "scanner": "scanner-primary", "fingerprint": "bf75493658c26c10", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "legacy/core/src/sandbox/WorktreeManager.ts"}, "region": {"startLine": 9}}}]}, {"ruleId": "scanner-c4f9554e606bb663", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in legacy/core/src/agents/DiskQuotaService.ts:1"}, "properties": {"repobilityId": "e9f57188d3993c55", "scanner": "scanner-primary", "fingerprint": "c4f9554e606bb663", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "legacy/core/src/agents/DiskQuotaService.ts"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-365d57015ff4cb88", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in legacy/core/src/agents/Orchestrator.ts:2"}, "properties": {"repobilityId": "4c7e5ba5a82f7bcb", "scanner": "scanner-primary", "fingerprint": "365d57015ff4cb88", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "legacy/core/src/agents/Orchestrator.ts"}, "region": {"startLine": 2}}}]}, {"ruleId": "scanner-c0074feed58a0c5a", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in legacy/core/src/services/DogfeedService.ts:12"}, "properties": {"repobilityId": "18aab00ea69f8e47", "scanner": "scanner-primary", "fingerprint": "c0074feed58a0c5a", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "legacy/core/src/services/DogfeedService.ts"}, "region": {"startLine": 12}}}]}, {"ruleId": "scanner-f1a27ce672836420", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in legacy/core/src/skills/builtins/shell-exec.ts:1"}, "properties": {"repobilityId": "03b1183a070fb255", "scanner": "scanner-primary", "fingerprint": "f1a27ce672836420", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "legacy/core/src/skills/builtins/shell-exec.ts"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-e6f49e3962fd5f8f", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in legacy/core/src/lsp/LspClient.ts:1"}, "properties": {"repobilityId": "a94cd5acf15f390b", "scanner": "scanner-primary", "fingerprint": "e6f49e3962fd5f8f", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "legacy/core/src/lsp/LspClient.ts"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-871406212c3265b3", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in sdk/typescript/sera-plugin-sdk/scripts/generate-proto.mjs:14"}, "properties": {"repobilityId": "b2f9115d80e55594", "scanner": "scanner-primary", "fingerprint": "871406212c3265b3", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "sdk/typescript/sera-plugin-sdk/scripts/generate-proto.mjs"}, "region": {"startLine": 14}}}]}, {"ruleId": "scanner-65aa740cba4a4a73", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "f72e4b498f09201b", "scanner": "scanner-primary", "fingerprint": "65aa740cba4a4a73", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/codeql.yml"}, "region": {"startLine": 36}}}]}, {"ruleId": "scanner-65aa740cba4a4a73", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "7640466c92034bac", "scanner": "scanner-primary", "fingerprint": "65aa740cba4a4a73", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/codeql.yml"}, "region": {"startLine": 39}}}]}, {"ruleId": "scanner-65aa740cba4a4a73", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "3130c0a2c5ea460e", "scanner": "scanner-primary", "fingerprint": "65aa740cba4a4a73", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/codeql.yml"}, "region": {"startLine": 45}}}]}, {"ruleId": "scanner-6d6b0733dcc7a778", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "79ca8d649027a8ad", "scanner": "scanner-primary", "fingerprint": "6d6b0733dcc7a778", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/validate-sdk-ts.yml"}, "region": {"startLine": 33}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "7195a4314f751589", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 25}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "1b0add4759a308ec", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 71}}}]}, {"ruleId": "scanner-0763d85002569570", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "932ede9197f66143", "scanner": "scanner-primary", "fingerprint": "0763d85002569570", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/docs.yml"}, "region": {"startLine": 35}}}]}, {"ruleId": "scanner-0763d85002569570", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "e4610670d3104927", "scanner": "scanner-primary", "fingerprint": "0763d85002569570", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/docs.yml"}, "region": {"startLine": 48}}}]}, {"ruleId": "scanner-14ce8614dd03f409", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "81c5c697653f94e8", "scanner": "scanner-primary", "fingerprint": "14ce8614dd03f409", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/docs.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-ec51c7347d8f26c4", "level": "note", "message": {"text": "package.json defines install-time lifecycle scripts"}, "properties": {"repobilityId": "051a500059cf2823", "scanner": "scanner-primary", "fingerprint": "ec51c7347d8f26c4", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "npm", "install-scripts"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "legacy/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-d82b2ae84ec10505", "level": "note", "message": {"text": "Very large file: rust/crates/sera-auth/src/capability.rs (1550 lines)"}, "properties": {"repobilityId": "d8bbff9448c2a277", "scanner": "scanner-primary", "fingerprint": "d82b2ae84ec10505", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-119781c4a04b9485", "level": "note", "message": {"text": "Very large file: rust/crates/sera-memory/src/sqlite_store.rs (1692 lines)"}, "properties": {"repobilityId": "9a3384a368029692", "scanner": "scanner-primary", "fingerprint": "119781c4a04b9485", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-91a2ab628cbd0c1f", "level": "note", "message": {"text": "Very large file: rust/crates/sera-gateway/src/discord.rs (5123 lines)"}, "properties": {"repobilityId": "1a089e5041259646", "scanner": "scanner-primary", "fingerprint": "91a2ab628cbd0c1f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-1f78ace9c61edd70", "level": "note", "message": {"text": "Very large file: rust/crates/sera-gateway/src/routes/inference_proxy.rs (2114 lines)"}, "properties": {"repobilityId": "102c606fb8fe8398", "scanner": "scanner-primary", "fingerprint": "1f78ace9c61edd70", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-02bf5570c3015934", "level": "note", "message": {"text": "Very large file: rust/crates/sera-runtime/src/llm_client.rs (2519 lines)"}, "properties": {"repobilityId": "fca123464a5a5726", "scanner": "scanner-primary", "fingerprint": "02bf5570c3015934", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-06c1fc1d1b6f7af5", "level": "note", "message": {"text": "Very large file: rust/crates/sera-runtime/src/default_runtime.rs (2080 lines)"}, "properties": {"repobilityId": "0e5fb06eabc9610d", "scanner": "scanner-primary", "fingerprint": "06c1fc1d1b6f7af5", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-3b150be212a645f2", "level": "note", "message": {"text": "Very large file: rust/crates/sera-runtime/src/turn.rs (2069 lines)"}, "properties": {"repobilityId": "2ff982bc6b6dbc86", "scanner": "scanner-primary", "fingerprint": "3b150be212a645f2", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-e6b47502128c760b", "level": "note", "message": {"text": "Very large file: rust/crates/sera-runtime/src/tools/skill_management.rs (2211 lines)"}, "properties": {"repobilityId": "f610574aa6f85930", "scanner": "scanner-primary", "fingerprint": "e6b47502128c760b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-e18a68f767f6aa44", "level": "note", "message": {"text": "Very large file: rust/crates/sera-types/src/memory.rs (1931 lines)"}, "properties": {"repobilityId": "b8e37b30799496b3", "scanner": "scanner-primary", "fingerprint": "e18a68f767f6aa44", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-51baad5e302f272b", "level": "note", "message": {"text": "Very large file: rust/crates/sera-db/src/lane_queue.rs (1318 lines)"}, "properties": {"repobilityId": "bcc79802a096f8ff", "scanner": "scanner-primary", "fingerprint": "51baad5e302f272b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-a5d085a3f8cdddd5", "level": "note", "message": {"text": "Very large file: rust/crates/sera-tui/src/app/mod.rs (2325 lines)"}, "properties": {"repobilityId": "cc8d7e9f5b137158", "scanner": "scanner-primary", "fingerprint": "a5d085a3f8cdddd5", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-c0331b09017b17a3", "level": "note", "message": {"text": "Very large file: rust/crates/sera-tui/src/views/session.rs (1401 lines)"}, "properties": {"repobilityId": "716db0d920a147ee", "scanner": "scanner-primary", "fingerprint": "c0331b09017b17a3", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-d4a7c02eafdbadd8", "level": "note", "message": {"text": "Very large file: rust/crates/sera-memory-hindsight/src/lib.rs (1366 lines)"}, "properties": {"repobilityId": "0a4c9a61f3b0e458", "scanner": "scanner-primary", "fingerprint": "d4a7c02eafdbadd8", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-9908fdb281d9003d", "level": "note", "message": {"text": "Very large file: rust/crates/sera-workflow/src/coordination.rs (2159 lines)"}, "properties": {"repobilityId": "5dce4cbf9fb2ced1", "scanner": "scanner-primary", "fingerprint": "9908fdb281d9003d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-b268139ff300584b", "level": "note", "message": {"text": "Very large file: rust/crates/sera-workflow/src/tests.rs (1625 lines)"}, "properties": {"repobilityId": "38b8214718c70651", "scanner": "scanner-primary", "fingerprint": "b268139ff300584b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-e4b504a38e171ea2", "level": "note", "message": {"text": "Very large file: rust/crates/sera-models/src/routing.rs (1798 lines)"}, "properties": {"repobilityId": "d9a1ed3be63b69a7", "scanner": "scanner-primary", "fingerprint": "e4b504a38e171ea2", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-b75c4988d8424b14", "level": "note", "message": {"text": "Very large file: legacy/core/src/mcp/SeraMCPServer.ts (1906 lines)"}, "properties": {"repobilityId": "9ed9f5a1eb6234c1", "scanner": "scanner-primary", "fingerprint": "b75c4988d8424b14", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "f1221406715a9433", "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": "3a06a0c3de91a6f2", "scanner": "scanner-primary", "fingerprint": "72b2a6250083a784", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "incomplete", "generated-repo-pattern"]}}, {"ruleId": "scanner-9d79c4077342a7d0", "level": "warning", "message": {"text": "Runtime service client appears to use placeholder configuration"}, "properties": {"repobilityId": "bb15e0b350f5f6f5", "scanner": "scanner-primary", "fingerprint": "9d79c4077342a7d0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "runtime-config", "service-client", "generated-repo-pattern"]}}, {"ruleId": "scanner-2d0c7b7ab8f8aacf", "level": "warning", "message": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "properties": {"repobilityId": "0a9fe5282ec8429e", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-ea8f3013f588db25", "level": "note", "message": {"text": "Shallow git history limits provenance confidence"}, "properties": {"repobilityId": "7c728487b09af8d3", "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": "1704e904edba24ff", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-5821e279d76aa0c2", "level": "error", "message": {"text": "Agent instruction/config may expose a secret: rust/CLAUDE.md"}, "properties": {"repobilityId": "2e985e1b4cb36c6c", "scanner": "scanner-primary", "fingerprint": "5821e279d76aa0c2", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["agent-instructions", "secrets", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "rust/CLAUDE.md"}, "region": {"startLine": 143}}}]}, {"ruleId": "scanner-70303ec9919a44eb", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: legacy/docs/architecture/agents.md"}, "properties": {"repobilityId": "12723b4441ae09c9", "scanner": "scanner-primary", "fingerprint": "70303ec9919a44eb", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "agents_md"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "legacy/docs/architecture/agents.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-2f29fb2b03fa99de", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: legacy/docs/concepts/agents.md"}, "properties": {"repobilityId": "5c9760b9f9014cf0", "scanner": "scanner-primary", "fingerprint": "2f29fb2b03fa99de", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "agents_md"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "legacy/docs/concepts/agents.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-41d798b70d78e665", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: legacy/tools/discord-bridge/CLAUDE.md"}, "properties": {"repobilityId": "6c8c3fb825b7b642", "scanner": "scanner-primary", "fingerprint": "41d798b70d78e665", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "legacy/tools/discord-bridge/CLAUDE.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-e725d2ab884fbd49", "level": "note", "message": {"text": "Multiple root agent instruction files without precedence"}, "properties": {"repobilityId": "1953db6c89508d22", "scanner": "scanner-primary", "fingerprint": "e725d2ab884fbd49", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["agent-instructions", "governance"]}}, {"ruleId": "scanner-bd423a172a111d08", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 ops/e2e/operator_task_smoke.py:39"}, "properties": {"repobilityId": "1b246ec7903264c0", "scanner": "scanner-primary", "fingerprint": "bd423a172a111d08", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-64ffe2c6456c1ffc", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 web/src/lib/api.ts:37"}, "properties": {"repobilityId": "203a4df93ec73cde", "scanner": "scanner-primary", "fingerprint": "64ffe2c6456c1ffc", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-8be9358d0ab31922", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 legacy/web/src/app/auth/callback/page.tsx:46"}, "properties": {"repobilityId": "e28e4c5fd6b9b7b5", "scanner": "scanner-primary", "fingerprint": "8be9358d0ab31922", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-6ae124de67801fe2", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 legacy/web/src/app/audit/page.tsx:143"}, "properties": {"repobilityId": "fad7153eaa69085f", "scanner": "scanner-primary", "fingerprint": "6ae124de67801fe2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-0f1e8bc1867752aa", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 legacy/web/src/lib/api/client.ts:95"}, "properties": {"repobilityId": "f2620b8cfc8479cb", "scanner": "scanner-primary", "fingerprint": "0f1e8bc1867752aa", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c9f69a5511fb3c5c", "level": "none", "message": {"text": "Commented-code block (5 lines) in legacy/tools/bridges/task-router.ts:223"}, "properties": {"repobilityId": "2ecb90c64149a237", "scanner": "scanner-primary", "fingerprint": "c9f69a5511fb3c5c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6eeeb0ae80932f99", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 legacy/tools/bridges/task-router.ts:73"}, "properties": {"repobilityId": "3d40a5fdb9196580", "scanner": "scanner-primary", "fingerprint": "6eeeb0ae80932f99", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-6972210bc17da409", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 legacy/tools/bridges/shared/bridge-base.ts:150"}, "properties": {"repobilityId": "4b57b2d34f9e9077", "scanner": "scanner-primary", "fingerprint": "6972210bc17da409", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-7ce83023151600f9", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 legacy/tools/bridges/cli/create-task.ts:67"}, "properties": {"repobilityId": "40b425a53f69b46c", "scanner": "scanner-primary", "fingerprint": "7ce83023151600f9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2e45b7be1f2f7865", "level": "none", "message": {"text": "Commented-code block (9 lines) in legacy/core/agent-runtime/src/contextManager.test.ts:537"}, "properties": {"repobilityId": "5239095779838035", "scanner": "scanner-primary", "fingerprint": "2e45b7be1f2f7865", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a87f44d4f4f9c7e8", "level": "note", "message": {"text": "Legacy-named symbol `read_v2` in legacy/core/agent-runtime/src/__tests__/toolArgumentRepair.test.ts:158"}, "properties": {"repobilityId": "fa33908ac522e5bc", "scanner": "scanner-primary", "fingerprint": "a87f44d4f4f9c7e8", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-dcdb7a654425d12b", "level": "none", "message": {"text": "Commented-code block (12 lines) in legacy/core/agent-runtime/src/__tests__/memoryFlush.test.ts:118"}, "properties": {"repobilityId": "bffdbc33e9ad980f", "scanner": "scanner-primary", "fingerprint": "dcdb7a654425d12b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b1ba469e9e6ce659", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 legacy/core/agent-runtime/src/tools/web-handler.ts:2"}, "properties": {"repobilityId": "38a87faac2dc467b", "scanner": "scanner-primary", "fingerprint": "b1ba469e9e6ce659", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-52b528fb860d6380", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 legacy/core/src/dogfeed/verify-merge.ts:56"}, "properties": {"repobilityId": "ccf4ae1a8fd78356", "scanner": "scanner-primary", "fingerprint": "52b528fb860d6380", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-fb24f5c8bf68e5d3", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 legacy/core/src/sources/GitHubEventSource.ts:158"}, "properties": {"repobilityId": "7a3a9962be408654", "scanner": "scanner-primary", "fingerprint": "fb24f5c8bf68e5d3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3d04ed43d970573a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 legacy/core/src/routes/auth.ts:106"}, "properties": {"repobilityId": "6a005fbdbd87b729", "scanner": "scanner-primary", "fingerprint": "3d04ed43d970573a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-cbe66c41bf10a536", "level": "none", "message": {"text": "Commented-code block (6 lines) in legacy/core/src/routes/delegation.security.test.ts:42"}, "properties": {"repobilityId": "9c87a84ffd395652", "scanner": "scanner-primary", "fingerprint": "cbe66c41bf10a536", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e176c943fdb9e9b2", "level": "none", "message": {"text": "Commented-code block (5 lines) in legacy/core/src/sandbox/PermissionRequestService.ts:286"}, "properties": {"repobilityId": "6c6256399b5b6a4f", "scanner": "scanner-primary", "fingerprint": "e176c943fdb9e9b2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1ff59802632934ec", "level": "none", "message": {"text": "Commented-code block (6 lines) in legacy/core/src/sandbox/ContainerSecurityMapper.ts:42"}, "properties": {"repobilityId": "c954c64534b798bb", "scanner": "scanner-primary", "fingerprint": "1ff59802632934ec", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7aad0a31d894957c", "level": "none", "message": {"text": "Commented-code block (5 lines) in legacy/core/src/agents/Orchestrator.ts:176"}, "properties": {"repobilityId": "c58afcef1bc5a878", "scanner": "scanner-primary", "fingerprint": "7aad0a31d894957c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3dde6a4f23f1a452", "level": "none", "message": {"text": "Commented-code block (5 lines) in legacy/core/src/agents/process/HierarchicalProcess.test.ts:115"}, "properties": {"repobilityId": "fcfe4682d47803ed", "scanner": "scanner-primary", "fingerprint": "3dde6a4f23f1a452", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-32482b838d63cd4d", "level": "note", "message": {"text": "Legacy-named symbol `searchLegacy` in legacy/core/src/memory/MemoryCompactionService.test.ts:13"}, "properties": {"repobilityId": "deddf9fa9fd86ce7", "scanner": "scanner-primary", "fingerprint": "32482b838d63cd4d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-cd092765e4b49a38", "level": "note", "message": {"text": "Legacy-named symbol `searchLegacy` in legacy/core/src/memory/KnowledgeGitService.test.ts:26"}, "properties": {"repobilityId": "dbb3f4143a50ba1b", "scanner": "scanner-primary", "fingerprint": "cd092765e4b49a38", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-dc39ee34a20880c0", "level": "note", "message": {"text": "Legacy-named symbol `_kgs_unused` in legacy/core/src/memory/KnowledgeGitService.ts:59"}, "properties": {"repobilityId": "f335dd369946a63b", "scanner": "scanner-primary", "fingerprint": "dc39ee34a20880c0", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-89f304e6522a86b2", "level": "note", "message": {"text": "Legacy-named symbol `searchLegacy` in legacy/core/src/memory/Reflector.test.ts:15"}, "properties": {"repobilityId": "83e25d6d4c800a67", "scanner": "scanner-primary", "fingerprint": "89f304e6522a86b2", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-b26a25cc9e96a9f9", "level": "note", "message": {"text": "Legacy-named symbol `searchLegacy` in legacy/core/src/memory/manager.ts:229"}, "properties": {"repobilityId": "c6b6e2c79330499e", "scanner": "scanner-primary", "fingerprint": "b26a25cc9e96a9f9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-227efdeadc8d74a2", "level": "note", "message": {"text": "Legacy-named symbol `searchLegacy` in legacy/core/src/memory/scope-permissions.test.ts:26"}, "properties": {"repobilityId": "ecf1bac5b2d5eb1a", "scanner": "scanner-primary", "fingerprint": "227efdeadc8d74a2", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-baccfbd6d8523b65", "level": "none", "message": {"text": "Commented-code block (5 lines) in legacy/core/src/services/vector.service.test.ts:148"}, "properties": {"repobilityId": "4dac705dcbb2e7d9", "scanner": "scanner-primary", "fingerprint": "baccfbd6d8523b65", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-94aade9454e1a9d7", "level": "note", "message": {"text": "Legacy-named symbol `searchLegacy` in legacy/core/src/services/vector.service.ts:444"}, "properties": {"repobilityId": "a5b17f560c63b304", "scanner": "scanner-primary", "fingerprint": "94aade9454e1a9d7", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-a566b0a0bdca19d1", "level": "none", "message": {"text": "Commented-code block (13 lines) in legacy/core/src/channels/adapters/DiscordAdapter.ts:44"}, "properties": {"repobilityId": "3349f4271155e307", "scanner": "scanner-primary", "fingerprint": "a566b0a0bdca19d1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-75522bdefea2079a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 legacy/core/src/skills/adapters/SkillSourceAdapter.ts:20"}, "properties": {"repobilityId": "7e00282cffcaca2c", "scanner": "scanner-primary", "fingerprint": "75522bdefea2079a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-0d4f8cdaa545db1c", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 legacy/core/src/skills/adapters/SkillRegistryService.ts:79"}, "properties": {"repobilityId": "a52029b08735b244", "scanner": "scanner-primary", "fingerprint": "0d4f8cdaa545db1c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-7642b5713f29d9e8", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 legacy/core/src/skills/builtins/manage-agent.ts:111"}, "properties": {"repobilityId": "cda9b6d74d77208d", "scanner": "scanner-primary", "fingerprint": "7642b5713f29d9e8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f2124ef48024eb2e", "level": "note", "message": {"text": "Legacy-named symbol `_kq_unused` in legacy/core/src/skills/builtins/knowledge-query.ts:16"}, "properties": {"repobilityId": "3691dc5aa50e9be7", "scanner": "scanner-primary", "fingerprint": "f2124ef48024eb2e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-1c9cdb6a5c2e91ef", "level": "note", "message": {"text": "Legacy-named symbol `_kd_unused` in legacy/core/src/skills/builtins/knowledge-delete.ts:57"}, "properties": {"repobilityId": "d005e5387868ef6d", "scanner": "scanner-primary", "fingerprint": "1c9cdb6a5c2e91ef", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-0541de765c4dc36e", "level": "note", "message": {"text": "Legacy-named symbol `_ks_unused` in legacy/core/src/skills/builtins/knowledge-store.ts:171"}, "properties": {"repobilityId": "a1dc37b9e3b29fb5", "scanner": "scanner-primary", "fingerprint": "0541de765c4dc36e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-312eeeaac7567653", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 legacy/core/src/skills/builtins/delegate-task.ts:279"}, "properties": {"repobilityId": "7770cee766757c79", "scanner": "scanner-primary", "fingerprint": "312eeeaac7567653", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9ffd7a3efeb82c75", "level": "note", "message": {"text": "Legacy-named symbol `_kr_unused` in legacy/core/src/skills/builtins/knowledge-rewrite.ts:86"}, "properties": {"repobilityId": "df87ff0ea797f03c", "scanner": "scanner-primary", "fingerprint": "9ffd7a3efeb82c75", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-bdaa3bc859084c37", "level": "note", "message": {"text": "Legacy-named symbol `_ku_unused` in legacy/core/src/skills/builtins/knowledge-update.ts:88"}, "properties": {"repobilityId": "b55bb9db3696f563", "scanner": "scanner-primary", "fingerprint": "bdaa3bc859084c37", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-05cc7bb187d77f7e", "level": "none", "message": {"text": "Commented-code block (5 lines) in legacy/core/src/llm/ContextAssembler.ts:153"}, "properties": {"repobilityId": "a6ec72208d8dffce", "scanner": "scanner-primary", "fingerprint": "05cc7bb187d77f7e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7fc0d94d583078ba", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 legacy/core/src/llm/DynamicProviderManager.ts:143"}, "properties": {"repobilityId": "45bee2569082330e", "scanner": "scanner-primary", "fingerprint": "7fc0d94d583078ba", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-0a684b1bb5ce0e34", "level": "none", "message": {"text": "Commented-code block (5 lines) in sdk/typescript/sera-plugin-sdk/scripts/generate-proto.mjs:4"}, "properties": {"repobilityId": "e1eaa7a720a61f0e", "scanner": "scanner-primary", "fingerprint": "0a684b1bb5ce0e34", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-379a33678ae64747", "level": "note", "message": {"text": "77 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "fea0d246d8ef11b9", "scanner": "scanner-primary", "fingerprint": "379a33678ae64747", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "config-drift"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "63d882d4c32ab099", "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": "248f766be0e11555", "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": "0f0c115954344759", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-77c122b8814aadbb", "level": "note", "message": {"text": "Near-duplicate function bodies in 29 places"}, "properties": {"repobilityId": "2700103a197edff6", "scanner": "scanner-primary", "fingerprint": "77c122b8814aadbb", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-77c122b8814aadbb", "level": "note", "message": {"text": "Near-duplicate function bodies in 29 places"}, "properties": {"repobilityId": "1f1b0f648e9bc755", "scanner": "scanner-primary", "fingerprint": "77c122b8814aadbb", "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": "80d72f121a48f348", "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": "bdaef7601447b994", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-00b613bfa4b4b5a6", "level": "warning", "message": {"text": "Frontend route `agents` has no Link/navigate to it \u2014 legacy/web/src/main.tsx"}, "properties": {"repobilityId": "a0ce8deefce62301", "scanner": "scanner-primary", "fingerprint": "00b613bfa4b4b5a6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-0697b47f4845c88d", "level": "warning", "message": {"text": "Frontend route `agents/:id` has no Link/navigate to it \u2014 legacy/web/src/main.tsx"}, "properties": {"repobilityId": "199cc082df15e6c5", "scanner": "scanner-primary", "fingerprint": "0697b47f4845c88d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-e0cd57893344a7eb", "level": "warning", "message": {"text": "Frontend route `chat` has no Link/navigate to it \u2014 legacy/web/src/main.tsx"}, "properties": {"repobilityId": "7d62eb9ef5bfc065", "scanner": "scanner-primary", "fingerprint": "e0cd57893344a7eb", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-39b75c92b2d1eb37", "level": "warning", "message": {"text": "Frontend route `sessions` has no Link/navigate to it \u2014 web/src/main.tsx"}, "properties": {"repobilityId": "503657881ceeb568", "scanner": "scanner-primary", "fingerprint": "39b75c92b2d1eb37", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-0759fc38dfc4a122", "level": "warning", "message": {"text": "Frontend route `sessions/:id` has no Link/navigate to it \u2014 web/src/main.tsx"}, "properties": {"repobilityId": "508c67b81885fa02", "scanner": "scanner-primary", "fingerprint": "0759fc38dfc4a122", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-2313c8fa03f405a6", "level": "warning", "message": {"text": "Frontend route `hooks` has no Link/navigate to it \u2014 web/src/main.tsx"}, "properties": {"repobilityId": "d4cf81764ddb07a1", "scanner": "scanner-primary", "fingerprint": "2313c8fa03f405a6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-823ab7ca3b5f7c09", "level": "warning", "message": {"text": "Frontend route `/auth/callback` has no Link/navigate to it \u2014 legacy/web/src/main.tsx"}, "properties": {"repobilityId": "e7cb4df1051168d2", "scanner": "scanner-primary", "fingerprint": "823ab7ca3b5f7c09", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-6ca2309d45f7c405", "level": "warning", "message": {"text": "Frontend route `templates` has no Link/navigate to it \u2014 legacy/web/src/main.tsx"}, "properties": {"repobilityId": "87a7d73c3b512230", "scanner": "scanner-primary", "fingerprint": "6ca2309d45f7c405", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-79210b72b573c722", "level": "warning", "message": {"text": "Frontend route `agents/:id/memory-graph` has no Link/navigate to it \u2014 legacy/web/src/main.tsx"}, "properties": {"repobilityId": "680f847cb93815df", "scanner": "scanner-primary", "fingerprint": "79210b72b573c722", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-f796bc829387ffce", "level": "warning", "message": {"text": "Frontend route `circles` has no Link/navigate to it \u2014 legacy/web/src/main.tsx"}, "properties": {"repobilityId": "dc9bfdd53bd49124", "scanner": "scanner-primary", "fingerprint": "f796bc829387ffce", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-6efe8a0d754c2d4c", "level": "warning", "message": {"text": "Frontend route `circles/:id` has no Link/navigate to it \u2014 legacy/web/src/main.tsx"}, "properties": {"repobilityId": "44616badbf5ae3f9", "scanner": "scanner-primary", "fingerprint": "6efe8a0d754c2d4c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-5fce93b8c29496ec", "level": "warning", "message": {"text": "Frontend route `insights` has no Link/navigate to it \u2014 legacy/web/src/main.tsx"}, "properties": {"repobilityId": "842cdb07841d9615", "scanner": "scanner-primary", "fingerprint": "5fce93b8c29496ec", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-7e550f216674f8c5", "level": "warning", "message": {"text": "Frontend route `audit` has no Link/navigate to it \u2014 legacy/web/src/main.tsx"}, "properties": {"repobilityId": "2faebe6cf3f906ef", "scanner": "scanner-primary", "fingerprint": "7e550f216674f8c5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-617a1bb1591207d0", "level": "warning", "message": {"text": "Frontend route `health` has no Link/navigate to it \u2014 legacy/web/src/main.tsx"}, "properties": {"repobilityId": "649d35c95931942f", "scanner": "scanner-primary", "fingerprint": "617a1bb1591207d0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-6abdf532120f10dd", "level": "warning", "message": {"text": "Frontend route `schedules` has no Link/navigate to it \u2014 legacy/web/src/main.tsx"}, "properties": {"repobilityId": "576ecfbb74ba4559", "scanner": "scanner-primary", "fingerprint": "6abdf532120f10dd", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-effd4cf734f39443", "level": "warning", "message": {"text": "Frontend route `settings` has no Link/navigate to it \u2014 legacy/web/src/main.tsx"}, "properties": {"repobilityId": "946f43c128f9d716", "scanner": "scanner-primary", "fingerprint": "effd4cf734f39443", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-a740326a1cc919e6", "level": "warning", "message": {"text": "Frontend route `mcp-servers` has no Link/navigate to it \u2014 legacy/web/src/main.tsx"}, "properties": {"repobilityId": "83ab4fe489365cc0", "scanner": "scanner-primary", "fingerprint": "a740326a1cc919e6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-48e71aa2f00d3e08", "level": "warning", "message": {"text": "Frontend route `operator-requests` has no Link/navigate to it \u2014 legacy/web/src/main.tsx"}, "properties": {"repobilityId": "29b35a1e53985ad9", "scanner": "scanner-primary", "fingerprint": "48e71aa2f00d3e08", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-07e62d539da6ec5f", "level": "warning", "message": {"text": "Frontend route `channels` has no Link/navigate to it \u2014 legacy/web/src/main.tsx"}, "properties": {"repobilityId": "d643364aae97f6d5", "scanner": "scanner-primary", "fingerprint": "07e62d539da6ec5f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-5440f751adb7450b", "level": "warning", "message": {"text": "Frontend route `providers` has no Link/navigate to it \u2014 legacy/web/src/main.tsx"}, "properties": {"repobilityId": "c63a3804224666fe", "scanner": "scanner-primary", "fingerprint": "5440f751adb7450b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-21f01ab109441830", "level": "warning", "message": {"text": "Frontend route `memory` has no Link/navigate to it \u2014 legacy/web/src/main.tsx"}, "properties": {"repobilityId": "c2164615d50dc7eb", "scanner": "scanner-primary", "fingerprint": "21f01ab109441830", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-bea21726ce3981fd", "level": "warning", "message": {"text": "Frontend route `memory/:id` has no Link/navigate to it \u2014 legacy/web/src/main.tsx"}, "properties": {"repobilityId": "1657691d131bbd83", "scanner": "scanner-primary", "fingerprint": "bea21726ce3981fd", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-bf8024eac3113eba", "level": "warning", "message": {"text": "Frontend route `introspection` has no Link/navigate to it \u2014 legacy/web/src/main.tsx"}, "properties": {"repobilityId": "4cb5f52d233aebd4", "scanner": "scanner-primary", "fingerprint": "bf8024eac3113eba", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-dc76389d9ce7e382", "level": "warning", "message": {"text": "Frontend route `orchestration` has no Link/navigate to it \u2014 legacy/web/src/main.tsx"}, "properties": {"repobilityId": "a3813c31bb2606e0", "scanner": "scanner-primary", "fingerprint": "dc76389d9ce7e382", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-a9aec73bb64cb0a0", "level": "warning", "message": {"text": "Frontend route `403` has no Link/navigate to it \u2014 legacy/web/src/main.tsx"}, "properties": {"repobilityId": "e74083edc4504172", "scanner": "scanner-primary", "fingerprint": "a9aec73bb64cb0a0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-c980e938eec38aca", "level": "error", "message": {"text": "Dangling fetch: POST /providers/${encodeURIComponent(modelName)}/test (legacy/web/src/components/providers/TestConnectionButton.tsx:13)"}, "properties": {"repobilityId": "eb2565cac242e82c", "scanner": "scanner-primary", "fingerprint": "c980e938eec38aca", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-0e722fdcde2fcf7a", "level": "error", "message": {"text": "Dangling fetch: POST /api/auth/logout (legacy/web/src/contexts/AuthContext.tsx:43)"}, "properties": {"repobilityId": "cfdd989d86f8ccf1", "scanner": "scanner-primary", "fingerprint": "0e722fdcde2fcf7a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-296c4e18654bb89a", "level": "error", "message": {"text": "Dangling fetch: POST /api/auth/oidc/callback (legacy/web/src/app/auth/callback/page.tsx:46)"}, "properties": {"repobilityId": "03e3ea49879dc471", "scanner": "scanner-primary", "fingerprint": "296c4e18654bb89a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ecf75b8cb7134ecc", "level": "error", "message": {"text": "Dangling fetch: GET /sessions (legacy/web/src/app/dashboard/page.tsx:42)"}, "properties": {"repobilityId": "6d356c1fbcb0e468", "scanner": "scanner-primary", "fingerprint": "ecf75b8cb7134ecc", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-eff40d833b979359", "level": "error", "message": {"text": "Dangling fetch: POST /system/circuit-breakers/${encodeURIComponent(provider)}/reset (legacy/web/src/lib/api/health.ts:16)"}, "properties": {"repobilityId": "45eebc6408875190", "scanner": "scanner-primary", "fingerprint": "eff40d833b979359", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-12a04c58ce961773", "level": "error", "message": {"text": "Dangling fetch: POST /intercom/publish (legacy/web/src/lib/api/intercom.ts:10)"}, "properties": {"repobilityId": "53d666912a53b82d", "scanner": "scanner-primary", "fingerprint": "12a04c58ce961773", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-2ce47a910a9e090f", "level": "error", "message": {"text": "Dangling fetch: POST /intercom/dm (legacy/web/src/lib/api/intercom.ts:21)"}, "properties": {"repobilityId": "9532c7e78b080f0c", "scanner": "scanner-primary", "fingerprint": "2ce47a910a9e090f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-af84eec5b7ff6cb0", "level": "error", "message": {"text": "Dangling fetch: GET /intercom/history?${params.toString()} (legacy/web/src/lib/api/intercom.ts:33)"}, "properties": {"repobilityId": "4dec067416a367b7", "scanner": "scanner-primary", "fingerprint": "af84eec5b7ff6cb0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-a0ce092697ddd47d", "level": "error", "message": {"text": "Dangling fetch: GET /intercom/channels?${params.toString()} (legacy/web/src/lib/api/intercom.ts:38)"}, "properties": {"repobilityId": "78e29a39ca27b15d", "scanner": "scanner-primary", "fingerprint": "a0ce092697ddd47d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-c3934c5078f501c9", "level": "error", "message": {"text": "Dangling fetch: GET /agents/${encodeURIComponent(agentId)}/tasks${params} (legacy/web/src/lib/api/orchestration.ts:14)"}, "properties": {"repobilityId": "0f189c2a2890732e", "scanner": "scanner-primary", "fingerprint": "c3934c5078f501c9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-fdd08f7d71fdc7b5", "level": "error", "message": {"text": "Dangling fetch: POST /agents/${encodeURIComponent(agentId)}/tasks (legacy/web/src/lib/api/orchestration.ts:22)"}, "properties": {"repobilityId": "bbc1ee465e2231f4", "scanner": "scanner-primary", "fingerprint": "fdd08f7d71fdc7b5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-906f661b9de3ff62", "level": "error", "message": {"text": "Dangling fetch: GET /mcp-servers (legacy/web/src/lib/api/mcp.ts:22)"}, "properties": {"repobilityId": "63fa71be19e25283", "scanner": "scanner-primary", "fingerprint": "906f661b9de3ff62", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-7490495844318785", "level": "error", "message": {"text": "Dangling fetch: GET /mcp-servers/${encodeURIComponent(name)} (legacy/web/src/lib/api/mcp.ts:26)"}, "properties": {"repobilityId": "a3ab41a7e08d3f91", "scanner": "scanner-primary", "fingerprint": "7490495844318785", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-5237668ee794ce27", "level": "error", "message": {"text": "Dangling fetch: GET /mcp-servers/${encodeURIComponent(name)}/health (legacy/web/src/lib/api/mcp.ts:30)"}, "properties": {"repobilityId": "b3580978bb2a39a0", "scanner": "scanner-primary", "fingerprint": "5237668ee794ce27", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-4b0153baef819bb6", "level": "error", "message": {"text": "Dangling fetch: POST /mcp-servers/${encodeURIComponent(name)}/reload (legacy/web/src/lib/api/mcp.ts:34)"}, "properties": {"repobilityId": "f6232bcfa7b21cd7", "scanner": "scanner-primary", "fingerprint": "4b0153baef819bb6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-a51998ac29cfb803", "level": "error", "message": {"text": "Dangling fetch: POST /mcp-servers (legacy/web/src/lib/api/mcp.ts:41)"}, "properties": {"repobilityId": "5e6cd3217146aaba", "scanner": "scanner-primary", "fingerprint": "a51998ac29cfb803", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-b9a918f1f69dba60", "level": "error", "message": {"text": "Dangling fetch: DELETE /mcp-servers/${encodeURIComponent(name)} (legacy/web/src/lib/api/mcp.ts:48)"}, "properties": {"repobilityId": "027f981502688856", "scanner": "scanner-primary", "fingerprint": "b9a918f1f69dba60", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-703fcd34ec357c52", "level": "error", "message": {"text": "Dangling fetch: PATCH /channels/${encodeURIComponent(id)} (legacy/web/src/lib/api/notifications.ts:58)"}, "properties": {"repobilityId": "86a476b334fbd635", "scanner": "scanner-primary", "fingerprint": "703fcd34ec357c52", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-8acf99a5bcc55aa7", "level": "error", "message": {"text": "Dangling fetch: DELETE /channels/${encodeURIComponent(id)} (legacy/web/src/lib/api/notifications.ts:65)"}, "properties": {"repobilityId": "7290cce58b608905", "scanner": "scanner-primary", "fingerprint": "8acf99a5bcc55aa7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-f445e42cf3d7c9ab", "level": "error", "message": {"text": "Dangling fetch: POST /channels/${encodeURIComponent(id)}/test (legacy/web/src/lib/api/notifications.ts:71)"}, "properties": {"repobilityId": "8d8f504eb46844b9", "scanner": "scanner-primary", "fingerprint": "f445e42cf3d7c9ab", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-53a47f61847a5040", "level": "error", "message": {"text": "Dangling fetch: GET /notifications/routing (legacy/web/src/lib/api/notifications.ts:77)"}, "properties": {"repobilityId": "5a012e4e92d6224f", "scanner": "scanner-primary", "fingerprint": "53a47f61847a5040", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-9a7d5de7bd541242", "level": "error", "message": {"text": "Dangling fetch: POST /notifications/routing (legacy/web/src/lib/api/notifications.ts:81)"}, "properties": {"repobilityId": "9bdc67532c52e887", "scanner": "scanner-primary", "fingerprint": "9a7d5de7bd541242", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-f2cb6b466cbfcf1d", "level": "error", "message": {"text": "Dangling fetch: PATCH /notifications/routing/${encodeURIComponent(id)} (legacy/web/src/lib/api/notifications.ts:91)"}, "properties": {"repobilityId": "181bedd92a9749c5", "scanner": "scanner-primary", "fingerprint": "f2cb6b466cbfcf1d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-583229cc396505e1", "level": "error", "message": {"text": "Dangling fetch: DELETE /notifications/routing/${encodeURIComponent(id)} (legacy/web/src/lib/api/notifications.ts:98)"}, "properties": {"repobilityId": "fb84d285eda4016a", "scanner": "scanner-primary", "fingerprint": "583229cc396505e1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-987cb9c27dab7640", "level": "error", "message": {"text": "Dangling fetch: GET /channels/${encodeURIComponent(id)}/health (legacy/web/src/lib/api/notifications.ts:109)"}, "properties": {"repobilityId": "e2875c061af244db", "scanner": "scanner-primary", "fingerprint": "987cb9c27dab7640", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-68b7dc172527bf1b", "level": "error", "message": {"text": "Dangling fetch: GET /circles (legacy/web/src/lib/api/circles.ts:5)"}, "properties": {"repobilityId": "9204ae6daf3a2730", "scanner": "scanner-primary", "fingerprint": "68b7dc172527bf1b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-e41ae2081810cc65", "level": "error", "message": {"text": "Dangling fetch: POST /circles (legacy/web/src/lib/api/circles.ts:11)"}, "properties": {"repobilityId": "926b109d60a92584", "scanner": "scanner-primary", "fingerprint": "e41ae2081810cc65", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-fa6ebc7bfb285026", "level": "error", "message": {"text": "Dangling fetch: GET /circles/${encodeURIComponent(name)} (legacy/web/src/lib/api/circles.ts:18)"}, "properties": {"repobilityId": "6e325ffd169e6367", "scanner": "scanner-primary", "fingerprint": "fa6ebc7bfb285026", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-281dc337d935a261", "level": "error", "message": {"text": "Dangling fetch: PUT /circles/${encodeURIComponent(name)} (legacy/web/src/lib/api/circles.ts:25)"}, "properties": {"repobilityId": "cf12e6c21da54598", "scanner": "scanner-primary", "fingerprint": "281dc337d935a261", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-1285306c99e7a40c", "level": "error", "message": {"text": "Dangling fetch: DELETE /circles/${encodeURIComponent(name)} (legacy/web/src/lib/api/circles.ts:32)"}, "properties": {"repobilityId": "8d14a240743c80da", "scanner": "scanner-primary", "fingerprint": "1285306c99e7a40c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-336382c7fa66fb08", "level": "error", "message": {"text": "Dangling fetch: PUT /circles/${encodeURIComponent(name)}/context (legacy/web/src/lib/api/circles.ts:38)"}, "properties": {"repobilityId": "ecc984c8cb63d835", "scanner": "scanner-primary", "fingerprint": "336382c7fa66fb08", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-250dbf1492ac9aa5", "level": "error", "message": {"text": "Dangling fetch: POST /providers (legacy/web/src/lib/api/providers.ts:13)"}, "properties": {"repobilityId": "6dd98af45c16a6f3", "scanner": "scanner-primary", "fingerprint": "250dbf1492ac9aa5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-8f7e7634e248c89b", "level": "error", "message": {"text": "Dangling fetch: DELETE /providers/${encodeURIComponent(name)} (legacy/web/src/lib/api/providers.ts:20)"}, "properties": {"repobilityId": "a3df28abfe707ef7", "scanner": "scanner-primary", "fingerprint": "8f7e7634e248c89b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-a3398fa8fbfc987b", "level": "error", "message": {"text": "Dangling fetch: GET /providers/list (legacy/web/src/lib/api/providers.ts:26)"}, "properties": {"repobilityId": "3b560b2a9fb6197c", "scanner": "scanner-primary", "fingerprint": "a3398fa8fbfc987b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-abb79bd23012ce59", "level": "error", "message": {"text": "Dangling fetch: PUT /providers/${encodeURIComponent(id)} (legacy/web/src/lib/api/providers.ts:33)"}, "properties": {"repobilityId": "2462bae902714b10", "scanner": "scanner-primary", "fingerprint": "abb79bd23012ce59", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-257ef6669fecf6b1", "level": "error", "message": {"text": "Dangling fetch: PATCH /providers/${encodeURIComponent(modelName)} (legacy/web/src/lib/api/providers.ts:53)"}, "properties": {"repobilityId": "c9917c209f4edcfa", "scanner": "scanner-primary", "fingerprint": "257ef6669fecf6b1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-b0f5909252442079", "level": "error", "message": {"text": "Dangling fetch: POST /providers/${encodeURIComponent(id)}/test (legacy/web/src/lib/api/providers.ts:62)"}, "properties": {"repobilityId": "703dae6e294606fd", "scanner": "scanner-primary", "fingerprint": "b0f5909252442079", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-97334c59edfb9431", "level": "error", "message": {"text": "Dangling fetch: PUT /providers/default-model (legacy/web/src/lib/api/providers.ts:70)"}, "properties": {"repobilityId": "45a397c30d84e1b0", "scanner": "scanner-primary", "fingerprint": "97334c59edfb9431", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-d346599b72d91919", "level": "error", "message": {"text": "Dangling fetch: GET /providers/dynamic (legacy/web/src/lib/api/providers.ts:118)"}, "properties": {"repobilityId": "4fd8952e393d1651", "scanner": "scanner-primary", "fingerprint": "d346599b72d91919", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-456d5d312405fc52", "level": "error", "message": {"text": "Dangling fetch: GET /providers/dynamic/statuses (legacy/web/src/lib/api/providers.ts:122)"}, "properties": {"repobilityId": "cbde3015502d6430", "scanner": "scanner-primary", "fingerprint": "456d5d312405fc52", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-5bdf919c640a9b61", "level": "error", "message": {"text": "Dangling fetch: POST /providers/dynamic (legacy/web/src/lib/api/providers.ts:126)"}, "properties": {"repobilityId": "4a3ebe0dda71f4cd", "scanner": "scanner-primary", "fingerprint": "5bdf919c640a9b61", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-df2232f4704ada3b", "level": "error", "message": {"text": "Dangling fetch: DELETE /providers/dynamic/${encodeURIComponent(id)} (legacy/web/src/lib/api/providers.ts:133)"}, "properties": {"repobilityId": "5d1617b4b363ca39", "scanner": "scanner-primary", "fingerprint": "df2232f4704ada3b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-f2d1c28bb46dc957", "level": "error", "message": {"text": "Dangling fetch: POST /providers/dynamic/test (legacy/web/src/lib/api/providers.ts:142)"}, "properties": {"repobilityId": "b258e2eff25a5e66", "scanner": "scanner-primary", "fingerprint": "f2d1c28bb46dc957", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-31c0fc196072f67c", "level": "error", "message": {"text": "Dangling fetch: GET /providers/templates (legacy/web/src/lib/api/providers.ts:165)"}, "properties": {"repobilityId": "de18b55ab338210f", "scanner": "scanner-primary", "fingerprint": "31c0fc196072f67c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-bb101a6da7a2b6f3", "level": "error", "message": {"text": "Dangling fetch: GET /providers/health-all (legacy/web/src/lib/api/providers.ts:180)"}, "properties": {"repobilityId": "3ca7a3386739b6e9", "scanner": "scanner-primary", "fingerprint": "bb101a6da7a2b6f3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-eb5fe017922b57bb", "level": "error", "message": {"text": "Dangling fetch: POST /providers (legacy/web/src/lib/api/providers.ts:196)"}, "properties": {"repobilityId": "63101304e595a363", "scanner": "scanner-primary", "fingerprint": "eb5fe017922b57bb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-4f75366cbca348c7", "level": "error", "message": {"text": "Dangling fetch: GET /providers/default-model (legacy/web/src/lib/api/providers.ts:205)"}, "properties": {"repobilityId": "821cecc4942aa856", "scanner": "scanner-primary", "fingerprint": "4f75366cbca348c7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-879d074551ec34b8", "level": "error", "message": {"text": "Dangling fetch: PUT /providers/default-model (legacy/web/src/lib/api/providers.ts:211)"}, "properties": {"repobilityId": "57caba10285179eb", "scanner": "scanner-primary", "fingerprint": "879d074551ec34b8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-3c2092343e929fa9", "level": "error", "message": {"text": "Dangling fetch: GET /skills (legacy/web/src/lib/api/skills.ts:5)"}, "properties": {"repobilityId": "c5062422d1c34e2d", "scanner": "scanner-primary", "fingerprint": "3c2092343e929fa9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-0c33c68e4e071427", "level": "error", "message": {"text": "Dangling fetch: POST /skills (legacy/web/src/lib/api/skills.ts:9)"}, "properties": {"repobilityId": "8eccc507f726acce", "scanner": "scanner-primary", "fingerprint": "0c33c68e4e071427", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-26da272ec50e8a34", "level": "error", "message": {"text": "Dangling fetch: DELETE /skills/${encodeURIComponent(name)} (legacy/web/src/lib/api/skills.ts:16)"}, "properties": {"repobilityId": "0d047c0f2754b707", "scanner": "scanner-primary", "fingerprint": "26da272ec50e8a34", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-2f2ce7dcf8549d4e", "level": "error", "message": {"text": "Dangling fetch: GET /skills/registry/search?${params.toString()} (legacy/web/src/lib/api/skills.ts:25)"}, "properties": {"repobilityId": "b43bcd3c6b3d7b25", "scanner": "scanner-primary", "fingerprint": "2f2ce7dcf8549d4e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-bb3164d5ce8f3ede", "level": "error", "message": {"text": "Dangling fetch: POST /skills/import (legacy/web/src/lib/api/skills.ts:29)"}, "properties": {"repobilityId": "77991a487713f68f", "scanner": "scanner-primary", "fingerprint": "bb3164d5ce8f3ede", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-ce60143fe57f051f", "level": "error", "message": {"text": "Dangling fetch: POST /schedules (legacy/web/src/lib/api/schedules.ts:20)"}, "properties": {"repobilityId": "2878a5660d3d81f7", "scanner": "scanner-primary", "fingerprint": "ce60143fe57f051f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-29f7252be718cfd2", "level": "error", "message": {"text": "Dangling fetch: PATCH /schedules/${encodeURIComponent(id)} (legacy/web/src/lib/api/schedules.ts:33)"}, "properties": {"repobilityId": "7ba79585d19d801f", "scanner": "scanner-primary", "fingerprint": "29f7252be718cfd2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-06103f3b4fe1cb01", "level": "error", "message": {"text": "Dangling fetch: DELETE /schedules/${encodeURIComponent(id)} (legacy/web/src/lib/api/schedules.ts:40)"}, "properties": {"repobilityId": "df5daff99d629c23", "scanner": "scanner-primary", "fingerprint": "06103f3b4fe1cb01", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-405df2b0ff065dfa", "level": "error", "message": {"text": "Dangling fetch: POST /schedules/${encodeURIComponent(id)}/trigger${query} (legacy/web/src/lib/api/schedules.ts:50)"}, "properties": {"repobilityId": "e828b7fafbc77c6d", "scanner": "scanner-primary", "fingerprint": "405df2b0ff065dfa", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-2b65d62d61b20404", "level": "error", "message": {"text": "Dangling fetch: GET /embedding/config (legacy/web/src/lib/api/embedding.ts:50)"}, "properties": {"repobilityId": "d625597ea494ce99", "scanner": "scanner-primary", "fingerprint": "2b65d62d61b20404", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-826e08b5677390b4", "level": "error", "message": {"text": "Dangling fetch: PUT /embedding/config (legacy/web/src/lib/api/embedding.ts:59)"}, "properties": {"repobilityId": "4342f6ead265d21c", "scanner": "scanner-primary", "fingerprint": "826e08b5677390b4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-7d320306393d00db", "level": "error", "message": {"text": "Dangling fetch: POST /embedding/test (legacy/web/src/lib/api/embedding.ts:63)"}, "properties": {"repobilityId": "730f974398a247ff", "scanner": "scanner-primary", "fingerprint": "7d320306393d00db", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-0a3c3093d458d384", "level": "error", "message": {"text": "Dangling fetch: GET /embedding/status (legacy/web/src/lib/api/embedding.ts:81)"}, "properties": {"repobilityId": "840856ba33e1e3cd", "scanner": "scanner-primary", "fingerprint": "0a3c3093d458d384", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-3206a8acad408173", "level": "error", "message": {"text": "Dangling fetch: GET /embedding/known-models (legacy/web/src/lib/api/embedding.ts:85)"}, "properties": {"repobilityId": "8b92564a36e88a8e", "scanner": "scanner-primary", "fingerprint": "3206a8acad408173", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-2949926ad3f9e557", "level": "error", "message": {"text": "Dangling fetch: POST /delegation/issue (legacy/web/src/lib/api/delegation.ts:16)"}, "properties": {"repobilityId": "2883891f22949bd3", "scanner": "scanner-primary", "fingerprint": "2949926ad3f9e557", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-96944090ed5453fa", "level": "error", "message": {"text": "Dangling fetch: GET /audit/verify (legacy/web/src/lib/api/audit.ts:63)"}, "properties": {"repobilityId": "27411931de8afff7", "scanner": "scanner-primary", "fingerprint": "96944090ed5453fa", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-20371a70a1e164e8", "level": "error", "message": {"text": "Dangling fetch: POST /execute (legacy/web/src/lib/api/chat.ts:45)"}, "properties": {"repobilityId": "2b2c6f32422e9f3f", "scanner": "scanner-primary", "fingerprint": "20371a70a1e164e8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-9d7420bed7a5502f", "level": "error", "message": {"text": "Dangling fetch: GET /operator-requests${params} (legacy/web/src/lib/api/operator-requests.ts:18)"}, "properties": {"repobilityId": "d6e44ec06540bbb7", "scanner": "scanner-primary", "fingerprint": "9d7420bed7a5502f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-1694a65c3cde73ca", "level": "error", "message": {"text": "Dangling fetch: POST /operator-requests/${encodeURIComponent(id)}/respond (legacy/web/src/lib/api/operator-requests.ts:26)"}, "properties": {"repobilityId": "f7a65db6b685c41c", "scanner": "scanner-primary", "fingerprint": "1694a65c3cde73ca", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-298692e091651ee1", "level": "error", "message": {"text": "Dangling fetch: GET /agents/instances/${encodeURIComponent(id)} (legacy/web/src/lib/api/agents.ts:27)"}, "properties": {"repobilityId": "ca1949bd3f07ef6a", "scanner": "scanner-primary", "fingerprint": "298692e091651ee1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-3fee19c8a0715789", "level": "error", "message": {"text": "Dangling fetch: POST /agents/instances (legacy/web/src/lib/api/agents.ts:31)"}, "properties": {"repobilityId": "ad3de35ff4e9c09a", "scanner": "scanner-primary", "fingerprint": "3fee19c8a0715789", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-2eeb85203380b1e9", "level": "error", "message": {"text": "Dangling fetch: POST /agents/instances/${encodeURIComponent(id)}/start (legacy/web/src/lib/api/agents.ts:38)"}, "properties": {"repobilityId": "9a338a29ed1f07e9", "scanner": "scanner-primary", "fingerprint": "2eeb85203380b1e9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-bf01dcbb5b04e3bf", "level": "error", "message": {"text": "Dangling fetch: POST /agents/instances/${encodeURIComponent(id)}/stop (legacy/web/src/lib/api/agents.ts:44)"}, "properties": {"repobilityId": "ba9dbb8faba49311", "scanner": "scanner-primary", "fingerprint": "bf01dcbb5b04e3bf", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-8ba8a8c62141223a", "level": "error", "message": {"text": "Dangling fetch: PATCH /agents/instances/${encodeURIComponent(id)} (legacy/web/src/lib/api/agents.ts:59)"}, "properties": {"repobilityId": "fae938766c2351bc", "scanner": "scanner-primary", "fingerprint": "8ba8a8c62141223a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-817ee92beb2adf92", "level": "error", "message": {"text": "Dangling fetch: DELETE /agents/instances/${encodeURIComponent(id)} (legacy/web/src/lib/api/agents.ts:66)"}, "properties": {"repobilityId": "986395a2f4992173", "scanner": "scanner-primary", "fingerprint": "817ee92beb2adf92", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-ac4d3d3f8134be0b", "level": "error", "message": {"text": "Dangling fetch: POST /agents/validate (legacy/web/src/lib/api/agents.ts:78)"}, "properties": {"repobilityId": "4edb5f823f80a6c4", "scanner": "scanner-primary", "fingerprint": "ac4d3d3f8134be0b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-98291c0fe7ca13c4", "level": "error", "message": {"text": "Dangling fetch: GET /memory/${encodeURIComponent(id)}/blocks${params} (legacy/web/src/lib/api/agents.ts:92)"}, "properties": {"repobilityId": "0f92f78730e0ced2", "scanner": "scanner-primary", "fingerprint": "98291c0fe7ca13c4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-b868d3954b9cae45", "level": "error", "message": {"text": "Dangling fetch: GET /schedules?agentId=${encodeURIComponent(id)} (legacy/web/src/lib/api/agents.ts:97)"}, "properties": {"repobilityId": "6c65d863ec9ab1bd", "scanner": "scanner-primary", "fingerprint": "b868d3954b9cae45", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-87ff57280073f567", "level": "error", "message": {"text": "Dangling fetch: GET /agents/${encodeURIComponent(id)}/tasks${params} (legacy/web/src/lib/api/agents.ts:114)"}, "properties": {"repobilityId": "4a0eb9a48a333406", "scanner": "scanner-primary", "fingerprint": "87ff57280073f567", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-2713fe3de1549ef2", "level": "error", "message": {"text": "Dangling fetch: POST /agents/${encodeURIComponent(agentId)}/tasks/${encodeURIComponent(taskId)}/cancel (legacy/web/src/lib/api/agents.ts:118)"}, "properties": {"repobilityId": "8cda17ea813670b4", "scanner": "scanner-primary", "fingerprint": "2713fe3de1549ef2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-cf586b52b2c3a755", "level": "error", "message": {"text": "Dangling fetch: POST /agents/${encodeURIComponent(agentId)}/tasks/clear-stale${params} (legacy/web/src/lib/api/agents.ts:126)"}, "properties": {"repobilityId": "bac6124445e72f37", "scanner": "scanner-primary", "fingerprint": "cf586b52b2c3a755", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-b9483e1b2d9708f7", "level": "error", "message": {"text": "Dangling fetch: POST /agents/${encodeURIComponent(id)}/tasks (legacy/web/src/lib/api/agents.ts:133)"}, "properties": {"repobilityId": "2b3242cc7a329233", "scanner": "scanner-primary", "fingerprint": "b9483e1b2d9708f7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-21719d5ddecc0c03", "level": "error", "message": {"text": "Dangling fetch: GET /agents/${encodeURIComponent(id)}/thoughts${params} (legacy/web/src/lib/api/agents.ts:141)"}, "properties": {"repobilityId": "b489664a193bd942", "scanner": "scanner-primary", "fingerprint": "21719d5ddecc0c03", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-3c1f35fc56ae5a29", "level": "error", "message": {"text": "Dangling fetch: POST /agents/${encodeURIComponent(id)}/grants (legacy/web/src/lib/api/agents.ts:165)"}, "properties": {"repobilityId": "a4033d2a2b350227", "scanner": "scanner-primary", "fingerprint": "3c1f35fc56ae5a29", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-0a53ff2fb7e05e65", "level": "error", "message": {"text": "Dangling fetch: DELETE /agents/${encodeURIComponent(id)}/grants/${encodeURIComponent(grantId)} (legacy/web/src/lib/api/agents.ts:172)"}, "properties": {"repobilityId": "81e94718b989ceda", "scanner": "scanner-primary", "fingerprint": "0a53ff2fb7e05e65", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-92ae4f3d04bbd3af", "level": "error", "message": {"text": "Dangling fetch: GET /permission-requests${params} (legacy/web/src/lib/api/agents.ts:181)"}, "properties": {"repobilityId": "c54cf50b5ed0191a", "scanner": "scanner-primary", "fingerprint": "92ae4f3d04bbd3af", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-16a8f82700916b8c", "level": "error", "message": {"text": "Dangling fetch: POST /permission-requests/${encodeURIComponent(requestId)}/decision (legacy/web/src/lib/api/agents.ts:188)"}, "properties": {"repobilityId": "72e2aedb91089aeb", "scanner": "scanner-primary", "fingerprint": "16a8f82700916b8c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-ede3d4e22a53a8d6", "level": "error", "message": {"text": "Dangling fetch: GET /agents/${encodeURIComponent(agentId)}/template-diff (legacy/web/src/lib/api/agents.ts:197)"}, "properties": {"repobilityId": "2487864bbd39883d", "scanner": "scanner-primary", "fingerprint": "ede3d4e22a53a8d6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-a89b9059ad8a953f", "level": "error", "message": {"text": "Dangling fetch: POST /agents/${encodeURIComponent(agentId)}/apply-template-update (legacy/web/src/lib/api/agents.ts:204)"}, "properties": {"repobilityId": "ccd48375b6dd3081", "scanner": "scanner-primary", "fingerprint": "a89b9059ad8a953f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-fc6be8ea6a5247a1", "level": "error", "message": {"text": "Dangling fetch: GET /agents/${encodeURIComponent(id)}/health-check (legacy/web/src/lib/api/agents.ts:237)"}, "properties": {"repobilityId": "d17aa18c12a1b919", "scanner": "scanner-primary", "fingerprint": "fc6be8ea6a5247a1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-30cb0b090bacb4b1", "level": "error", "message": {"text": "Dangling fetch: GET /agents/${encodeURIComponent(id)}/system-prompt (legacy/web/src/lib/api/agents.ts:241)"}, "properties": {"repobilityId": "2a7e2f469893b3e8", "scanner": "scanner-primary", "fingerprint": "30cb0b090bacb4b1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-0dc1db74458a7093", "level": "error", "message": {"text": "Dangling fetch: GET /sessions?agentInstanceId=${encodeURIComponent(agentId)} (legacy/web/src/lib/api/agents.ts:251)"}, "properties": {"repobilityId": "b03cfe2763382ffc", "scanner": "scanner-primary", "fingerprint": "0dc1db74458a7093", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-3d3abacc3e27c588", "level": "error", "message": {"text": "Dangling fetch: POST /agents/${encodeURIComponent(agentId)}/skip-template-update (legacy/web/src/lib/api/agents.ts:255)"}, "properties": {"repobilityId": "9af34f0b16218253", "scanner": "scanner-primary", "fingerprint": "3d3abacc3e27c588", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-c10fb25a7181bab3", "level": "error", "message": {"text": "Dangling fetch: GET /agents/pending-updates (legacy/web/src/lib/api/agents.ts:271)"}, "properties": {"repobilityId": "a2be6cfa1d890062", "scanner": "scanner-primary", "fingerprint": "c10fb25a7181bab3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-ab9031402b53986d", "level": "error", "message": {"text": "Dangling fetch: POST /memory/blocks/${encodeURIComponent(type)} (legacy/web/src/lib/api/memory.ts:14)"}, "properties": {"repobilityId": "1291351d973055ed", "scanner": "scanner-primary", "fingerprint": "ab9031402b53986d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-50765d24dcacb15d", "level": "error", "message": {"text": "Dangling fetch: PUT /memory/${encodeURIComponent(agentId)}/blocks/${encodeURIComponent(blockId)} (legacy/web/src/lib/api/memory.ts:69)"}, "properties": {"repobilityId": "c9b7f0242b559043", "scanner": "scanner-primary", "fingerprint": "50765d24dcacb15d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-8fdd0264d219ba6e", "level": "error", "message": {"text": "Dangling fetch: DELETE /memory/${encodeURIComponent(agentId)}/blocks/${encodeURIComponent(blockId)} (legacy/web/src/lib/api/memory.ts:76)"}, "properties": {"repobilityId": "147791d2e97a8aca", "scanner": "scanner-primary", "fingerprint": "8fdd0264d219ba6e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-b770d697c11c0139", "level": "error", "message": {"text": "Dangling fetch: POST /memory/${encodeURIComponent(agentId)}/compact (legacy/web/src/lib/api/memory.ts:83)"}, "properties": {"repobilityId": "3cd7b3db7ec812ce", "scanner": "scanner-primary", "fingerprint": "b770d697c11c0139", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-c05540a60fdd6ae0", "level": "error", "message": {"text": "Dangling fetch: GET /memory/${encodeURIComponent(agentId)}/stats (legacy/web/src/lib/api/memory.ts:87)"}, "properties": {"repobilityId": "f9b0ca6e236f597a", "scanner": "scanner-primary", "fingerprint": "c05540a60fdd6ae0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-6eb2b7a36f6c1916", "level": "error", "message": {"text": "Dangling fetch: GET /memory/${encodeURIComponent(agentId)}/graph (legacy/web/src/lib/api/memory.ts:91)"}, "properties": {"repobilityId": "66849766039c963c", "scanner": "scanner-primary", "fingerprint": "6eb2b7a36f6c1916", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-60659454d5cfcddc", "level": "error", "message": {"text": "Dangling fetch: GET /memory/${encodeURIComponent(agentId)}/links${qs} (legacy/web/src/lib/api/memory.ts:99)"}, "properties": {"repobilityId": "17fb15762a56be26", "scanner": "scanner-primary", "fingerprint": "60659454d5cfcddc", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-d54b7af0c025ea27", "level": "error", "message": {"text": "Dangling fetch: POST /memory/${encodeURIComponent(agentId)}/blocks/${encodeURIComponent(blockId)}/promote (legacy/web/src/lib/api/memory.ts:119)"}, "properties": {"repobilityId": "4409b5b7766ba641", "scanner": "scanner-primary", "fingerprint": "d54b7af0c025ea27", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-02ee31489b099346", "level": "error", "message": {"text": "Dangling fetch: GET /memory/overview (legacy/web/src/lib/api/memory.ts:164)"}, "properties": {"repobilityId": "b586601dfb9b288e", "scanner": "scanner-primary", "fingerprint": "02ee31489b099346", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-e5af50ff65251adb", "level": "error", "message": {"text": "Dangling fetch: GET /memory/recent${qs} (legacy/web/src/lib/api/memory.ts:169)"}, "properties": {"repobilityId": "bf871f40707607cf", "scanner": "scanner-primary", "fingerprint": "e5af50ff65251adb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-3584727030cf2342", "level": "error", "message": {"text": "Dangling fetch: GET /memory/search?${params.toString()} (legacy/web/src/lib/api/memory.ts:175)"}, "properties": {"repobilityId": "81035c8ab5e52d09", "scanner": "scanner-primary", "fingerprint": "3584727030cf2342", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-516a7875e61c23ab", "level": "error", "message": {"text": "Dangling fetch: GET /memory/explorer-graph (legacy/web/src/lib/api/memory.ts:179)"}, "properties": {"repobilityId": "c261f426ca009dc0", "scanner": "scanner-primary", "fingerprint": "516a7875e61c23ab", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-e6b2cc651bce49ba", "level": "error", "message": {"text": "Dangling fetch: GET /memory/${encodeURIComponent(agentId)}/core (legacy/web/src/lib/api/memory.ts:196)"}, "properties": {"repobilityId": "2f5def99c11bd3f1", "scanner": "scanner-primary", "fingerprint": "e6b2cc651bce49ba", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-f277a5533b6a9bab", "level": "error", "message": {"text": "Dangling fetch: PUT /memory/${encodeURIComponent(agentId)}/core/${encodeURIComponent(name)} (legacy/web/src/lib/api/memory.ts:204)"}, "properties": {"repobilityId": "e207a86d0e8d69bb", "scanner": "scanner-primary", "fingerprint": "f277a5533b6a9bab", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-d800153c92673fe9", "level": "error", "message": {"text": "Dangling fetch: GET /budget/agents/${encodeURIComponent(agentId)}/budget (legacy/web/src/lib/api/usage.ts:94)"}, "properties": {"repobilityId": "e9d36fb4c1aad387", "scanner": "scanner-primary", "fingerprint": "d800153c92673fe9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-10da4c07d672a3df", "level": "error", "message": {"text": "Dangling fetch: PATCH /budget/agents/${encodeURIComponent(agentId)}/budget (legacy/web/src/lib/api/usage.ts:113)"}, "properties": {"repobilityId": "8612416c1f4ac79e", "scanner": "scanner-primary", "fingerprint": "10da4c07d672a3df", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-a5297ecedf2c8a9d", "level": "error", "message": {"text": "Dangling fetch: POST /budget/agents/${encodeURIComponent(agentId)}/budget/reset (legacy/web/src/lib/api/usage.ts:120)"}, "properties": {"repobilityId": "f8a16404401cd569", "scanner": "scanner-primary", "fingerprint": "a5297ecedf2c8a9d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-5ba48066d9600a70", "level": "error", "message": {"text": "Dangling fetch: GET /sessions/${id} (legacy/web/src/hooks/useChatPage.ts:263)"}, "properties": {"repobilityId": "98c247ea93521086", "scanner": "scanner-primary", "fingerprint": "5ba48066d9600a70", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-0eb50eb04a683eb0", "level": "error", "message": {"text": "Dangling fetch: DELETE /sessions/${id} (legacy/web/src/hooks/useChatPage.ts:312)"}, "properties": {"repobilityId": "d2a8bd3b1c9c3ec0", "scanner": "scanner-primary", "fingerprint": "0eb50eb04a683eb0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-a9b475bc13682f56", "level": "error", "message": {"text": "Dangling fetch: PUT /sessions/${id} (legacy/web/src/hooks/useChatPage.ts:326)"}, "properties": {"repobilityId": "9eb7f5d62651d3ca", "scanner": "scanner-primary", "fingerprint": "a9b475bc13682f56", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-ee41ea3042f06ab6", "level": "error", "message": {"text": "Dangling fetch: POST /api/agents/instances (legacy/tools/bridges/shared/bridge-base.ts:150)"}, "properties": {"repobilityId": "6df5920ff037d6cc", "scanner": "scanner-primary", "fingerprint": "ee41ea3042f06ab6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b801e3af78aa10da", "level": "error", "message": {"text": "Dangling fetch: GET /api/agents/instances?name=${encodeURIComponent(name)} (legacy/tools/bridges/shared/bridge-base.ts:172)"}, "properties": {"repobilityId": "67a5e9288bf211f3", "scanner": "scanner-primary", "fingerprint": "b801e3af78aa10da", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-afcf6c58bceae530", "level": "error", "message": {"text": "Dangling fetch: GET /api/agents/${agentId}/tasks/next (legacy/tools/bridges/shared/bridge-base.ts:202)"}, "properties": {"repobilityId": "ba74ee83285d72d6", "scanner": "scanner-primary", "fingerprint": "afcf6c58bceae530", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8c99585b87978d95", "level": "error", "message": {"text": "Dangling fetch: POST /api/agents/${agentId}/tasks/${taskId}/complete (legacy/tools/bridges/shared/bridge-base.ts:315)"}, "properties": {"repobilityId": "26f64b47dac4d83d", "scanner": "scanner-primary", "fingerprint": "8c99585b87978d95", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-accc6f368b452545", "level": "error", "message": {"text": "Dangling fetch: GET http://${squidHost}:${squidPort} (legacy/core/src/index.ts:311)"}, "properties": {"repobilityId": "2fe376d65b6b0a6d", "scanner": "scanner-primary", "fingerprint": "accc6f368b452545", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0a924d71a045de42", "level": "error", "message": {"text": "Dangling fetch: POST http://localhost:${port}/api/chat (legacy/core/src/mcp/SeraMCPServer.ts:1108)"}, "properties": {"repobilityId": "9a7eace2d4409bb9", "scanner": "scanner-primary", "fingerprint": "0a924d71a045de42", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7eb5f47cd6c0f4c4", "level": "error", "message": {"text": "Dangling fetch: GET https://openrouter.ai/api/v1/models (legacy/core/src/services/ModelDiscoveryService.ts:140)"}, "properties": {"repobilityId": "102fc9c31d104329", "scanner": "scanner-primary", "fingerprint": "7eb5f47cd6c0f4c4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-01fb45d835de71ce", "level": "error", "message": {"text": "Dangling fetch: GET https://api.kilo.ai/api/gateway/models (legacy/core/src/services/ModelDiscoveryService.ts:233)"}, "properties": {"repobilityId": "2ee571c898a5fbd4", "scanner": "scanner-primary", "fingerprint": "01fb45d835de71ce", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-cf07c959a5a042b9", "level": "error", "message": {"text": "Dangling fetch: POST https://discord.com/api/v10/channels/${chatId}/messages (legacy/core/src/channels/adapters/DiscordAdapter.ts:195)"}, "properties": {"repobilityId": "75c08607c31fe344", "scanner": "scanner-primary", "fingerprint": "cf07c959a5a042b9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-fd42b01bd4df140f", "level": "error", "message": {"text": "Dangling fetch: GET https://discord.com/api/webhooks/${id}/${token} (legacy/core/src/channels/adapters/DiscordChannel.ts:148)"}, "properties": {"repobilityId": "da47f1bf4bffead9", "scanner": "scanner-primary", "fingerprint": "fd42b01bd4df140f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-ff90bc0a0edf360f", "level": "error", "message": {"text": "Dangling fetch: POST https://graph.facebook.com/v17.0/${this.phoneNumberId}/messages (legacy/core/src/channels/adapters/WhatsAppAdapter.ts:79)"}, "properties": {"repobilityId": "912b50bc6d093037", "scanner": "scanner-primary", "fingerprint": "ff90bc0a0edf360f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-73f193fac419edd2", "level": "error", "message": {"text": "Dangling fetch: GET https://html.duckduckgo.com/html/ (legacy/core/src/skills/builtins/web-search.ts:44)"}, "properties": {"repobilityId": "522407d27303b971", "scanner": "scanner-primary", "fingerprint": "73f193fac419edd2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-6eb452fbfb454d20", "level": "note", "message": {"text": "Unused endpoint: USE /api/auth"}, "properties": {"repobilityId": "41eb74ba728e421f", "scanner": "scanner-primary", "fingerprint": "6eb452fbfb454d20", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-793734da956ac9f3", "level": "note", "message": {"text": "Unused endpoint: USE /api/secrets"}, "properties": {"repobilityId": "28025a6175119e95", "scanner": "scanner-primary", "fingerprint": "793734da956ac9f3", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-50d9d80b509ac18d", "level": "note", "message": {"text": "Unused endpoint: USE /api/sandbox"}, "properties": {"repobilityId": "f6f7adefd79bb9dd", "scanner": "scanner-primary", "fingerprint": "50d9d80b509ac18d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-eb89ef52495e2dcb", "level": "note", "message": {"text": "Unused endpoint: USE /api/intercom"}, "properties": {"repobilityId": "d046921299c50e60", "scanner": "scanner-primary", "fingerprint": "eb89ef52495e2dcb", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-094608bf688f5d04", "level": "note", "message": {"text": "Unused endpoint: USE /api/agents"}, "properties": {"repobilityId": "79ea5cf0f64ead5b", "scanner": "scanner-primary", "fingerprint": "094608bf688f5d04", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-930dd09b1ac0ce98", "level": "note", "message": {"text": "Unused endpoint: USE /v1/tools"}, "properties": {"repobilityId": "3bfeb8f011149ca7", "scanner": "scanner-primary", "fingerprint": "930dd09b1ac0ce98", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-74653654fc29fc2a", "level": "note", "message": {"text": "Unused endpoint: USE /api/circles"}, "properties": {"repobilityId": "b41bc15ea22b38f4", "scanner": "scanner-primary", "fingerprint": "74653654fc29fc2a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-da0513e63d05de03", "level": "note", "message": {"text": "Unused endpoint: USE /api/pipelines"}, "properties": {"repobilityId": "cbab073ec12e0785", "scanner": "scanner-primary", "fingerprint": "da0513e63d05de03", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-67ce3ff14156f4ad", "level": "note", "message": {"text": "Unused endpoint: USE /api/skills"}, "properties": {"repobilityId": "bd70adfd1afbcf23", "scanner": "scanner-primary", "fingerprint": "67ce3ff14156f4ad", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b5e11eb967d9dbc9", "level": "note", "message": {"text": "Unused endpoint: USE /api/memory"}, "properties": {"repobilityId": "df62af18df3cdee3", "scanner": "scanner-primary", "fingerprint": "b5e11eb967d9dbc9", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8636dd48e48d1da9", "level": "note", "message": {"text": "Unused endpoint: USE /api/sessions"}, "properties": {"repobilityId": "cc27033c40218169", "scanner": "scanner-primary", "fingerprint": "8636dd48e48d1da9", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-dde3adb27bf7eebe", "level": "note", "message": {"text": "Unused endpoint: USE /api"}, "properties": {"repobilityId": "317fe29c5e7fdd6b", "scanner": "scanner-primary", "fingerprint": "dde3adb27bf7eebe", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f18f59071917dbf8", "level": "note", "message": {"text": "Unused endpoint: USE /v1/llm"}, "properties": {"repobilityId": "3a17d86d8e9f3c3d", "scanner": "scanner-primary", "fingerprint": "f18f59071917dbf8", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f481f0adc9316c33", "level": "note", "message": {"text": "Unused endpoint: USE /api/budget"}, "properties": {"repobilityId": "7fb44d812a2386f8", "scanner": "scanner-primary", "fingerprint": "f481f0adc9316c33", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-72a0cbd427624b29", "level": "note", "message": {"text": "Unused endpoint: USE /api/providers"}, "properties": {"repobilityId": "32ad270db78c06e8", "scanner": "scanner-primary", "fingerprint": "72a0cbd427624b29", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b7dbcf047b5d4d80", "level": "note", "message": {"text": "Unused endpoint: USE /api/system"}, "properties": {"repobilityId": "bddcd6387a4805dd", "scanner": "scanner-primary", "fingerprint": "b7dbcf047b5d4d80", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-86f77a97d977c2d6", "level": "note", "message": {"text": "Unused endpoint: USE /api/embedding"}, "properties": {"repobilityId": "21f379e8e9c04cb9", "scanner": "scanner-primary", "fingerprint": "86f77a97d977c2d6", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-09b894ec55f215bb", "level": "note", "message": {"text": "Unused endpoint: USE /api/metering"}, "properties": {"repobilityId": "8b3612cc034a3750", "scanner": "scanner-primary", "fingerprint": "09b894ec55f215bb", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ac2e8a1655395ddd", "level": "note", "message": {"text": "Unused endpoint: USE /api/audit"}, "properties": {"repobilityId": "3d12ad04585c6663", "scanner": "scanner-primary", "fingerprint": "ac2e8a1655395ddd", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-53f3e16101dd8de9", "level": "note", "message": {"text": "Unused endpoint: USE /api/permission-requests"}, "properties": {"repobilityId": "0c298c666636a00d", "scanner": "scanner-primary", "fingerprint": "53f3e16101dd8de9", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-429ab099bb88de4d", "level": "note", "message": {"text": "Unused endpoint: USE /api/schedules"}, "properties": {"repobilityId": "2dcbe0b6e65e5092", "scanner": "scanner-primary", "fingerprint": "429ab099bb88de4d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c1766e6d593b047a", "level": "note", "message": {"text": "Unused endpoint: USE /v1"}, "properties": {"repobilityId": "89a9f70ce91da328", "scanner": "scanner-primary", "fingerprint": "c1766e6d593b047a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-fb7b792a59d198ed", "level": "note", "message": {"text": "Unused endpoint: USE /api/lsp"}, "properties": {"repobilityId": "a52e4bda8aad608c", "scanner": "scanner-primary", "fingerprint": "fb7b792a59d198ed", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d5e923a407143585", "level": "note", "message": {"text": "Unused endpoint: USE /api/federation"}, "properties": {"repobilityId": "d428fc14d1937456", "scanner": "scanner-primary", "fingerprint": "d5e923a407143585", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-203ec659ed8ada77", "level": "note", "message": {"text": "Unused endpoint: USE /api/webhooks"}, "properties": {"repobilityId": "04443ca359d915f3", "scanner": "scanner-primary", "fingerprint": "203ec659ed8ada77", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-4e6d31d74e300faa", "level": "note", "message": {"text": "Unused endpoint: USE /api/registry"}, "properties": {"repobilityId": "cbdebbbc4161f623", "scanner": "scanner-primary", "fingerprint": "4e6d31d74e300faa", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-fa25f5656f8fbf45", "level": "note", "message": {"text": "Unused endpoint: USE /api/mcp-servers"}, "properties": {"repobilityId": "842e727fcf3be4c2", "scanner": "scanner-primary", "fingerprint": "fa25f5656f8fbf45", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-03f8a4379fbc2763", "level": "note", "message": {"text": "Unused endpoint: USE /api/operator-requests"}, "properties": {"repobilityId": "411f251f79700526", "scanner": "scanner-primary", "fingerprint": "03f8a4379fbc2763", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7f548d8a28c0f3bb", "level": "note", "message": {"text": "Unused endpoint: USE /api/agents/:id/tasks"}, "properties": {"repobilityId": "31a2137dc13b9f4a", "scanner": "scanner-primary", "fingerprint": "7f548d8a28c0f3bb", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-0c1b6ce2fd726244", "level": "note", "message": {"text": "Unused endpoint: USE /api/knowledge"}, "properties": {"repobilityId": "ef849662a6ae4e6a", "scanner": "scanner-primary", "fingerprint": "0c1b6ce2fd726244", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-bdd21aa57c360c23", "level": "note", "message": {"text": "Unused endpoint: USE /api/delegation"}, "properties": {"repobilityId": "928abd4e6a245bd5", "scanner": "scanner-primary", "fingerprint": "bdd21aa57c360c23", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c3a8b7932f72b92f", "level": "note", "message": {"text": "Unused endpoint: USE /api/notifications"}, "properties": {"repobilityId": "f9eeb9f76aaaff92", "scanner": "scanner-primary", "fingerprint": "c3a8b7932f72b92f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-fbeb35d232a968b6", "level": "note", "message": {"text": "Unused endpoint: USE /api/channels"}, "properties": {"repobilityId": "9be6c5e5fdab2a2c", "scanner": "scanner-primary", "fingerprint": "fbeb35d232a968b6", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-16ab996ffc42e297", "level": "note", "message": {"text": "Unused endpoint: USE /api/orchestration"}, "properties": {"repobilityId": "b9e1f5a88fc2229d", "scanner": "scanner-primary", "fingerprint": "16ab996ffc42e297", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-55125999d15d30ae", "level": "note", "message": {"text": "Unused endpoint: USE /api/traces"}, "properties": {"repobilityId": "68381fff74493e52", "scanner": "scanner-primary", "fingerprint": "55125999d15d30ae", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-69a693dfc33637f4", "level": "note", "message": {"text": "Unused endpoint: POST /run"}, "properties": {"repobilityId": "4daee6fe28580ab3", "scanner": "scanner-primary", "fingerprint": "69a693dfc33637f4", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-fd0e06afbaab19b3", "level": "note", "message": {"text": "Unused endpoint: GET /tasks"}, "properties": {"repobilityId": "b97ca433c11d6410", "scanner": "scanner-primary", "fingerprint": "fd0e06afbaab19b3", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ac4451b7e0a3b08a", "level": "note", "message": {"text": "Unused endpoint: GET /next"}, "properties": {"repobilityId": "6a0e79924c662184", "scanner": "scanner-primary", "fingerprint": "ac4451b7e0a3b08a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5dc321a40a2f0ef2", "level": "note", "message": {"text": "Unused endpoint: GET /oidc-config"}, "properties": {"repobilityId": "8ba2302b17623030", "scanner": "scanner-primary", "fingerprint": "5dc321a40a2f0ef2", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6a4dfcad3eb1618a", "level": "note", "message": {"text": "Unused endpoint: GET /login"}, "properties": {"repobilityId": "aa122b15ed30ce09", "scanner": "scanner-primary", "fingerprint": "6a4dfcad3eb1618a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a85420f072a900b1", "level": "note", "message": {"text": "Unused endpoint: POST /oidc/callback"}, "properties": {"repobilityId": "eaa298d7de28aee7", "scanner": "scanner-primary", "fingerprint": "a85420f072a900b1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-99fc36db98c134ce", "level": "note", "message": {"text": "Unused endpoint: POST /logout"}, "properties": {"repobilityId": "a41370474738bd22", "scanner": "scanner-primary", "fingerprint": "99fc36db98c134ce", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-fd1dc91abf32142d", "level": "note", "message": {"text": "Unused endpoint: GET /me"}, "properties": {"repobilityId": "93ce030d4aad661c", "scanner": "scanner-primary", "fingerprint": "fd1dc91abf32142d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c32b4607df0975e2", "level": "note", "message": {"text": "Unused endpoint: GET /api-keys"}, "properties": {"repobilityId": "9f89ca339217f03b", "scanner": "scanner-primary", "fingerprint": "c32b4607df0975e2", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-224cbb7548a6b13c", "level": "note", "message": {"text": "Unused endpoint: POST /api-keys"}, "properties": {"repobilityId": "109cb1727496df62", "scanner": "scanner-primary", "fingerprint": "224cbb7548a6b13c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-eb6cbd163e296cdb", "level": "note", "message": {"text": "Unused endpoint: DELETE /api-keys/:id"}, "properties": {"repobilityId": "e0fd1b172cedb917", "scanner": "scanner-primary", "fingerprint": "eb6cbd163e296cdb", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7a009b1a56794f45", "level": "note", "message": {"text": "Unused endpoint: POST /"}, "properties": {"repobilityId": "5e58d6f06a49f549", "scanner": "scanner-primary", "fingerprint": "7a009b1a56794f45", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5baa8971ebe192a1", "level": "note", "message": {"text": "Unused endpoint: GET /"}, "properties": {"repobilityId": "0cd9a644f656a4c6", "scanner": "scanner-primary", "fingerprint": "5baa8971ebe192a1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-961ab6e17e54b478", "level": "note", "message": {"text": "Unused endpoint: POST /incoming/:slug"}, "properties": {"repobilityId": "e61d82b62402afee", "scanner": "scanner-primary", "fingerprint": "961ab6e17e54b478", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-97222a6b8eba6c8e", "level": "note", "message": {"text": "Unused endpoint: POST /spawn"}, "properties": {"repobilityId": "1d9b4fd20ddd5340", "scanner": "scanner-primary", "fingerprint": "97222a6b8eba6c8e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}