{"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-94b6d680f9e75b4d", "name": "Possibly dead Python function: held_repl", "shortDescription": {"text": "Possibly dead Python function: held_repl"}, "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-91b236e3093d8b43", "name": "Possibly dead Python function: cot_repl", "shortDescription": {"text": "Possibly dead Python function: cot_repl"}, "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-52135ab128fea9eb", "name": "Possibly dead Python function: agent_start", "shortDescription": {"text": "Possibly dead Python function: agent_start"}, "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-4a91498cfbcfd235", "name": "Possibly dead Python function: agent_done", "shortDescription": {"text": "Possibly dead Python function: agent_done"}, "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-d93357f250183b1e", "name": "Possibly dead Python function: order_key", "shortDescription": {"text": "Possibly dead Python function: order_key"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-afdb71c39e2f4d19", "name": "Possibly dead Python function: is_done", "shortDescription": {"text": "Possibly dead Python function: is_done"}, "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-4393721616140d88", "name": "Possibly dead Python function: reader_for", "shortDescription": {"text": "Possibly dead Python function: reader_for"}, "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-af946b2ab128c7be", "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-d61851305eb0cb01", "name": "Possibly dead Python function: do_POST", "shortDescription": {"text": "Possibly dead Python function: do_POST"}, "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-86d67c3c61e3b0cf", "name": "Possibly dead Python function: do_DELETE", "shortDescription": {"text": "Possibly dead Python function: do_DELETE"}, "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-76095b306391a557", "name": "Possibly dead Python function: do_PUT", "shortDescription": {"text": "Possibly dead Python function: do_PUT"}, "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-90e5765f1729645d", "name": "Possibly dead Python function: do_OPTIONS", "shortDescription": {"text": "Possibly dead Python function: do_OPTIONS"}, "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-c7a18969ebfaac88", "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-1681fb12380b3c5b", "name": "Possibly dead Python function: do_DELETE", "shortDescription": {"text": "Possibly dead Python function: do_DELETE"}, "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-907702489fedd64a", "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-cd89014a13728be3", "name": "Possibly dead Python function: do_HEAD", "shortDescription": {"text": "Possibly dead Python function: do_HEAD"}, "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-0ee386077cdf1003", "name": "Possibly dead Python function: do_OPTIONS", "shortDescription": {"text": "Possibly dead Python function: do_OPTIONS"}, "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-41f753b3d8a2bc16", "name": "Possibly dead Python function: do_PATCH", "shortDescription": {"text": "Possibly dead Python function: do_PATCH"}, "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-65d46723e363c350", "name": "Possibly dead Python function: do_POST", "shortDescription": {"text": "Possibly dead Python function: do_POST"}, "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-de6f430bcfab05a7", "name": "Possibly dead Python function: do_PUT", "shortDescription": {"text": "Possibly dead Python function: do_PUT"}, "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-30126bfa0dab42d4", "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-05e7a5a5cec95204", "name": "Possibly dead Python function: budget_awareness", "shortDescription": {"text": "Possibly dead Python function: budget_awareness"}, "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-e0be9d605171d053", "name": "Possibly dead Python function: record_telemetry", "shortDescription": {"text": "Possibly dead Python function: record_telemetry"}, "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-d47173afae46ce78", "name": "Possibly dead Python function: narrate_recall_fragments", "shortDescription": {"text": "Possibly dead Python function: narrate_recall_fragments"}, "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-0ac7902a87a82a30", "name": "Possibly dead Python function: note_event", "shortDescription": {"text": "Possibly dead Python function: note_event"}, "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-1a0fd7066f4c0a6b", "name": "Possibly dead Python function: timeline_track_names", "shortDescription": {"text": "Possibly dead Python function: timeline_track_names"}, "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-a258df9438a25609", "name": "Possibly dead Python function: configure", "shortDescription": {"text": "Possibly dead Python function: configure"}, "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-60fa04c3e98bd363", "name": "Possibly dead Python function: save_annotation_state", "shortDescription": {"text": "Possibly dead Python function: save_annotation_state"}, "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-58f5a79917fbb6e5", "name": "Possibly dead Python function: safe_event_id", "shortDescription": {"text": "Possibly dead Python function: safe_event_id"}, "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-3e0d83b73f3ab523", "name": "Possibly dead Python function: beat_vectors_from_store", "shortDescription": {"text": "Possibly dead Python function: beat_vectors_from_store"}, "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-ad1a66fe6cf4f453", "name": "`truncate` class without `title=` for hover reveal \u2014 sources/favilla/app/src/Shell.tsx:629", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 sources/favilla/app/src/Shell.tsx:629"}, "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-4b39ab0369d5ee79", "name": "`truncate` class without `title=` for hover reveal \u2014 sources/favilla/app/src/App.tsx:1542", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 sources/favilla/app/src/App.tsx:1542"}, "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-d9f80049ff046335", "name": "`truncate` class without `title=` for hover reveal \u2014 sources/favilla/app/src/components/TokenPanel.tsx:101", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 sources/favilla/app/src/components/TokenPanel.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-3661aad02eb38fc0", "name": "TODO/FIXME marker in shipping code \u2014 sources/favilla/app/src/lib/stt.ts:3", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 sources/favilla/app/src/lib/stt.ts:3"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d38170ec503c1079", "name": "Icon-only button without accessible name \u2014 sources/favilla/app/src/routes/Brewing.tsx:641", "shortDescription": {"text": "Icon-only button without accessible name \u2014 sources/favilla/app/src/routes/Brewing.tsx:641"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-263ab7a44748bef3", "name": "Icon-only button without accessible name \u2014 sources/favilla/app/src/routes/Calendar.tsx:785", "shortDescription": {"text": "Icon-only button without accessible name \u2014 sources/favilla/app/src/routes/Calendar.tsx:785"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0dd63884b43ea2e4", "name": "`truncate` class without `title=` for hover reveal \u2014 sources/favilla/app/src/routes/Stroll.tsx:676", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 sources/favilla/app/src/routes/Stroll.tsx:676"}, "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-5450fa45a40e5115", "name": "`truncate` class without `title=` for hover reveal \u2014 sources/favilla/app/src/routes/AgentExtensions.tsx:642", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 sources/favilla/app/src/routes/AgentExtensions.tsx:642"}, "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-83121dbad76b6cb0", "name": "`truncate` class without `title=` for hover reveal \u2014 sources/atrium/src/panel/Today.tsx:131", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 sources/atrium/src/panel/Today.tsx:131"}, "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-a9329b7e8eceb083", "name": "Stray `console.log` in TS/JS \u2014 sources/atrium/src/panel/Today.tsx:564", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 sources/atrium/src/panel/Today.tsx:564"}, "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-d29477fbae028f70", "name": "`truncate` class without `title=` for hover reveal \u2014 sources/atrium/src/panel/Chat.tsx:139", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 sources/atrium/src/panel/Chat.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-95b11507bc85c802", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 sources/atrium/src/panel/md.tsx:9", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 sources/atrium/src/panel/md.tsx:9"}, "fullDescription": {"text": "Open XSS surface unless the input is provably trusted. Replace with explicit JSX or sanitize via a vetted library.\n\nWhy: OWASP basics. Already partially flagged by the security analyzer.\nRule id: fq.dangerous-html"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-07a6ae39b41927d6", "name": "`truncate` class without `title=` for hover reveal \u2014 sources/atrium/src/panel/Reading.tsx:303", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 sources/atrium/src/panel/Reading.tsx:303"}, "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-304145e49d4d3795", "name": "`truncate` class without `title=` for hover reveal \u2014 sources/atrium/src/panel/System.tsx:105", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 sources/atrium/src/panel/System.tsx:105"}, "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-91d266bb7b46ebed", "name": "`truncate` class without `title=` for hover reveal \u2014 sources/atrium/src/panel/ui.tsx:213", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 sources/atrium/src/panel/ui.tsx:213"}, "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-2faea294b57c2552", "name": "`truncate` class without `title=` for hover reveal \u2014 sources/atrium/src/views/ChatView.tsx:185", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 sources/atrium/src/views/ChatView.tsx:185"}, "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-987af60ddc82f360", "name": "TODO/FIXME marker in shipping code \u2014 sources/obsidian-fiam-studio/src/foliate-bundle.js:5142", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 sources/obsidian-fiam-studio/src/foliate-bundle.js:5142"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3d7ee6bd019c0dce", "name": "Insecure pattern 'weak_hash' in CLAUDE.md:24", "shortDescription": {"text": "Insecure pattern 'weak_hash' in CLAUDE.md:24"}, "fullDescription": {"text": "Found a known-risky pattern (weak_hash). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f7c5b517052ed276", "name": "Insecure pattern 'node_child_process' in scripts/self_test_favilla.mjs:7", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/self_test_favilla.mjs:7"}, "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-b5efedf040a59f6c", "name": "Insecure pattern 'cors_wildcard' in scripts/dashboard_server.py:19553", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in scripts/dashboard_server.py:19553"}, "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-2c17436e414fae36", "name": "Insecure pattern 'node_child_process' in sources/antiphon/app/vite.config.ts:5", "shortDescription": {"text": "Insecure pattern 'node_child_process' in sources/antiphon/app/vite.config.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-c2005bc9e5bfc0ba", "name": "Insecure pattern 'direct_innerhtml_assignment' in sources/favilla/demo/index.html:194", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in sources/favilla/demo/index.html:194"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a6d9aebd76b61191", "name": "Insecure pattern 'node_child_process' in sources/favilla/app/vite.config.ts:5", "shortDescription": {"text": "Insecure pattern 'node_child_process' in sources/favilla/app/vite.config.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-7aa2d4afbf9594b9", "name": "Insecure pattern 'direct_innerhtml_assignment' in sources/atrium/browser-extension/content.js:396", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in sources/atrium/browser-extension/content.js:396"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d37819cf5e67f1f8", "name": "Insecure pattern 'local_storage_auth_token' in sources/ephemeris/src/study.js:330", "shortDescription": {"text": "Insecure pattern 'local_storage_auth_token' in sources/ephemeris/src/study.js:330"}, "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-66998ce1637f8209", "name": "Insecure pattern 'local_storage_auth_token' in sources/ephemeris/src/render.js:466", "shortDescription": {"text": "Insecure pattern 'local_storage_auth_token' in sources/ephemeris/src/render.js:466"}, "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-842d97185c3b55d3", "name": "Insecure pattern 'node_child_process' in sources/obsidian-fiam-studio/main.js:2", "shortDescription": {"text": "Insecure pattern 'node_child_process' in sources/obsidian-fiam-studio/main.js: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-f886465e7819837c", "name": "Insecure pattern 'direct_innerhtml_assignment' in sources/obsidian-fiam-studio/main.js:55", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in sources/obsidian-fiam-studio/main.js:55"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a2cde6a75693edff", "name": "Insecure pattern 'direct_innerhtml_assignment' in sources/obsidian-fiam-studio/src/foliate-bundle.js:3182", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in sources/obsidian-fiam-studio/src/foliate-bundle.js:3182"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-56085963248cb253", "name": "Insecure pattern 'node_child_process' in sources/obsidian-fiam-studio/src/main.ts:17", "shortDescription": {"text": "Insecure pattern 'node_child_process' in sources/obsidian-fiam-studio/src/main.ts:17"}, "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-8723dd39098dde7b", "name": "Insecure pattern 'direct_innerhtml_assignment' in packages/chord-card/src/ChordCard.tsx:375", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in packages/chord-card/src/ChordCard.tsx:375"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-7e52d69ff39fff3e", "name": "Insecure pattern 'subprocess_shell_true' in src/fiam/runtime/tools.py:1031", "shortDescription": {"text": "Insecure pattern 'subprocess_shell_true' in src/fiam/runtime/tools.py:1031"}, "fullDescription": {"text": "Found a known-risky pattern (subprocess_shell_true). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b91890a5af401f81", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/cache@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b559a85c32c99178", "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-4335c6d391ecd9fe", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/cache@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-885b11c9eec046af", "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-518da4a0cdcb3d1e", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/cache@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c8b5c8d474c8027d", "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-7d0eda089b5ee4be", "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-dd491f073e5d7048", "name": "Very large file: tests/test_app_runtime_router.py (2156 lines)", "shortDescription": {"text": "Very large file: tests/test_app_runtime_router.py (2156 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-e382a5c8253ad5b5", "name": "Very large file: tests/test_workroom_dashboard.py (1582 lines)", "shortDescription": {"text": "Very large file: tests/test_workroom_dashboard.py (1582 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-a275b4b840f05387", "name": "Very large file: scripts/dashboard_server.py (22414 lines)", "shortDescription": {"text": "Very large file: scripts/dashboard_server.py (22414 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-c15cddd4f4336501", "name": "Very large file: scripts/fiam_lib/daemon.py (1443 lines)", "shortDescription": {"text": "Very large file: scripts/fiam_lib/daemon.py (1443 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-27b9c04493ceeb8c", "name": "Very large file: scripts/fiam_lib/cc_channel.py (1654 lines)", "shortDescription": {"text": "Very large file: scripts/fiam_lib/cc_channel.py (1654 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0088df37168e770c", "name": "Very large file: sources/favilla/app/src/App.tsx (7154 lines)", "shortDescription": {"text": "Very large file: sources/favilla/app/src/App.tsx (7154 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-450a935af63137f5", "name": "Very large file: sources/favilla/app/src/lib/api.ts (2627 lines)", "shortDescription": {"text": "Very large file: sources/favilla/app/src/lib/api.ts (2627 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-bf07e0816206a8a6", "name": "Very large file: sources/favilla/app/src/routes/Workroom.tsx (1911 lines)", "shortDescription": {"text": "Very large file: sources/favilla/app/src/routes/Workroom.tsx (1911 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-0f69bd7c4fd40316", "name": "Very large file: sources/favilla/app/src/routes/Brewing.tsx (1605 lines)", "shortDescription": {"text": "Very large file: sources/favilla/app/src/routes/Brewing.tsx (1605 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e69f1ce6305aeac5", "name": "Very large file: sources/favilla/app/src/routes/Stroll.tsx (1170 lines)", "shortDescription": {"text": "Very large file: sources/favilla/app/src/routes/Stroll.tsx (1170 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-17b288c638295fea", "name": "Very large file: sources/favilla/app/src/routes/AgentExtensions.tsx (1312 lines)", "shortDescription": {"text": "Very large file: sources/favilla/app/src/routes/AgentExtensions.tsx (1312 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-f1e5e1bed0182ca9", "name": "Very large file: sources/atrium/src-tauri/src/main.rs (2588 lines)", "shortDescription": {"text": "Very large file: sources/atrium/src-tauri/src/main.rs (2588 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-cdeec93b012a431f", "name": "Very large file: sources/obsidian-fiam-studio/src/foliate-bundle.js (7574 lines)", "shortDescription": {"text": "Very large file: sources/obsidian-fiam-studio/src/foliate-bundle.js (7574 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-2c4daf45b2293405", "name": "Very large file: src/fiam/bookshelf.py (1537 lines)", "shortDescription": {"text": "Very large file: src/fiam/bookshelf.py (1537 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-c03180cedf26bfc5", "name": "Very large file: src/fiam/runtime/tools.py (1383 lines)", "shortDescription": {"text": "Very large file: src/fiam/runtime/tools.py (1383 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-4ab6cb73ea03cdc1", "name": "Very large file: src/fiam/runtime/api.py (1477 lines)", "shortDescription": {"text": "Very large file: src/fiam/runtime/api.py (1477 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ea3b5e389d8c9c0f", "name": "Low test-to-source ratio", "shortDescription": {"text": "Low test-to-source ratio"}, "fullDescription": {"text": "67 tests / 323 src (ratio 0.21)."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-aba2095ac97be57e", "name": "50 TODO/FIXME markers", "shortDescription": {"text": "50 TODO/FIXME markers"}, "fullDescription": {"text": "High count of TODO/FIXME/HACK markers \u2014 track them as issues so they're not forgotten."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-360f0e268a63aa6d", "name": "Node manifest has dependencies but no lockfile: packages/chord-card/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/chord-card/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3ab5d313dda8e5f9", "name": "Debug logging residue appears in source files", "shortDescription": {"text": "Debug logging residue appears in source files"}, "fullDescription": {"text": "Found 331 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 89 placeholder/mock markers across 33 source files. This often means the repo looks complete while core flows still use generated scaffolding or fake data."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2d0c7b7ab8f8aacf", "name": "Critical user flow still appears backed by mock or placeholder data", "shortDescription": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "fullDescription": {"text": "A payment/auth/admin/order/billing-style flow contains mock, fake, TODO, dummy, or placeholder markers in runtime source. In the Fable corpus this is a high-leverage completeness smell: the app can look finished while the money, identity, or tenant flow is still scaffolded."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-749d4bc1bd66df5f", "name": "Agent instructions exist but release-hardening basics are missing", "shortDescription": {"text": "Agent instructions exist but release-hardening basics are missing"}, "fullDescription": {"text": "AI-coder instruction files were found, but the repo is missing lockfile. Treat this as a contract gap: the agent is guided, but the generated output is not yet guarded by the controls that make it repeatable."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ea8f3013f588db25", "name": "Shallow git history limits provenance confidence", "shortDescription": {"text": "Shallow git history limits provenance confidence"}, "fullDescription": {"text": "The repository is a shallow clone. Origin/evolution analysis cannot distinguish fresh generation, imported legacy code, or long-lived human code with high confidence."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8424db9c75e04ba4", "name": "Very short observed git history", "shortDescription": {"text": "Very short observed git history"}, "fullDescription": {"text": "The repo has multiple source files but two or fewer visible commits. This is not a failure by itself, but it lowers confidence in evolution-based diagnosis."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f712df9ed1f3019a", "name": "Network/subprocess call without timeout or try/except \u2014 scripts/workroom_cleanup_project.py:46", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 scripts/workroom_cleanup_project.py:46"}, "fullDescription": {"text": "`subprocess.run(...)` here lacks both a `timeout=` arg and an enclosing try/except. This is exactly the class of bug that took down our git-clone earlier (HTTP/2 stream cancel surfaced as a fatal). Add a `timeout=` and wrap in try/except, or use a wrapper that retries."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-5f52057103fc9fb0", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/social_browser_action.mjs:64", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/social_browser_action.mjs:64"}, "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-32f6a30ec178beaf", "name": "Commented-code block (5 lines) in scripts/backfill_cot_summary.py:34", "shortDescription": {"text": "Commented-code block (5 lines) in scripts/backfill_cot_summary.py:34"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6a6b4435e599225f", "name": "Commented-code block (5 lines) in scripts/dashboard_server.py:99", "shortDescription": {"text": "Commented-code block (5 lines) in scripts/dashboard_server.py:99"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-98602b13818b5c7a", "name": "Network/subprocess call without timeout or try/except \u2014 scripts/dashboard_server.py:853", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 scripts/dashboard_server.py:853"}, "fullDescription": {"text": "`subprocess.run(...)` here lacks both a `timeout=` arg and an enclosing try/except. This is exactly the class of bug that took down our git-clone earlier (HTTP/2 stream cancel surfaced as a fatal). Add a `timeout=` and wrap in try/except, or use a wrapper that retries."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-03f73cbff14b38fb", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/social_render_cards.mjs:255", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/social_render_cards.mjs:255"}, "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-009c7f8620e06a43", "name": "Network/subprocess call without timeout or try/except \u2014 scripts/fiam_lib/init_wizard.py:159", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 scripts/fiam_lib/init_wizard.py:159"}, "fullDescription": {"text": "`subprocess.run(...)` here lacks both a `timeout=` arg and an enclosing try/except. This is exactly the class of bug that took down our git-clone earlier (HTTP/2 stream cancel surfaced as a fatal). Add a `timeout=` and wrap in try/except, or use a wrapper that retries."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0b88f6ee08b983c6", "name": "Network/subprocess call without timeout or try/except \u2014 scripts/fiam_lib/home_mgmt.py:71", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 scripts/fiam_lib/home_mgmt.py:71"}, "fullDescription": {"text": "`subprocess.run(...)` here lacks both a `timeout=` arg and an enclosing try/except. This is exactly the class of bug that took down our git-clone earlier (HTTP/2 stream cancel surfaced as a fatal). Add a `timeout=` and wrap in try/except, or use a wrapper that retries."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-319e57d396d23594", "name": "Network/subprocess call without timeout or try/except \u2014 scripts/fiam_lib/daemon.py:666", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 scripts/fiam_lib/daemon.py:666"}, "fullDescription": {"text": "`subprocess.Popen(...)` 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-fe1d510828d7b183", "name": "Commented-code block (5 lines) in scripts/fiam_lib/tmux_workroom.py:452", "shortDescription": {"text": "Commented-code block (5 lines) in scripts/fiam_lib/tmux_workroom.py:452"}, "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-81a87f9d583d0744", "name": "Network/subprocess call without timeout or try/except \u2014 scripts/fiam_lib/tmux_workroom.py:47", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 scripts/fiam_lib/tmux_workroom.py:47"}, "fullDescription": {"text": "`subprocess.run(...)` here lacks both a `timeout=` arg and an enclosing try/except. This is exactly the class of bug that took down our git-clone earlier (HTTP/2 stream cancel surfaced as a fatal). Add a `timeout=` and wrap in try/except, or use a wrapper that retries."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d2c22454ead9b20e", "name": "Commented-code block (7 lines) in scripts/fiam_lib/cc_channel.py:803", "shortDescription": {"text": "Commented-code block (7 lines) in scripts/fiam_lib/cc_channel.py:803"}, "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-12123750a97242ec", "name": "Network/subprocess call without timeout or try/except \u2014 scripts/fiam_lib/cc_channel.py:335", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 scripts/fiam_lib/cc_channel.py:335"}, "fullDescription": {"text": "`subprocess.run(...)` here lacks both a `timeout=` arg and an enclosing try/except. This is exactly the class of bug that took down our git-clone earlier (HTTP/2 stream cancel surfaced as a fatal). Add a `timeout=` and wrap in try/except, or use a wrapper that retries."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ff415d4dfcc63524", "name": "Stub function `update` (body is just `pass`/`return`) \u2014 scripts/fiam_lib/ui.py:39", "shortDescription": {"text": "Stub function `update` (body is just `pass`/`return`) \u2014 scripts/fiam_lib/ui.py:39"}, "fullDescription": {"text": "Likely an AI scaffold that was never filled in. Remove or implement."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9bd4cb5071ffc56d", "name": "Network/subprocess call without timeout or try/except \u2014 scripts/fiam_lib/debug_mode.py:84", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 scripts/fiam_lib/debug_mode.py:84"}, "fullDescription": {"text": "`subprocess.run(...)` here lacks both a `timeout=` arg and an enclosing try/except. This is exactly the class of bug that took down our git-clone earlier (HTTP/2 stream cancel surfaced as a fatal). Add a `timeout=` and wrap in try/except, or use a wrapper that retries."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e9e5da65c9743977", "name": "Commented-code block (5 lines) in dashboard/src/app.d.ts:5", "shortDescription": {"text": "Commented-code block (5 lines) in dashboard/src/app.d.ts:5"}, "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-575288d0cee2956e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 dashboard/src/lib/api.ts:9", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 dashboard/src/lib/api.ts:9"}, "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-85d6c2c144706959", "name": "`fetch()` without try/.catch or AbortSignal \u2014 dashboard/src/lib/antiphon/api.ts:11", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 dashboard/src/lib/antiphon/api.ts:11"}, "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-a52668a0a2e250d0", "name": "`fetch()` without try/.catch or AbortSignal \u2014 sources/antiphon/app/src/lib/api.ts:436", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 sources/antiphon/app/src/lib/api.ts:436"}, "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-9ed191239ee3be80", "name": "Commented-code block (5 lines) in sources/antiphon/app/src/lib/localStore.ts:6", "shortDescription": {"text": "Commented-code block (5 lines) in sources/antiphon/app/src/lib/localStore.ts:6"}, "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-8cf118115a42754d", "name": "Commented-code block (10 lines) in sources/antiphon/app/src/lib/fsStore.ts:7", "shortDescription": {"text": "Commented-code block (10 lines) in sources/antiphon/app/src/lib/fsStore.ts:7"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-19aaeb67f59c75c8", "name": "Commented-code block (7 lines) in sources/favilla/easteregg-design/tweaks-panel.jsx:16", "shortDescription": {"text": "Commented-code block (7 lines) in sources/favilla/easteregg-design/tweaks-panel.jsx:16"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2f30feed0257a0a8", "name": "Legacy-named symbol `cta_compare_v1` in sources/favilla/easteregg-design/data.jsx:82", "shortDescription": {"text": "Legacy-named symbol `cta_compare_v1` in sources/favilla/easteregg-design/data.jsx:82"}, "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-689ece8da2cb05e1", "name": "Commented-code block (6 lines) in sources/favilla/app/scripts/check-build-env.mjs:3", "shortDescription": {"text": "Commented-code block (6 lines) in sources/favilla/app/scripts/check-build-env.mjs:3"}, "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-047f570366d0214c", "name": "Commented-code block (5 lines) in sources/favilla/app/src/Shell.tsx:391", "shortDescription": {"text": "Commented-code block (5 lines) in sources/favilla/app/src/Shell.tsx:391"}, "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-f2e00ffd85caf478", "name": "Commented-code block (5 lines) in sources/favilla/app/src/App.tsx:182", "shortDescription": {"text": "Commented-code block (5 lines) in sources/favilla/app/src/App.tsx:182"}, "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-bcb3e18704f09e92", "name": "Commented-code block (8 lines) in sources/favilla/app/src/components/RefreshIcon.tsx:33", "shortDescription": {"text": "Commented-code block (8 lines) in sources/favilla/app/src/components/RefreshIcon.tsx:33"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-efccced9aaabd598", "name": "Commented-code block (10 lines) in sources/favilla/app/src/components/ConfirmModal.tsx:64", "shortDescription": {"text": "Commented-code block (10 lines) in sources/favilla/app/src/components/ConfirmModal.tsx:64"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9373012dbec1c44e", "name": "Commented-code block (6 lines) in sources/favilla/app/src/lib/api.ts:15", "shortDescription": {"text": "Commented-code block (6 lines) in sources/favilla/app/src/lib/api.ts:15"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f437931a3c8b10bd", "name": "`fetch()` without try/.catch or AbortSignal \u2014 sources/favilla/app/src/lib/api.ts:260", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 sources/favilla/app/src/lib/api.ts:260"}, "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-2b4b570c3cd3e856", "name": "Commented-code block (6 lines) in sources/favilla/app/src/lib/msg-cache.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in sources/favilla/app/src/lib/msg-cache.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2c372716a4e967c6", "name": "Commented-code block (6 lines) in sources/favilla/app/src/lib/ImageCropper.tsx:7", "shortDescription": {"text": "Commented-code block (6 lines) in sources/favilla/app/src/lib/ImageCropper.tsx:7"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e989960ec835fd02", "name": "Commented-code block (5 lines) in sources/favilla/app/src/lib/sqlite-store.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in sources/favilla/app/src/lib/sqlite-store.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f405e843288efe82", "name": "Commented-code block (6 lines) in sources/favilla/app/src/lib/hidden-session-rows.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in sources/favilla/app/src/lib/hidden-session-rows.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6be5ff37c7a50c91", "name": "Commented-code block (6 lines) in sources/favilla/app/src/lib/book-cache.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in sources/favilla/app/src/lib/book-cache.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9020762061985127", "name": "Commented-code block (5 lines) in sources/favilla/app/src/lib/bg-store.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in sources/favilla/app/src/lib/bg-store.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-47221018f314237b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 sources/favilla/app/src/lib/ring-ble.ts:190", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 sources/favilla/app/src/lib/ring-ble.ts:190"}, "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-3b6f2a46f2ddb544", "name": "Commented-code block (5 lines) in sources/favilla/app/src/lib/pick-image.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in sources/favilla/app/src/lib/pick-image.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a8652b2d8490481d", "name": "Commented-code block (6 lines) in sources/favilla/app/src/lib/deleted-ids.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in sources/favilla/app/src/lib/deleted-ids.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-022b45c374a06fec", "name": "Commented-code block (5 lines) in sources/favilla/app/src/lib/wr-msg-cache.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in sources/favilla/app/src/lib/wr-msg-cache.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-465a95b3da4ed7f8", "name": "Commented-code block (13 lines) in sources/favilla/app/src/lib/idb-store.ts:19", "shortDescription": {"text": "Commented-code block (13 lines) in sources/favilla/app/src/lib/idb-store.ts:19"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fbe61a8b9d41194c", "name": "Commented-code block (7 lines) in sources/favilla/app/src/lib/voice.ts:43", "shortDescription": {"text": "Commented-code block (7 lines) in sources/favilla/app/src/lib/voice.ts:43"}, "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-39592c95c0a58fb2", "name": "`fetch()` without try/.catch or AbortSignal \u2014 sources/favilla/app/src/lib/voice.ts:47", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 sources/favilla/app/src/lib/voice.ts:47"}, "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-5dd88a2e9b483a8d", "name": "Commented-code block (6 lines) in sources/favilla/app/src/lib/stt.ts:3", "shortDescription": {"text": "Commented-code block (6 lines) in sources/favilla/app/src/lib/stt.ts:3"}, "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-ecb1631232df925a", "name": "Commented-code block (6 lines) in sources/favilla/app/src/routes/Workroom.tsx:283", "shortDescription": {"text": "Commented-code block (6 lines) in sources/favilla/app/src/routes/Workroom.tsx:283"}, "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-9e9eea180c6294e0", "name": "Commented-code block (6 lines) in sources/favilla/app/src/routes/Terminal.tsx:8", "shortDescription": {"text": "Commented-code block (6 lines) in sources/favilla/app/src/routes/Terminal.tsx:8"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9988a02e3d4f1745", "name": "Commented-code block (5 lines) in sources/favilla/app/src/routes/DataManagement.tsx:288", "shortDescription": {"text": "Commented-code block (5 lines) in sources/favilla/app/src/routes/DataManagement.tsx:288"}, "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-68604779bbaf44a6", "name": "Commented-code block (5 lines) in sources/atrium/scripts/shoot.mjs:1", "shortDescription": {"text": "Commented-code block (5 lines) in sources/atrium/scripts/shoot.mjs:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-22595c96cb63098e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 sources/atrium/src/widget/StreamChatLive.tsx:184", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 sources/atrium/src/widget/StreamChatLive.tsx:184"}, "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-854fc3aeba4d0fa3", "name": "Commented-code block (6 lines) in sources/ephemeris/src/study.js:6", "shortDescription": {"text": "Commented-code block (6 lines) in sources/ephemeris/src/study.js:6"}, "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-4e16a3350df9af61", "name": "Commented-code block (5 lines) in sources/ephemeris/src/render.js:1", "shortDescription": {"text": "Commented-code block (5 lines) in sources/ephemeris/src/render.js:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-65f9100517e0f435", "name": "Commented-code block (5 lines) in sources/ephemeris/src/index.js:1", "shortDescription": {"text": "Commented-code block (5 lines) in sources/ephemeris/src/index.js:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5a22682299a54c70", "name": "`fetch()` without try/.catch or AbortSignal \u2014 sources/obsidian-fiam-studio/main.js:55", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 sources/obsidian-fiam-studio/main.js:55"}, "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-de478c97ac68dfb5", "name": "`fetch()` without try/.catch or AbortSignal \u2014 sources/obsidian-fiam-studio/src/foliate-bundle.js:3094", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 sources/obsidian-fiam-studio/src/foliate-bundle.js:3094"}, "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-07e679580250fe82", "name": "Commented-code block (6 lines) in packages/chord-card/src/ChordCard.tsx:409", "shortDescription": {"text": "Commented-code block (6 lines) in packages/chord-card/src/ChordCard.tsx:409"}, "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-bb4513c17b483aa0", "name": "Commented-code block (5 lines) in src/fiam/config.py:139", "shortDescription": {"text": "Commented-code block (5 lines) in src/fiam/config.py:139"}, "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-ea7f28232bf04b72", "name": "Commented-code block (5 lines) in src/fiam/dispatcher.py:360", "shortDescription": {"text": "Commented-code block (5 lines) in src/fiam/dispatcher.py:360"}, "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-c4fbde5652885048", "name": "Commented-code block (5 lines) in src/fiam/bookshelf.py:509", "shortDescription": {"text": "Commented-code block (5 lines) in src/fiam/bookshelf.py:509"}, "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-62dfea809a6bd493", "name": "Commented-code block (5 lines) in src/fiam/nats_inbound.py:52", "shortDescription": {"text": "Commented-code block (5 lines) in src/fiam/nats_inbound.py:52"}, "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-423d5756018db326", "name": "Commented-code block (6 lines) in src/fiam/record_store.py:39", "shortDescription": {"text": "Commented-code block (6 lines) in src/fiam/record_store.py:39"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f0d10b17d56f16bf", "name": "Commented-code block (5 lines) in src/fiam/conductor.py:117", "shortDescription": {"text": "Commented-code block (5 lines) in src/fiam/conductor.py:117"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-832ad382c02e4536", "name": "Commented-code block (12 lines) in src/fiam/runtime/turns.py:120", "shortDescription": {"text": "Commented-code block (12 lines) in src/fiam/runtime/turns.py:120"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9dd19160187ffd19", "name": "Commented-code block (7 lines) in src/fiam/runtime/prompt.py:192", "shortDescription": {"text": "Commented-code block (7 lines) in src/fiam/runtime/prompt.py:192"}, "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-83b4699c574051c8", "name": "Commented-code block (6 lines) in src/fiam/runtime/thinking.py:35", "shortDescription": {"text": "Commented-code block (6 lines) in src/fiam/runtime/thinking.py:35"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c1fc2fba7ecc6832", "name": "Commented-code block (5 lines) in src/fiam/runtime/api.py:52", "shortDescription": {"text": "Commented-code block (5 lines) in src/fiam/runtime/api.py:52"}, "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-a29a5f70b8145333", "name": "Commented-code block (6 lines) in src/fiam/runtime/thread_recall.py:21", "shortDescription": {"text": "Commented-code block (6 lines) in src/fiam/runtime/thread_recall.py:21"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-040a0276f8c4dbb3", "name": "Commented-code block (6 lines) in src/fiam/store/events.py:230", "shortDescription": {"text": "Commented-code block (6 lines) in src/fiam/store/events.py:230"}, "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-b92e9676abcedb26", "name": "Commented-code block (7 lines) in src/fiam/store/ingest.py:60", "shortDescription": {"text": "Commented-code block (7 lines) in src/fiam/store/ingest.py:60"}, "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-f7df7ba99f968dd4", "name": "Commented-code block (5 lines) in src/fiam/store/object_catalog.py:172", "shortDescription": {"text": "Commented-code block (5 lines) in src/fiam/store/object_catalog.py:172"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-415019b55ac81939", "name": "Commented-code block (7 lines) in channel/server.mjs:167", "shortDescription": {"text": "Commented-code block (7 lines) in channel/server.mjs:167"}, "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-6bc14df28c9088c4", "name": "106 env vars used in code but missing from .env.example", "shortDescription": {"text": "106 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `ALLOW_NO_INGEST_TOKEN`, `ANTHROPIC_API_KEY`, `ANTIPHON_ASK_LOCATION`, `ANTIPHON_ASK_MODEL`, `BOOKSHELF_DIR`, `CAP_DEV_URL`, `CLAUDE_CONFIG_DIR`, `CLOUDFLARE_API_TOKEN` + 98 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-46969939caf8120b", "name": "Near-duplicate function bodies in 9 places", "shortDescription": {"text": "Near-duplicate function bodies in 9 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nmcp/recall/server.py:main, mcp/research/server.py:main, mcp/stickers/server.py:main, mcp/diary/server.py:main\n\nThis is *the* AI-coder failure mode (4\u00d7 more duplication in vibe-coded repos \u2014 see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2c04133e54348533", "name": "Near-duplicate function bodies in 2 places", "shortDescription": {"text": "Near-duplicate function bodies in 2 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nscripts/ccjson_signature_monitor.py:parse_args, scripts/ccjson_model_monitor.py:parse_args\n\nThis is *the* AI-coder failure mode (4\u00d7 more duplication in vibe-coded repos \u2014 see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-be46ea126aa5d8dc", "name": "Near-duplicate function bodies in 3 places", "shortDescription": {"text": "Near-duplicate function bodies in 3 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nscripts/dashboard_server.py:read_from, scripts/dashboard_server.py:read_from, scripts/dashboard_server.py:read\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-49c98f7cedd9c977", "name": "Near-duplicate function bodies in 4 places", "shortDescription": {"text": "Near-duplicate function bodies in 4 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nscripts/dashboard_server.py:add, scripts/dashboard_server.py:add, scripts/dashboard_server.py:add, scripts/dashboard_server.py:add\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-9bf4e2bcf86dadfe", "name": "Dangling fetch: GET /api/antiphon-token (dashboard/src/lib/antiphon/api.ts:11)", "shortDescription": {"text": "Dangling fetch: GET /api/antiphon-token (dashboard/src/lib/antiphon/api.ts:11)"}, "fullDescription": {"text": "`dashboard/src/lib/antiphon/api.ts:11` calls `GET /api/antiphon-token` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/antiphon-token`\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-e678b380f8f20c1a", "name": "Dangling fetch: POST /favilla/upload (dashboard/src/lib/antiphon/api.ts:204)", "shortDescription": {"text": "Dangling fetch: POST /favilla/upload (dashboard/src/lib/antiphon/api.ts:204)"}, "fullDescription": {"text": "`dashboard/src/lib/antiphon/api.ts:204` calls `POST /favilla/upload` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/favilla/upload`\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-45079992425af1e8", "name": "Dangling fetch: GET https://api.mapbox.com/geocoding/v5/mapbox.places/${point.lng.toFixed(6)},${point.lat.toFixed(6)}.js", "shortDescription": {"text": "Dangling fetch: GET https://api.mapbox.com/geocoding/v5/mapbox.places/${point.lng.toFixed(6)},${point.lat.toFixed(6)}.json?${params.toString()} (sources/favilla/app/src/routes/Stroll.tsx:1146)"}, "fullDescription": {"text": "`sources/favilla/app/src/routes/Stroll.tsx:1146` calls `GET https://api.mapbox.com/geocoding/v5/mapbox.places/${point.lng.toFixed(6)},${point.lat.toFixed(6)}.json?${params.toString()}` 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.mapbox.com/geocoding/v5/mapbox.places/<p>,/<p>.json`\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-4f7deb432ad6d88c", "name": "Dangling fetch: POST /app/edit-last (sources/atrium/src/panel/Chat.tsx:586)", "shortDescription": {"text": "Dangling fetch: POST /app/edit-last (sources/atrium/src/panel/Chat.tsx:586)"}, "fullDescription": {"text": "`sources/atrium/src/panel/Chat.tsx:586` calls `POST /app/edit-last` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/app/edit-last`\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-1951a0007d8b2a25", "name": "Unused endpoint: GET /study", "shortDescription": {"text": "Unused endpoint: GET /study"}, "fullDescription": {"text": "`sources/ephemeris/src/study.js` declares `GET /study` 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-47b409d38c11e06a", "name": "Unused endpoint: GET /s/:docid", "shortDescription": {"text": "Unused endpoint: GET /s/:docid"}, "fullDescription": {"text": "`sources/ephemeris/src/study.js` declares `GET /s/:docid` 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-e173f1d43bf698bd", "name": "Unused endpoint: GET /api/study/doc/:docid", "shortDescription": {"text": "Unused endpoint: GET /api/study/doc/:docid"}, "fullDescription": {"text": "`sources/ephemeris/src/study.js` declares `GET /api/study/doc/:docid` 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-38c4ffb92b37faaf", "name": "Unused endpoint: GET /api/study/anno/:docid", "shortDescription": {"text": "Unused endpoint: GET /api/study/anno/:docid"}, "fullDescription": {"text": "`sources/ephemeris/src/study.js` declares `GET /api/study/anno/:docid` 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-abb4934e0f37b818", "name": "Unused endpoint: PUT /api/study/anno/:docid", "shortDescription": {"text": "Unused endpoint: PUT /api/study/anno/:docid"}, "fullDescription": {"text": "`sources/ephemeris/src/study.js` declares `PUT /api/study/anno/:docid` 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": "`sources/ephemeris/src/index.js` 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-1711d05c06f2db63", "name": "Unused endpoint: GET /d/:date", "shortDescription": {"text": "Unused endpoint: GET /d/:date"}, "fullDescription": {"text": "`sources/ephemeris/src/index.js` declares `GET /d/:date` 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-f6becb3d90df373b", "name": "Unused endpoint: GET /a/:slug/:date/:id", "shortDescription": {"text": "Unused endpoint: GET /a/:slug/:date/:id"}, "fullDescription": {"text": "`sources/ephemeris/src/index.js` declares `GET /a/:slug/:date/: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-a26a052bd7c2f277", "name": "Unused endpoint: GET /p/:slug/:date?", "shortDescription": {"text": "Unused endpoint: GET /p/:slug/:date?"}, "fullDescription": {"text": "`sources/ephemeris/src/index.js` declares `GET /p/:slug/:date?` 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-96368adb800413be", "name": "Unused endpoint: GET /api/front/:date?", "shortDescription": {"text": "Unused endpoint: GET /api/front/:date?"}, "fullDescription": {"text": "`sources/ephemeris/src/index.js` declares `GET /api/front/:date?` 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-fad00287fcbe1fac", "name": "Unused endpoint: GET /api/article/:slug/:date/:id", "shortDescription": {"text": "Unused endpoint: GET /api/article/:slug/:date/:id"}, "fullDescription": {"text": "`sources/ephemeris/src/index.js` declares `GET /api/article/:slug/:date/: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-9cd3c933d741fc34", "name": "Unused endpoint: GET /manifest.webmanifest", "shortDescription": {"text": "Unused endpoint: GET /manifest.webmanifest"}, "fullDescription": {"text": "`sources/ephemeris/src/index.js` declares `GET /manifest.webmanifest` 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-f22cf013c13a7f0c", "name": "Unused endpoint: GET /sw.js", "shortDescription": {"text": "Unused endpoint: GET /sw.js"}, "fullDescription": {"text": "`sources/ephemeris/src/index.js` declares `GET /sw.js` 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/23612"}, "properties": {"repository": "Zephyr-Ovo/Fiam", "repoUrl": "https://github.com/Zephyr-Ovo/Fiam", "branch": "main"}, "results": [{"ruleId": "scanner-94b6d680f9e75b4d", "level": "note", "message": {"text": "Possibly dead Python function: held_repl"}, "properties": {"repobilityId": "77978565dfbfa77f", "scanner": "scanner-primary", "fingerprint": "94b6d680f9e75b4d", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/curate_clean_history_memory.py:348"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-91b236e3093d8b43", "level": "note", "message": {"text": "Possibly dead Python function: cot_repl"}, "properties": {"repobilityId": "10aea0522676fd3f", "scanner": "scanner-primary", "fingerprint": "91b236e3093d8b43", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/curate_clean_history_memory.py:352"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-52135ab128fea9eb", "level": "note", "message": {"text": "Possibly dead Python function: agent_start"}, "properties": {"repobilityId": "c1b82aca1eaae3cc", "scanner": "scanner-primary", "fingerprint": "52135ab128fea9eb", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/agent_status.py:21"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-4a91498cfbcfd235", "level": "note", "message": {"text": "Possibly dead Python function: agent_done"}, "properties": {"repobilityId": "9963e027f0b46268", "scanner": "scanner-primary", "fingerprint": "4a91498cfbcfd235", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/agent_status.py:30"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-d93357f250183b1e", "level": "note", "message": {"text": "Possibly dead Python function: order_key"}, "properties": {"repobilityId": "e29bc6821878a777", "scanner": "scanner-primary", "fingerprint": "d93357f250183b1e", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/dashboard_server.py:6592"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-afdb71c39e2f4d19", "level": "note", "message": {"text": "Possibly dead Python function: is_done"}, "properties": {"repobilityId": "5030ddee101bc169", "scanner": "scanner-primary", "fingerprint": "afdb71c39e2f4d19", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/dashboard_server.py:15211"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-4393721616140d88", "level": "note", "message": {"text": "Possibly dead Python function: reader_for"}, "properties": {"repobilityId": "6d9eace270b3ae15", "scanner": "scanner-primary", "fingerprint": "4393721616140d88", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/dashboard_server.py:16096"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-af946b2ab128c7be", "level": "note", "message": {"text": "Possibly dead Python function: do_GET"}, "properties": {"repobilityId": "2d943bb45e4f13bd", "scanner": "scanner-primary", "fingerprint": "af946b2ab128c7be", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/dashboard_server.py:19330"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-d61851305eb0cb01", "level": "note", "message": {"text": "Possibly dead Python function: do_POST"}, "properties": {"repobilityId": "53357410ca9379a9", "scanner": "scanner-primary", "fingerprint": "d61851305eb0cb01", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/dashboard_server.py:20391"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-86d67c3c61e3b0cf", "level": "note", "message": {"text": "Possibly dead Python function: do_DELETE"}, "properties": {"repobilityId": "f3eb582f191adaea", "scanner": "scanner-primary", "fingerprint": "86d67c3c61e3b0cf", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/dashboard_server.py:22024"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-76095b306391a557", "level": "note", "message": {"text": "Possibly dead Python function: do_PUT"}, "properties": {"repobilityId": "f9a37cbbb16037bf", "scanner": "scanner-primary", "fingerprint": "76095b306391a557", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/dashboard_server.py:22112"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-90e5765f1729645d", "level": "note", "message": {"text": "Possibly dead Python function: do_OPTIONS"}, "properties": {"repobilityId": "36491d1f4fa41aef", "scanner": "scanner-primary", "fingerprint": "90e5765f1729645d", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/dashboard_server.py:22171"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-c7a18969ebfaac88", "level": "note", "message": {"text": "Possibly dead Python function: log_message"}, "properties": {"repobilityId": "965f3150b4af5b2e", "scanner": "scanner-primary", "fingerprint": "c7a18969ebfaac88", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/dashboard_server.py:22270"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-1681fb12380b3c5b", "level": "note", "message": {"text": "Possibly dead Python function: do_DELETE"}, "properties": {"repobilityId": "f3eb582f191adaea", "scanner": "scanner-primary", "fingerprint": "1681fb12380b3c5b", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/mcd_mcp_bridge.py:36"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-907702489fedd64a", "level": "note", "message": {"text": "Possibly dead Python function: do_GET"}, "properties": {"repobilityId": "2d943bb45e4f13bd", "scanner": "scanner-primary", "fingerprint": "907702489fedd64a", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/mcd_mcp_bridge.py:39"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-cd89014a13728be3", "level": "note", "message": {"text": "Possibly dead Python function: do_HEAD"}, "properties": {"repobilityId": "105ffef0dec52931", "scanner": "scanner-primary", "fingerprint": "cd89014a13728be3", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/mcd_mcp_bridge.py:42"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-0ee386077cdf1003", "level": "note", "message": {"text": "Possibly dead Python function: do_OPTIONS"}, "properties": {"repobilityId": "36491d1f4fa41aef", "scanner": "scanner-primary", "fingerprint": "0ee386077cdf1003", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/mcd_mcp_bridge.py:45"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-41f753b3d8a2bc16", "level": "note", "message": {"text": "Possibly dead Python function: do_PATCH"}, "properties": {"repobilityId": "0d74622de2ba1ee7", "scanner": "scanner-primary", "fingerprint": "41f753b3d8a2bc16", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/mcd_mcp_bridge.py:48"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-65d46723e363c350", "level": "note", "message": {"text": "Possibly dead Python function: do_POST"}, "properties": {"repobilityId": "53357410ca9379a9", "scanner": "scanner-primary", "fingerprint": "65d46723e363c350", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/mcd_mcp_bridge.py:51"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-de6f430bcfab05a7", "level": "note", "message": {"text": "Possibly dead Python function: do_PUT"}, "properties": {"repobilityId": "f9a37cbbb16037bf", "scanner": "scanner-primary", "fingerprint": "de6f430bcfab05a7", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/mcd_mcp_bridge.py:54"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-30126bfa0dab42d4", "level": "note", "message": {"text": "Possibly dead Python function: log_message"}, "properties": {"repobilityId": "965f3150b4af5b2e", "scanner": "scanner-primary", "fingerprint": "30126bfa0dab42d4", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/mcd_mcp_bridge.py:57"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-05e7a5a5cec95204", "level": "note", "message": {"text": "Possibly dead Python function: budget_awareness"}, "properties": {"repobilityId": "c81137534c28960e", "scanner": "scanner-primary", "fingerprint": "05e7a5a5cec95204", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/fiam_lib/cost.py:122"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-e0be9d605171d053", "level": "note", "message": {"text": "Possibly dead Python function: record_telemetry"}, "properties": {"repobilityId": "b3d085b15409a6a8", "scanner": "scanner-primary", "fingerprint": "e0be9d605171d053", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/fiam_lib/drone_store.py:194"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-d47173afae46ce78", "level": "note", "message": {"text": "Possibly dead Python function: narrate_recall_fragments"}, "properties": {"repobilityId": "81f44ed09e4a950a", "scanner": "scanner-primary", "fingerprint": "d47173afae46ce78", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/fiam_lib/app_markers.py:405"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-0ac7902a87a82a30", "level": "note", "message": {"text": "Possibly dead Python function: note_event"}, "properties": {"repobilityId": "2ed27201202805d4", "scanner": "scanner-primary", "fingerprint": "0ac7902a87a82a30", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/fiam_lib/life_state.py:204"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-1a0fd7066f4c0a6b", "level": "note", "message": {"text": "Possibly dead Python function: timeline_track_names"}, "properties": {"repobilityId": "ea6659955812a76e", "scanner": "scanner-primary", "fingerprint": "1a0fd7066f4c0a6b", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/fiam_lib/timeline.py:187"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-a258df9438a25609", "level": "note", "message": {"text": "Possibly dead Python function: configure"}, "properties": {"repobilityId": "c0dbafc76b7d83b8", "scanner": "scanner-primary", "fingerprint": "a258df9438a25609", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/fiam_lib/dashboard_annotation.py:23"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-60fa04c3e98bd363", "level": "note", "message": {"text": "Possibly dead Python function: save_annotation_state"}, "properties": {"repobilityId": "9a880de417768acf", "scanner": "scanner-primary", "fingerprint": "60fa04c3e98bd363", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/fiam_lib/dashboard_annotation.py:59"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-58f5a79917fbb6e5", "level": "note", "message": {"text": "Possibly dead Python function: safe_event_id"}, "properties": {"repobilityId": "900779d413d2fa7a", "scanner": "scanner-primary", "fingerprint": "58f5a79917fbb6e5", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/fiam_lib/dashboard_annotation.py:70"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3e0d83b73f3ab523", "level": "note", "message": {"text": "Possibly dead Python function: beat_vectors_from_store"}, "properties": {"repobilityId": "5083ad7966b33250", "scanner": "scanner-primary", "fingerprint": "3e0d83b73f3ab523", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/fiam_lib/dashboard_annotation.py:87"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-ad1a66fe6cf4f453", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 sources/favilla/app/src/Shell.tsx:629"}, "properties": {"repobilityId": "69633c809f58e0f4", "scanner": "scanner-primary", "fingerprint": "ad1a66fe6cf4f453", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4b39ab0369d5ee79", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 sources/favilla/app/src/App.tsx:1542"}, "properties": {"repobilityId": "f7338d70f9884fcd", "scanner": "scanner-primary", "fingerprint": "4b39ab0369d5ee79", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d9f80049ff046335", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 sources/favilla/app/src/components/TokenPanel.tsx:101"}, "properties": {"repobilityId": "e00188920fad2e96", "scanner": "scanner-primary", "fingerprint": "d9f80049ff046335", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-3661aad02eb38fc0", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 sources/favilla/app/src/lib/stt.ts:3"}, "properties": {"repobilityId": "c037ae6d1782c4a9", "scanner": "scanner-primary", "fingerprint": "3661aad02eb38fc0", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-d38170ec503c1079", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 sources/favilla/app/src/routes/Brewing.tsx:641"}, "properties": {"repobilityId": "7a5b1e08084c3fc2", "scanner": "scanner-primary", "fingerprint": "d38170ec503c1079", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-263ab7a44748bef3", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 sources/favilla/app/src/routes/Calendar.tsx:785"}, "properties": {"repobilityId": "e7d6fbfe89c3ed96", "scanner": "scanner-primary", "fingerprint": "263ab7a44748bef3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-0dd63884b43ea2e4", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 sources/favilla/app/src/routes/Stroll.tsx:676"}, "properties": {"repobilityId": "a85965cea78ad79f", "scanner": "scanner-primary", "fingerprint": "0dd63884b43ea2e4", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-5450fa45a40e5115", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 sources/favilla/app/src/routes/AgentExtensions.tsx:642"}, "properties": {"repobilityId": "d925aae505d89872", "scanner": "scanner-primary", "fingerprint": "5450fa45a40e5115", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-83121dbad76b6cb0", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 sources/atrium/src/panel/Today.tsx:131"}, "properties": {"repobilityId": "c2a5155e6f257545", "scanner": "scanner-primary", "fingerprint": "83121dbad76b6cb0", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a9329b7e8eceb083", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 sources/atrium/src/panel/Today.tsx:564"}, "properties": {"repobilityId": "2ad7381f7724bea1", "scanner": "scanner-primary", "fingerprint": "a9329b7e8eceb083", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d29477fbae028f70", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 sources/atrium/src/panel/Chat.tsx:139"}, "properties": {"repobilityId": "afc0d6192bf70658", "scanner": "scanner-primary", "fingerprint": "d29477fbae028f70", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-95b11507bc85c802", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 sources/atrium/src/panel/md.tsx:9"}, "properties": {"repobilityId": "c7c357d8d548621c", "scanner": "scanner-primary", "fingerprint": "95b11507bc85c802", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-07a6ae39b41927d6", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 sources/atrium/src/panel/Reading.tsx:303"}, "properties": {"repobilityId": "1329fc3627a8fe06", "scanner": "scanner-primary", "fingerprint": "07a6ae39b41927d6", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-304145e49d4d3795", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 sources/atrium/src/panel/System.tsx:105"}, "properties": {"repobilityId": "4cfdc831234c74d7", "scanner": "scanner-primary", "fingerprint": "304145e49d4d3795", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-91d266bb7b46ebed", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 sources/atrium/src/panel/ui.tsx:213"}, "properties": {"repobilityId": "7013c4238894a909", "scanner": "scanner-primary", "fingerprint": "91d266bb7b46ebed", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-2faea294b57c2552", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 sources/atrium/src/views/ChatView.tsx:185"}, "properties": {"repobilityId": "313912f9c93e5a8f", "scanner": "scanner-primary", "fingerprint": "2faea294b57c2552", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-987af60ddc82f360", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 sources/obsidian-fiam-studio/src/foliate-bundle.js:5142"}, "properties": {"repobilityId": "68fa3722cc48ca8f", "scanner": "scanner-primary", "fingerprint": "987af60ddc82f360", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-3d7ee6bd019c0dce", "level": "warning", "message": {"text": "Insecure pattern 'weak_hash' in CLAUDE.md:24"}, "properties": {"repobilityId": "09374f0f880fc291", "scanner": "scanner-primary", "fingerprint": "3d7ee6bd019c0dce", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "weak_hash"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "CLAUDE.md"}, "region": {"startLine": 24}}}]}, {"ruleId": "scanner-f7c5b517052ed276", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/self_test_favilla.mjs:7"}, "properties": {"repobilityId": "c2c87d8060a83c07", "scanner": "scanner-primary", "fingerprint": "f7c5b517052ed276", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/self_test_favilla.mjs"}, "region": {"startLine": 7}}}]}, {"ruleId": "scanner-b5efedf040a59f6c", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in scripts/dashboard_server.py:19553"}, "properties": {"repobilityId": "720bd8ac279b8a60", "scanner": "scanner-primary", "fingerprint": "b5efedf040a59f6c", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/dashboard_server.py"}, "region": {"startLine": 19553}}}]}, {"ruleId": "scanner-2c17436e414fae36", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in sources/antiphon/app/vite.config.ts:5"}, "properties": {"repobilityId": "a2ef275e985a1117", "scanner": "scanner-primary", "fingerprint": "2c17436e414fae36", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "sources/antiphon/app/vite.config.ts"}, "region": {"startLine": 5}}}]}, {"ruleId": "scanner-c2005bc9e5bfc0ba", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in sources/favilla/demo/index.html:194"}, "properties": {"repobilityId": "172d0623f5592800", "scanner": "scanner-primary", "fingerprint": "c2005bc9e5bfc0ba", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "sources/favilla/demo/index.html"}, "region": {"startLine": 194}}}]}, {"ruleId": "scanner-a6d9aebd76b61191", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in sources/favilla/app/vite.config.ts:5"}, "properties": {"repobilityId": "ac388103563dcead", "scanner": "scanner-primary", "fingerprint": "a6d9aebd76b61191", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "sources/favilla/app/vite.config.ts"}, "region": {"startLine": 5}}}]}, {"ruleId": "scanner-7aa2d4afbf9594b9", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in sources/atrium/browser-extension/content.js:396"}, "properties": {"repobilityId": "413f2a9c3db4376b", "scanner": "scanner-primary", "fingerprint": "7aa2d4afbf9594b9", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "sources/atrium/browser-extension/content.js"}, "region": {"startLine": 396}}}]}, {"ruleId": "scanner-d37819cf5e67f1f8", "level": "warning", "message": {"text": "Insecure pattern 'local_storage_auth_token' in sources/ephemeris/src/study.js:330"}, "properties": {"repobilityId": "a9ee4112287af96b", "scanner": "scanner-primary", "fingerprint": "d37819cf5e67f1f8", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "local_storage_auth_token"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "sources/ephemeris/src/study.js"}, "region": {"startLine": 330}}}]}, {"ruleId": "scanner-66998ce1637f8209", "level": "warning", "message": {"text": "Insecure pattern 'local_storage_auth_token' in sources/ephemeris/src/render.js:466"}, "properties": {"repobilityId": "f54b56260aba6468", "scanner": "scanner-primary", "fingerprint": "66998ce1637f8209", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "local_storage_auth_token"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "sources/ephemeris/src/render.js"}, "region": {"startLine": 466}}}]}, {"ruleId": "scanner-842d97185c3b55d3", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in sources/obsidian-fiam-studio/main.js:2"}, "properties": {"repobilityId": "3ada86e7e24bdd18", "scanner": "scanner-primary", "fingerprint": "842d97185c3b55d3", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "sources/obsidian-fiam-studio/main.js"}, "region": {"startLine": 2}}}]}, {"ruleId": "scanner-f886465e7819837c", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in sources/obsidian-fiam-studio/main.js:55"}, "properties": {"repobilityId": "be4f0752f4e9445e", "scanner": "scanner-primary", "fingerprint": "f886465e7819837c", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "sources/obsidian-fiam-studio/main.js"}, "region": {"startLine": 55}}}]}, {"ruleId": "scanner-a2cde6a75693edff", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in sources/obsidian-fiam-studio/src/foliate-bundle.js:3182"}, "properties": {"repobilityId": "8d67c12ba14eb2d8", "scanner": "scanner-primary", "fingerprint": "a2cde6a75693edff", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "sources/obsidian-fiam-studio/src/foliate-bundle.js"}, "region": {"startLine": 3182}}}]}, {"ruleId": "scanner-56085963248cb253", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in sources/obsidian-fiam-studio/src/main.ts:17"}, "properties": {"repobilityId": "5d74efb99a833e85", "scanner": "scanner-primary", "fingerprint": "56085963248cb253", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "sources/obsidian-fiam-studio/src/main.ts"}, "region": {"startLine": 17}}}]}, {"ruleId": "scanner-8723dd39098dde7b", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in packages/chord-card/src/ChordCard.tsx:375"}, "properties": {"repobilityId": "3be01116b86ebbf6", "scanner": "scanner-primary", "fingerprint": "8723dd39098dde7b", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/chord-card/src/ChordCard.tsx"}, "region": {"startLine": 375}}}]}, {"ruleId": "scanner-7e52d69ff39fff3e", "level": "warning", "message": {"text": "Insecure pattern 'subprocess_shell_true' in src/fiam/runtime/tools.py:1031"}, "properties": {"repobilityId": "335d380704cfbc2b", "scanner": "scanner-primary", "fingerprint": "7e52d69ff39fff3e", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "subprocess_shell_true"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/fiam/runtime/tools.py"}, "region": {"startLine": 1031}}}]}, {"ruleId": "scanner-b91890a5af401f81", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "6393594b009828bc", "scanner": "scanner-primary", "fingerprint": "b91890a5af401f81", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/antiphon-android.yml"}, "region": {"startLine": 44}}}]}, {"ruleId": "scanner-b91890a5af401f81", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "06e6cb9d05fd32fb", "scanner": "scanner-primary", "fingerprint": "b91890a5af401f81", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/antiphon-android.yml"}, "region": {"startLine": 88}}}]}, {"ruleId": "scanner-b559a85c32c99178", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "208ed1b6e54f36e2", "scanner": "scanner-primary", "fingerprint": "b559a85c32c99178", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/antiphon-android.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-4335c6d391ecd9fe", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "ecd10b33aa76841d", "scanner": "scanner-primary", "fingerprint": "4335c6d391ecd9fe", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/favilla-android.yml"}, "region": {"startLine": 57}}}]}, {"ruleId": "scanner-4335c6d391ecd9fe", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "8444574441a480e3", "scanner": "scanner-primary", "fingerprint": "4335c6d391ecd9fe", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/favilla-android.yml"}, "region": {"startLine": 134}}}]}, {"ruleId": "scanner-885b11c9eec046af", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "70922398e3131ede", "scanner": "scanner-primary", "fingerprint": "885b11c9eec046af", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/favilla-android.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-518da4a0cdcb3d1e", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "b19f21a392e22de0", "scanner": "scanner-primary", "fingerprint": "518da4a0cdcb3d1e", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ephemeris-android.yml"}, "region": {"startLine": 35}}}]}, {"ruleId": "scanner-c8b5c8d474c8027d", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "b4c1795bd31e90a9", "scanner": "scanner-primary", "fingerprint": "c8b5c8d474c8027d", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ephemeris-android.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-7d0eda089b5ee4be", "level": "note", "message": {"text": "package.json defines install-time lifecycle scripts"}, "properties": {"repobilityId": "3ad73bf3b6950242", "scanner": "scanner-primary", "fingerprint": "7d0eda089b5ee4be", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "npm", "install-scripts"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "dashboard/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-dd491f073e5d7048", "level": "note", "message": {"text": "Very large file: tests/test_app_runtime_router.py (2156 lines)"}, "properties": {"repobilityId": "26575ca09e0708f6", "scanner": "scanner-primary", "fingerprint": "dd491f073e5d7048", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-e382a5c8253ad5b5", "level": "note", "message": {"text": "Very large file: tests/test_workroom_dashboard.py (1582 lines)"}, "properties": {"repobilityId": "4240c1a9e1f50540", "scanner": "scanner-primary", "fingerprint": "e382a5c8253ad5b5", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-a275b4b840f05387", "level": "note", "message": {"text": "Very large file: scripts/dashboard_server.py (22414 lines)"}, "properties": {"repobilityId": "2b97cb117c62d8dc", "scanner": "scanner-primary", "fingerprint": "a275b4b840f05387", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-c15cddd4f4336501", "level": "note", "message": {"text": "Very large file: scripts/fiam_lib/daemon.py (1443 lines)"}, "properties": {"repobilityId": "e414ba009c62dcd3", "scanner": "scanner-primary", "fingerprint": "c15cddd4f4336501", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-27b9c04493ceeb8c", "level": "note", "message": {"text": "Very large file: scripts/fiam_lib/cc_channel.py (1654 lines)"}, "properties": {"repobilityId": "329a9246151836ac", "scanner": "scanner-primary", "fingerprint": "27b9c04493ceeb8c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-0088df37168e770c", "level": "note", "message": {"text": "Very large file: sources/favilla/app/src/App.tsx (7154 lines)"}, "properties": {"repobilityId": "08c57861d7c8b2ca", "scanner": "scanner-primary", "fingerprint": "0088df37168e770c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-450a935af63137f5", "level": "note", "message": {"text": "Very large file: sources/favilla/app/src/lib/api.ts (2627 lines)"}, "properties": {"repobilityId": "e02c22c4c85e9c26", "scanner": "scanner-primary", "fingerprint": "450a935af63137f5", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-bf07e0816206a8a6", "level": "note", "message": {"text": "Very large file: sources/favilla/app/src/routes/Workroom.tsx (1911 lines)"}, "properties": {"repobilityId": "74c707d7ce91bd5e", "scanner": "scanner-primary", "fingerprint": "bf07e0816206a8a6", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-0f69bd7c4fd40316", "level": "note", "message": {"text": "Very large file: sources/favilla/app/src/routes/Brewing.tsx (1605 lines)"}, "properties": {"repobilityId": "4274036f50ca7844", "scanner": "scanner-primary", "fingerprint": "0f69bd7c4fd40316", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-e69f1ce6305aeac5", "level": "note", "message": {"text": "Very large file: sources/favilla/app/src/routes/Stroll.tsx (1170 lines)"}, "properties": {"repobilityId": "fbdef558dc5638d9", "scanner": "scanner-primary", "fingerprint": "e69f1ce6305aeac5", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-17b288c638295fea", "level": "note", "message": {"text": "Very large file: sources/favilla/app/src/routes/AgentExtensions.tsx (1312 lines)"}, "properties": {"repobilityId": "8b87a462a9786b60", "scanner": "scanner-primary", "fingerprint": "17b288c638295fea", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-f1e5e1bed0182ca9", "level": "note", "message": {"text": "Very large file: sources/atrium/src-tauri/src/main.rs (2588 lines)"}, "properties": {"repobilityId": "75594638b1372831", "scanner": "scanner-primary", "fingerprint": "f1e5e1bed0182ca9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-cdeec93b012a431f", "level": "note", "message": {"text": "Very large file: sources/obsidian-fiam-studio/src/foliate-bundle.js (7574 lines)"}, "properties": {"repobilityId": "6a97ee885646a1b4", "scanner": "scanner-primary", "fingerprint": "cdeec93b012a431f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-2c4daf45b2293405", "level": "note", "message": {"text": "Very large file: src/fiam/bookshelf.py (1537 lines)"}, "properties": {"repobilityId": "75d9432cc02ad105", "scanner": "scanner-primary", "fingerprint": "2c4daf45b2293405", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-c03180cedf26bfc5", "level": "note", "message": {"text": "Very large file: src/fiam/runtime/tools.py (1383 lines)"}, "properties": {"repobilityId": "ac7100fea08c6f3d", "scanner": "scanner-primary", "fingerprint": "c03180cedf26bfc5", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-4ab6cb73ea03cdc1", "level": "note", "message": {"text": "Very large file: src/fiam/runtime/api.py (1477 lines)"}, "properties": {"repobilityId": "86316d4c8b0414fa", "scanner": "scanner-primary", "fingerprint": "4ab6cb73ea03cdc1", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-ea3b5e389d8c9c0f", "level": "note", "message": {"text": "Low test-to-source ratio"}, "properties": {"repobilityId": "ef7b2552cc00a375", "scanner": "scanner-primary", "fingerprint": "ea3b5e389d8c9c0f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["tests"]}}, {"ruleId": "scanner-aba2095ac97be57e", "level": "note", "message": {"text": "50 TODO/FIXME markers"}, "properties": {"repobilityId": "4b38c118003e07d2", "scanner": "scanner-primary", "fingerprint": "aba2095ac97be57e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["maintenance"]}}, {"ruleId": "scanner-360f0e268a63aa6d", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/chord-card/package.json"}, "properties": {"repobilityId": "c772761531a36e35", "scanner": "scanner-primary", "fingerprint": "360f0e268a63aa6d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/chord-card/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "eef7a5c94c9aed12", "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": "39e3c32563ab6a54", "scanner": "scanner-primary", "fingerprint": "72b2a6250083a784", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "incomplete", "generated-repo-pattern"]}}, {"ruleId": "scanner-2d0c7b7ab8f8aacf", "level": "warning", "message": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "properties": {"repobilityId": "ec174f62cad3b4ef", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-749d4bc1bd66df5f", "level": "warning", "message": {"text": "Agent instructions exist but release-hardening basics are missing"}, "properties": {"repobilityId": "d6927dd70a18ad5b", "scanner": "scanner-primary", "fingerprint": "749d4bc1bd66df5f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-ea8f3013f588db25", "level": "note", "message": {"text": "Shallow git history limits provenance confidence"}, "properties": {"repobilityId": "9ad857654d68a1d1", "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": "99b04791f12dedc7", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-f712df9ed1f3019a", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 scripts/workroom_cleanup_project.py:46"}, "properties": {"repobilityId": "95a89478229f08b6", "scanner": "scanner-primary", "fingerprint": "f712df9ed1f3019a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-5f52057103fc9fb0", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/social_browser_action.mjs:64"}, "properties": {"repobilityId": "4d2b8203ae74e974", "scanner": "scanner-primary", "fingerprint": "5f52057103fc9fb0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-32f6a30ec178beaf", "level": "none", "message": {"text": "Commented-code block (5 lines) in scripts/backfill_cot_summary.py:34"}, "properties": {"repobilityId": "a930ff10677f9250", "scanner": "scanner-primary", "fingerprint": "32f6a30ec178beaf", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6a6b4435e599225f", "level": "none", "message": {"text": "Commented-code block (5 lines) in scripts/dashboard_server.py:99"}, "properties": {"repobilityId": "7096a891f19f7872", "scanner": "scanner-primary", "fingerprint": "6a6b4435e599225f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-98602b13818b5c7a", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 scripts/dashboard_server.py:853"}, "properties": {"repobilityId": "4227811594fe9443", "scanner": "scanner-primary", "fingerprint": "98602b13818b5c7a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-03f73cbff14b38fb", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/social_render_cards.mjs:255"}, "properties": {"repobilityId": "a74bf2d71aa70b3c", "scanner": "scanner-primary", "fingerprint": "03f73cbff14b38fb", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-009c7f8620e06a43", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 scripts/fiam_lib/init_wizard.py:159"}, "properties": {"repobilityId": "ed05124d8c678546", "scanner": "scanner-primary", "fingerprint": "009c7f8620e06a43", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-0b88f6ee08b983c6", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 scripts/fiam_lib/home_mgmt.py:71"}, "properties": {"repobilityId": "5e6146733c882f07", "scanner": "scanner-primary", "fingerprint": "0b88f6ee08b983c6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-319e57d396d23594", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 scripts/fiam_lib/daemon.py:666"}, "properties": {"repobilityId": "779f0b5957946a5e", "scanner": "scanner-primary", "fingerprint": "319e57d396d23594", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-fe1d510828d7b183", "level": "none", "message": {"text": "Commented-code block (5 lines) in scripts/fiam_lib/tmux_workroom.py:452"}, "properties": {"repobilityId": "31edb524647766e4", "scanner": "scanner-primary", "fingerprint": "fe1d510828d7b183", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-81a87f9d583d0744", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 scripts/fiam_lib/tmux_workroom.py:47"}, "properties": {"repobilityId": "c0c4760c67490868", "scanner": "scanner-primary", "fingerprint": "81a87f9d583d0744", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d2c22454ead9b20e", "level": "none", "message": {"text": "Commented-code block (7 lines) in scripts/fiam_lib/cc_channel.py:803"}, "properties": {"repobilityId": "076be312b74fe627", "scanner": "scanner-primary", "fingerprint": "d2c22454ead9b20e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-12123750a97242ec", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 scripts/fiam_lib/cc_channel.py:335"}, "properties": {"repobilityId": "e380d77fb7985919", "scanner": "scanner-primary", "fingerprint": "12123750a97242ec", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ff415d4dfcc63524", "level": "note", "message": {"text": "Stub function `update` (body is just `pass`/`return`) \u2014 scripts/fiam_lib/ui.py:39"}, "properties": {"repobilityId": "a56201f790133026", "scanner": "scanner-primary", "fingerprint": "ff415d4dfcc63524", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "empty-handler", "dead-code"]}}, {"ruleId": "scanner-9bd4cb5071ffc56d", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 scripts/fiam_lib/debug_mode.py:84"}, "properties": {"repobilityId": "4bb4ecdeaa38c5b7", "scanner": "scanner-primary", "fingerprint": "9bd4cb5071ffc56d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e9e5da65c9743977", "level": "none", "message": {"text": "Commented-code block (5 lines) in dashboard/src/app.d.ts:5"}, "properties": {"repobilityId": "e5116f078dac1ae5", "scanner": "scanner-primary", "fingerprint": "e9e5da65c9743977", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-575288d0cee2956e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 dashboard/src/lib/api.ts:9"}, "properties": {"repobilityId": "f8ac995ccc1e5853", "scanner": "scanner-primary", "fingerprint": "575288d0cee2956e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-85d6c2c144706959", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 dashboard/src/lib/antiphon/api.ts:11"}, "properties": {"repobilityId": "73f10c3cba3e20a9", "scanner": "scanner-primary", "fingerprint": "85d6c2c144706959", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a52668a0a2e250d0", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 sources/antiphon/app/src/lib/api.ts:436"}, "properties": {"repobilityId": "55886b2f61a58601", "scanner": "scanner-primary", "fingerprint": "a52668a0a2e250d0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9ed191239ee3be80", "level": "none", "message": {"text": "Commented-code block (5 lines) in sources/antiphon/app/src/lib/localStore.ts:6"}, "properties": {"repobilityId": "d5dbbd0bed4fdecb", "scanner": "scanner-primary", "fingerprint": "9ed191239ee3be80", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8cf118115a42754d", "level": "none", "message": {"text": "Commented-code block (10 lines) in sources/antiphon/app/src/lib/fsStore.ts:7"}, "properties": {"repobilityId": "3b490e50aa696366", "scanner": "scanner-primary", "fingerprint": "8cf118115a42754d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-19aaeb67f59c75c8", "level": "none", "message": {"text": "Commented-code block (7 lines) in sources/favilla/easteregg-design/tweaks-panel.jsx:16"}, "properties": {"repobilityId": "be4aac1886a20d88", "scanner": "scanner-primary", "fingerprint": "19aaeb67f59c75c8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2f30feed0257a0a8", "level": "note", "message": {"text": "Legacy-named symbol `cta_compare_v1` in sources/favilla/easteregg-design/data.jsx:82"}, "properties": {"repobilityId": "d20a67830c453397", "scanner": "scanner-primary", "fingerprint": "2f30feed0257a0a8", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-689ece8da2cb05e1", "level": "none", "message": {"text": "Commented-code block (6 lines) in sources/favilla/app/scripts/check-build-env.mjs:3"}, "properties": {"repobilityId": "a4c0111ecf39b87e", "scanner": "scanner-primary", "fingerprint": "689ece8da2cb05e1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-047f570366d0214c", "level": "none", "message": {"text": "Commented-code block (5 lines) in sources/favilla/app/src/Shell.tsx:391"}, "properties": {"repobilityId": "8d76bef31e4daf63", "scanner": "scanner-primary", "fingerprint": "047f570366d0214c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f2e00ffd85caf478", "level": "none", "message": {"text": "Commented-code block (5 lines) in sources/favilla/app/src/App.tsx:182"}, "properties": {"repobilityId": "c2ced428f9c7e749", "scanner": "scanner-primary", "fingerprint": "f2e00ffd85caf478", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bcb3e18704f09e92", "level": "none", "message": {"text": "Commented-code block (8 lines) in sources/favilla/app/src/components/RefreshIcon.tsx:33"}, "properties": {"repobilityId": "ce06bb60b2648da9", "scanner": "scanner-primary", "fingerprint": "bcb3e18704f09e92", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-efccced9aaabd598", "level": "none", "message": {"text": "Commented-code block (10 lines) in sources/favilla/app/src/components/ConfirmModal.tsx:64"}, "properties": {"repobilityId": "34e54f15f910efb6", "scanner": "scanner-primary", "fingerprint": "efccced9aaabd598", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9373012dbec1c44e", "level": "none", "message": {"text": "Commented-code block (6 lines) in sources/favilla/app/src/lib/api.ts:15"}, "properties": {"repobilityId": "c3a7727ff550244c", "scanner": "scanner-primary", "fingerprint": "9373012dbec1c44e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f437931a3c8b10bd", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 sources/favilla/app/src/lib/api.ts:260"}, "properties": {"repobilityId": "f748e6b70f6c3a8f", "scanner": "scanner-primary", "fingerprint": "f437931a3c8b10bd", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2b4b570c3cd3e856", "level": "none", "message": {"text": "Commented-code block (6 lines) in sources/favilla/app/src/lib/msg-cache.ts:1"}, "properties": {"repobilityId": "9d0fe38f0b2e52b3", "scanner": "scanner-primary", "fingerprint": "2b4b570c3cd3e856", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2c372716a4e967c6", "level": "none", "message": {"text": "Commented-code block (6 lines) in sources/favilla/app/src/lib/ImageCropper.tsx:7"}, "properties": {"repobilityId": "7a8093f4183061d6", "scanner": "scanner-primary", "fingerprint": "2c372716a4e967c6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e989960ec835fd02", "level": "none", "message": {"text": "Commented-code block (5 lines) in sources/favilla/app/src/lib/sqlite-store.ts:1"}, "properties": {"repobilityId": "0b2f56ee1f053a6a", "scanner": "scanner-primary", "fingerprint": "e989960ec835fd02", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f405e843288efe82", "level": "none", "message": {"text": "Commented-code block (6 lines) in sources/favilla/app/src/lib/hidden-session-rows.ts:1"}, "properties": {"repobilityId": "d19b28603ad58d32", "scanner": "scanner-primary", "fingerprint": "f405e843288efe82", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6be5ff37c7a50c91", "level": "none", "message": {"text": "Commented-code block (6 lines) in sources/favilla/app/src/lib/book-cache.ts:1"}, "properties": {"repobilityId": "f29971a42860c723", "scanner": "scanner-primary", "fingerprint": "6be5ff37c7a50c91", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9020762061985127", "level": "none", "message": {"text": "Commented-code block (5 lines) in sources/favilla/app/src/lib/bg-store.ts:1"}, "properties": {"repobilityId": "249bf5e62395507b", "scanner": "scanner-primary", "fingerprint": "9020762061985127", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-47221018f314237b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 sources/favilla/app/src/lib/ring-ble.ts:190"}, "properties": {"repobilityId": "a1a790d1a76069ba", "scanner": "scanner-primary", "fingerprint": "47221018f314237b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3b6f2a46f2ddb544", "level": "none", "message": {"text": "Commented-code block (5 lines) in sources/favilla/app/src/lib/pick-image.ts:1"}, "properties": {"repobilityId": "57abba2f28a46f24", "scanner": "scanner-primary", "fingerprint": "3b6f2a46f2ddb544", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a8652b2d8490481d", "level": "none", "message": {"text": "Commented-code block (6 lines) in sources/favilla/app/src/lib/deleted-ids.ts:1"}, "properties": {"repobilityId": "133c61eefb29bfdc", "scanner": "scanner-primary", "fingerprint": "a8652b2d8490481d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-022b45c374a06fec", "level": "none", "message": {"text": "Commented-code block (5 lines) in sources/favilla/app/src/lib/wr-msg-cache.ts:1"}, "properties": {"repobilityId": "4639f228ca0866fd", "scanner": "scanner-primary", "fingerprint": "022b45c374a06fec", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-465a95b3da4ed7f8", "level": "none", "message": {"text": "Commented-code block (13 lines) in sources/favilla/app/src/lib/idb-store.ts:19"}, "properties": {"repobilityId": "7e347a95745f29b5", "scanner": "scanner-primary", "fingerprint": "465a95b3da4ed7f8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fbe61a8b9d41194c", "level": "none", "message": {"text": "Commented-code block (7 lines) in sources/favilla/app/src/lib/voice.ts:43"}, "properties": {"repobilityId": "abfb449032c45de3", "scanner": "scanner-primary", "fingerprint": "fbe61a8b9d41194c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-39592c95c0a58fb2", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 sources/favilla/app/src/lib/voice.ts:47"}, "properties": {"repobilityId": "e9150c45a931c3d3", "scanner": "scanner-primary", "fingerprint": "39592c95c0a58fb2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-5dd88a2e9b483a8d", "level": "none", "message": {"text": "Commented-code block (6 lines) in sources/favilla/app/src/lib/stt.ts:3"}, "properties": {"repobilityId": "dd8778872616dbe3", "scanner": "scanner-primary", "fingerprint": "5dd88a2e9b483a8d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ecb1631232df925a", "level": "none", "message": {"text": "Commented-code block (6 lines) in sources/favilla/app/src/routes/Workroom.tsx:283"}, "properties": {"repobilityId": "6e39095e8bac4a9a", "scanner": "scanner-primary", "fingerprint": "ecb1631232df925a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9e9eea180c6294e0", "level": "none", "message": {"text": "Commented-code block (6 lines) in sources/favilla/app/src/routes/Terminal.tsx:8"}, "properties": {"repobilityId": "5314543caef70f94", "scanner": "scanner-primary", "fingerprint": "9e9eea180c6294e0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9988a02e3d4f1745", "level": "none", "message": {"text": "Commented-code block (5 lines) in sources/favilla/app/src/routes/DataManagement.tsx:288"}, "properties": {"repobilityId": "ec3f94e7b294e26d", "scanner": "scanner-primary", "fingerprint": "9988a02e3d4f1745", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-68604779bbaf44a6", "level": "none", "message": {"text": "Commented-code block (5 lines) in sources/atrium/scripts/shoot.mjs:1"}, "properties": {"repobilityId": "fb6d94c6d88e2293", "scanner": "scanner-primary", "fingerprint": "68604779bbaf44a6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-22595c96cb63098e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 sources/atrium/src/widget/StreamChatLive.tsx:184"}, "properties": {"repobilityId": "d98c26dd5db362d7", "scanner": "scanner-primary", "fingerprint": "22595c96cb63098e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-854fc3aeba4d0fa3", "level": "none", "message": {"text": "Commented-code block (6 lines) in sources/ephemeris/src/study.js:6"}, "properties": {"repobilityId": "6f0ff142ec760a6c", "scanner": "scanner-primary", "fingerprint": "854fc3aeba4d0fa3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4e16a3350df9af61", "level": "none", "message": {"text": "Commented-code block (5 lines) in sources/ephemeris/src/render.js:1"}, "properties": {"repobilityId": "6a0bd6dc78cb918e", "scanner": "scanner-primary", "fingerprint": "4e16a3350df9af61", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-65f9100517e0f435", "level": "none", "message": {"text": "Commented-code block (5 lines) in sources/ephemeris/src/index.js:1"}, "properties": {"repobilityId": "f0251013eb0463a4", "scanner": "scanner-primary", "fingerprint": "65f9100517e0f435", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5a22682299a54c70", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 sources/obsidian-fiam-studio/main.js:55"}, "properties": {"repobilityId": "14dc4cb6f616cbb4", "scanner": "scanner-primary", "fingerprint": "5a22682299a54c70", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-de478c97ac68dfb5", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 sources/obsidian-fiam-studio/src/foliate-bundle.js:3094"}, "properties": {"repobilityId": "9e1962e0822fae81", "scanner": "scanner-primary", "fingerprint": "de478c97ac68dfb5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-07e679580250fe82", "level": "none", "message": {"text": "Commented-code block (6 lines) in packages/chord-card/src/ChordCard.tsx:409"}, "properties": {"repobilityId": "a76c27b104420316", "scanner": "scanner-primary", "fingerprint": "07e679580250fe82", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bb4513c17b483aa0", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/fiam/config.py:139"}, "properties": {"repobilityId": "9f3d2e88a00674e9", "scanner": "scanner-primary", "fingerprint": "bb4513c17b483aa0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ea7f28232bf04b72", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/fiam/dispatcher.py:360"}, "properties": {"repobilityId": "5ae20d556817a348", "scanner": "scanner-primary", "fingerprint": "ea7f28232bf04b72", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c4fbde5652885048", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/fiam/bookshelf.py:509"}, "properties": {"repobilityId": "011103051465b1b5", "scanner": "scanner-primary", "fingerprint": "c4fbde5652885048", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-62dfea809a6bd493", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/fiam/nats_inbound.py:52"}, "properties": {"repobilityId": "f58f5d881c46b363", "scanner": "scanner-primary", "fingerprint": "62dfea809a6bd493", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-423d5756018db326", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/fiam/record_store.py:39"}, "properties": {"repobilityId": "f878ba2f1e00f2f2", "scanner": "scanner-primary", "fingerprint": "423d5756018db326", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f0d10b17d56f16bf", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/fiam/conductor.py:117"}, "properties": {"repobilityId": "e748f890aa7b9d26", "scanner": "scanner-primary", "fingerprint": "f0d10b17d56f16bf", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-832ad382c02e4536", "level": "none", "message": {"text": "Commented-code block (12 lines) in src/fiam/runtime/turns.py:120"}, "properties": {"repobilityId": "2348e85a6caf8971", "scanner": "scanner-primary", "fingerprint": "832ad382c02e4536", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9dd19160187ffd19", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/fiam/runtime/prompt.py:192"}, "properties": {"repobilityId": "25241d190e910097", "scanner": "scanner-primary", "fingerprint": "9dd19160187ffd19", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-83b4699c574051c8", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/fiam/runtime/thinking.py:35"}, "properties": {"repobilityId": "536c473920b319a8", "scanner": "scanner-primary", "fingerprint": "83b4699c574051c8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c1fc2fba7ecc6832", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/fiam/runtime/api.py:52"}, "properties": {"repobilityId": "765ed5f4ae60459e", "scanner": "scanner-primary", "fingerprint": "c1fc2fba7ecc6832", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a29a5f70b8145333", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/fiam/runtime/thread_recall.py:21"}, "properties": {"repobilityId": "c4bfc4be711ee215", "scanner": "scanner-primary", "fingerprint": "a29a5f70b8145333", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-040a0276f8c4dbb3", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/fiam/store/events.py:230"}, "properties": {"repobilityId": "0b56a9e4bf931f65", "scanner": "scanner-primary", "fingerprint": "040a0276f8c4dbb3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b92e9676abcedb26", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/fiam/store/ingest.py:60"}, "properties": {"repobilityId": "3107aea14912be1b", "scanner": "scanner-primary", "fingerprint": "b92e9676abcedb26", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f7df7ba99f968dd4", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/fiam/store/object_catalog.py:172"}, "properties": {"repobilityId": "8843225437a1f5aa", "scanner": "scanner-primary", "fingerprint": "f7df7ba99f968dd4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-415019b55ac81939", "level": "none", "message": {"text": "Commented-code block (7 lines) in channel/server.mjs:167"}, "properties": {"repobilityId": "c37ccd3dde46c8f4", "scanner": "scanner-primary", "fingerprint": "415019b55ac81939", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6bc14df28c9088c4", "level": "note", "message": {"text": "106 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "b7fff702834928d7", "scanner": "scanner-primary", "fingerprint": "6bc14df28c9088c4", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "config-drift"]}}, {"ruleId": "scanner-46969939caf8120b", "level": "note", "message": {"text": "Near-duplicate function bodies in 9 places"}, "properties": {"repobilityId": "8151d5dab55c216c", "scanner": "scanner-primary", "fingerprint": "46969939caf8120b", "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": "1b53430621c7f8dd", "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": "fa3d2f8cbac37ac3", "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": "bdad739a9246e821", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-be46ea126aa5d8dc", "level": "note", "message": {"text": "Near-duplicate function bodies in 3 places"}, "properties": {"repobilityId": "8682a6daeffb6085", "scanner": "scanner-primary", "fingerprint": "be46ea126aa5d8dc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "9315c08739e756aa", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-49c98f7cedd9c977", "level": "note", "message": {"text": "Near-duplicate function bodies in 4 places"}, "properties": {"repobilityId": "a87c19b9842b28ff", "scanner": "scanner-primary", "fingerprint": "49c98f7cedd9c977", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-be46ea126aa5d8dc", "level": "note", "message": {"text": "Near-duplicate function bodies in 3 places"}, "properties": {"repobilityId": "c457a8bea752b893", "scanner": "scanner-primary", "fingerprint": "be46ea126aa5d8dc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-be46ea126aa5d8dc", "level": "note", "message": {"text": "Near-duplicate function bodies in 3 places"}, "properties": {"repobilityId": "54befca9616bdac8", "scanner": "scanner-primary", "fingerprint": "be46ea126aa5d8dc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "51232e56565ac4ef", "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": "2d50012ec3d8bba2", "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": "c14ea6516bcee796", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-be46ea126aa5d8dc", "level": "note", "message": {"text": "Near-duplicate function bodies in 3 places"}, "properties": {"repobilityId": "5ad2f56050616941", "scanner": "scanner-primary", "fingerprint": "be46ea126aa5d8dc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "6bfeb1bfbbf35607", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-be46ea126aa5d8dc", "level": "note", "message": {"text": "Near-duplicate function bodies in 3 places"}, "properties": {"repobilityId": "da2baf5495b55e2f", "scanner": "scanner-primary", "fingerprint": "be46ea126aa5d8dc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "5c3b074388b7e7cf", "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": "92b51b22b681935d", "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": "8875d74a1d8a4baf", "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": "48d25c4de3bc6ca2", "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": "82199eec2a5bcf21", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-9bf4e2bcf86dadfe", "level": "error", "message": {"text": "Dangling fetch: GET /api/antiphon-token (dashboard/src/lib/antiphon/api.ts:11)"}, "properties": {"repobilityId": "4e45e7b50a97f64f", "scanner": "scanner-primary", "fingerprint": "9bf4e2bcf86dadfe", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e678b380f8f20c1a", "level": "error", "message": {"text": "Dangling fetch: POST /favilla/upload (dashboard/src/lib/antiphon/api.ts:204)"}, "properties": {"repobilityId": "567462a7e9b4c8fa", "scanner": "scanner-primary", "fingerprint": "e678b380f8f20c1a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-45079992425af1e8", "level": "error", "message": {"text": "Dangling fetch: GET https://api.mapbox.com/geocoding/v5/mapbox.places/${point.lng.toFixed(6)},${point.lat.toFixed(6)}.json?${params.toString()} (sources/favilla/app/src/routes/Stroll.tsx:1146)"}, "properties": {"repobilityId": "5d7eb72aa45364fe", "scanner": "scanner-primary", "fingerprint": "45079992425af1e8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4f7deb432ad6d88c", "level": "error", "message": {"text": "Dangling fetch: POST /app/edit-last (sources/atrium/src/panel/Chat.tsx:586)"}, "properties": {"repobilityId": "6c1b9ee82252adcf", "scanner": "scanner-primary", "fingerprint": "4f7deb432ad6d88c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1951a0007d8b2a25", "level": "note", "message": {"text": "Unused endpoint: GET /study"}, "properties": {"repobilityId": "43108b607d2b556e", "scanner": "scanner-primary", "fingerprint": "1951a0007d8b2a25", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-47b409d38c11e06a", "level": "note", "message": {"text": "Unused endpoint: GET /s/:docid"}, "properties": {"repobilityId": "f4e4fd3269564ebe", "scanner": "scanner-primary", "fingerprint": "47b409d38c11e06a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e173f1d43bf698bd", "level": "note", "message": {"text": "Unused endpoint: GET /api/study/doc/:docid"}, "properties": {"repobilityId": "ab4514b0988d3be2", "scanner": "scanner-primary", "fingerprint": "e173f1d43bf698bd", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-38c4ffb92b37faaf", "level": "note", "message": {"text": "Unused endpoint: GET /api/study/anno/:docid"}, "properties": {"repobilityId": "1068f51b7693fbe4", "scanner": "scanner-primary", "fingerprint": "38c4ffb92b37faaf", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-abb4934e0f37b818", "level": "note", "message": {"text": "Unused endpoint: PUT /api/study/anno/:docid"}, "properties": {"repobilityId": "fdb9eb5bf9a83b92", "scanner": "scanner-primary", "fingerprint": "abb4934e0f37b818", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5baa8971ebe192a1", "level": "note", "message": {"text": "Unused endpoint: GET /"}, "properties": {"repobilityId": "dbe04a49f6e99cc8", "scanner": "scanner-primary", "fingerprint": "5baa8971ebe192a1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1711d05c06f2db63", "level": "note", "message": {"text": "Unused endpoint: GET /d/:date"}, "properties": {"repobilityId": "74a5f65960e4e67e", "scanner": "scanner-primary", "fingerprint": "1711d05c06f2db63", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f6becb3d90df373b", "level": "note", "message": {"text": "Unused endpoint: GET /a/:slug/:date/:id"}, "properties": {"repobilityId": "5697b3bec14d3eaf", "scanner": "scanner-primary", "fingerprint": "f6becb3d90df373b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a26a052bd7c2f277", "level": "note", "message": {"text": "Unused endpoint: GET /p/:slug/:date?"}, "properties": {"repobilityId": "33f97ad6a7c5da7a", "scanner": "scanner-primary", "fingerprint": "a26a052bd7c2f277", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-96368adb800413be", "level": "note", "message": {"text": "Unused endpoint: GET /api/front/:date?"}, "properties": {"repobilityId": "a738079e41ad6a22", "scanner": "scanner-primary", "fingerprint": "96368adb800413be", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-fad00287fcbe1fac", "level": "note", "message": {"text": "Unused endpoint: GET /api/article/:slug/:date/:id"}, "properties": {"repobilityId": "e36757283460dc72", "scanner": "scanner-primary", "fingerprint": "fad00287fcbe1fac", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-9cd3c933d741fc34", "level": "note", "message": {"text": "Unused endpoint: GET /manifest.webmanifest"}, "properties": {"repobilityId": "f34722ec82daf876", "scanner": "scanner-primary", "fingerprint": "9cd3c933d741fc34", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f22cf013c13a7f0c", "level": "note", "message": {"text": "Unused endpoint: GET /sw.js"}, "properties": {"repobilityId": "999e6648c17e3a21", "scanner": "scanner-primary", "fingerprint": "f22cf013c13a7f0c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}