{"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-a85cc158664d0a0f", "name": "Stray `console.log` in TS/JS \u2014 apps/api/src/main.ts:138", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/api/src/main.ts:138"}, "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-2c4dee59aed04d9f", "name": "Stray `console.log` in TS/JS \u2014 apps/api/src/monitor/traffic-monitor.ts:82", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/api/src/monitor/traffic-monitor.ts:82"}, "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-4b50d821031eba54", "name": "Stray `console.log` in TS/JS \u2014 apps/api/src/xshield/watch-poller.ts:33", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/api/src/xshield/watch-poller.ts:33"}, "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-0cdb8be5c0a80e26", "name": "Stray `console.log` in TS/JS \u2014 apps/api/src/warrior/wire-publisher.ts:107", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/api/src/warrior/wire-publisher.ts:107"}, "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-6197f3549bdc84d5", "name": "TODO/FIXME marker in shipping code \u2014 apps/api/src/graphql/types/user.ts:46", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 apps/api/src/graphql/types/user.ts:46"}, "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-1accef80777b0e18", "name": "Stray `console.log` in TS/JS \u2014 apps/desktop/test-services.ts:10", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/desktop/test-services.ts:10"}, "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-9239c12e43cc3163", "name": "Stray `console.log` in TS/JS \u2014 apps/desktop/src/renderer/app.js:8", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/desktop/src/renderer/app.js:8"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d689982e4e5fd586", "name": "Icon-only button without accessible name \u2014 apps/desktop/src/renderer/components/Settings.tsx:89", "shortDescription": {"text": "Icon-only button without accessible name \u2014 apps/desktop/src/renderer/components/Settings.tsx:89"}, "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-3c178e2c9b394c28", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/desktop/src/renderer/pages/SettingsAegis.tsx:537", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/desktop/src/renderer/pages/SettingsAegis.tsx:537"}, "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-a077d0375ee22029", "name": "TODO/FIXME marker in shipping code \u2014 apps/desktop/src/main/auto-launch.ts:28", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 apps/desktop/src/main/auto-launch.ts:28"}, "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-a298920c643c814f", "name": "Stray `console.log` in TS/JS \u2014 apps/desktop/src/main/auto-launch.ts:23", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/desktop/src/main/auto-launch.ts:23"}, "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-fd12eced51ac10d1", "name": "Stray `console.log` in TS/JS \u2014 apps/desktop/src/main/index.ts:56", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/desktop/src/main/index.ts:56"}, "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-0da98f8d0dcc8628", "name": "Stray `console.log` in TS/JS \u2014 apps/desktop/src/main/updater.ts:17", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/desktop/src/main/updater.ts:17"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8b2233f07a2e384b", "name": "TODO/FIXME marker in shipping code \u2014 apps/desktop/src/main/ipc.ts:124", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 apps/desktop/src/main/ipc.ts:124"}, "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-9269dca3af1afa4a", "name": "Stray `console.log` in TS/JS \u2014 apps/desktop/src/main/ipc.ts:21", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/desktop/src/main/ipc.ts:21"}, "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-072dfac63d71b694", "name": "TODO/FIXME marker in shipping code \u2014 apps/desktop/src/main/tray.ts:106", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 apps/desktop/src/main/tray.ts:106"}, "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-2db1f0ac4d9c34a1", "name": "TODO/FIXME marker in shipping code \u2014 apps/desktop/src/main/__tests__/window.test.ts:14", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 apps/desktop/src/main/__tests__/window.test.ts:14"}, "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-c69a36f9ca47b7c5", "name": "TODO/FIXME marker in shipping code \u2014 apps/desktop/src/main/__tests__/tray.test.ts:13", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 apps/desktop/src/main/__tests__/tray.test.ts:13"}, "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-5a211b00d17add0b", "name": "TODO/FIXME marker in shipping code \u2014 apps/desktop/src/main/__tests__/auto-launch.test.ts:13", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 apps/desktop/src/main/__tests__/auto-launch.test.ts:13"}, "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-3391bd9dbc31ee1d", "name": "TODO/FIXME marker in shipping code \u2014 apps/desktop/src/main/ipc/handlers.ts:75", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 apps/desktop/src/main/ipc/handlers.ts:75"}, "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-87ae8ee3a1712f8f", "name": "Stray `console.log` in TS/JS \u2014 apps/desktop/src/main/ipc/handlers.ts:76", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/desktop/src/main/ipc/handlers.ts:76"}, "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-738bfea978e6fb8a", "name": "TODO/FIXME marker in shipping code \u2014 apps/desktop/src/main/services/privacy.ts:371", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 apps/desktop/src/main/services/privacy.ts:371"}, "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-6262cb2f2eb98717", "name": "Stray `console.log` in TS/JS \u2014 apps/desktop/src/main/services/privacy.ts:80", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/desktop/src/main/services/privacy.ts:80"}, "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-0115fd9c49151191", "name": "TODO/FIXME marker in shipping code \u2014 apps/desktop/src/main/services/network.ts:127", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 apps/desktop/src/main/services/network.ts:127"}, "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-3d85d6f41d75e8f5", "name": "Stray `console.log` in TS/JS \u2014 apps/desktop/src/main/services/network.ts:79", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/desktop/src/main/services/network.ts:79"}, "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-fdbd50c68a0064fd", "name": "TODO/FIXME marker in shipping code \u2014 apps/desktop/src/main/services/dns.ts:172", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 apps/desktop/src/main/services/dns.ts:172"}, "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-58d6281139c1190d", "name": "Stray `console.log` in TS/JS \u2014 apps/desktop/src/main/services/dns.ts:58", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/desktop/src/main/services/dns.ts:58"}, "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-83031c6cd9c78b05", "name": "Stray `console.log` in TS/JS \u2014 apps/desktop/src/main/services/settings.ts:184", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/desktop/src/main/services/settings.ts:184"}, "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-4901b19924314878", "name": "Stray `console.log` in TS/JS \u2014 apps/desktop/src/main/services/service-manager.ts:90", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/desktop/src/main/services/service-manager.ts:90"}, "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-4fbd0ee1e1b6c451", "name": "Stray `console.log` in TS/JS \u2014 apps/desktop/src/main/infrastructure/user.ts:53", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/desktop/src/main/infrastructure/user.ts:53"}, "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-dbf09c58fc3d7f53", "name": "Stray `console.log` in TS/JS \u2014 apps/desktop/src/main/infrastructure/redis.ts:64", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/desktop/src/main/infrastructure/redis.ts:64"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3c14a2b25b1f6c97", "name": "Stray `console.log` in TS/JS \u2014 apps/desktop/src/main/infrastructure/database.ts:54", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/desktop/src/main/infrastructure/database.ts:54"}, "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-d1db77195053f499", "name": "Stray `console.log` in TS/JS \u2014 apps/desktop/src/main/aegis-proxy/wa-inbound-webhook-server.ts:108", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/desktop/src/main/aegis-proxy/wa-inbound-webhook-server.ts:108"}, "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-13276e5ce4de9aef", "name": "Stray `console.log` in TS/JS \u2014 apps/desktop/src/main/aegis-proxy/server.ts:103", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/desktop/src/main/aegis-proxy/server.ts:103"}, "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-27277afb27fc72e9", "name": "Stray `console.log` in TS/JS \u2014 apps/desktop/src/main/aegis-proxy/ipc-handlers.ts:855", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/desktop/src/main/aegis-proxy/ipc-handlers.ts:855"}, "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-9d658877751688b2", "name": "Stray `console.log` in TS/JS \u2014 apps/desktop/src/main/aegis-proxy/dan-inbound-poller.ts:97", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/desktop/src/main/aegis-proxy/dan-inbound-poller.ts:97"}, "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-06bb4bc7f38c2fd8", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/CertStreamWidget.tsx:146", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/CertStreamWidget.tsx:146"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-dd2a795f48e2728e", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/AlertTimeline.tsx:118", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/AlertTimeline.tsx:118"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-142d0d47b5916c1a", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/pages/LiveThreats.tsx:535", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/pages/LiveThreats.tsx:535"}, "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-3cb8a39894656a72", "name": "Icon-only button without accessible name \u2014 apps/web/src/pages/MdmAdmin.tsx:654", "shortDescription": {"text": "Icon-only button without accessible name \u2014 apps/web/src/pages/MdmAdmin.tsx:654"}, "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-8b723097564ad1bf", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/pages/ApiKeys.tsx:569", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/pages/ApiKeys.tsx:569"}, "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-44a42757c582caee", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/pages/Dashboard.tsx:695", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/pages/Dashboard.tsx:695"}, "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-94a8ace756c0bea7", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/pages/CommandCenter.tsx:267", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/pages/CommandCenter.tsx:267"}, "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-8f2ed8aec225590f", "name": "Stray `console.log` in TS/JS \u2014 apps/web/src/pages/Developers.tsx:149", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/web/src/pages/Developers.tsx:149"}, "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-ee5e82d0da807e71", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/pages/WatchDetail.tsx:80", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/pages/WatchDetail.tsx:80"}, "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-e5929fa3331f131a", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/pages/Analytics.tsx:246", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/pages/Analytics.tsx:246"}, "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-0e7a4deb96450948", "name": "Stray `console.log` in TS/JS \u2014 apps/mobile-ios/android/build-tracker-db.js:274", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/mobile-ios/android/build-tracker-db.js:274"}, "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-19dbd89657180bb2", "name": "TODO/FIXME marker in shipping code \u2014 apps/mobile-ios/src/hooks/usePhoneRisk.ts:23", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 apps/mobile-ios/src/hooks/usePhoneRisk.ts:23"}, "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-dcc17f17e3b069b4", "name": "Stray `console.log` in TS/JS \u2014 apps/mobile-ios/src/hooks/useBlocklist.ts:145", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/mobile-ios/src/hooks/useBlocklist.ts:145"}, "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-ad1d04943a776aeb", "name": "Stray `console.log` in TS/JS \u2014 apps/warrior-cli/src/commands/status.ts:7", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/warrior-cli/src/commands/status.ts:7"}, "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-630832662eb07f15", "name": "Stray `console.log` in TS/JS \u2014 apps/warrior-cli/src/commands/start.ts:7", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/warrior-cli/src/commands/start.ts:7"}, "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-719a80176ccdafac", "name": "Stray `console.log` in TS/JS \u2014 apps/warrior-cli/src/commands/setup.ts:5", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/warrior-cli/src/commands/setup.ts:5"}, "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-ba1dd53b3135598c", "name": "Stray `console.log` in TS/JS \u2014 apps/warrior-cli/src/commands/scan.ts:17", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/warrior-cli/src/commands/scan.ts:17"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-eb5cee87505b3453", "name": "Stray `console.log` in TS/JS \u2014 scripts/p2-exit-check.ts:308", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/p2-exit-check.ts:308"}, "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-d8e4f4fe616cf0ce", "name": "Stray `console.log` in TS/JS \u2014 scripts/p3-exit-check.ts:255", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/p3-exit-check.ts:255"}, "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-5241301d71dd90b9", "name": "Stray `console.log` in TS/JS \u2014 scripts/test-db-connection.js:22", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-db-connection.js:22"}, "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-414bbec74e82f1ac", "name": "Stray `console.log` in TS/JS \u2014 prisma/seed.ts:17", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 prisma/seed.ts:17"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d1119b1a86b3ad4c", "name": "TODO/FIXME marker in shipping code \u2014 packages/api-client/src/client.ts:19", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 packages/api-client/src/client.ts:19"}, "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-fc4df71b64bdc09d", "name": "Stray `console.log` in TS/JS \u2014 packages/network-monitor/scripts/test-capture.ts:11", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/network-monitor/scripts/test-capture.ts:11"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-fd0fa2129aef43a3", "name": "Stray `console.log` in TS/JS \u2014 packages/network-monitor/scripts/run-tests.ts:13", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/network-monitor/scripts/run-tests.ts:13"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-47a7b35de4661cd4", "name": "Stray `console.log` in TS/JS \u2014 packages/network-monitor/scripts/test-integration.ts:11", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/network-monitor/scripts/test-integration.ts:11"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-50df855f8a78c64f", "name": "TODO/FIXME marker in shipping code \u2014 packages/network-monitor/src/monitor.ts:17", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 packages/network-monitor/src/monitor.ts:17"}, "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-b782cac3b45d03dd", "name": "Stray `console.log` in TS/JS \u2014 packages/network-monitor/src/monitor/macos-monitor.ts:70", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/network-monitor/src/monitor/macos-monitor.ts:70"}, "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-7b34da8d82845d5d", "name": "Stray `console.log` in TS/JS \u2014 packages/network-monitor/src/monitor/linux-monitor.ts:109", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/network-monitor/src/monitor/linux-monitor.ts:109"}, "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-6d88fdbe40c9bb6a", "name": "Stray `console.log` in TS/JS \u2014 packages/network-monitor/src/monitor/windows-monitor.ts:79", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/network-monitor/src/monitor/windows-monitor.ts:79"}, "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-6cbee9516e8d8159", "name": "TODO/FIXME marker in shipping code \u2014 packages/network-monitor/src/capture/tls-parser.ts:260", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 packages/network-monitor/src/capture/tls-parser.ts:260"}, "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-340c15f081f50111", "name": "Stray `console.log` in TS/JS \u2014 packages/dns-resolver/scripts/download-blocklists.ts:56", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/dns-resolver/scripts/download-blocklists.ts:56"}, "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-7065cbd9e0efee26", "name": "Stray `console.log` in TS/JS \u2014 packages/dns-resolver/scripts/test-full-resolver.ts:15", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/dns-resolver/scripts/test-full-resolver.ts:15"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c9144cccfa4abf8a", "name": "Stray `console.log` in TS/JS \u2014 packages/dns-resolver/scripts/import-to-database.ts:58", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/dns-resolver/scripts/import-to-database.ts:58"}, "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-c26d85345743ccbb", "name": "Stray `console.log` in TS/JS \u2014 packages/dns-resolver/scripts/test-lookup.ts:13", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/dns-resolver/scripts/test-lookup.ts:13"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-52a708aab9ab80f4", "name": "Stray `console.log` in TS/JS \u2014 packages/dns-resolver/scripts/parse-blocklists.ts:154", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/dns-resolver/scripts/parse-blocklists.ts:154"}, "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-d5a52b3573be3ce3", "name": "Stray `console.log` in TS/JS \u2014 packages/dns-resolver/scripts/cache-metrics.ts:15", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/dns-resolver/scripts/cache-metrics.ts:15"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ea1c4aa644909038", "name": "Stray `console.log` in TS/JS \u2014 packages/dns-resolver/scripts/comprehensive-test.ts:31", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/dns-resolver/scripts/comprehensive-test.ts:31"}, "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-2a8e1aebc0e23dfb", "name": "Stray `console.log` in TS/JS \u2014 packages/dns-resolver/scripts/test-logger.ts:15", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/dns-resolver/scripts/test-logger.ts:15"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ce3baf6bfd370680", "name": "Stray `console.log` in TS/JS \u2014 packages/dns-resolver/src/service.ts:200", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/dns-resolver/src/service.ts:200"}, "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-03888fac5b896d95", "name": "Stray `console.log` in TS/JS \u2014 packages/dns-resolver/src/blocklist/manager.ts:28", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/dns-resolver/src/blocklist/manager.ts:28"}, "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-813daac51c610bad", "name": "Stray `console.log` in TS/JS \u2014 packages/dns-resolver/src/cache/dns-cache.ts:50", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/dns-resolver/src/cache/dns-cache.ts:50"}, "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-870098847fc07a47", "name": "Stray `console.log` in TS/JS \u2014 packages/dns-resolver/src/logger/dns-logger.ts:165", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/dns-resolver/src/logger/dns-logger.ts:165"}, "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-7db73a849e0d159a", "name": "TODO/FIXME marker in shipping code \u2014 packages/crypto/src/encrypt.ts:6", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 packages/crypto/src/encrypt.ts:6"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7cf9f7b24a68ba4f", "name": "Stray `console.log` in TS/JS \u2014 packages/ai-warrior/src/warrior.ts:12", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/ai-warrior/src/warrior.ts:12"}, "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-1c457d6846ff73a3", "name": "Stray `console.log` in TS/JS \u2014 packages/privacy-engine/scripts/import-trackers.ts:24", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/privacy-engine/scripts/import-trackers.ts:24"}, "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-790d24416589f362", "name": "Stray `console.log` in TS/JS \u2014 packages/privacy-engine/scripts/run-tests.ts:10", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/privacy-engine/scripts/run-tests.ts:10"}, "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-b8956f439db51ede", "name": "Stray `console.log` in TS/JS \u2014 packages/privacy-engine/scripts/test-privacy-scoring.ts:7", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/privacy-engine/scripts/test-privacy-scoring.ts:7"}, "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-cfb8cd4cc123f6ac", "name": "TODO/FIXME marker in shipping code \u2014 packages/privacy-engine/src/engine.ts:13", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 packages/privacy-engine/src/engine.ts:13"}, "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-77c077478f36b171", "name": "Stray `console.log` in TS/JS \u2014 packages/core/src/cache/redis.ts:25", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/core/src/cache/redis.ts:25"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e10fe9a74de12aeb", "name": "Dockerfile runs as root: docker/postgres/Dockerfile", "shortDescription": {"text": "Dockerfile runs as root: docker/postgres/Dockerfile"}, "fullDescription": {"text": "No non-root USER set. Containers running as root expand the blast radius of any vulnerability inside the image."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-02b6b6b2a5d47e31", "name": "Docker base image is tag-pinned but not digest-pinned: timescale/timescaledb-ha:pg15-latest", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: timescale/timescaledb-ha:pg15-latest"}, "fullDescription": {"text": "Container tags can be retagged upstream. Pin production base images to a reviewed digest (`image@sha256:...`) when reproducibility and supply-chain integrity matter."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-aa5acaa49eb8315b", "name": "Containers defined but no K8s/orchestration manifest found", "shortDescription": {"text": "Containers defined but no K8s/orchestration manifest found"}, "fullDescription": {"text": "Repo has Dockerfiles/compose but no Kubernetes/Nomad manifests. If the target deployment is K8s, the manifests may live in a separate ops repo."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e611a3c1783f8baf", "name": "Runtime dotenv file present in repo: apps/web/.env.production", "shortDescription": {"text": "Runtime dotenv file present in repo: apps/web/.env.production"}, "fullDescription": {"text": "`apps/web/.env.production` looks like a runtime dotenv file. No high-confidence secret value was matched, but runtime dotenv files often drift into live credentials. Move real values to a secret manager and keep only `.env.example` style templates in source control."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f040171893c39694", "name": "Insecure pattern 'node_child_process' in apps/api/src/main.ts:5", "shortDescription": {"text": "Insecure pattern 'node_child_process' in apps/api/src/main.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-a11a8f709aa6e7da", "name": "Insecure pattern 'cors_wildcard' in apps/api/src/main.ts:4210", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in apps/api/src/main.ts:4210"}, "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-c960e19406247f83", "name": "Insecure pattern 'direct_innerhtml_assignment' in apps/desktop/src/renderer/app.js:54", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in apps/desktop/src/renderer/app.js:54"}, "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-ebc093abb51cd9d2", "name": "Insecure pattern 'node_child_process' in apps/desktop/src/main/__tests__/aegis-proxy-zip-writer.test.ts:7", "shortDescription": {"text": "Insecure pattern 'node_child_process' in apps/desktop/src/main/__tests__/aegis-proxy-zip-writer.test.ts: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-9ce66ff1391df45e", "name": "Insecure pattern 'node_child_process' in apps/desktop/src/main/infrastructure/permissions.ts:1", "shortDescription": {"text": "Insecure pattern 'node_child_process' in apps/desktop/src/main/infrastructure/permissions.ts:1"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-10ecce8507a4e7ce", "name": "Insecure pattern 'exec_used' in apps/desktop/src/main/aegis-proxy/app-identifier.ts:68", "shortDescription": {"text": "Insecure pattern 'exec_used' in apps/desktop/src/main/aegis-proxy/app-identifier.ts:68"}, "fullDescription": {"text": "Found a known-risky pattern (exec_used). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-26e8adb1781c7244", "name": "Insecure pattern 'node_child_process' in apps/desktop/src/main/aegis-proxy/app-identifier.ts:12", "shortDescription": {"text": "Insecure pattern 'node_child_process' in apps/desktop/src/main/aegis-proxy/app-identifier.ts:12"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2398cf3f62acbf32", "name": "Insecure pattern 'direct_innerhtml_assignment' in apps/web/public/privacy.html:105", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in apps/web/public/privacy.html:105"}, "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-5407abcb99193122", "name": "Insecure pattern 'direct_innerhtml_assignment' in apps/web/public/capabilities.html:134", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in apps/web/public/capabilities.html:134"}, "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-14c5394daa8b9377", "name": "Insecure pattern 'local_storage_auth_token' in apps/web/src/stores/authStore.ts:57", "shortDescription": {"text": "Insecure pattern 'local_storage_auth_token' in apps/web/src/stores/authStore.ts:57"}, "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-0aa7f598f7185cf6", "name": "Insecure pattern 'local_storage_auth_token' in apps/web/src/pages/VerifyMagicLink.tsx:58", "shortDescription": {"text": "Insecure pattern 'local_storage_auth_token' in apps/web/src/pages/VerifyMagicLink.tsx:58"}, "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-38601a38b7f49136", "name": "Insecure pattern 'node_child_process' in apps/xshieldai-varuna/src/report/routes.ts:8", "shortDescription": {"text": "Insecure pattern 'node_child_process' in apps/xshieldai-varuna/src/report/routes.ts:8"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2eb67d512bc4b830", "name": "Insecure pattern 'node_child_process' in scripts/p2-exit-check.ts:15", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/p2-exit-check.ts:15"}, "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-8188f10c61763d67", "name": "Insecure pattern 'node_child_process' in scripts/p3-exit-check.ts:9", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/p3-exit-check.ts:9"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ea2792e6cb12c1bf", "name": "Possible secret in scripts/test-db-connection.js", "shortDescription": {"text": "Possible secret in scripts/test-db-connection.js"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-37ee933cc1e6f96b", "name": "Insecure pattern 'node_child_process' in packages/network-monitor/src/classification/app-resolver.ts:7", "shortDescription": {"text": "Insecure pattern 'node_child_process' in packages/network-monitor/src/classification/app-resolver.ts: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-875643958a961f71", "name": "Insecure pattern 'node_child_process' in packages/network-monitor/src/monitor/macos-monitor.ts:14", "shortDescription": {"text": "Insecure pattern 'node_child_process' in packages/network-monitor/src/monitor/macos-monitor.ts:14"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e9a2880cb6be25df", "name": "Insecure pattern 'node_child_process' in packages/network-monitor/src/monitor/linux-monitor.ts:14", "shortDescription": {"text": "Insecure pattern 'node_child_process' in packages/network-monitor/src/monitor/linux-monitor.ts:14"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-55010b4411f37acf", "name": "Insecure pattern 'node_child_process' in packages/network-monitor/src/monitor/windows-monitor.ts:14", "shortDescription": {"text": "Insecure pattern 'node_child_process' in packages/network-monitor/src/monitor/windows-monitor.ts:14"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c3cdc07b7677a669", "name": "Insecure pattern 'cors_wildcard' in packages/dns-resolver/src/service.ts:87", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in packages/dns-resolver/src/service.ts:87"}, "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-6bd573fc5ccdf26e", "name": "Insecure pattern 'weak_hash' in packages/spyware-detector/src/live-ioc-feed.ts:256", "shortDescription": {"text": "Insecure pattern 'weak_hash' in packages/spyware-detector/src/live-ioc-feed.ts:256"}, "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-aa9ba3af9aa09d9f", "name": "Insecure pattern 'node_child_process' in packages/spyware-detector/src/detectors/process-detector.ts:20", "shortDescription": {"text": "Insecure pattern 'node_child_process' in packages/spyware-detector/src/detectors/process-detector.ts:20"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-1b1d3b7452c7c111", "name": "Insecure pattern 'node_child_process' in packages/spyware-detector/src/detectors/linux-rootkit-detector.ts:24", "shortDescription": {"text": "Insecure pattern 'node_child_process' in packages/spyware-detector/src/detectors/linux-rootkit-detector.ts:24"}, "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-c721626238b47f41", "name": "Insecure pattern 'node_child_process' in packages/spyware-detector/src/detectors/cve-detector.ts:28", "shortDescription": {"text": "Insecure pattern 'node_child_process' in packages/spyware-detector/src/detectors/cve-detector.ts:28"}, "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-67c146d6dfac77c5", "name": "Insecure pattern 'node_child_process' in packages/spyware-detector/src/detectors/yara-detector.ts:16", "shortDescription": {"text": "Insecure pattern 'node_child_process' in packages/spyware-detector/src/detectors/yara-detector.ts:16"}, "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-b57203f73e5c4950", "name": "Possible secret in packages/ai-warrior/src/defense/honeypot.ts", "shortDescription": {"text": "Possible secret in packages/ai-warrior/src/defense/honeypot.ts"}, "fullDescription": {"text": "Detected pattern matching github_token. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-27924aa79fa4a517", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7f1e4527e6fecffa", "name": "GitHub Action tracks a moving branch", "shortDescription": {"text": "GitHub Action tracks a moving branch"}, "fullDescription": {"text": "snyk/actions/node@master 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": "high", "confidence": 1.0}}, {"id": "scanner-cb639d9a10a47b23", "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-bb3a53b8b101640c", "name": "Very large file: apps/api/src/main.ts (5636 lines)", "shortDescription": {"text": "Very large file: apps/api/src/main.ts (5636 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": "66 tests / 509 src (ratio 0.13)."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-720a280bf799af06", "name": "36 TODO/FIXME markers", "shortDescription": {"text": "36 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-b06b8d86f24c77f9", "name": "Node manifest has dependencies but no lockfile: apps/api/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: apps/api/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-d57b3f82d2270c5b", "name": "Node manifest has dependencies but no lockfile: apps/desktop/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: apps/desktop/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-4a9eb7dc7c6e3880", "name": "Node manifest has dependencies but no lockfile: apps/web/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: apps/web/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-fed219f15c4decf5", "name": "Node manifest has dependencies but no lockfile: apps/xshieldai-varuna/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: apps/xshieldai-varuna/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-3a71a95a152f7951", "name": "Node manifest has dependencies but no lockfile: apps/mobile-ios/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: apps/mobile-ios/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-26495efd67dc2ac0", "name": "Node manifest has dependencies but no lockfile: apps/xshield-active-api/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: apps/xshield-active-api/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-892d4f964c9036e2", "name": "Node manifest has dependencies but no lockfile: packages/api-client/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/api-client/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-9b324ea9b7a52e62", "name": "Node manifest has dependencies but no lockfile: packages/network-monitor/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/network-monitor/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-80d42b32fc918c29", "name": "Node manifest has dependencies but no lockfile: packages/dns-resolver/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/dns-resolver/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-7b85b0a5c9a918e4", "name": "Node manifest has dependencies but no lockfile: packages/crypto/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/crypto/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-eddecaa766cadff2", "name": "Node manifest has dependencies but no lockfile: packages/config/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/config/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-e1af77fd74aef4ae", "name": "Node manifest has dependencies but no lockfile: packages/spyware-detector/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/spyware-detector/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-f44e879049b2e264", "name": "Node manifest has dependencies but no lockfile: packages/ai-warrior/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/ai-warrior/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-50218c90b43393bb", "name": "Node manifest has dependencies but no lockfile: packages/ui/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/ui/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-6a30a5d12e676c8c", "name": "Node manifest has dependencies but no lockfile: packages/risk-intelligence/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/risk-intelligence/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-f6bd9133118a202b", "name": "Node manifest has dependencies but no lockfile: packages/policy-engine/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/policy-engine/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-c95e9650c98c4456", "name": "Node manifest has dependencies but no lockfile: packages/dpdp-scanner/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/dpdp-scanner/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-6cce9d7788964cf7", "name": "Node manifest has dependencies but no lockfile: packages/ankrshield-mdm-bridge/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/ankrshield-mdm-bridge/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-6d3255de5ab08afb", "name": "Node manifest has dependencies but no lockfile: packages/privacy-engine/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/privacy-engine/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-99c9b14aa9ec0be3", "name": "Node manifest has dependencies but no lockfile: packages/ai-governance/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/ai-governance/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-28e92806c0db3cd2", "name": "Node manifest has dependencies but no lockfile: packages/core/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/core/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-29111ed755df4584", "name": "Node manifest has dependencies but no lockfile: packages/tracker-db/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/tracker-db/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-658ad58a10b2519a", "name": "Node manifest has dependencies but no lockfile: packages/sms-shield/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/sms-shield/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 573 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 181 placeholder/mock markers across 71 source files. This often means the repo looks complete while core flows still use generated scaffolding or fake data."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9d79c4077342a7d0", "name": "Runtime service client appears to use placeholder configuration", "shortDescription": {"text": "Runtime service client appears to use placeholder configuration"}, "fullDescription": {"text": "A runtime source file appears to wire Supabase/Firebase/AI/payment-style clients to placeholder URLs, keys, or fallback values. In the Fable corpus this often means the UI/API shape is present while the backend service is not actually configured."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2d0c7b7ab8f8aacf", "name": "Critical user flow still appears backed by mock or placeholder data", "shortDescription": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "fullDescription": {"text": "A payment/auth/admin/order/billing-style flow contains mock, fake, TODO, dummy, or placeholder markers in runtime source. In the Fable corpus this is a high-leverage completeness smell: the app can look finished while the money, identity, or tenant flow is still scaffolded."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-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-1d020b52993cfbc1", "name": "Agent authority lacks a verifier contract: apps/xshield-active-api/.claude/settings.json", "shortDescription": {"text": "Agent authority lacks a verifier contract: apps/xshield-active-api/.claude/settings.json"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f8796adac74960df", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/api/scripts/run-scan-chain.mjs:14", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/api/scripts/run-scan-chain.mjs:14"}, "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-8d1b880eae6e91b6", "name": "Commented-code block (5 lines) in apps/api/src/main.ts:98", "shortDescription": {"text": "Commented-code block (5 lines) in apps/api/src/main.ts:98"}, "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-9e641a123d160d2d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/api/src/main.ts:2257", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/api/src/main.ts:2257"}, "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-9f06f51db7b4c47a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/api/src/integrations/alert-dispatcher.ts:117", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/api/src/integrations/alert-dispatcher.ts:117"}, "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-0be1b2866f8b0eea", "name": "Commented-code block (8 lines) in apps/api/src/xshield/phone-risk.ts:201", "shortDescription": {"text": "Commented-code block (8 lines) in apps/api/src/xshield/phone-risk.ts:201"}, "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-933e23f5fe862ba2", "name": "Commented-code block (20 lines) in apps/api/src/graphql/types/user.ts:45", "shortDescription": {"text": "Commented-code block (20 lines) in apps/api/src/graphql/types/user.ts:45"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2d99acf28587f14c", "name": "Commented-code block (6 lines) in apps/api/src/chains/run-scan-chain.ts:6", "shortDescription": {"text": "Commented-code block (6 lines) in apps/api/src/chains/run-scan-chain.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-5109afcc57dccd4e", "name": "Commented-code block (5 lines) in apps/desktop/src/renderer/components/ConsentDialog.tsx:5", "shortDescription": {"text": "Commented-code block (5 lines) in apps/desktop/src/renderer/components/ConsentDialog.tsx: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-685b9ca5c01afcfc", "name": "Commented-code block (5 lines) in apps/desktop/src/renderer/pages/SettingsAegis.tsx:4", "shortDescription": {"text": "Commented-code block (5 lines) in apps/desktop/src/renderer/pages/SettingsAegis.tsx:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8bf52f4911aa48a9", "name": "Commented-code block (6 lines) in apps/desktop/src/main/index.ts:89", "shortDescription": {"text": "Commented-code block (6 lines) in apps/desktop/src/main/index.ts:89"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1475613cb0c2012f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/desktop/src/main/__tests__/aegis-proxy-wa-inbound.test.ts:286", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/desktop/src/main/__tests__/aegis-proxy-wa-inbound.test.ts:286"}, "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-14d8eff48dcd4086", "name": "Commented-code block (5 lines) in apps/desktop/src/main/__tests__/aegis-proxy-request-audit-store.test.ts:187", "shortDescription": {"text": "Commented-code block (5 lines) in apps/desktop/src/main/__tests__/aegis-proxy-request-audit-store.test.ts:187"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5bfe71aa46593588", "name": "Commented-code block (6 lines) in apps/desktop/src/main/aegis-proxy/app-identifier.ts:83", "shortDescription": {"text": "Commented-code block (6 lines) in apps/desktop/src/main/aegis-proxy/app-identifier.ts:83"}, "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-59aca9ccc3a62cf3", "name": "Commented-code block (6 lines) in apps/desktop/src/main/aegis-proxy/key-on-disk-scanner.ts:7", "shortDescription": {"text": "Commented-code block (6 lines) in apps/desktop/src/main/aegis-proxy/key-on-disk-scanner.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-caaadea4ae060ec3", "name": "Commented-code block (5 lines) in apps/desktop/src/main/aegis-proxy/budget-ledger.ts:9", "shortDescription": {"text": "Commented-code block (5 lines) in apps/desktop/src/main/aegis-proxy/budget-ledger.ts:9"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f20c02b4da852d79", "name": "Commented-code block (6 lines) in apps/desktop/src/main/aegis-proxy/wa-webhook-signature.ts:13", "shortDescription": {"text": "Commented-code block (6 lines) in apps/desktop/src/main/aegis-proxy/wa-webhook-signature.ts:13"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-dbdcc073590542b0", "name": "Commented-code block (5 lines) in apps/desktop/src/main/aegis-proxy/observer-openai.ts:4", "shortDescription": {"text": "Commented-code block (5 lines) in apps/desktop/src/main/aegis-proxy/observer-openai.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d220f38380e20a48", "name": "Commented-code block (5 lines) in apps/desktop/src/main/aegis-proxy/aegis-gate.ts:14", "shortDescription": {"text": "Commented-code block (5 lines) in apps/desktop/src/main/aegis-proxy/aegis-gate.ts:14"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-144d1b8914661730", "name": "Commented-code block (6 lines) in apps/desktop/src/main/aegis-proxy/pii-stream-redactor.ts:4", "shortDescription": {"text": "Commented-code block (6 lines) in apps/desktop/src/main/aegis-proxy/pii-stream-redactor.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3a55e409e1fbacb1", "name": "Commented-code block (7 lines) in apps/desktop/src/main/aegis-proxy/audit-export.ts:13", "shortDescription": {"text": "Commented-code block (7 lines) in apps/desktop/src/main/aegis-proxy/audit-export.ts:13"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b16d241ee308b981", "name": "Commented-code block (5 lines) in apps/desktop/src/main/aegis-proxy/request-audit-store.ts:4", "shortDescription": {"text": "Commented-code block (5 lines) in apps/desktop/src/main/aegis-proxy/request-audit-store.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a02471591c4b2d65", "name": "Commented-code block (5 lines) in apps/desktop/src/main/aegis-proxy/kill-switch.ts:9", "shortDescription": {"text": "Commented-code block (5 lines) in apps/desktop/src/main/aegis-proxy/kill-switch.ts:9"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-dc08641604925703", "name": "Commented-code block (7 lines) in apps/desktop/src/main/aegis-proxy/pending-consent-queue.ts:8", "shortDescription": {"text": "Commented-code block (7 lines) in apps/desktop/src/main/aegis-proxy/pending-consent-queue.ts: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-db0b507ea7c452d2", "name": "Commented-code block (5 lines) in apps/desktop/src/main/aegis-proxy/dan-carrier-os.ts:4", "shortDescription": {"text": "Commented-code block (5 lines) in apps/desktop/src/main/aegis-proxy/dan-carrier-os.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-668475deabcc22e4", "name": "Commented-code block (6 lines) in apps/desktop/src/main/aegis-proxy/latency-tracker.ts:4", "shortDescription": {"text": "Commented-code block (6 lines) in apps/desktop/src/main/aegis-proxy/latency-tracker.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d225d8f3c94dafcc", "name": "Commented-code block (10 lines) in apps/desktop/src/main/aegis-proxy/wa-inbound-webhook-server.ts:7", "shortDescription": {"text": "Commented-code block (10 lines) in apps/desktop/src/main/aegis-proxy/wa-inbound-webhook-server.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-07275218e7b8bd6f", "name": "Commented-code block (5 lines) in apps/desktop/src/main/aegis-proxy/dan-carrier-router.ts:7", "shortDescription": {"text": "Commented-code block (5 lines) in apps/desktop/src/main/aegis-proxy/dan-carrier-router.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-904b676d0b35bd4a", "name": "Commented-code block (5 lines) in apps/desktop/src/main/aegis-proxy/dan-timeout-config.ts:4", "shortDescription": {"text": "Commented-code block (5 lines) in apps/desktop/src/main/aegis-proxy/dan-timeout-config.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b81f39b194adf1ee", "name": "Commented-code block (7 lines) in apps/desktop/src/main/aegis-proxy/pii-boundary.ts:4", "shortDescription": {"text": "Commented-code block (7 lines) in apps/desktop/src/main/aegis-proxy/pii-boundary.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a6d9fb50dea394aa", "name": "Commented-code block (6 lines) in apps/desktop/src/main/aegis-proxy/dan-categorizer.ts:6", "shortDescription": {"text": "Commented-code block (6 lines) in apps/desktop/src/main/aegis-proxy/dan-categorizer.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-21370f3b366f8502", "name": "Commented-code block (6 lines) in apps/desktop/src/main/aegis-proxy/aegis-lite-vendored.ts:4", "shortDescription": {"text": "Commented-code block (6 lines) in apps/desktop/src/main/aegis-proxy/aegis-lite-vendored.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d34976da85fc7be0", "name": "Commented-code block (5 lines) in apps/desktop/src/main/aegis-proxy/cost-rates.ts:8", "shortDescription": {"text": "Commented-code block (5 lines) in apps/desktop/src/main/aegis-proxy/cost-rates.ts: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-9130c420fa41b8bc", "name": "Commented-code block (6 lines) in apps/desktop/src/main/aegis-proxy/zip-writer.ts:4", "shortDescription": {"text": "Commented-code block (6 lines) in apps/desktop/src/main/aegis-proxy/zip-writer.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-07bcb98d118aff11", "name": "Commented-code block (7 lines) in apps/desktop/src/main/aegis-proxy/apps-policy.ts:11", "shortDescription": {"text": "Commented-code block (7 lines) in apps/desktop/src/main/aegis-proxy/apps-policy.ts:11"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b12561d86da9ee38", "name": "Commented-code block (5 lines) in apps/desktop/src/main/aegis-proxy/wa-webhook-parser.ts:13", "shortDescription": {"text": "Commented-code block (5 lines) in apps/desktop/src/main/aegis-proxy/wa-webhook-parser.ts:13"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f0a4849026eb6861", "name": "Commented-code block (6 lines) in apps/desktop/src/main/aegis-proxy/wa-webhook-creds.ts:6", "shortDescription": {"text": "Commented-code block (6 lines) in apps/desktop/src/main/aegis-proxy/wa-webhook-creds.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-c9a4a0ed992c54ba", "name": "Commented-code block (7 lines) in apps/desktop/src/main/aegis-proxy/dan-carrier-wa.ts:4", "shortDescription": {"text": "Commented-code block (7 lines) in apps/desktop/src/main/aegis-proxy/dan-carrier-wa.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-03ac2cb1207ccac5", "name": "Commented-code block (6 lines) in apps/desktop/src/main/aegis-proxy/server.ts:4", "shortDescription": {"text": "Commented-code block (6 lines) in apps/desktop/src/main/aegis-proxy/server.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0af719dd0f252c8f", "name": "Commented-code block (10 lines) in apps/desktop/src/main/aegis-proxy/audit-retention-worker.ts:6", "shortDescription": {"text": "Commented-code block (10 lines) in apps/desktop/src/main/aegis-proxy/audit-retention-worker.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-0592c24bb7e74985", "name": "Commented-code block (6 lines) in apps/desktop/src/main/aegis-proxy/event-tally-store.ts:4", "shortDescription": {"text": "Commented-code block (6 lines) in apps/desktop/src/main/aegis-proxy/event-tally-store.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5bb59ff5db0796ab", "name": "Commented-code block (8 lines) in apps/desktop/src/main/aegis-proxy/key-on-disk-migrator.ts:8", "shortDescription": {"text": "Commented-code block (8 lines) in apps/desktop/src/main/aegis-proxy/key-on-disk-migrator.ts: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-849bbe0c82a8686a", "name": "Commented-code block (7 lines) in apps/desktop/src/main/aegis-proxy/rules-catalog.ts:11", "shortDescription": {"text": "Commented-code block (7 lines) in apps/desktop/src/main/aegis-proxy/rules-catalog.ts:11"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1efca43779c5da88", "name": "Commented-code block (5 lines) in apps/desktop/src/main/aegis-proxy/hanumang-mandate-vendored.ts:5", "shortDescription": {"text": "Commented-code block (5 lines) in apps/desktop/src/main/aegis-proxy/hanumang-mandate-vendored.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-b47a6b642c97c3d5", "name": "Commented-code block (6 lines) in apps/desktop/src/main/aegis-proxy/dan-inbound-parser.ts:6", "shortDescription": {"text": "Commented-code block (6 lines) in apps/desktop/src/main/aegis-proxy/dan-inbound-parser.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-f7bd4696cbdfe1b2", "name": "Commented-code block (6 lines) in apps/xshieldai-hanumang/src/routes/observe.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in apps/xshieldai-hanumang/src/routes/observe.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-650cc432f4ed3e46", "name": "Commented-code block (5 lines) in apps/xshieldai-hanumang/src/routes/attestation.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in apps/xshieldai-hanumang/src/routes/attestation.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-38e5a03129647ed4", "name": "Commented-code block (6 lines) in apps/xshieldai-hanumang/src/core/mudrika.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in apps/xshieldai-hanumang/src/core/mudrika.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-c56c49a0b7cc5ca5", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/src/lib/apiClient.ts:31", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/src/lib/apiClient.ts:31"}, "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-9f6cc00441fc35bd", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/src/lib/ssoClient.ts:41", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/src/lib/ssoClient.ts:41"}, "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-f2e1405ffa468b48", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/src/pages/SupplyChain.tsx:168", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/src/pages/SupplyChain.tsx:168"}, "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-fe505cff3f09368e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/src/pages/Setup.tsx:224", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/src/pages/Setup.tsx:224"}, "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-e861871ec3055af7", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/src/pages/ApiKeys.tsx:408", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/src/pages/ApiKeys.tsx:408"}, "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-5a5f7c1fe11bf0d5", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/src/pages/Developers.tsx:141", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/src/pages/Developers.tsx:141"}, "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-ec7a057195c9ff79", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/src/pages/Onboarding.tsx:251", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/src/pages/Onboarding.tsx:251"}, "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-9d87dcaf9ec81cda", "name": "Commented-code block (5 lines) in apps/mobile-ios/.eslintrc.cjs:10", "shortDescription": {"text": "Commented-code block (5 lines) in apps/mobile-ios/.eslintrc.cjs:10"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-bc64ea43238e6359", "name": "Legacy-named symbol `ankrshield_mdm_v1` in apps/mobile-ios/src/mdm/policy-engine.ts:54", "shortDescription": {"text": "Legacy-named symbol `ankrshield_mdm_v1` in apps/mobile-ios/src/mdm/policy-engine.ts:54"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a228a9e929779c90", "name": "Legacy-named symbol `ankrshield_mdm_v1` in apps/mobile-ios/src/mdm/types.ts:42", "shortDescription": {"text": "Legacy-named symbol `ankrshield_mdm_v1` in apps/mobile-ios/src/mdm/types.ts:42"}, "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-1a01542136c0eb30", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/mobile-ios/src/services/PrivacyService.ts:75", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/mobile-ios/src/services/PrivacyService.ts:75"}, "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-aeec5624655146b5", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/mobile-ios/src/services/WarriorService.ts:7", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/mobile-ios/src/services/WarriorService.ts:7"}, "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-134560af8f193ea0", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/mobile-ios/src/services/NetworkService.ts:37", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/mobile-ios/src/services/NetworkService.ts:37"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6b051758137709c1", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/xshieldai-asm-ai-module/src/probes/runner.ts:130", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/xshieldai-asm-ai-module/src/probes/runner.ts:130"}, "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-014db31f21bf9c1b", "name": "Commented-code block (5 lines) in scripts/proof-parity.ts:16", "shortDescription": {"text": "Commented-code block (5 lines) in scripts/proof-parity.ts: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-557371a156e09783", "name": "Commented-code block (5 lines) in packages/network-monitor/src/capture/tls-parser.ts:75", "shortDescription": {"text": "Commented-code block (5 lines) in packages/network-monitor/src/capture/tls-parser.ts:75"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fc6a044ddcdab16f", "name": "Commented-code block (5 lines) in packages/dns-resolver/src/service.ts:3", "shortDescription": {"text": "Commented-code block (5 lines) in packages/dns-resolver/src/service.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-55c2b5915cf741c4", "name": "Commented-code block (6 lines) in packages/spyware-detector/src/yara-rules.ts:127", "shortDescription": {"text": "Commented-code block (6 lines) in packages/spyware-detector/src/yara-rules.ts:127"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a7234dda5c89a153", "name": "Commented-code block (5 lines) in packages/spyware-detector/src/live-ioc-feed.ts:249", "shortDescription": {"text": "Commented-code block (5 lines) in packages/spyware-detector/src/live-ioc-feed.ts:249"}, "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-4fb43da8e352e790", "name": "Legacy-named symbol `wallet_backup` in packages/ai-warrior/src/defense/honeypot.ts:56", "shortDescription": {"text": "Legacy-named symbol `wallet_backup` in packages/ai-warrior/src/defense/honeypot.ts:56"}, "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-d5615e834b8decbd", "name": "`fetch()` without try/.catch or AbortSignal \u2014 packages/ai-warrior/src/llm/client.ts:82", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/ai-warrior/src/llm/client.ts:82"}, "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-5cf96f9f0efefc88", "name": "Commented-code block (5 lines) in packages/privacy-engine/src/app-trust-engine.ts:502", "shortDescription": {"text": "Commented-code block (5 lines) in packages/privacy-engine/src/app-trust-engine.ts:502"}, "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-d8a8479d5490ab86", "name": "Commented-code block (5 lines) in packages/ai-governance/src/monitor.ts:17", "shortDescription": {"text": "Commented-code block (5 lines) in packages/ai-governance/src/monitor.ts:17"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-99b55d14ec628940", "name": "37 env vars used in code but missing from .env.example", "shortDescription": {"text": "37 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `ABUSEIPDB_API_KEY`, `ADMIN_TOKEN`, `ALERT_EMAIL_WEBHOOK`, `ANKR_AI_PROXY_URL`, `ANKR_WIRE_REST_URL`, `API_URL`, `APK_PATH`, `APK_RELEASE_URL` + 29 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-3e00705827883a85", "name": "Frontend route `dashboard` has no Link/navigate to it \u2014 apps/desktop/src/renderer/App.tsx", "shortDescription": {"text": "Frontend route `dashboard` has no Link/navigate to it \u2014 apps/desktop/src/renderer/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6d71883a54071942", "name": "Frontend route `analytics` has no Link/navigate to it \u2014 apps/desktop/src/renderer/App.tsx", "shortDescription": {"text": "Frontend route `analytics` has no Link/navigate to it \u2014 apps/desktop/src/renderer/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-8481cd356b252718", "name": "Frontend route `devices` has no Link/navigate to it \u2014 apps/desktop/src/renderer/App.tsx", "shortDescription": {"text": "Frontend route `devices` has no Link/navigate to it \u2014 apps/desktop/src/renderer/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-8373171795208620", "name": "Frontend route `agents` has no Link/navigate to it \u2014 apps/desktop/src/renderer/App.tsx", "shortDescription": {"text": "Frontend route `agents` has no Link/navigate to it \u2014 apps/desktop/src/renderer/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ef762f1d4df422e0", "name": "Frontend route `budget` has no Link/navigate to it \u2014 apps/desktop/src/renderer/App.tsx", "shortDescription": {"text": "Frontend route `budget` has no Link/navigate to it \u2014 apps/desktop/src/renderer/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-08a73d99fb7ed815", "name": "Frontend route `report-card` has no Link/navigate to it \u2014 apps/desktop/src/renderer/App.tsx", "shortDescription": {"text": "Frontend route `report-card` has no Link/navigate to it \u2014 apps/desktop/src/renderer/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c641cf4cc4312b46", "name": "Frontend route `replay` has no Link/navigate to it \u2014 apps/desktop/src/renderer/App.tsx", "shortDescription": {"text": "Frontend route `replay` has no Link/navigate to it \u2014 apps/desktop/src/renderer/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-84439967980e5660", "name": "Frontend route `setup/root-ca` has no Link/navigate to it \u2014 apps/desktop/src/renderer/App.tsx", "shortDescription": {"text": "Frontend route `setup/root-ca` has no Link/navigate to it \u2014 apps/desktop/src/renderer/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-cb641e0a0ed8fbbc", "name": "Frontend route `settings` has no Link/navigate to it \u2014 apps/desktop/src/renderer/App.tsx", "shortDescription": {"text": "Frontend route `settings` has no Link/navigate to it \u2014 apps/desktop/src/renderer/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-fc6989e89f15fa2a", "name": "Frontend route `settings/aegis` has no Link/navigate to it \u2014 apps/desktop/src/renderer/App.tsx", "shortDescription": {"text": "Frontend route `settings/aegis` has no Link/navigate to it \u2014 apps/desktop/src/renderer/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-eb5eed2af2f3db70", "name": "Frontend route `/evidence` has no Link/navigate to it \u2014 apps/web/src/App.tsx", "shortDescription": {"text": "Frontend route `/evidence` has no Link/navigate to it \u2014 apps/web/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c9c81106224b6105", "name": "Frontend route `/auth/verify` has no Link/navigate to it \u2014 apps/web/src/App.tsx", "shortDescription": {"text": "Frontend route `/auth/verify` has no Link/navigate to it \u2014 apps/web/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f10f05920d3465b7", "name": "Frontend route `/mdm` has no Link/navigate to it \u2014 apps/web/src/App.tsx", "shortDescription": {"text": "Frontend route `/mdm` has no Link/navigate to it \u2014 apps/web/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e806fcf75ea12f95", "name": "Frontend route `/watch/:watchId` has no Link/navigate to it \u2014 apps/web/src/App.tsx", "shortDescription": {"text": "Frontend route `/watch/:watchId` has no Link/navigate to it \u2014 apps/web/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3bad2cb38bbf4b0c", "name": "Dangling fetch: GET https://api.abuseipdb.com/api/v2/check?ipAddress=${encodeURIComponent(ip)}&maxAgeInDays=30 (apps/api", "shortDescription": {"text": "Dangling fetch: GET https://api.abuseipdb.com/api/v2/check?ipAddress=${encodeURIComponent(ip)}&maxAgeInDays=30 (apps/api/src/main.ts:414)"}, "fullDescription": {"text": "`apps/api/src/main.ts:414` calls `GET https://api.abuseipdb.com/api/v2/check?ipAddress=${encodeURIComponent(ip)}&maxAgeInDays=30` 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.abuseipdb.com/api/v2/check`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-741b8e7870240291", "name": "Dangling fetch: POST https://api.abuseipdb.com/api/v2/report (apps/api/src/main.ts:2257)", "shortDescription": {"text": "Dangling fetch: POST https://api.abuseipdb.com/api/v2/report (apps/api/src/main.ts:2257)"}, "fullDescription": {"text": "`apps/api/src/main.ts:2257` calls `POST https://api.abuseipdb.com/api/v2/report` 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.abuseipdb.com/api/v2/report`\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-882938341f4713ef", "name": "Dangling fetch: GET https://registry.npmjs.org/${encoded} (apps/api/src/main.ts:3899)", "shortDescription": {"text": "Dangling fetch: GET https://registry.npmjs.org/${encoded} (apps/api/src/main.ts:3899)"}, "fullDescription": {"text": "`apps/api/src/main.ts:3899` calls `GET https://registry.npmjs.org/${encoded}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/registry.npmjs.org/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-32c0ab8380bced4d", "name": "Dangling fetch: GET https://pypi.org/pypi/${encodeURIComponent(name)}/json (apps/api/src/main.ts:3929)", "shortDescription": {"text": "Dangling fetch: GET https://pypi.org/pypi/${encodeURIComponent(name)}/json (apps/api/src/main.ts:3929)"}, "fullDescription": {"text": "`apps/api/src/main.ts:3929` calls `GET https://pypi.org/pypi/${encodeURIComponent(name)}/json` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/pypi.org/pypi/<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-ef013bce7ffc5d45", "name": "Dangling fetch: GET https://www.virustotal.com/api/v3/files/${sha256.toLowerCase()} (apps/api/src/main.ts:4690)", "shortDescription": {"text": "Dangling fetch: GET https://www.virustotal.com/api/v3/files/${sha256.toLowerCase()} (apps/api/src/main.ts:4690)"}, "fullDescription": {"text": "`apps/api/src/main.ts:4690` calls `GET https://www.virustotal.com/api/v3/files/${sha256.toLowerCase()}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/www.virustotal.com/api/v3/files/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1799a054a786073e", "name": "Dangling fetch: POST https://api.telegram.org/bot${botToken}/sendMessage (apps/api/src/integrations/alert-dispatcher.ts:", "shortDescription": {"text": "Dangling fetch: POST https://api.telegram.org/bot${botToken}/sendMessage (apps/api/src/integrations/alert-dispatcher.ts:97)"}, "fullDescription": {"text": "`apps/api/src/integrations/alert-dispatcher.ts:97` calls `POST https://api.telegram.org/bot${botToken}/sendMessage` 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.telegram.org/bot/<p>/sendmessage`\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-73a14e901263954a", "name": "Dangling fetch: POST https://events.pagerduty.com/v2/enqueue (apps/api/src/integrations/alert-dispatcher.ts:152)", "shortDescription": {"text": "Dangling fetch: POST https://events.pagerduty.com/v2/enqueue (apps/api/src/integrations/alert-dispatcher.ts:152)"}, "fullDescription": {"text": "`apps/api/src/integrations/alert-dispatcher.ts:152` calls `POST https://events.pagerduty.com/v2/enqueue` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/events.pagerduty.com/v2/enqueue`\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-0172d29887132502", "name": "Dangling fetch: GET https://crt.sh/?q=${encodeURIComponent(domain)}&output=json (apps/api/src/xshield/risk-engine.ts:282", "shortDescription": {"text": "Dangling fetch: GET https://crt.sh/?q=${encodeURIComponent(domain)}&output=json (apps/api/src/xshield/risk-engine.ts:282)"}, "fullDescription": {"text": "`apps/api/src/xshield/risk-engine.ts:282` calls `GET https://crt.sh/?q=${encodeURIComponent(domain)}&output=json` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/crt.sh`\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-549e8c0124983f3d", "name": "Dangling fetch: GET https://api.greynoise.io/v3/community/${ip} (apps/api/src/xshield/risk-engine.ts:323)", "shortDescription": {"text": "Dangling fetch: GET https://api.greynoise.io/v3/community/${ip} (apps/api/src/xshield/risk-engine.ts:323)"}, "fullDescription": {"text": "`apps/api/src/xshield/risk-engine.ts:323` calls `GET https://api.greynoise.io/v3/community/${ip}` 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.greynoise.io/v3/community/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-350ccbf837ea39bb", "name": "Dangling fetch: GET https://haveibeenpwned.com/api/v3/breaches (apps/api/src/xshield/risk-engine.ts:362)", "shortDescription": {"text": "Dangling fetch: GET https://haveibeenpwned.com/api/v3/breaches (apps/api/src/xshield/risk-engine.ts:362)"}, "fullDescription": {"text": "`apps/api/src/xshield/risk-engine.ts:362` calls `GET https://haveibeenpwned.com/api/v3/breaches` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/haveibeenpwned.com/api/v3/breaches`\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-4c19d3c01eac7209", "name": "Dangling fetch: GET https://urlscan.io/api/v1/search/?q=domain:${encodeURIComponent(domain)}&size=5 (apps/api/src/xshiel", "shortDescription": {"text": "Dangling fetch: GET https://urlscan.io/api/v1/search/?q=domain:${encodeURIComponent(domain)}&size=5 (apps/api/src/xshield/risk-engine.ts:404)"}, "fullDescription": {"text": "`apps/api/src/xshield/risk-engine.ts:404` calls `GET https://urlscan.io/api/v1/search/?q=domain:${encodeURIComponent(domain)}&size=5` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/urlscan.io/api/v1/search`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e3e477484e5bfb97", "name": "Dangling fetch: GET https://openphish.com/feed.txt (apps/api/src/xshield/risk-engine.ts:446)", "shortDescription": {"text": "Dangling fetch: GET https://openphish.com/feed.txt (apps/api/src/xshield/risk-engine.ts:446)"}, "fullDescription": {"text": "`apps/api/src/xshield/risk-engine.ts:446` calls `GET https://openphish.com/feed.txt` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/openphish.com/feed.txt`\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-c5d8a2edf4567e2e", "name": "Dangling fetch: GET https://api.github.com/search/code?q=${encodeURIComponent(q)}&per_page=5 (apps/api/src/xshield/risk-", "shortDescription": {"text": "Dangling fetch: GET https://api.github.com/search/code?q=${encodeURIComponent(q)}&per_page=5 (apps/api/src/xshield/risk-engine.ts:508)"}, "fullDescription": {"text": "`apps/api/src/xshield/risk-engine.ts:508` calls `GET https://api.github.com/search/code?q=${encodeURIComponent(q)}&per_page=5` 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.github.com/search/code`\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-4035c7357a4edbd2", "name": "Dangling fetch: GET https://otx.alienvault.com/api/v1/indicators/domain/${encodeURIComponent(domain)}/general (apps/api/", "shortDescription": {"text": "Dangling fetch: GET https://otx.alienvault.com/api/v1/indicators/domain/${encodeURIComponent(domain)}/general (apps/api/src/xshield/risk-engine.ts:552)"}, "fullDescription": {"text": "`apps/api/src/xshield/risk-engine.ts:552` calls `GET https://otx.alienvault.com/api/v1/indicators/domain/${encodeURIComponent(domain)}/general` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/otx.alienvault.com/api/v1/indicators/domain/<p>/general`\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-f4096bbcdc13dc8a", "name": "Dangling fetch: GET https://api.shodan.io/shodan/host/${ip}?key=${process.env.SHODAN_API_KEY} (apps/api/src/xshield/risk", "shortDescription": {"text": "Dangling fetch: GET https://api.shodan.io/shodan/host/${ip}?key=${process.env.SHODAN_API_KEY} (apps/api/src/xshield/risk-engine.ts:600)"}, "fullDescription": {"text": "`apps/api/src/xshield/risk-engine.ts:600` calls `GET https://api.shodan.io/shodan/host/${ip}?key=${process.env.SHODAN_API_KEY}` 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.shodan.io/shodan/host/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b592449bfd61cd99", "name": "Dangling fetch: GET https://crt.sh/?q=${encodedEmail}&output=json (apps/api/src/xshield/risk-engine.ts:927)", "shortDescription": {"text": "Dangling fetch: GET https://crt.sh/?q=${encodedEmail}&output=json (apps/api/src/xshield/risk-engine.ts:927)"}, "fullDescription": {"text": "`apps/api/src/xshield/risk-engine.ts:927` calls `GET https://crt.sh/?q=${encodedEmail}&output=json` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/crt.sh`\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-f15c10b5a2e05926", "name": "Dangling fetch: POST http://127.0.0.1:${port}/webhook/whatsapp (apps/desktop/src/main/__tests__/aegis-proxy-wa-inbound.t", "shortDescription": {"text": "Dangling fetch: POST http://127.0.0.1:${port}/webhook/whatsapp (apps/desktop/src/main/__tests__/aegis-proxy-wa-inbound.test.ts:301)"}, "fullDescription": {"text": "`apps/desktop/src/main/__tests__/aegis-proxy-wa-inbound.test.ts:301` calls `POST http://127.0.0.1:${port}/webhook/whatsapp` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/127.0.0.1:/<p>/webhook/whatsapp`\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-a66ce82635501302", "name": "Dangling fetch: POST http://127.0.0.1:${port}/webhook/whatsapp (apps/desktop/src/main/__tests__/aegis-proxy-wa-inbound.t", "shortDescription": {"text": "Dangling fetch: POST http://127.0.0.1:${port}/webhook/whatsapp (apps/desktop/src/main/__tests__/aegis-proxy-wa-inbound.test.ts:333)"}, "fullDescription": {"text": "`apps/desktop/src/main/__tests__/aegis-proxy-wa-inbound.test.ts:333` calls `POST http://127.0.0.1:${port}/webhook/whatsapp` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/127.0.0.1:/<p>/webhook/whatsapp`\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-db7ba19521c036ea", "name": "Dangling fetch: POST http://127.0.0.1:${port}/webhook/whatsapp (apps/desktop/src/main/__tests__/aegis-proxy-wa-inbound.t", "shortDescription": {"text": "Dangling fetch: POST http://127.0.0.1:${port}/webhook/whatsapp (apps/desktop/src/main/__tests__/aegis-proxy-wa-inbound.test.ts:370)"}, "fullDescription": {"text": "`apps/desktop/src/main/__tests__/aegis-proxy-wa-inbound.test.ts:370` calls `POST http://127.0.0.1:${port}/webhook/whatsapp` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/127.0.0.1:/<p>/webhook/whatsapp`\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-5a5228900cd3469c", "name": "Dangling fetch: POST http://127.0.0.1:${port}/webhook/whatsapp (apps/desktop/src/main/__tests__/aegis-proxy-wa-inbound.t", "shortDescription": {"text": "Dangling fetch: POST http://127.0.0.1:${port}/webhook/whatsapp (apps/desktop/src/main/__tests__/aegis-proxy-wa-inbound.test.ts:384)"}, "fullDescription": {"text": "`apps/desktop/src/main/__tests__/aegis-proxy-wa-inbound.test.ts:384` calls `POST http://127.0.0.1:${port}/webhook/whatsapp` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/127.0.0.1:/<p>/webhook/whatsapp`\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-8384bf601dd6038d", "name": "Dangling fetch: GET http://127.0.0.1:${port}/some/other/path (apps/desktop/src/main/__tests__/aegis-proxy-wa-inbound.tes", "shortDescription": {"text": "Dangling fetch: GET http://127.0.0.1:${port}/some/other/path (apps/desktop/src/main/__tests__/aegis-proxy-wa-inbound.test.ts:395)"}, "fullDescription": {"text": "`apps/desktop/src/main/__tests__/aegis-proxy-wa-inbound.test.ts:395` calls `GET http://127.0.0.1:${port}/some/other/path` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/127.0.0.1:/<p>/some/other/path`\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-2c6927eac1e73205", "name": "Dangling fetch: PUT http://127.0.0.1:${port}/webhook/whatsapp (apps/desktop/src/main/__tests__/aegis-proxy-wa-inbound.te", "shortDescription": {"text": "Dangling fetch: PUT http://127.0.0.1:${port}/webhook/whatsapp (apps/desktop/src/main/__tests__/aegis-proxy-wa-inbound.test.ts:400)"}, "fullDescription": {"text": "`apps/desktop/src/main/__tests__/aegis-proxy-wa-inbound.test.ts:400` calls `PUT http://127.0.0.1:${port}/webhook/whatsapp` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/127.0.0.1:/<p>/webhook/whatsapp`\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-d1d65e13173c9686", "name": "Dangling fetch: POST /auth/register (apps/web/src/lib/apiClient.ts:52)", "shortDescription": {"text": "Dangling fetch: POST /auth/register (apps/web/src/lib/apiClient.ts:52)"}, "fullDescription": {"text": "`apps/web/src/lib/apiClient.ts:52` calls `POST /auth/register` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/auth/register`\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-723562f008512ba3", "name": "Dangling fetch: POST /auth/login (apps/web/src/lib/apiClient.ts:59)", "shortDescription": {"text": "Dangling fetch: POST /auth/login (apps/web/src/lib/apiClient.ts:59)"}, "fullDescription": {"text": "`apps/web/src/lib/apiClient.ts:59` calls `POST /auth/login` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/auth/login`\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-32b5c11d3f5e8199", "name": "Dangling fetch: POST /api/billing/checkout (apps/web/src/pages/ApiKeys.tsx:232)", "shortDescription": {"text": "Dangling fetch: POST /api/billing/checkout (apps/web/src/pages/ApiKeys.tsx:232)"}, "fullDescription": {"text": "`apps/web/src/pages/ApiKeys.tsx:232` calls `POST /api/billing/checkout` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/billing/checkout`\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-44e88590c17dd541", "name": "Dangling fetch: GET /api/billing/portal?apiKeyId=${encodeURIComponent(apiKeyId)} (apps/web/src/pages/ApiKeys.tsx:260)", "shortDescription": {"text": "Dangling fetch: GET /api/billing/portal?apiKeyId=${encodeURIComponent(apiKeyId)} (apps/web/src/pages/ApiKeys.tsx:260)"}, "fullDescription": {"text": "`apps/web/src/pages/ApiKeys.tsx:260` calls `GET /api/billing/portal?apiKeyId=${encodeURIComponent(apiKeyId)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/billing/portal`\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-73db37cc0b18537d", "name": "Dangling fetch: DELETE /api/auth/api-keys/${id} (apps/web/src/pages/ApiKeys.tsx:433)", "shortDescription": {"text": "Dangling fetch: DELETE /api/auth/api-keys/${id} (apps/web/src/pages/ApiKeys.tsx:433)"}, "fullDescription": {"text": "`apps/web/src/pages/ApiKeys.tsx:433` calls `DELETE /api/auth/api-keys/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/auth/api-keys/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-33af0d3d63ed1653", "name": "Dangling fetch: POST https://api.anthropic.com/v1/messages (packages/risk-intelligence/src/threat-narrative.ts:162)", "shortDescription": {"text": "Dangling fetch: POST https://api.anthropic.com/v1/messages (packages/risk-intelligence/src/threat-narrative.ts:162)"}, "fullDescription": {"text": "`packages/risk-intelligence/src/threat-narrative.ts:162` calls `POST https://api.anthropic.com/v1/messages` 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.anthropic.com/v1/messages`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5d65877a9e572849", "name": "Dangling fetch: POST https://api.osv.dev/v1/querybatch (packages/risk-intelligence/src/detectors/supply-chain-scanner.ts", "shortDescription": {"text": "Dangling fetch: POST https://api.osv.dev/v1/querybatch (packages/risk-intelligence/src/detectors/supply-chain-scanner.ts:327)"}, "fullDescription": {"text": "`packages/risk-intelligence/src/detectors/supply-chain-scanner.ts:327` calls `POST https://api.osv.dev/v1/querybatch` 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.osv.dev/v1/querybatch`\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-ed2344349d1036e7", "name": "Dangling fetch: GET https://registry.npmjs.org/${encodeURIComponent(pkg.name)} (packages/risk-intelligence/src/detectors", "shortDescription": {"text": "Dangling fetch: GET https://registry.npmjs.org/${encodeURIComponent(pkg.name)} (packages/risk-intelligence/src/detectors/supply-chain-scanner.ts:399)"}, "fullDescription": {"text": "`packages/risk-intelligence/src/detectors/supply-chain-scanner.ts:399` calls `GET https://registry.npmjs.org/${encodeURIComponent(pkg.name)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/registry.npmjs.org/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1dd76b55b275f9ca", "name": "Dangling fetch: GET https://api.npmjs.org/downloads/point/last-month/${encodeURIComponent(pkg.name)} (packages/risk-inte", "shortDescription": {"text": "Dangling fetch: GET https://api.npmjs.org/downloads/point/last-month/${encodeURIComponent(pkg.name)} (packages/risk-intelligence/src/detectors/supply-chain-scanner.ts:404)"}, "fullDescription": {"text": "`packages/risk-intelligence/src/detectors/supply-chain-scanner.ts:404` calls `GET https://api.npmjs.org/downloads/point/last-month/${encodeURIComponent(pkg.name)}` 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.npmjs.org/downloads/point/last-month/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0b177521d67cc18c", "name": "Dangling fetch: GET https://pypi.org/pypi/${encodeURIComponent(pkg.name)}/json (packages/risk-intelligence/src/detectors", "shortDescription": {"text": "Dangling fetch: GET https://pypi.org/pypi/${encodeURIComponent(pkg.name)}/json (packages/risk-intelligence/src/detectors/supply-chain-scanner.ts:536)"}, "fullDescription": {"text": "`packages/risk-intelligence/src/detectors/supply-chain-scanner.ts:536` calls `GET https://pypi.org/pypi/${encodeURIComponent(pkg.name)}/json` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/pypi.org/pypi/<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-8a640849fb94d581", "name": "Dangling fetch: POST https://threatfox-api.abuse.ch/api/v1/ (packages/risk-intelligence/src/detectors/social-c2-detector", "shortDescription": {"text": "Dangling fetch: POST https://threatfox-api.abuse.ch/api/v1/ (packages/risk-intelligence/src/detectors/social-c2-detector.ts:71)"}, "fullDescription": {"text": "`packages/risk-intelligence/src/detectors/social-c2-detector.ts:71` calls `POST https://threatfox-api.abuse.ch/api/v1/` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/threatfox-api.abuse.ch/api/v1`\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-047b618bf76d30f9", "name": "Dangling fetch: POST https://threatfox-api.abuse.ch/api/v1/ (packages/risk-intelligence/src/detectors/qr-detector.ts:169", "shortDescription": {"text": "Dangling fetch: POST https://threatfox-api.abuse.ch/api/v1/ (packages/risk-intelligence/src/detectors/qr-detector.ts:169)"}, "fullDescription": {"text": "`packages/risk-intelligence/src/detectors/qr-detector.ts:169` calls `POST https://threatfox-api.abuse.ch/api/v1/` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/threatfox-api.abuse.ch/api/v1`\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-95d68c117942ef29", "name": "Dangling fetch: GET https://${domain}/favicon.ico (packages/risk-intelligence/src/detectors/social-brand-monitor.ts:217)", "shortDescription": {"text": "Dangling fetch: GET https://${domain}/favicon.ico (packages/risk-intelligence/src/detectors/social-brand-monitor.ts:217)"}, "fullDescription": {"text": "`packages/risk-intelligence/src/detectors/social-brand-monitor.ts:217` calls `GET https://${domain}/favicon.ico` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/<p>/favicon.ico`\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-837922f3b7cb1e73", "name": "Unused endpoint: GET /warrior/preblocked-ips", "shortDescription": {"text": "Unused endpoint: GET /warrior/preblocked-ips"}, "fullDescription": {"text": "`apps/api/src/main.ts` declares `GET /warrior/preblocked-ips` 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": "`apps/api/src/main.ts` declares `GET /` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-cf8a734023b19ab4", "name": "Unused endpoint: GET /api/v2/forja/state", "shortDescription": {"text": "Unused endpoint: GET /api/v2/forja/state"}, "fullDescription": {"text": "`apps/api/src/main.ts` declares `GET /api/v2/forja/state` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1a4dc8f16ac0aa02", "name": "Unused endpoint: GET /api/v2/forja/proof", "shortDescription": {"text": "Unused endpoint: GET /api/v2/forja/proof"}, "fullDescription": {"text": "`apps/api/src/main.ts` declares `GET /api/v2/forja/proof` 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-605fff05337cdf21", "name": "Unused endpoint: GET /api/v2/capabilities", "shortDescription": {"text": "Unused endpoint: GET /api/v2/capabilities"}, "fullDescription": {"text": "`apps/api/src/main.ts` declares `GET /api/v2/capabilities` 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-2e1076ee16307851", "name": "Unused endpoint: GET /api/v2/capabilities/privacy-stats", "shortDescription": {"text": "Unused endpoint: GET /api/v2/capabilities/privacy-stats"}, "fullDescription": {"text": "`apps/api/src/main.ts` declares `GET /api/v2/capabilities/privacy-stats` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d0002da6391c733c", "name": "Unused endpoint: GET /api/v2/capabilities/honesty", "shortDescription": {"text": "Unused endpoint: GET /api/v2/capabilities/honesty"}, "fullDescription": {"text": "`apps/api/src/main.ts` declares `GET /api/v2/capabilities/honesty` 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-d4cea0393eb10818", "name": "Unused endpoint: GET /download/ankrshield.apk", "shortDescription": {"text": "Unused endpoint: GET /download/ankrshield.apk"}, "fullDescription": {"text": "`apps/api/src/main.ts` declares `GET /download/ankrshield.apk` 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-49f59a78f9bc1e6d", "name": "Unused endpoint: GET /download/ankrshield-debug.apk", "shortDescription": {"text": "Unused endpoint: GET /download/ankrshield-debug.apk"}, "fullDescription": {"text": "`apps/api/src/main.ts` declares `GET /download/ankrshield-debug.apk` 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-e55dd2a8b7a47d0c", "name": "Unused endpoint: POST /warrior/spyware-scan", "shortDescription": {"text": "Unused endpoint: POST /warrior/spyware-scan"}, "fullDescription": {"text": "`apps/api/src/main.ts` declares `POST /warrior/spyware-scan` 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-a1c967fefab5e6f5", "name": "Unused endpoint: GET /warrior/threats/live", "shortDescription": {"text": "Unused endpoint: GET /warrior/threats/live"}, "fullDescription": {"text": "`apps/api/src/main.ts` declares `GET /warrior/threats/live` 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-60990d1d0731a73f", "name": "Unused endpoint: POST /warrior/android-check", "shortDescription": {"text": "Unused endpoint: POST /warrior/android-check"}, "fullDescription": {"text": "`apps/api/src/main.ts` declares `POST /warrior/android-check` 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-ceb081841071ec6b", "name": "Unused endpoint: GET /monitor/stats", "shortDescription": {"text": "Unused endpoint: GET /monitor/stats"}, "fullDescription": {"text": "`apps/api/src/main.ts` declares `GET /monitor/stats` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5e3e135274b9b859", "name": "Unused endpoint: POST /device/stats", "shortDescription": {"text": "Unused endpoint: POST /device/stats"}, "fullDescription": {"text": "`apps/api/src/main.ts` declares `POST /device/stats` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-decba9f14200dba1", "name": "Unused endpoint: GET /device/stats", "shortDescription": {"text": "Unused endpoint: GET /device/stats"}, "fullDescription": {"text": "`apps/api/src/main.ts` declares `GET /device/stats` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b0318d958fa9e2ee", "name": "Unused endpoint: POST /device/push", "shortDescription": {"text": "Unused endpoint: POST /device/push"}, "fullDescription": {"text": "`apps/api/src/main.ts` declares `POST /device/push` 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-37f94e15095426cc", "name": "Unused endpoint: GET /warrior/evidence-report", "shortDescription": {"text": "Unused endpoint: GET /warrior/evidence-report"}, "fullDescription": {"text": "`apps/api/src/main.ts` declares `GET /warrior/evidence-report` 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-b5bc588572aeea25", "name": "Unused endpoint: GET /warrior/honeypot-hits", "shortDescription": {"text": "Unused endpoint: GET /warrior/honeypot-hits"}, "fullDescription": {"text": "`apps/api/src/main.ts` declares `GET /warrior/honeypot-hits` 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-2b171ab6084f5670", "name": "Unused endpoint: POST /billing/webhook", "shortDescription": {"text": "Unused endpoint: POST /billing/webhook"}, "fullDescription": {"text": "`apps/api/src/main.ts` declares `POST /billing/webhook` 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-0e4ae667a3a93993", "name": "Unused endpoint: GET /billing/plans", "shortDescription": {"text": "Unused endpoint: GET /billing/plans"}, "fullDescription": {"text": "`apps/api/src/main.ts` declares `GET /billing/plans` 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-ccca4061b1a5a6ab", "name": "Unused endpoint: GET /watch/domains", "shortDescription": {"text": "Unused endpoint: GET /watch/domains"}, "fullDescription": {"text": "`apps/api/src/main.ts` declares `GET /watch/domains` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b9e61477dc0bfe35", "name": "Unused endpoint: GET /integrations/telegram", "shortDescription": {"text": "Unused endpoint: GET /integrations/telegram"}, "fullDescription": {"text": "`apps/api/src/main.ts` declares `GET /integrations/telegram` 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-6261b81130ec8a19", "name": "Unused endpoint: DELETE /integrations/telegram", "shortDescription": {"text": "Unused endpoint: DELETE /integrations/telegram"}, "fullDescription": {"text": "`apps/api/src/main.ts` declares `DELETE /integrations/telegram` 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-f87a56f31b60253d", "name": "Unused endpoint: GET /integrations/email", "shortDescription": {"text": "Unused endpoint: GET /integrations/email"}, "fullDescription": {"text": "`apps/api/src/main.ts` declares `GET /integrations/email` 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-25f9ccbf261c12b5", "name": "Unused endpoint: DELETE /integrations/email", "shortDescription": {"text": "Unused endpoint: DELETE /integrations/email"}, "fullDescription": {"text": "`apps/api/src/main.ts` declares `DELETE /integrations/email` 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-771bb034ba39107f", "name": "Unused endpoint: GET /integrations/pagerduty", "shortDescription": {"text": "Unused endpoint: GET /integrations/pagerduty"}, "fullDescription": {"text": "`apps/api/src/main.ts` declares `GET /integrations/pagerduty` 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-fdfc52c9144f24c9", "name": "Unused endpoint: DELETE /integrations/pagerduty", "shortDescription": {"text": "Unused endpoint: DELETE /integrations/pagerduty"}, "fullDescription": {"text": "`apps/api/src/main.ts` declares `DELETE /integrations/pagerduty` 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-6341b0cecc4aabb4", "name": "Unused endpoint: GET /brand/report", "shortDescription": {"text": "Unused endpoint: GET /brand/report"}, "fullDescription": {"text": "`apps/api/src/main.ts` declares `GET /brand/report` 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-36e2e31e5954fe89", "name": "Unused endpoint: GET /risk/narrative", "shortDescription": {"text": "Unused endpoint: GET /risk/narrative"}, "fullDescription": {"text": "`apps/api/src/main.ts` declares `GET /risk/narrative` 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-92d027acee5c43e7", "name": "Unused endpoint: GET /session/list", "shortDescription": {"text": "Unused endpoint: GET /session/list"}, "fullDescription": {"text": "`apps/api/src/main.ts` declares `GET /session/list` 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-c6cab8eb7f3485c2", "name": "Unused endpoint: GET /security/status", "shortDescription": {"text": "Unused endpoint: GET /security/status"}, "fullDescription": {"text": "`apps/api/src/main.ts` declares `GET /security/status` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-12c38e4aef1293fa", "name": "Unused endpoint: GET /enterprise/dpdp-report", "shortDescription": {"text": "Unused endpoint: GET /enterprise/dpdp-report"}, "fullDescription": {"text": "`apps/api/src/main.ts` declares `GET /enterprise/dpdp-report` 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-cb07be745ba37b6c", "name": "Unused endpoint: GET /enterprise/audit-log", "shortDescription": {"text": "Unused endpoint: GET /enterprise/audit-log"}, "fullDescription": {"text": "`apps/api/src/main.ts` declares `GET /enterprise/audit-log` 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-7a678dd71b12ddd5", "name": "Unused endpoint: POST /enterprise/siem/webhook", "shortDescription": {"text": "Unused endpoint: POST /enterprise/siem/webhook"}, "fullDescription": {"text": "`apps/api/src/main.ts` declares `POST /enterprise/siem/webhook` 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-ff140e808ba0c7d9", "name": "Unused endpoint: POST /enterprise/siem/test", "shortDescription": {"text": "Unused endpoint: POST /enterprise/siem/test"}, "fullDescription": {"text": "`apps/api/src/main.ts` declares `POST /enterprise/siem/test` 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-3c42322a432fd354", "name": "Unused endpoint: GET /enterprise/pricing", "shortDescription": {"text": "Unused endpoint: GET /enterprise/pricing"}, "fullDescription": {"text": "`apps/api/src/main.ts` declares `GET /enterprise/pricing` 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-c3ea395a1240a30a", "name": "Unused endpoint: POST /api/feature-request", "shortDescription": {"text": "Unused endpoint: POST /api/feature-request"}, "fullDescription": {"text": "`apps/api/src/main.ts` declares `POST /api/feature-request` 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-ca0908836612f146", "name": "Unused endpoint: GET /api/feature-requests", "shortDescription": {"text": "Unused endpoint: GET /api/feature-requests"}, "fullDescription": {"text": "`apps/api/src/main.ts` declares `GET /api/feature-requests` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-fe95f31f2fce6fd1", "name": "Unused endpoint: GET /account/export", "shortDescription": {"text": "Unused endpoint: GET /account/export"}, "fullDescription": {"text": "`apps/api/src/main.ts` declares `GET /account/export` 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-d4186216041d91fb", "name": "Unused endpoint: DELETE /account", "shortDescription": {"text": "Unused endpoint: DELETE /account"}, "fullDescription": {"text": "`apps/api/src/main.ts` declares `DELETE /account` 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-452b2a235637ed5c", "name": "Unused endpoint: GET /account/data-summary", "shortDescription": {"text": "Unused endpoint: GET /account/data-summary"}, "fullDescription": {"text": "`apps/api/src/main.ts` declares `GET /account/data-summary` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-396bfa79e87496dd", "name": "Unused endpoint: GET /taxii/", "shortDescription": {"text": "Unused endpoint: GET /taxii/"}, "fullDescription": {"text": "`apps/api/src/taxii/server.ts` declares `GET /taxii/` 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-c5b424ee9bb2ca36", "name": "Unused endpoint: GET /taxii/api/", "shortDescription": {"text": "Unused endpoint: GET /taxii/api/"}, "fullDescription": {"text": "`apps/api/src/taxii/server.ts` declares `GET /taxii/api/` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-095430b4648486f4", "name": "Unused endpoint: GET /taxii/api/collections/", "shortDescription": {"text": "Unused endpoint: GET /taxii/api/collections/"}, "fullDescription": {"text": "`apps/api/src/taxii/server.ts` declares `GET /taxii/api/collections/` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-24127e99f5c184fb", "name": "Unused endpoint: GET /state", "shortDescription": {"text": "Unused endpoint: GET /state"}, "fullDescription": {"text": "`apps/xshieldai-hanumang/src/routes/forja.ts` declares `GET /state` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-eab8b0c2637bf653", "name": "Unused endpoint: GET /proof", "shortDescription": {"text": "Unused endpoint: GET /proof"}, "fullDescription": {"text": "`apps/xshieldai-hanumang/src/routes/forja.ts` declares `GET /proof` 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-d66d77fe7899094f", "name": "Unused endpoint: GET /api/v1/iacs/matrix", "shortDescription": {"text": "Unused endpoint: GET /api/v1/iacs/matrix"}, "fullDescription": {"text": "`apps/xshieldai-varuna/src/iacs/routes.ts` declares `GET /api/v1/iacs/matrix` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-77ca9ab52e0f6dab", "name": "Unused endpoint: GET /api/v1/posture", "shortDescription": {"text": "Unused endpoint: GET /api/v1/posture"}, "fullDescription": {"text": "`apps/xshieldai-varuna/src/posture/routes.ts` declares `GET /api/v1/posture` 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-021f4682a9c91f4a", "name": "Unused endpoint: GET /api/v1/pentest/scopes", "shortDescription": {"text": "Unused endpoint: GET /api/v1/pentest/scopes"}, "fullDescription": {"text": "`apps/xshieldai-varuna/src/pentest/routes.ts` declares `GET /api/v1/pentest/scopes` 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-8d3688237fb1e2c2", "name": "Unused endpoint: GET /api/v1/taxii/status", "shortDescription": {"text": "Unused endpoint: GET /api/v1/taxii/status"}, "fullDescription": {"text": "`apps/xshieldai-varuna/src/taxii/routes.ts` declares `GET /api/v1/taxii/status` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}]}}, "automationDetails": {"id": "repobility/18369"}, "properties": {"repository": "rocketlang/ankrshield", "repoUrl": "https://github.com/rocketlang/ankrshield", "branch": "main"}, "results": [{"ruleId": "scanner-a85cc158664d0a0f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/api/src/main.ts:138"}, "properties": {"repobilityId": "1df3dab31f34a60f", "scanner": "scanner-primary", "fingerprint": "a85cc158664d0a0f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2c4dee59aed04d9f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/api/src/monitor/traffic-monitor.ts:82"}, "properties": {"repobilityId": "9507659daf72734c", "scanner": "scanner-primary", "fingerprint": "2c4dee59aed04d9f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4b50d821031eba54", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/api/src/xshield/watch-poller.ts:33"}, "properties": {"repobilityId": "980f39c2aada701c", "scanner": "scanner-primary", "fingerprint": "4b50d821031eba54", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0cdb8be5c0a80e26", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/api/src/warrior/wire-publisher.ts:107"}, "properties": {"repobilityId": "f91923e0414dc442", "scanner": "scanner-primary", "fingerprint": "0cdb8be5c0a80e26", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6197f3549bdc84d5", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 apps/api/src/graphql/types/user.ts:46"}, "properties": {"repobilityId": "351e17d38943e08f", "scanner": "scanner-primary", "fingerprint": "6197f3549bdc84d5", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-1accef80777b0e18", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/desktop/test-services.ts:10"}, "properties": {"repobilityId": "8c5f61b2fe1f40e4", "scanner": "scanner-primary", "fingerprint": "1accef80777b0e18", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9239c12e43cc3163", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/desktop/src/renderer/app.js:8"}, "properties": {"repobilityId": "0da1389693db7190", "scanner": "scanner-primary", "fingerprint": "9239c12e43cc3163", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d689982e4e5fd586", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 apps/desktop/src/renderer/components/Settings.tsx:89"}, "properties": {"repobilityId": "601a45b34cc956bf", "scanner": "scanner-primary", "fingerprint": "d689982e4e5fd586", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-3c178e2c9b394c28", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/desktop/src/renderer/pages/SettingsAegis.tsx:537"}, "properties": {"repobilityId": "11e934c9bcbcf3bc", "scanner": "scanner-primary", "fingerprint": "3c178e2c9b394c28", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a077d0375ee22029", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 apps/desktop/src/main/auto-launch.ts:28"}, "properties": {"repobilityId": "48c5404899f1998a", "scanner": "scanner-primary", "fingerprint": "a077d0375ee22029", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-a298920c643c814f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/desktop/src/main/auto-launch.ts:23"}, "properties": {"repobilityId": "40d50123652a0f77", "scanner": "scanner-primary", "fingerprint": "a298920c643c814f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-fd12eced51ac10d1", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/desktop/src/main/index.ts:56"}, "properties": {"repobilityId": "146ad2e78709c4f8", "scanner": "scanner-primary", "fingerprint": "fd12eced51ac10d1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0da98f8d0dcc8628", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/desktop/src/main/updater.ts:17"}, "properties": {"repobilityId": "968b0eeb324a6c19", "scanner": "scanner-primary", "fingerprint": "0da98f8d0dcc8628", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8b2233f07a2e384b", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 apps/desktop/src/main/ipc.ts:124"}, "properties": {"repobilityId": "bf09fed261bf503f", "scanner": "scanner-primary", "fingerprint": "8b2233f07a2e384b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-9269dca3af1afa4a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/desktop/src/main/ipc.ts:21"}, "properties": {"repobilityId": "0d9294d90fb3bc5c", "scanner": "scanner-primary", "fingerprint": "9269dca3af1afa4a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-072dfac63d71b694", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 apps/desktop/src/main/tray.ts:106"}, "properties": {"repobilityId": "4c940c7d97f6ab41", "scanner": "scanner-primary", "fingerprint": "072dfac63d71b694", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-2db1f0ac4d9c34a1", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 apps/desktop/src/main/__tests__/window.test.ts:14"}, "properties": {"repobilityId": "a66cf15849dbca74", "scanner": "scanner-primary", "fingerprint": "2db1f0ac4d9c34a1", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-c69a36f9ca47b7c5", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 apps/desktop/src/main/__tests__/tray.test.ts:13"}, "properties": {"repobilityId": "030ac69574790d20", "scanner": "scanner-primary", "fingerprint": "c69a36f9ca47b7c5", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-5a211b00d17add0b", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 apps/desktop/src/main/__tests__/auto-launch.test.ts:13"}, "properties": {"repobilityId": "4c1e2a924422da86", "scanner": "scanner-primary", "fingerprint": "5a211b00d17add0b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-3391bd9dbc31ee1d", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 apps/desktop/src/main/ipc/handlers.ts:75"}, "properties": {"repobilityId": "a30e809b5fabfec8", "scanner": "scanner-primary", "fingerprint": "3391bd9dbc31ee1d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-87ae8ee3a1712f8f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/desktop/src/main/ipc/handlers.ts:76"}, "properties": {"repobilityId": "9bfe8c81270c5e5b", "scanner": "scanner-primary", "fingerprint": "87ae8ee3a1712f8f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-738bfea978e6fb8a", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 apps/desktop/src/main/services/privacy.ts:371"}, "properties": {"repobilityId": "479ca791ad634f76", "scanner": "scanner-primary", "fingerprint": "738bfea978e6fb8a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-6262cb2f2eb98717", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/desktop/src/main/services/privacy.ts:80"}, "properties": {"repobilityId": "672c11632e9e44b5", "scanner": "scanner-primary", "fingerprint": "6262cb2f2eb98717", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0115fd9c49151191", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 apps/desktop/src/main/services/network.ts:127"}, "properties": {"repobilityId": "bc40e613323b8275", "scanner": "scanner-primary", "fingerprint": "0115fd9c49151191", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-3d85d6f41d75e8f5", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/desktop/src/main/services/network.ts:79"}, "properties": {"repobilityId": "b1a5191326cd9dad", "scanner": "scanner-primary", "fingerprint": "3d85d6f41d75e8f5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-fdbd50c68a0064fd", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 apps/desktop/src/main/services/dns.ts:172"}, "properties": {"repobilityId": "b33be3e15bd5bdff", "scanner": "scanner-primary", "fingerprint": "fdbd50c68a0064fd", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-58d6281139c1190d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/desktop/src/main/services/dns.ts:58"}, "properties": {"repobilityId": "3d04f626d71e3e4c", "scanner": "scanner-primary", "fingerprint": "58d6281139c1190d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-83031c6cd9c78b05", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/desktop/src/main/services/settings.ts:184"}, "properties": {"repobilityId": "4f7a1ecff9113e85", "scanner": "scanner-primary", "fingerprint": "83031c6cd9c78b05", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4901b19924314878", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/desktop/src/main/services/service-manager.ts:90"}, "properties": {"repobilityId": "d3460d77cdd2d894", "scanner": "scanner-primary", "fingerprint": "4901b19924314878", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4fbd0ee1e1b6c451", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/desktop/src/main/infrastructure/user.ts:53"}, "properties": {"repobilityId": "9e9105e263d6aa6a", "scanner": "scanner-primary", "fingerprint": "4fbd0ee1e1b6c451", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-dbf09c58fc3d7f53", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/desktop/src/main/infrastructure/redis.ts:64"}, "properties": {"repobilityId": "8d88e577c3028208", "scanner": "scanner-primary", "fingerprint": "dbf09c58fc3d7f53", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3c14a2b25b1f6c97", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/desktop/src/main/infrastructure/database.ts:54"}, "properties": {"repobilityId": "53f849520720d5a2", "scanner": "scanner-primary", "fingerprint": "3c14a2b25b1f6c97", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d1db77195053f499", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/desktop/src/main/aegis-proxy/wa-inbound-webhook-server.ts:108"}, "properties": {"repobilityId": "25f81a055c3fbbc8", "scanner": "scanner-primary", "fingerprint": "d1db77195053f499", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-13276e5ce4de9aef", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/desktop/src/main/aegis-proxy/server.ts:103"}, "properties": {"repobilityId": "2093aa26f90303a6", "scanner": "scanner-primary", "fingerprint": "13276e5ce4de9aef", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-27277afb27fc72e9", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/desktop/src/main/aegis-proxy/ipc-handlers.ts:855"}, "properties": {"repobilityId": "84c95f338ceae7b0", "scanner": "scanner-primary", "fingerprint": "27277afb27fc72e9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9d658877751688b2", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/desktop/src/main/aegis-proxy/dan-inbound-poller.ts:97"}, "properties": {"repobilityId": "7ee420437c9dc0aa", "scanner": "scanner-primary", "fingerprint": "9d658877751688b2", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-06bb4bc7f38c2fd8", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/CertStreamWidget.tsx:146"}, "properties": {"repobilityId": "78360a1ee7046635", "scanner": "scanner-primary", "fingerprint": "06bb4bc7f38c2fd8", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-dd2a795f48e2728e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/AlertTimeline.tsx:118"}, "properties": {"repobilityId": "be0603915b15a168", "scanner": "scanner-primary", "fingerprint": "dd2a795f48e2728e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-142d0d47b5916c1a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/pages/LiveThreats.tsx:535"}, "properties": {"repobilityId": "c09eefc3903eb35c", "scanner": "scanner-primary", "fingerprint": "142d0d47b5916c1a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-3cb8a39894656a72", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 apps/web/src/pages/MdmAdmin.tsx:654"}, "properties": {"repobilityId": "7c83a2d257822cc6", "scanner": "scanner-primary", "fingerprint": "3cb8a39894656a72", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-8b723097564ad1bf", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/pages/ApiKeys.tsx:569"}, "properties": {"repobilityId": "ba47f3c7cb481985", "scanner": "scanner-primary", "fingerprint": "8b723097564ad1bf", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-44a42757c582caee", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/pages/Dashboard.tsx:695"}, "properties": {"repobilityId": "c27e630c27658f52", "scanner": "scanner-primary", "fingerprint": "44a42757c582caee", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-94a8ace756c0bea7", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/pages/CommandCenter.tsx:267"}, "properties": {"repobilityId": "d44f04c6143e7fc1", "scanner": "scanner-primary", "fingerprint": "94a8ace756c0bea7", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-8f2ed8aec225590f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/web/src/pages/Developers.tsx:149"}, "properties": {"repobilityId": "237247de4cb8b596", "scanner": "scanner-primary", "fingerprint": "8f2ed8aec225590f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ee5e82d0da807e71", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/pages/WatchDetail.tsx:80"}, "properties": {"repobilityId": "1b3b2fa7ca3327d1", "scanner": "scanner-primary", "fingerprint": "ee5e82d0da807e71", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e5929fa3331f131a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/pages/Analytics.tsx:246"}, "properties": {"repobilityId": "6c3c8a33e10dd71a", "scanner": "scanner-primary", "fingerprint": "e5929fa3331f131a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0e7a4deb96450948", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/mobile-ios/android/build-tracker-db.js:274"}, "properties": {"repobilityId": "3dd93180551bfa85", "scanner": "scanner-primary", "fingerprint": "0e7a4deb96450948", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-19dbd89657180bb2", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 apps/mobile-ios/src/hooks/usePhoneRisk.ts:23"}, "properties": {"repobilityId": "8b5162f00f6d524d", "scanner": "scanner-primary", "fingerprint": "19dbd89657180bb2", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-dcc17f17e3b069b4", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/mobile-ios/src/hooks/useBlocklist.ts:145"}, "properties": {"repobilityId": "ae0f0143fbac134d", "scanner": "scanner-primary", "fingerprint": "dcc17f17e3b069b4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ad1d04943a776aeb", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/warrior-cli/src/commands/status.ts:7"}, "properties": {"repobilityId": "d93068e2888e0418", "scanner": "scanner-primary", "fingerprint": "ad1d04943a776aeb", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-630832662eb07f15", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/warrior-cli/src/commands/start.ts:7"}, "properties": {"repobilityId": "9c08cca04c296025", "scanner": "scanner-primary", "fingerprint": "630832662eb07f15", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-719a80176ccdafac", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/warrior-cli/src/commands/setup.ts:5"}, "properties": {"repobilityId": "abd29cf1b53b6621", "scanner": "scanner-primary", "fingerprint": "719a80176ccdafac", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ba1dd53b3135598c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/warrior-cli/src/commands/scan.ts:17"}, "properties": {"repobilityId": "47911dccca2b1d6d", "scanner": "scanner-primary", "fingerprint": "ba1dd53b3135598c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-eb5cee87505b3453", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/p2-exit-check.ts:308"}, "properties": {"repobilityId": "b61898dd3acb0aa4", "scanner": "scanner-primary", "fingerprint": "eb5cee87505b3453", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d8e4f4fe616cf0ce", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/p3-exit-check.ts:255"}, "properties": {"repobilityId": "7d8f54281f3c534c", "scanner": "scanner-primary", "fingerprint": "d8e4f4fe616cf0ce", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5241301d71dd90b9", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-db-connection.js:22"}, "properties": {"repobilityId": "23cf6ea45a43638c", "scanner": "scanner-primary", "fingerprint": "5241301d71dd90b9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-414bbec74e82f1ac", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 prisma/seed.ts:17"}, "properties": {"repobilityId": "f77d7e0fb34b08e2", "scanner": "scanner-primary", "fingerprint": "414bbec74e82f1ac", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d1119b1a86b3ad4c", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 packages/api-client/src/client.ts:19"}, "properties": {"repobilityId": "cdb8fbd891b44391", "scanner": "scanner-primary", "fingerprint": "d1119b1a86b3ad4c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-fc4df71b64bdc09d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/network-monitor/scripts/test-capture.ts:11"}, "properties": {"repobilityId": "50db3933c1d1e4f2", "scanner": "scanner-primary", "fingerprint": "fc4df71b64bdc09d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-fd0fa2129aef43a3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/network-monitor/scripts/run-tests.ts:13"}, "properties": {"repobilityId": "ab14365a1a743bf1", "scanner": "scanner-primary", "fingerprint": "fd0fa2129aef43a3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-47a7b35de4661cd4", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/network-monitor/scripts/test-integration.ts:11"}, "properties": {"repobilityId": "3dd4a5fd393f7b4c", "scanner": "scanner-primary", "fingerprint": "47a7b35de4661cd4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-50df855f8a78c64f", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 packages/network-monitor/src/monitor.ts:17"}, "properties": {"repobilityId": "59d12391ac6120d8", "scanner": "scanner-primary", "fingerprint": "50df855f8a78c64f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-b782cac3b45d03dd", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/network-monitor/src/monitor/macos-monitor.ts:70"}, "properties": {"repobilityId": "f60c3af8070afe20", "scanner": "scanner-primary", "fingerprint": "b782cac3b45d03dd", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7b34da8d82845d5d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/network-monitor/src/monitor/linux-monitor.ts:109"}, "properties": {"repobilityId": "87fb81f719bd21a6", "scanner": "scanner-primary", "fingerprint": "7b34da8d82845d5d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6d88fdbe40c9bb6a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/network-monitor/src/monitor/windows-monitor.ts:79"}, "properties": {"repobilityId": "61665b322a0a2524", "scanner": "scanner-primary", "fingerprint": "6d88fdbe40c9bb6a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6cbee9516e8d8159", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 packages/network-monitor/src/capture/tls-parser.ts:260"}, "properties": {"repobilityId": "d3a40638b3e03fc5", "scanner": "scanner-primary", "fingerprint": "6cbee9516e8d8159", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-340c15f081f50111", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/dns-resolver/scripts/download-blocklists.ts:56"}, "properties": {"repobilityId": "23489c10eb4ed440", "scanner": "scanner-primary", "fingerprint": "340c15f081f50111", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7065cbd9e0efee26", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/dns-resolver/scripts/test-full-resolver.ts:15"}, "properties": {"repobilityId": "df3d084e6b7eda1d", "scanner": "scanner-primary", "fingerprint": "7065cbd9e0efee26", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c9144cccfa4abf8a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/dns-resolver/scripts/import-to-database.ts:58"}, "properties": {"repobilityId": "1c08701ddcdc1d9f", "scanner": "scanner-primary", "fingerprint": "c9144cccfa4abf8a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c26d85345743ccbb", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/dns-resolver/scripts/test-lookup.ts:13"}, "properties": {"repobilityId": "11511a9e35f7e2c0", "scanner": "scanner-primary", "fingerprint": "c26d85345743ccbb", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-52a708aab9ab80f4", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/dns-resolver/scripts/parse-blocklists.ts:154"}, "properties": {"repobilityId": "5f55f68e725330da", "scanner": "scanner-primary", "fingerprint": "52a708aab9ab80f4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d5a52b3573be3ce3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/dns-resolver/scripts/cache-metrics.ts:15"}, "properties": {"repobilityId": "4867984533f9975e", "scanner": "scanner-primary", "fingerprint": "d5a52b3573be3ce3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ea1c4aa644909038", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/dns-resolver/scripts/comprehensive-test.ts:31"}, "properties": {"repobilityId": "f193f6f19469dae9", "scanner": "scanner-primary", "fingerprint": "ea1c4aa644909038", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2a8e1aebc0e23dfb", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/dns-resolver/scripts/test-logger.ts:15"}, "properties": {"repobilityId": "20ec1c1b2b663f3c", "scanner": "scanner-primary", "fingerprint": "2a8e1aebc0e23dfb", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ce3baf6bfd370680", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/dns-resolver/src/service.ts:200"}, "properties": {"repobilityId": "6dbdbf995b296b92", "scanner": "scanner-primary", "fingerprint": "ce3baf6bfd370680", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-03888fac5b896d95", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/dns-resolver/src/blocklist/manager.ts:28"}, "properties": {"repobilityId": "13540353011cbace", "scanner": "scanner-primary", "fingerprint": "03888fac5b896d95", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-813daac51c610bad", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/dns-resolver/src/cache/dns-cache.ts:50"}, "properties": {"repobilityId": "dc480efb296e0cf5", "scanner": "scanner-primary", "fingerprint": "813daac51c610bad", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-870098847fc07a47", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/dns-resolver/src/logger/dns-logger.ts:165"}, "properties": {"repobilityId": "b7d170aa21501624", "scanner": "scanner-primary", "fingerprint": "870098847fc07a47", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7db73a849e0d159a", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 packages/crypto/src/encrypt.ts:6"}, "properties": {"repobilityId": "203e15eae13024e3", "scanner": "scanner-primary", "fingerprint": "7db73a849e0d159a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-7cf9f7b24a68ba4f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/ai-warrior/src/warrior.ts:12"}, "properties": {"repobilityId": "1f1972418d6c0683", "scanner": "scanner-primary", "fingerprint": "7cf9f7b24a68ba4f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1c457d6846ff73a3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/privacy-engine/scripts/import-trackers.ts:24"}, "properties": {"repobilityId": "13d5dbe88c6d1c87", "scanner": "scanner-primary", "fingerprint": "1c457d6846ff73a3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-790d24416589f362", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/privacy-engine/scripts/run-tests.ts:10"}, "properties": {"repobilityId": "d9bc76f15af5a3b2", "scanner": "scanner-primary", "fingerprint": "790d24416589f362", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b8956f439db51ede", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/privacy-engine/scripts/test-privacy-scoring.ts:7"}, "properties": {"repobilityId": "aad32e222ccbc9eb", "scanner": "scanner-primary", "fingerprint": "b8956f439db51ede", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-cfb8cd4cc123f6ac", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 packages/privacy-engine/src/engine.ts:13"}, "properties": {"repobilityId": "e61ce6135658fc02", "scanner": "scanner-primary", "fingerprint": "cfb8cd4cc123f6ac", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-77c077478f36b171", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/core/src/cache/redis.ts:25"}, "properties": {"repobilityId": "3c90a09e14001da2", "scanner": "scanner-primary", "fingerprint": "77c077478f36b171", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e10fe9a74de12aeb", "level": "warning", "message": {"text": "Dockerfile runs as root: docker/postgres/Dockerfile"}, "properties": {"repobilityId": "c7c6a237d5ffdaef", "scanner": "scanner-primary", "fingerprint": "e10fe9a74de12aeb", "layer": "hardware", "severity": "medium", "confidence": 1.0, "tags": ["security", "container"]}}, {"ruleId": "scanner-02b6b6b2a5d47e31", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: timescale/timescaledb-ha:pg15-latest"}, "properties": {"repobilityId": "db3cd94719076ea6", "scanner": "scanner-primary", "fingerprint": "02b6b6b2a5d47e31", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "docker/postgres/Dockerfile"}, "region": {"startLine": 3}}}]}, {"ruleId": "scanner-aa5acaa49eb8315b", "level": "note", "message": {"text": "Containers defined but no K8s/orchestration manifest found"}, "properties": {"repobilityId": "b230ea9b68736081", "scanner": "scanner-primary", "fingerprint": "aa5acaa49eb8315b", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["coverage", "deployment"]}}, {"ruleId": "scanner-e611a3c1783f8baf", "level": "error", "message": {"text": "Runtime dotenv file present in repo: apps/web/.env.production"}, "properties": {"repobilityId": "73e02f1b896586eb", "scanner": "scanner-primary", "fingerprint": "e611a3c1783f8baf", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["secrets", "config", "env-file", "runtime-env"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/web/.env.production"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-f040171893c39694", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in apps/api/src/main.ts:5"}, "properties": {"repobilityId": "ff0dba810575da96", "scanner": "scanner-primary", "fingerprint": "f040171893c39694", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/main.ts"}, "region": {"startLine": 5}}}]}, {"ruleId": "scanner-a11a8f709aa6e7da", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in apps/api/src/main.ts:4210"}, "properties": {"repobilityId": "c7adb50a497d26cd", "scanner": "scanner-primary", "fingerprint": "a11a8f709aa6e7da", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/main.ts"}, "region": {"startLine": 4210}}}]}, {"ruleId": "scanner-c960e19406247f83", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in apps/desktop/src/renderer/app.js:54"}, "properties": {"repobilityId": "01eaf7e10b6f2280", "scanner": "scanner-primary", "fingerprint": "c960e19406247f83", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/desktop/src/renderer/app.js"}, "region": {"startLine": 54}}}]}, {"ruleId": "scanner-ebc093abb51cd9d2", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in apps/desktop/src/main/__tests__/aegis-proxy-zip-writer.test.ts:7"}, "properties": {"repobilityId": "daab0066d40748d5", "scanner": "scanner-primary", "fingerprint": "ebc093abb51cd9d2", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/desktop/src/main/__tests__/aegis-proxy-zip-writer.test.ts"}, "region": {"startLine": 7}}}]}, {"ruleId": "scanner-9ce66ff1391df45e", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in apps/desktop/src/main/infrastructure/permissions.ts:1"}, "properties": {"repobilityId": "b4c8ada707098a9c", "scanner": "scanner-primary", "fingerprint": "9ce66ff1391df45e", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/desktop/src/main/infrastructure/permissions.ts"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-10ecce8507a4e7ce", "level": "error", "message": {"text": "Insecure pattern 'exec_used' in apps/desktop/src/main/aegis-proxy/app-identifier.ts:68"}, "properties": {"repobilityId": "a3f3eb8e600e79c2", "scanner": "scanner-primary", "fingerprint": "10ecce8507a4e7ce", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["owasp", "exec_used"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/desktop/src/main/aegis-proxy/app-identifier.ts"}, "region": {"startLine": 68}}}]}, {"ruleId": "scanner-26e8adb1781c7244", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in apps/desktop/src/main/aegis-proxy/app-identifier.ts:12"}, "properties": {"repobilityId": "76fe3a8a9dbb810b", "scanner": "scanner-primary", "fingerprint": "26e8adb1781c7244", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/desktop/src/main/aegis-proxy/app-identifier.ts"}, "region": {"startLine": 12}}}]}, {"ruleId": "scanner-2398cf3f62acbf32", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in apps/web/public/privacy.html:105"}, "properties": {"repobilityId": "2c7f02682be82c00", "scanner": "scanner-primary", "fingerprint": "2398cf3f62acbf32", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/web/public/privacy.html"}, "region": {"startLine": 105}}}]}, {"ruleId": "scanner-5407abcb99193122", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in apps/web/public/capabilities.html:134"}, "properties": {"repobilityId": "c746a0efd454fa7d", "scanner": "scanner-primary", "fingerprint": "5407abcb99193122", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/web/public/capabilities.html"}, "region": {"startLine": 134}}}]}, {"ruleId": "scanner-14c5394daa8b9377", "level": "warning", "message": {"text": "Insecure pattern 'local_storage_auth_token' in apps/web/src/stores/authStore.ts:57"}, "properties": {"repobilityId": "90ff6a913ea1bc0f", "scanner": "scanner-primary", "fingerprint": "14c5394daa8b9377", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "local_storage_auth_token"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/web/src/stores/authStore.ts"}, "region": {"startLine": 57}}}]}, {"ruleId": "scanner-0aa7f598f7185cf6", "level": "warning", "message": {"text": "Insecure pattern 'local_storage_auth_token' in apps/web/src/pages/VerifyMagicLink.tsx:58"}, "properties": {"repobilityId": "7bfed9928cacb1f7", "scanner": "scanner-primary", "fingerprint": "0aa7f598f7185cf6", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "local_storage_auth_token"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/web/src/pages/VerifyMagicLink.tsx"}, "region": {"startLine": 58}}}]}, {"ruleId": "scanner-38601a38b7f49136", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in apps/xshieldai-varuna/src/report/routes.ts:8"}, "properties": {"repobilityId": "7566c4a4dd318445", "scanner": "scanner-primary", "fingerprint": "38601a38b7f49136", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/xshieldai-varuna/src/report/routes.ts"}, "region": {"startLine": 8}}}]}, {"ruleId": "scanner-2eb67d512bc4b830", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/p2-exit-check.ts:15"}, "properties": {"repobilityId": "809a57db5de83d10", "scanner": "scanner-primary", "fingerprint": "2eb67d512bc4b830", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/p2-exit-check.ts"}, "region": {"startLine": 15}}}]}, {"ruleId": "scanner-8188f10c61763d67", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/p3-exit-check.ts:9"}, "properties": {"repobilityId": "91d8ddaf2cdb4a17", "scanner": "scanner-primary", "fingerprint": "8188f10c61763d67", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/p3-exit-check.ts"}, "region": {"startLine": 9}}}]}, {"ruleId": "scanner-ea2792e6cb12c1bf", "level": "error", "message": {"text": "Possible secret in scripts/test-db-connection.js"}, "properties": {"repobilityId": "52bcef67f1e7db9a", "scanner": "scanner-primary", "fingerprint": "ea2792e6cb12c1bf", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/test-db-connection.js"}, "region": {"startLine": 29}}}]}, {"ruleId": "scanner-ea2792e6cb12c1bf", "level": "error", "message": {"text": "Possible secret in scripts/test-db-connection.js"}, "properties": {"repobilityId": "52bcef67f1e7db9a", "scanner": "scanner-primary", "fingerprint": "ea2792e6cb12c1bf", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/test-db-connection.js"}, "region": {"startLine": 89}}}]}, {"ruleId": "scanner-37ee933cc1e6f96b", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in packages/network-monitor/src/classification/app-resolver.ts:7"}, "properties": {"repobilityId": "23743e22abfc571a", "scanner": "scanner-primary", "fingerprint": "37ee933cc1e6f96b", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/network-monitor/src/classification/app-resolver.ts"}, "region": {"startLine": 7}}}]}, {"ruleId": "scanner-875643958a961f71", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in packages/network-monitor/src/monitor/macos-monitor.ts:14"}, "properties": {"repobilityId": "0e08055615995469", "scanner": "scanner-primary", "fingerprint": "875643958a961f71", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/network-monitor/src/monitor/macos-monitor.ts"}, "region": {"startLine": 14}}}]}, {"ruleId": "scanner-e9a2880cb6be25df", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in packages/network-monitor/src/monitor/linux-monitor.ts:14"}, "properties": {"repobilityId": "505de3aee23c4eb2", "scanner": "scanner-primary", "fingerprint": "e9a2880cb6be25df", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/network-monitor/src/monitor/linux-monitor.ts"}, "region": {"startLine": 14}}}]}, {"ruleId": "scanner-55010b4411f37acf", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in packages/network-monitor/src/monitor/windows-monitor.ts:14"}, "properties": {"repobilityId": "600f8600570912be", "scanner": "scanner-primary", "fingerprint": "55010b4411f37acf", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/network-monitor/src/monitor/windows-monitor.ts"}, "region": {"startLine": 14}}}]}, {"ruleId": "scanner-c3cdc07b7677a669", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in packages/dns-resolver/src/service.ts:87"}, "properties": {"repobilityId": "6f71bfa46e7972ec", "scanner": "scanner-primary", "fingerprint": "c3cdc07b7677a669", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/dns-resolver/src/service.ts"}, "region": {"startLine": 87}}}]}, {"ruleId": "scanner-6bd573fc5ccdf26e", "level": "warning", "message": {"text": "Insecure pattern 'weak_hash' in packages/spyware-detector/src/live-ioc-feed.ts:256"}, "properties": {"repobilityId": "f1ab61e08809f166", "scanner": "scanner-primary", "fingerprint": "6bd573fc5ccdf26e", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "weak_hash"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/spyware-detector/src/live-ioc-feed.ts"}, "region": {"startLine": 256}}}]}, {"ruleId": "scanner-aa9ba3af9aa09d9f", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in packages/spyware-detector/src/detectors/process-detector.ts:20"}, "properties": {"repobilityId": "7a976fa05bc1a9e9", "scanner": "scanner-primary", "fingerprint": "aa9ba3af9aa09d9f", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/spyware-detector/src/detectors/process-detector.ts"}, "region": {"startLine": 20}}}]}, {"ruleId": "scanner-1b1d3b7452c7c111", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in packages/spyware-detector/src/detectors/linux-rootkit-detector.ts:24"}, "properties": {"repobilityId": "119505c90cb529ac", "scanner": "scanner-primary", "fingerprint": "1b1d3b7452c7c111", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/spyware-detector/src/detectors/linux-rootkit-detector.ts"}, "region": {"startLine": 24}}}]}, {"ruleId": "scanner-c721626238b47f41", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in packages/spyware-detector/src/detectors/cve-detector.ts:28"}, "properties": {"repobilityId": "f593718f0f70137c", "scanner": "scanner-primary", "fingerprint": "c721626238b47f41", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/spyware-detector/src/detectors/cve-detector.ts"}, "region": {"startLine": 28}}}]}, {"ruleId": "scanner-67c146d6dfac77c5", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in packages/spyware-detector/src/detectors/yara-detector.ts:16"}, "properties": {"repobilityId": "442a8d1583eeb181", "scanner": "scanner-primary", "fingerprint": "67c146d6dfac77c5", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/spyware-detector/src/detectors/yara-detector.ts"}, "region": {"startLine": 16}}}]}, {"ruleId": "scanner-b57203f73e5c4950", "level": "error", "message": {"text": "Possible secret in packages/ai-warrior/src/defense/honeypot.ts"}, "properties": {"repobilityId": "8b06bb40e3713c71", "scanner": "scanner-primary", "fingerprint": "b57203f73e5c4950", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/ai-warrior/src/defense/honeypot.ts"}, "region": {"startLine": 50}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "ae16880318b99912", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 16}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "989a74409a402368", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 19}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "777eb8eddc158382", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 24}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "5b2c585f16cb03ef", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 34}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "ae16880318b99912", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 56}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "989a74409a402368", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 59}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "777eb8eddc158382", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 64}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "ae16880318b99912", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 104}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "989a74409a402368", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 107}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "777eb8eddc158382", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 112}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "0f6f2de4561c226b", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 126}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "ae16880318b99912", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 140}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "989a74409a402368", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 143}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "777eb8eddc158382", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 148}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "7d172dc6ca6c1740", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 159}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "ae16880318b99912", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 172}}}]}, {"ruleId": "scanner-7f1e4527e6fecffa", "level": "error", "message": {"text": "GitHub Action tracks a moving branch"}, "properties": {"repobilityId": "fe64a2eb883cb9d3", "scanner": "scanner-primary", "fingerprint": "7f1e4527e6fecffa", "layer": "cicd", "severity": "high", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 175}}}]}, {"ruleId": "scanner-cb639d9a10a47b23", "level": "note", "message": {"text": "package.json defines install-time lifecycle scripts"}, "properties": {"repobilityId": "b86179956da3a4a8", "scanner": "scanner-primary", "fingerprint": "cb639d9a10a47b23", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "npm", "install-scripts"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-bb3a53b8b101640c", "level": "note", "message": {"text": "Very large file: apps/api/src/main.ts (5636 lines)"}, "properties": {"repobilityId": "0fdfd811d18863e0", "scanner": "scanner-primary", "fingerprint": "bb3a53b8b101640c", "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-720a280bf799af06", "level": "note", "message": {"text": "36 TODO/FIXME markers"}, "properties": {"repobilityId": "4b38c118003e07d2", "scanner": "scanner-primary", "fingerprint": "720a280bf799af06", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["maintenance"]}}, {"ruleId": "scanner-b06b8d86f24c77f9", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: apps/api/package.json"}, "properties": {"repobilityId": "ce77cd34ed0306d4", "scanner": "scanner-primary", "fingerprint": "b06b8d86f24c77f9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-d57b3f82d2270c5b", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: apps/desktop/package.json"}, "properties": {"repobilityId": "a5d1a254ecc349f8", "scanner": "scanner-primary", "fingerprint": "d57b3f82d2270c5b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/desktop/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-4a9eb7dc7c6e3880", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: apps/web/package.json"}, "properties": {"repobilityId": "6c1704bf24cf19ac", "scanner": "scanner-primary", "fingerprint": "4a9eb7dc7c6e3880", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/web/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-fed219f15c4decf5", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: apps/xshieldai-varuna/package.json"}, "properties": {"repobilityId": "892ed6322dd354d9", "scanner": "scanner-primary", "fingerprint": "fed219f15c4decf5", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/xshieldai-varuna/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3a71a95a152f7951", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: apps/mobile-ios/package.json"}, "properties": {"repobilityId": "001345f404c52a7a", "scanner": "scanner-primary", "fingerprint": "3a71a95a152f7951", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/mobile-ios/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-26495efd67dc2ac0", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: apps/xshield-active-api/package.json"}, "properties": {"repobilityId": "90dd77b234aa3310", "scanner": "scanner-primary", "fingerprint": "26495efd67dc2ac0", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/xshield-active-api/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-892d4f964c9036e2", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/api-client/package.json"}, "properties": {"repobilityId": "e1c2e42c288c295a", "scanner": "scanner-primary", "fingerprint": "892d4f964c9036e2", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/api-client/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-9b324ea9b7a52e62", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/network-monitor/package.json"}, "properties": {"repobilityId": "f09862dd3c1abc3c", "scanner": "scanner-primary", "fingerprint": "9b324ea9b7a52e62", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/network-monitor/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-80d42b32fc918c29", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/dns-resolver/package.json"}, "properties": {"repobilityId": "8e8cdc107f724ba1", "scanner": "scanner-primary", "fingerprint": "80d42b32fc918c29", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/dns-resolver/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-7b85b0a5c9a918e4", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/crypto/package.json"}, "properties": {"repobilityId": "316ceb684a4f38c1", "scanner": "scanner-primary", "fingerprint": "7b85b0a5c9a918e4", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/crypto/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-eddecaa766cadff2", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/config/package.json"}, "properties": {"repobilityId": "03931bf3537e3eaf", "scanner": "scanner-primary", "fingerprint": "eddecaa766cadff2", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/config/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-e1af77fd74aef4ae", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/spyware-detector/package.json"}, "properties": {"repobilityId": "79b3de3f6dfa4545", "scanner": "scanner-primary", "fingerprint": "e1af77fd74aef4ae", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/spyware-detector/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-f44e879049b2e264", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/ai-warrior/package.json"}, "properties": {"repobilityId": "96daa4592a7ec5fc", "scanner": "scanner-primary", "fingerprint": "f44e879049b2e264", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/ai-warrior/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-50218c90b43393bb", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/ui/package.json"}, "properties": {"repobilityId": "637e26a8c754e81d", "scanner": "scanner-primary", "fingerprint": "50218c90b43393bb", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/ui/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-6a30a5d12e676c8c", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/risk-intelligence/package.json"}, "properties": {"repobilityId": "087f6f42600e3ce0", "scanner": "scanner-primary", "fingerprint": "6a30a5d12e676c8c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/risk-intelligence/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-f6bd9133118a202b", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/policy-engine/package.json"}, "properties": {"repobilityId": "9f831ef1e7c628df", "scanner": "scanner-primary", "fingerprint": "f6bd9133118a202b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/policy-engine/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-c95e9650c98c4456", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/dpdp-scanner/package.json"}, "properties": {"repobilityId": "2dd06543d5195050", "scanner": "scanner-primary", "fingerprint": "c95e9650c98c4456", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/dpdp-scanner/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-6cce9d7788964cf7", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/ankrshield-mdm-bridge/package.json"}, "properties": {"repobilityId": "c3cbdfe4bf64f487", "scanner": "scanner-primary", "fingerprint": "6cce9d7788964cf7", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/ankrshield-mdm-bridge/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-6d3255de5ab08afb", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/privacy-engine/package.json"}, "properties": {"repobilityId": "f69074c1205fed6f", "scanner": "scanner-primary", "fingerprint": "6d3255de5ab08afb", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/privacy-engine/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-99c9b14aa9ec0be3", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/ai-governance/package.json"}, "properties": {"repobilityId": "8fa7c4e4454d067b", "scanner": "scanner-primary", "fingerprint": "99c9b14aa9ec0be3", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/ai-governance/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-28e92806c0db3cd2", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/core/package.json"}, "properties": {"repobilityId": "8640e46be7e3f9b2", "scanner": "scanner-primary", "fingerprint": "28e92806c0db3cd2", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/core/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-29111ed755df4584", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/tracker-db/package.json"}, "properties": {"repobilityId": "30cae1c582e13058", "scanner": "scanner-primary", "fingerprint": "29111ed755df4584", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/tracker-db/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-658ad58a10b2519a", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/sms-shield/package.json"}, "properties": {"repobilityId": "a9b9d3aa2f0e7e55", "scanner": "scanner-primary", "fingerprint": "658ad58a10b2519a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/sms-shield/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "d1096f21262f3915", "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": "4217b163b48ef476", "scanner": "scanner-primary", "fingerprint": "72b2a6250083a784", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "incomplete", "generated-repo-pattern"]}}, {"ruleId": "scanner-9d79c4077342a7d0", "level": "warning", "message": {"text": "Runtime service client appears to use placeholder configuration"}, "properties": {"repobilityId": "cd833f5a6de4643e", "scanner": "scanner-primary", "fingerprint": "9d79c4077342a7d0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "runtime-config", "service-client", "generated-repo-pattern"]}}, {"ruleId": "scanner-2d0c7b7ab8f8aacf", "level": "warning", "message": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "properties": {"repobilityId": "f111771c291cc4ea", "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": "c56e1f9f5b47f6ab", "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": "2b74f2f4ae303fc9", "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": "6e202d301400e5c9", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-1d020b52993cfbc1", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: apps/xshield-active-api/.claude/settings.json"}, "properties": {"repobilityId": "2580dc1431db19c9", "scanner": "scanner-primary", "fingerprint": "1d020b52993cfbc1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/xshield-active-api/.claude/settings.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-f8796adac74960df", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/api/scripts/run-scan-chain.mjs:14"}, "properties": {"repobilityId": "16e807b2a5107158", "scanner": "scanner-primary", "fingerprint": "f8796adac74960df", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-8d1b880eae6e91b6", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/api/src/main.ts:98"}, "properties": {"repobilityId": "f9645a906ec0d708", "scanner": "scanner-primary", "fingerprint": "8d1b880eae6e91b6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9e641a123d160d2d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/api/src/main.ts:2257"}, "properties": {"repobilityId": "21c71a0e5a5830ed", "scanner": "scanner-primary", "fingerprint": "9e641a123d160d2d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9f06f51db7b4c47a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/api/src/integrations/alert-dispatcher.ts:117"}, "properties": {"repobilityId": "f9babc7c41cdbc2d", "scanner": "scanner-primary", "fingerprint": "9f06f51db7b4c47a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-0be1b2866f8b0eea", "level": "none", "message": {"text": "Commented-code block (8 lines) in apps/api/src/xshield/phone-risk.ts:201"}, "properties": {"repobilityId": "6358293c11f4da7d", "scanner": "scanner-primary", "fingerprint": "0be1b2866f8b0eea", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-933e23f5fe862ba2", "level": "none", "message": {"text": "Commented-code block (20 lines) in apps/api/src/graphql/types/user.ts:45"}, "properties": {"repobilityId": "0ff1e2bd2e448777", "scanner": "scanner-primary", "fingerprint": "933e23f5fe862ba2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2d99acf28587f14c", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/api/src/chains/run-scan-chain.ts:6"}, "properties": {"repobilityId": "4350279954497cf4", "scanner": "scanner-primary", "fingerprint": "2d99acf28587f14c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5109afcc57dccd4e", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/desktop/src/renderer/components/ConsentDialog.tsx:5"}, "properties": {"repobilityId": "25080486dca1248a", "scanner": "scanner-primary", "fingerprint": "5109afcc57dccd4e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-685b9ca5c01afcfc", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/desktop/src/renderer/pages/SettingsAegis.tsx:4"}, "properties": {"repobilityId": "1861e297660bf0fa", "scanner": "scanner-primary", "fingerprint": "685b9ca5c01afcfc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8bf52f4911aa48a9", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/desktop/src/main/index.ts:89"}, "properties": {"repobilityId": "78b96fde70b8f22f", "scanner": "scanner-primary", "fingerprint": "8bf52f4911aa48a9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1475613cb0c2012f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/desktop/src/main/__tests__/aegis-proxy-wa-inbound.test.ts:286"}, "properties": {"repobilityId": "c03d819e121eddbb", "scanner": "scanner-primary", "fingerprint": "1475613cb0c2012f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-14d8eff48dcd4086", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/desktop/src/main/__tests__/aegis-proxy-request-audit-store.test.ts:187"}, "properties": {"repobilityId": "d90cb2f1fe22c7a3", "scanner": "scanner-primary", "fingerprint": "14d8eff48dcd4086", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5bfe71aa46593588", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/desktop/src/main/aegis-proxy/app-identifier.ts:83"}, "properties": {"repobilityId": "376e408b9b3236b0", "scanner": "scanner-primary", "fingerprint": "5bfe71aa46593588", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-59aca9ccc3a62cf3", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/desktop/src/main/aegis-proxy/key-on-disk-scanner.ts:7"}, "properties": {"repobilityId": "7769dff0770b7e3a", "scanner": "scanner-primary", "fingerprint": "59aca9ccc3a62cf3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-caaadea4ae060ec3", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/desktop/src/main/aegis-proxy/budget-ledger.ts:9"}, "properties": {"repobilityId": "6cc4b180faa2a808", "scanner": "scanner-primary", "fingerprint": "caaadea4ae060ec3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f20c02b4da852d79", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/desktop/src/main/aegis-proxy/wa-webhook-signature.ts:13"}, "properties": {"repobilityId": "49694f9c8e32c6bf", "scanner": "scanner-primary", "fingerprint": "f20c02b4da852d79", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-dbdcc073590542b0", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/desktop/src/main/aegis-proxy/observer-openai.ts:4"}, "properties": {"repobilityId": "963e3353938c5a37", "scanner": "scanner-primary", "fingerprint": "dbdcc073590542b0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d220f38380e20a48", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/desktop/src/main/aegis-proxy/aegis-gate.ts:14"}, "properties": {"repobilityId": "d0f15ac411b7d3ff", "scanner": "scanner-primary", "fingerprint": "d220f38380e20a48", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-144d1b8914661730", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/desktop/src/main/aegis-proxy/pii-stream-redactor.ts:4"}, "properties": {"repobilityId": "c8faddbac7ffe64e", "scanner": "scanner-primary", "fingerprint": "144d1b8914661730", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3a55e409e1fbacb1", "level": "none", "message": {"text": "Commented-code block (7 lines) in apps/desktop/src/main/aegis-proxy/audit-export.ts:13"}, "properties": {"repobilityId": "e2233bc5ebff7df2", "scanner": "scanner-primary", "fingerprint": "3a55e409e1fbacb1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b16d241ee308b981", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/desktop/src/main/aegis-proxy/request-audit-store.ts:4"}, "properties": {"repobilityId": "165cf1efc30578fb", "scanner": "scanner-primary", "fingerprint": "b16d241ee308b981", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a02471591c4b2d65", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/desktop/src/main/aegis-proxy/kill-switch.ts:9"}, "properties": {"repobilityId": "308d35ab99d9a8d1", "scanner": "scanner-primary", "fingerprint": "a02471591c4b2d65", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-dc08641604925703", "level": "none", "message": {"text": "Commented-code block (7 lines) in apps/desktop/src/main/aegis-proxy/pending-consent-queue.ts:8"}, "properties": {"repobilityId": "5566015e9fa191dc", "scanner": "scanner-primary", "fingerprint": "dc08641604925703", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-db0b507ea7c452d2", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/desktop/src/main/aegis-proxy/dan-carrier-os.ts:4"}, "properties": {"repobilityId": "2eb45c9a8e783252", "scanner": "scanner-primary", "fingerprint": "db0b507ea7c452d2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-668475deabcc22e4", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/desktop/src/main/aegis-proxy/latency-tracker.ts:4"}, "properties": {"repobilityId": "07772e9a7b370378", "scanner": "scanner-primary", "fingerprint": "668475deabcc22e4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d225d8f3c94dafcc", "level": "none", "message": {"text": "Commented-code block (10 lines) in apps/desktop/src/main/aegis-proxy/wa-inbound-webhook-server.ts:7"}, "properties": {"repobilityId": "b4bb1f39d8ada1e6", "scanner": "scanner-primary", "fingerprint": "d225d8f3c94dafcc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-07275218e7b8bd6f", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/desktop/src/main/aegis-proxy/dan-carrier-router.ts:7"}, "properties": {"repobilityId": "01c3c9e1a885ee79", "scanner": "scanner-primary", "fingerprint": "07275218e7b8bd6f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-904b676d0b35bd4a", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/desktop/src/main/aegis-proxy/dan-timeout-config.ts:4"}, "properties": {"repobilityId": "e8db88e4459f167a", "scanner": "scanner-primary", "fingerprint": "904b676d0b35bd4a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b81f39b194adf1ee", "level": "none", "message": {"text": "Commented-code block (7 lines) in apps/desktop/src/main/aegis-proxy/pii-boundary.ts:4"}, "properties": {"repobilityId": "4ec731e186a0978f", "scanner": "scanner-primary", "fingerprint": "b81f39b194adf1ee", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a6d9fb50dea394aa", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/desktop/src/main/aegis-proxy/dan-categorizer.ts:6"}, "properties": {"repobilityId": "457cd359ee18746b", "scanner": "scanner-primary", "fingerprint": "a6d9fb50dea394aa", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-21370f3b366f8502", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/desktop/src/main/aegis-proxy/aegis-lite-vendored.ts:4"}, "properties": {"repobilityId": "6588c8112d9702b0", "scanner": "scanner-primary", "fingerprint": "21370f3b366f8502", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d34976da85fc7be0", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/desktop/src/main/aegis-proxy/cost-rates.ts:8"}, "properties": {"repobilityId": "8c66d42dbc093ab3", "scanner": "scanner-primary", "fingerprint": "d34976da85fc7be0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9130c420fa41b8bc", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/desktop/src/main/aegis-proxy/zip-writer.ts:4"}, "properties": {"repobilityId": "5870162d6c9c9633", "scanner": "scanner-primary", "fingerprint": "9130c420fa41b8bc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-07bcb98d118aff11", "level": "none", "message": {"text": "Commented-code block (7 lines) in apps/desktop/src/main/aegis-proxy/apps-policy.ts:11"}, "properties": {"repobilityId": "d6dbebb349caa12f", "scanner": "scanner-primary", "fingerprint": "07bcb98d118aff11", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b12561d86da9ee38", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/desktop/src/main/aegis-proxy/wa-webhook-parser.ts:13"}, "properties": {"repobilityId": "3b7974a12eae9893", "scanner": "scanner-primary", "fingerprint": "b12561d86da9ee38", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f0a4849026eb6861", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/desktop/src/main/aegis-proxy/wa-webhook-creds.ts:6"}, "properties": {"repobilityId": "35f29b56053ff67d", "scanner": "scanner-primary", "fingerprint": "f0a4849026eb6861", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c9a4a0ed992c54ba", "level": "none", "message": {"text": "Commented-code block (7 lines) in apps/desktop/src/main/aegis-proxy/dan-carrier-wa.ts:4"}, "properties": {"repobilityId": "52a17be60271a693", "scanner": "scanner-primary", "fingerprint": "c9a4a0ed992c54ba", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-03ac2cb1207ccac5", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/desktop/src/main/aegis-proxy/server.ts:4"}, "properties": {"repobilityId": "0e222cc87f776cbb", "scanner": "scanner-primary", "fingerprint": "03ac2cb1207ccac5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0af719dd0f252c8f", "level": "none", "message": {"text": "Commented-code block (10 lines) in apps/desktop/src/main/aegis-proxy/audit-retention-worker.ts:6"}, "properties": {"repobilityId": "1ddb6734af376815", "scanner": "scanner-primary", "fingerprint": "0af719dd0f252c8f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0592c24bb7e74985", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/desktop/src/main/aegis-proxy/event-tally-store.ts:4"}, "properties": {"repobilityId": "830df65c2f97b507", "scanner": "scanner-primary", "fingerprint": "0592c24bb7e74985", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5bb59ff5db0796ab", "level": "none", "message": {"text": "Commented-code block (8 lines) in apps/desktop/src/main/aegis-proxy/key-on-disk-migrator.ts:8"}, "properties": {"repobilityId": "d9c8d0847a86aa8d", "scanner": "scanner-primary", "fingerprint": "5bb59ff5db0796ab", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-849bbe0c82a8686a", "level": "none", "message": {"text": "Commented-code block (7 lines) in apps/desktop/src/main/aegis-proxy/rules-catalog.ts:11"}, "properties": {"repobilityId": "59a9b876e187b208", "scanner": "scanner-primary", "fingerprint": "849bbe0c82a8686a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1efca43779c5da88", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/desktop/src/main/aegis-proxy/hanumang-mandate-vendored.ts:5"}, "properties": {"repobilityId": "32708d85514ce7d2", "scanner": "scanner-primary", "fingerprint": "1efca43779c5da88", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b47a6b642c97c3d5", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/desktop/src/main/aegis-proxy/dan-inbound-parser.ts:6"}, "properties": {"repobilityId": "cb4f0effa1f42d02", "scanner": "scanner-primary", "fingerprint": "b47a6b642c97c3d5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f7bd4696cbdfe1b2", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/xshieldai-hanumang/src/routes/observe.ts:1"}, "properties": {"repobilityId": "28af24a0c891f2c5", "scanner": "scanner-primary", "fingerprint": "f7bd4696cbdfe1b2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-650cc432f4ed3e46", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/xshieldai-hanumang/src/routes/attestation.ts:1"}, "properties": {"repobilityId": "ce755364f2b53d86", "scanner": "scanner-primary", "fingerprint": "650cc432f4ed3e46", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-38e5a03129647ed4", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/xshieldai-hanumang/src/core/mudrika.ts:1"}, "properties": {"repobilityId": "8499b090ea5bebf3", "scanner": "scanner-primary", "fingerprint": "38e5a03129647ed4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c56c49a0b7cc5ca5", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/src/lib/apiClient.ts:31"}, "properties": {"repobilityId": "40c0ea7ef29c8d2a", "scanner": "scanner-primary", "fingerprint": "c56c49a0b7cc5ca5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9f6cc00441fc35bd", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/src/lib/ssoClient.ts:41"}, "properties": {"repobilityId": "59d41876ae1d3d2b", "scanner": "scanner-primary", "fingerprint": "9f6cc00441fc35bd", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f2e1405ffa468b48", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/src/pages/SupplyChain.tsx:168"}, "properties": {"repobilityId": "413f113d26810e8d", "scanner": "scanner-primary", "fingerprint": "f2e1405ffa468b48", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-fe505cff3f09368e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/src/pages/Setup.tsx:224"}, "properties": {"repobilityId": "d8dfe64ceb8b8a50", "scanner": "scanner-primary", "fingerprint": "fe505cff3f09368e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e861871ec3055af7", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/src/pages/ApiKeys.tsx:408"}, "properties": {"repobilityId": "4ea30471da210661", "scanner": "scanner-primary", "fingerprint": "e861871ec3055af7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-5a5f7c1fe11bf0d5", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/src/pages/Developers.tsx:141"}, "properties": {"repobilityId": "4a7518ec7bd0012e", "scanner": "scanner-primary", "fingerprint": "5a5f7c1fe11bf0d5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ec7a057195c9ff79", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/src/pages/Onboarding.tsx:251"}, "properties": {"repobilityId": "24f473f442d2dece", "scanner": "scanner-primary", "fingerprint": "ec7a057195c9ff79", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9d87dcaf9ec81cda", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/mobile-ios/.eslintrc.cjs:10"}, "properties": {"repobilityId": "222cca5afade1138", "scanner": "scanner-primary", "fingerprint": "9d87dcaf9ec81cda", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bc64ea43238e6359", "level": "note", "message": {"text": "Legacy-named symbol `ankrshield_mdm_v1` in apps/mobile-ios/src/mdm/policy-engine.ts:54"}, "properties": {"repobilityId": "cbcf7bb38e85e8da", "scanner": "scanner-primary", "fingerprint": "bc64ea43238e6359", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-a228a9e929779c90", "level": "note", "message": {"text": "Legacy-named symbol `ankrshield_mdm_v1` in apps/mobile-ios/src/mdm/types.ts:42"}, "properties": {"repobilityId": "a6df28b7df82864b", "scanner": "scanner-primary", "fingerprint": "a228a9e929779c90", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-1a01542136c0eb30", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/mobile-ios/src/services/PrivacyService.ts:75"}, "properties": {"repobilityId": "49d1b1d875b3262a", "scanner": "scanner-primary", "fingerprint": "1a01542136c0eb30", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-aeec5624655146b5", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/mobile-ios/src/services/WarriorService.ts:7"}, "properties": {"repobilityId": "3d9bb2959bb80baa", "scanner": "scanner-primary", "fingerprint": "aeec5624655146b5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-134560af8f193ea0", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/mobile-ios/src/services/NetworkService.ts:37"}, "properties": {"repobilityId": "adae9d6288332d55", "scanner": "scanner-primary", "fingerprint": "134560af8f193ea0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-6b051758137709c1", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/xshieldai-asm-ai-module/src/probes/runner.ts:130"}, "properties": {"repobilityId": "b9f32c69111b3aa6", "scanner": "scanner-primary", "fingerprint": "6b051758137709c1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-014db31f21bf9c1b", "level": "none", "message": {"text": "Commented-code block (5 lines) in scripts/proof-parity.ts:16"}, "properties": {"repobilityId": "a1380d5496097e5f", "scanner": "scanner-primary", "fingerprint": "014db31f21bf9c1b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-557371a156e09783", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/network-monitor/src/capture/tls-parser.ts:75"}, "properties": {"repobilityId": "6fba0f391bf27951", "scanner": "scanner-primary", "fingerprint": "557371a156e09783", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fc6a044ddcdab16f", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/dns-resolver/src/service.ts:3"}, "properties": {"repobilityId": "91072030422a9b14", "scanner": "scanner-primary", "fingerprint": "fc6a044ddcdab16f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-55c2b5915cf741c4", "level": "none", "message": {"text": "Commented-code block (6 lines) in packages/spyware-detector/src/yara-rules.ts:127"}, "properties": {"repobilityId": "0c2bf1030b7bc2d0", "scanner": "scanner-primary", "fingerprint": "55c2b5915cf741c4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a7234dda5c89a153", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/spyware-detector/src/live-ioc-feed.ts:249"}, "properties": {"repobilityId": "b13c3da5e7b5348b", "scanner": "scanner-primary", "fingerprint": "a7234dda5c89a153", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4fb43da8e352e790", "level": "note", "message": {"text": "Legacy-named symbol `wallet_backup` in packages/ai-warrior/src/defense/honeypot.ts:56"}, "properties": {"repobilityId": "a0ee5240ac27898d", "scanner": "scanner-primary", "fingerprint": "4fb43da8e352e790", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-d5615e834b8decbd", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/ai-warrior/src/llm/client.ts:82"}, "properties": {"repobilityId": "3e9ad3f6fb127ca2", "scanner": "scanner-primary", "fingerprint": "d5615e834b8decbd", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-5cf96f9f0efefc88", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/privacy-engine/src/app-trust-engine.ts:502"}, "properties": {"repobilityId": "30d08628606f5d10", "scanner": "scanner-primary", "fingerprint": "5cf96f9f0efefc88", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d8a8479d5490ab86", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/ai-governance/src/monitor.ts:17"}, "properties": {"repobilityId": "f649c19babb6f82d", "scanner": "scanner-primary", "fingerprint": "d8a8479d5490ab86", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-99b55d14ec628940", "level": "note", "message": {"text": "37 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "6777af358f28283a", "scanner": "scanner-primary", "fingerprint": "99b55d14ec628940", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "config-drift"]}}, {"ruleId": "scanner-3e00705827883a85", "level": "warning", "message": {"text": "Frontend route `dashboard` has no Link/navigate to it \u2014 apps/desktop/src/renderer/App.tsx"}, "properties": {"repobilityId": "f5074c9182469cf5", "scanner": "scanner-primary", "fingerprint": "3e00705827883a85", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-6d71883a54071942", "level": "warning", "message": {"text": "Frontend route `analytics` has no Link/navigate to it \u2014 apps/desktop/src/renderer/App.tsx"}, "properties": {"repobilityId": "0c0b6a3570a9ed16", "scanner": "scanner-primary", "fingerprint": "6d71883a54071942", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-8481cd356b252718", "level": "warning", "message": {"text": "Frontend route `devices` has no Link/navigate to it \u2014 apps/desktop/src/renderer/App.tsx"}, "properties": {"repobilityId": "4e47a305cb0218b3", "scanner": "scanner-primary", "fingerprint": "8481cd356b252718", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-8373171795208620", "level": "warning", "message": {"text": "Frontend route `agents` has no Link/navigate to it \u2014 apps/desktop/src/renderer/App.tsx"}, "properties": {"repobilityId": "32b875a60885c6c6", "scanner": "scanner-primary", "fingerprint": "8373171795208620", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-ef762f1d4df422e0", "level": "warning", "message": {"text": "Frontend route `budget` has no Link/navigate to it \u2014 apps/desktop/src/renderer/App.tsx"}, "properties": {"repobilityId": "6ce871b1b40724a5", "scanner": "scanner-primary", "fingerprint": "ef762f1d4df422e0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-08a73d99fb7ed815", "level": "warning", "message": {"text": "Frontend route `report-card` has no Link/navigate to it \u2014 apps/desktop/src/renderer/App.tsx"}, "properties": {"repobilityId": "6d4206c1998a0102", "scanner": "scanner-primary", "fingerprint": "08a73d99fb7ed815", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-c641cf4cc4312b46", "level": "warning", "message": {"text": "Frontend route `replay` has no Link/navigate to it \u2014 apps/desktop/src/renderer/App.tsx"}, "properties": {"repobilityId": "9b3e582694478f4e", "scanner": "scanner-primary", "fingerprint": "c641cf4cc4312b46", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-84439967980e5660", "level": "warning", "message": {"text": "Frontend route `setup/root-ca` has no Link/navigate to it \u2014 apps/desktop/src/renderer/App.tsx"}, "properties": {"repobilityId": "57436f21bc6860fe", "scanner": "scanner-primary", "fingerprint": "84439967980e5660", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-cb641e0a0ed8fbbc", "level": "warning", "message": {"text": "Frontend route `settings` has no Link/navigate to it \u2014 apps/desktop/src/renderer/App.tsx"}, "properties": {"repobilityId": "a8c51f0929f454eb", "scanner": "scanner-primary", "fingerprint": "cb641e0a0ed8fbbc", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-fc6989e89f15fa2a", "level": "warning", "message": {"text": "Frontend route `settings/aegis` has no Link/navigate to it \u2014 apps/desktop/src/renderer/App.tsx"}, "properties": {"repobilityId": "500512db907fca40", "scanner": "scanner-primary", "fingerprint": "fc6989e89f15fa2a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-eb5eed2af2f3db70", "level": "warning", "message": {"text": "Frontend route `/evidence` has no Link/navigate to it \u2014 apps/web/src/App.tsx"}, "properties": {"repobilityId": "66c77ec5717733fd", "scanner": "scanner-primary", "fingerprint": "eb5eed2af2f3db70", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-c9c81106224b6105", "level": "warning", "message": {"text": "Frontend route `/auth/verify` has no Link/navigate to it \u2014 apps/web/src/App.tsx"}, "properties": {"repobilityId": "efdb3257103315d6", "scanner": "scanner-primary", "fingerprint": "c9c81106224b6105", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-f10f05920d3465b7", "level": "warning", "message": {"text": "Frontend route `/mdm` has no Link/navigate to it \u2014 apps/web/src/App.tsx"}, "properties": {"repobilityId": "476895e8c167e3c0", "scanner": "scanner-primary", "fingerprint": "f10f05920d3465b7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-e806fcf75ea12f95", "level": "warning", "message": {"text": "Frontend route `/watch/:watchId` has no Link/navigate to it \u2014 apps/web/src/App.tsx"}, "properties": {"repobilityId": "44ad602c6ae923ef", "scanner": "scanner-primary", "fingerprint": "e806fcf75ea12f95", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-3bad2cb38bbf4b0c", "level": "error", "message": {"text": "Dangling fetch: GET https://api.abuseipdb.com/api/v2/check?ipAddress=${encodeURIComponent(ip)}&maxAgeInDays=30 (apps/api/src/main.ts:414)"}, "properties": {"repobilityId": "27c6813a3468ed10", "scanner": "scanner-primary", "fingerprint": "3bad2cb38bbf4b0c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-741b8e7870240291", "level": "error", "message": {"text": "Dangling fetch: POST https://api.abuseipdb.com/api/v2/report (apps/api/src/main.ts:2257)"}, "properties": {"repobilityId": "2c7eb968112d7643", "scanner": "scanner-primary", "fingerprint": "741b8e7870240291", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-882938341f4713ef", "level": "error", "message": {"text": "Dangling fetch: GET https://registry.npmjs.org/${encoded} (apps/api/src/main.ts:3899)"}, "properties": {"repobilityId": "b4a8ce5223778bf0", "scanner": "scanner-primary", "fingerprint": "882938341f4713ef", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-32c0ab8380bced4d", "level": "error", "message": {"text": "Dangling fetch: GET https://pypi.org/pypi/${encodeURIComponent(name)}/json (apps/api/src/main.ts:3929)"}, "properties": {"repobilityId": "e823ec36ac69a51a", "scanner": "scanner-primary", "fingerprint": "32c0ab8380bced4d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ef013bce7ffc5d45", "level": "error", "message": {"text": "Dangling fetch: GET https://www.virustotal.com/api/v3/files/${sha256.toLowerCase()} (apps/api/src/main.ts:4690)"}, "properties": {"repobilityId": "0a5bbbe1babd6876", "scanner": "scanner-primary", "fingerprint": "ef013bce7ffc5d45", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1799a054a786073e", "level": "error", "message": {"text": "Dangling fetch: POST https://api.telegram.org/bot${botToken}/sendMessage (apps/api/src/integrations/alert-dispatcher.ts:97)"}, "properties": {"repobilityId": "b275c3a6122cbe8f", "scanner": "scanner-primary", "fingerprint": "1799a054a786073e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-73a14e901263954a", "level": "error", "message": {"text": "Dangling fetch: POST https://events.pagerduty.com/v2/enqueue (apps/api/src/integrations/alert-dispatcher.ts:152)"}, "properties": {"repobilityId": "902ad0568c14498b", "scanner": "scanner-primary", "fingerprint": "73a14e901263954a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0172d29887132502", "level": "error", "message": {"text": "Dangling fetch: GET https://crt.sh/?q=${encodeURIComponent(domain)}&output=json (apps/api/src/xshield/risk-engine.ts:282)"}, "properties": {"repobilityId": "4dca4b86d93d2c8c", "scanner": "scanner-primary", "fingerprint": "0172d29887132502", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-549e8c0124983f3d", "level": "error", "message": {"text": "Dangling fetch: GET https://api.greynoise.io/v3/community/${ip} (apps/api/src/xshield/risk-engine.ts:323)"}, "properties": {"repobilityId": "09f133803aa4bf95", "scanner": "scanner-primary", "fingerprint": "549e8c0124983f3d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-350ccbf837ea39bb", "level": "error", "message": {"text": "Dangling fetch: GET https://haveibeenpwned.com/api/v3/breaches (apps/api/src/xshield/risk-engine.ts:362)"}, "properties": {"repobilityId": "b2e8b92f919a76ea", "scanner": "scanner-primary", "fingerprint": "350ccbf837ea39bb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4c19d3c01eac7209", "level": "error", "message": {"text": "Dangling fetch: GET https://urlscan.io/api/v1/search/?q=domain:${encodeURIComponent(domain)}&size=5 (apps/api/src/xshield/risk-engine.ts:404)"}, "properties": {"repobilityId": "a33f70b8e2bba880", "scanner": "scanner-primary", "fingerprint": "4c19d3c01eac7209", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e3e477484e5bfb97", "level": "error", "message": {"text": "Dangling fetch: GET https://openphish.com/feed.txt (apps/api/src/xshield/risk-engine.ts:446)"}, "properties": {"repobilityId": "6222a9461ca2adb4", "scanner": "scanner-primary", "fingerprint": "e3e477484e5bfb97", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c5d8a2edf4567e2e", "level": "error", "message": {"text": "Dangling fetch: GET https://api.github.com/search/code?q=${encodeURIComponent(q)}&per_page=5 (apps/api/src/xshield/risk-engine.ts:508)"}, "properties": {"repobilityId": "e016ff41663682fb", "scanner": "scanner-primary", "fingerprint": "c5d8a2edf4567e2e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4035c7357a4edbd2", "level": "error", "message": {"text": "Dangling fetch: GET https://otx.alienvault.com/api/v1/indicators/domain/${encodeURIComponent(domain)}/general (apps/api/src/xshield/risk-engine.ts:552)"}, "properties": {"repobilityId": "d54e7c29188e2a02", "scanner": "scanner-primary", "fingerprint": "4035c7357a4edbd2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f4096bbcdc13dc8a", "level": "error", "message": {"text": "Dangling fetch: GET https://api.shodan.io/shodan/host/${ip}?key=${process.env.SHODAN_API_KEY} (apps/api/src/xshield/risk-engine.ts:600)"}, "properties": {"repobilityId": "0b96b9d3d732f16c", "scanner": "scanner-primary", "fingerprint": "f4096bbcdc13dc8a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b592449bfd61cd99", "level": "error", "message": {"text": "Dangling fetch: GET https://crt.sh/?q=${encodedEmail}&output=json (apps/api/src/xshield/risk-engine.ts:927)"}, "properties": {"repobilityId": "488f9c07c9c2dced", "scanner": "scanner-primary", "fingerprint": "b592449bfd61cd99", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f15c10b5a2e05926", "level": "error", "message": {"text": "Dangling fetch: POST http://127.0.0.1:${port}/webhook/whatsapp (apps/desktop/src/main/__tests__/aegis-proxy-wa-inbound.test.ts:301)"}, "properties": {"repobilityId": "6720aa6d3ee5df9d", "scanner": "scanner-primary", "fingerprint": "f15c10b5a2e05926", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a66ce82635501302", "level": "error", "message": {"text": "Dangling fetch: POST http://127.0.0.1:${port}/webhook/whatsapp (apps/desktop/src/main/__tests__/aegis-proxy-wa-inbound.test.ts:333)"}, "properties": {"repobilityId": "67f1ab915364cf4e", "scanner": "scanner-primary", "fingerprint": "a66ce82635501302", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-db7ba19521c036ea", "level": "error", "message": {"text": "Dangling fetch: POST http://127.0.0.1:${port}/webhook/whatsapp (apps/desktop/src/main/__tests__/aegis-proxy-wa-inbound.test.ts:370)"}, "properties": {"repobilityId": "16b098778c5dbc5f", "scanner": "scanner-primary", "fingerprint": "db7ba19521c036ea", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5a5228900cd3469c", "level": "error", "message": {"text": "Dangling fetch: POST http://127.0.0.1:${port}/webhook/whatsapp (apps/desktop/src/main/__tests__/aegis-proxy-wa-inbound.test.ts:384)"}, "properties": {"repobilityId": "b3ab31c1d25d4487", "scanner": "scanner-primary", "fingerprint": "5a5228900cd3469c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8384bf601dd6038d", "level": "error", "message": {"text": "Dangling fetch: GET http://127.0.0.1:${port}/some/other/path (apps/desktop/src/main/__tests__/aegis-proxy-wa-inbound.test.ts:395)"}, "properties": {"repobilityId": "b558c4a624564652", "scanner": "scanner-primary", "fingerprint": "8384bf601dd6038d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2c6927eac1e73205", "level": "error", "message": {"text": "Dangling fetch: PUT http://127.0.0.1:${port}/webhook/whatsapp (apps/desktop/src/main/__tests__/aegis-proxy-wa-inbound.test.ts:400)"}, "properties": {"repobilityId": "68db3d65c91ae5f9", "scanner": "scanner-primary", "fingerprint": "2c6927eac1e73205", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d1d65e13173c9686", "level": "error", "message": {"text": "Dangling fetch: POST /auth/register (apps/web/src/lib/apiClient.ts:52)"}, "properties": {"repobilityId": "1a3b94b198e8bd1e", "scanner": "scanner-primary", "fingerprint": "d1d65e13173c9686", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-723562f008512ba3", "level": "error", "message": {"text": "Dangling fetch: POST /auth/login (apps/web/src/lib/apiClient.ts:59)"}, "properties": {"repobilityId": "8a045a377ecc0ff0", "scanner": "scanner-primary", "fingerprint": "723562f008512ba3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-32b5c11d3f5e8199", "level": "error", "message": {"text": "Dangling fetch: POST /api/billing/checkout (apps/web/src/pages/ApiKeys.tsx:232)"}, "properties": {"repobilityId": "a610d19f8678e361", "scanner": "scanner-primary", "fingerprint": "32b5c11d3f5e8199", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-44e88590c17dd541", "level": "error", "message": {"text": "Dangling fetch: GET /api/billing/portal?apiKeyId=${encodeURIComponent(apiKeyId)} (apps/web/src/pages/ApiKeys.tsx:260)"}, "properties": {"repobilityId": "1ee2dc72001b619b", "scanner": "scanner-primary", "fingerprint": "44e88590c17dd541", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-73db37cc0b18537d", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/auth/api-keys/${id} (apps/web/src/pages/ApiKeys.tsx:433)"}, "properties": {"repobilityId": "906828f4411041b0", "scanner": "scanner-primary", "fingerprint": "73db37cc0b18537d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-33af0d3d63ed1653", "level": "error", "message": {"text": "Dangling fetch: POST https://api.anthropic.com/v1/messages (packages/risk-intelligence/src/threat-narrative.ts:162)"}, "properties": {"repobilityId": "05c2b1894f4c5602", "scanner": "scanner-primary", "fingerprint": "33af0d3d63ed1653", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5d65877a9e572849", "level": "error", "message": {"text": "Dangling fetch: POST https://api.osv.dev/v1/querybatch (packages/risk-intelligence/src/detectors/supply-chain-scanner.ts:327)"}, "properties": {"repobilityId": "39672b5305245bbe", "scanner": "scanner-primary", "fingerprint": "5d65877a9e572849", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ed2344349d1036e7", "level": "error", "message": {"text": "Dangling fetch: GET https://registry.npmjs.org/${encodeURIComponent(pkg.name)} (packages/risk-intelligence/src/detectors/supply-chain-scanner.ts:399)"}, "properties": {"repobilityId": "7c72cf0fc5aee7dc", "scanner": "scanner-primary", "fingerprint": "ed2344349d1036e7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1dd76b55b275f9ca", "level": "error", "message": {"text": "Dangling fetch: GET https://api.npmjs.org/downloads/point/last-month/${encodeURIComponent(pkg.name)} (packages/risk-intelligence/src/detectors/supply-chain-scanner.ts:404)"}, "properties": {"repobilityId": "d14ffdfd45b0a351", "scanner": "scanner-primary", "fingerprint": "1dd76b55b275f9ca", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0b177521d67cc18c", "level": "error", "message": {"text": "Dangling fetch: GET https://pypi.org/pypi/${encodeURIComponent(pkg.name)}/json (packages/risk-intelligence/src/detectors/supply-chain-scanner.ts:536)"}, "properties": {"repobilityId": "9362f62a60337ac8", "scanner": "scanner-primary", "fingerprint": "0b177521d67cc18c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8a640849fb94d581", "level": "error", "message": {"text": "Dangling fetch: POST https://threatfox-api.abuse.ch/api/v1/ (packages/risk-intelligence/src/detectors/social-c2-detector.ts:71)"}, "properties": {"repobilityId": "ad29e6d74ea8654e", "scanner": "scanner-primary", "fingerprint": "8a640849fb94d581", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-047b618bf76d30f9", "level": "error", "message": {"text": "Dangling fetch: POST https://threatfox-api.abuse.ch/api/v1/ (packages/risk-intelligence/src/detectors/qr-detector.ts:169)"}, "properties": {"repobilityId": "05baa7173ab5be7a", "scanner": "scanner-primary", "fingerprint": "047b618bf76d30f9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-95d68c117942ef29", "level": "error", "message": {"text": "Dangling fetch: GET https://${domain}/favicon.ico (packages/risk-intelligence/src/detectors/social-brand-monitor.ts:217)"}, "properties": {"repobilityId": "b5dc1677f6264b5a", "scanner": "scanner-primary", "fingerprint": "95d68c117942ef29", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-837922f3b7cb1e73", "level": "note", "message": {"text": "Unused endpoint: GET /warrior/preblocked-ips"}, "properties": {"repobilityId": "c1539ea5d26657d2", "scanner": "scanner-primary", "fingerprint": "837922f3b7cb1e73", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5baa8971ebe192a1", "level": "note", "message": {"text": "Unused endpoint: GET /"}, "properties": {"repobilityId": "5946d1979d3c974a", "scanner": "scanner-primary", "fingerprint": "5baa8971ebe192a1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-cf8a734023b19ab4", "level": "note", "message": {"text": "Unused endpoint: GET /api/v2/forja/state"}, "properties": {"repobilityId": "cf42a6905c58b005", "scanner": "scanner-primary", "fingerprint": "cf8a734023b19ab4", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1a4dc8f16ac0aa02", "level": "note", "message": {"text": "Unused endpoint: GET /api/v2/forja/proof"}, "properties": {"repobilityId": "6110813721039d90", "scanner": "scanner-primary", "fingerprint": "1a4dc8f16ac0aa02", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-605fff05337cdf21", "level": "note", "message": {"text": "Unused endpoint: GET /api/v2/capabilities"}, "properties": {"repobilityId": "885ca9357b1f081d", "scanner": "scanner-primary", "fingerprint": "605fff05337cdf21", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2e1076ee16307851", "level": "note", "message": {"text": "Unused endpoint: GET /api/v2/capabilities/privacy-stats"}, "properties": {"repobilityId": "5174a69856730598", "scanner": "scanner-primary", "fingerprint": "2e1076ee16307851", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d0002da6391c733c", "level": "note", "message": {"text": "Unused endpoint: GET /api/v2/capabilities/honesty"}, "properties": {"repobilityId": "25e0ade914a5bbc4", "scanner": "scanner-primary", "fingerprint": "d0002da6391c733c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d4cea0393eb10818", "level": "note", "message": {"text": "Unused endpoint: GET /download/ankrshield.apk"}, "properties": {"repobilityId": "9fc433f3e2b7afe1", "scanner": "scanner-primary", "fingerprint": "d4cea0393eb10818", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-49f59a78f9bc1e6d", "level": "note", "message": {"text": "Unused endpoint: GET /download/ankrshield-debug.apk"}, "properties": {"repobilityId": "97a591e39b5666de", "scanner": "scanner-primary", "fingerprint": "49f59a78f9bc1e6d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e55dd2a8b7a47d0c", "level": "note", "message": {"text": "Unused endpoint: POST /warrior/spyware-scan"}, "properties": {"repobilityId": "be294cb5f311f5a5", "scanner": "scanner-primary", "fingerprint": "e55dd2a8b7a47d0c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a1c967fefab5e6f5", "level": "note", "message": {"text": "Unused endpoint: GET /warrior/threats/live"}, "properties": {"repobilityId": "0878097d3f56977d", "scanner": "scanner-primary", "fingerprint": "a1c967fefab5e6f5", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-60990d1d0731a73f", "level": "note", "message": {"text": "Unused endpoint: POST /warrior/android-check"}, "properties": {"repobilityId": "e66c75eb4d976034", "scanner": "scanner-primary", "fingerprint": "60990d1d0731a73f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ceb081841071ec6b", "level": "note", "message": {"text": "Unused endpoint: GET /monitor/stats"}, "properties": {"repobilityId": "330ec747d2bf8f1f", "scanner": "scanner-primary", "fingerprint": "ceb081841071ec6b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5e3e135274b9b859", "level": "note", "message": {"text": "Unused endpoint: POST /device/stats"}, "properties": {"repobilityId": "e0bf81346dd4a8aa", "scanner": "scanner-primary", "fingerprint": "5e3e135274b9b859", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-decba9f14200dba1", "level": "note", "message": {"text": "Unused endpoint: GET /device/stats"}, "properties": {"repobilityId": "7f08d6bcd9b20c81", "scanner": "scanner-primary", "fingerprint": "decba9f14200dba1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b0318d958fa9e2ee", "level": "note", "message": {"text": "Unused endpoint: POST /device/push"}, "properties": {"repobilityId": "3b07cfa31ac19ca3", "scanner": "scanner-primary", "fingerprint": "b0318d958fa9e2ee", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-37f94e15095426cc", "level": "note", "message": {"text": "Unused endpoint: GET /warrior/evidence-report"}, "properties": {"repobilityId": "85589ff3340dda14", "scanner": "scanner-primary", "fingerprint": "37f94e15095426cc", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b5bc588572aeea25", "level": "note", "message": {"text": "Unused endpoint: GET /warrior/honeypot-hits"}, "properties": {"repobilityId": "0e0d7fb12f686c84", "scanner": "scanner-primary", "fingerprint": "b5bc588572aeea25", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2b171ab6084f5670", "level": "note", "message": {"text": "Unused endpoint: POST /billing/webhook"}, "properties": {"repobilityId": "c2684fd656cfb40d", "scanner": "scanner-primary", "fingerprint": "2b171ab6084f5670", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-0e4ae667a3a93993", "level": "note", "message": {"text": "Unused endpoint: GET /billing/plans"}, "properties": {"repobilityId": "5cde7a852117682c", "scanner": "scanner-primary", "fingerprint": "0e4ae667a3a93993", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ccca4061b1a5a6ab", "level": "note", "message": {"text": "Unused endpoint: GET /watch/domains"}, "properties": {"repobilityId": "bd0cecb8f0889bef", "scanner": "scanner-primary", "fingerprint": "ccca4061b1a5a6ab", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b9e61477dc0bfe35", "level": "note", "message": {"text": "Unused endpoint: GET /integrations/telegram"}, "properties": {"repobilityId": "b58e28a29183b03f", "scanner": "scanner-primary", "fingerprint": "b9e61477dc0bfe35", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6261b81130ec8a19", "level": "note", "message": {"text": "Unused endpoint: DELETE /integrations/telegram"}, "properties": {"repobilityId": "2e1aac79957392dc", "scanner": "scanner-primary", "fingerprint": "6261b81130ec8a19", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f87a56f31b60253d", "level": "note", "message": {"text": "Unused endpoint: GET /integrations/email"}, "properties": {"repobilityId": "385717d836a8bd69", "scanner": "scanner-primary", "fingerprint": "f87a56f31b60253d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-25f9ccbf261c12b5", "level": "note", "message": {"text": "Unused endpoint: DELETE /integrations/email"}, "properties": {"repobilityId": "0feb16eb9472ef70", "scanner": "scanner-primary", "fingerprint": "25f9ccbf261c12b5", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-771bb034ba39107f", "level": "note", "message": {"text": "Unused endpoint: GET /integrations/pagerduty"}, "properties": {"repobilityId": "8e2783725100160c", "scanner": "scanner-primary", "fingerprint": "771bb034ba39107f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-fdfc52c9144f24c9", "level": "note", "message": {"text": "Unused endpoint: DELETE /integrations/pagerduty"}, "properties": {"repobilityId": "275d07c0e8f555de", "scanner": "scanner-primary", "fingerprint": "fdfc52c9144f24c9", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6341b0cecc4aabb4", "level": "note", "message": {"text": "Unused endpoint: GET /brand/report"}, "properties": {"repobilityId": "1197c65ec2c9b3c9", "scanner": "scanner-primary", "fingerprint": "6341b0cecc4aabb4", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-36e2e31e5954fe89", "level": "note", "message": {"text": "Unused endpoint: GET /risk/narrative"}, "properties": {"repobilityId": "ef43299367e55334", "scanner": "scanner-primary", "fingerprint": "36e2e31e5954fe89", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-92d027acee5c43e7", "level": "note", "message": {"text": "Unused endpoint: GET /session/list"}, "properties": {"repobilityId": "7d2ab9fdff5039ad", "scanner": "scanner-primary", "fingerprint": "92d027acee5c43e7", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c6cab8eb7f3485c2", "level": "note", "message": {"text": "Unused endpoint: GET /security/status"}, "properties": {"repobilityId": "2886f3cb9aadbae3", "scanner": "scanner-primary", "fingerprint": "c6cab8eb7f3485c2", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-12c38e4aef1293fa", "level": "note", "message": {"text": "Unused endpoint: GET /enterprise/dpdp-report"}, "properties": {"repobilityId": "eda6e91df8d5644f", "scanner": "scanner-primary", "fingerprint": "12c38e4aef1293fa", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-cb07be745ba37b6c", "level": "note", "message": {"text": "Unused endpoint: GET /enterprise/audit-log"}, "properties": {"repobilityId": "05f59200b679c568", "scanner": "scanner-primary", "fingerprint": "cb07be745ba37b6c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7a678dd71b12ddd5", "level": "note", "message": {"text": "Unused endpoint: POST /enterprise/siem/webhook"}, "properties": {"repobilityId": "0212e8f54cf74b92", "scanner": "scanner-primary", "fingerprint": "7a678dd71b12ddd5", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ff140e808ba0c7d9", "level": "note", "message": {"text": "Unused endpoint: POST /enterprise/siem/test"}, "properties": {"repobilityId": "45ce235ba5e8f6f7", "scanner": "scanner-primary", "fingerprint": "ff140e808ba0c7d9", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3c42322a432fd354", "level": "note", "message": {"text": "Unused endpoint: GET /enterprise/pricing"}, "properties": {"repobilityId": "6a4cbad6f0aa4c5f", "scanner": "scanner-primary", "fingerprint": "3c42322a432fd354", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c3ea395a1240a30a", "level": "note", "message": {"text": "Unused endpoint: POST /api/feature-request"}, "properties": {"repobilityId": "2c45bd2e8dd57711", "scanner": "scanner-primary", "fingerprint": "c3ea395a1240a30a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ca0908836612f146", "level": "note", "message": {"text": "Unused endpoint: GET /api/feature-requests"}, "properties": {"repobilityId": "2f85a2c342e8d693", "scanner": "scanner-primary", "fingerprint": "ca0908836612f146", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-fe95f31f2fce6fd1", "level": "note", "message": {"text": "Unused endpoint: GET /account/export"}, "properties": {"repobilityId": "e44a3aff8ce343a6", "scanner": "scanner-primary", "fingerprint": "fe95f31f2fce6fd1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d4186216041d91fb", "level": "note", "message": {"text": "Unused endpoint: DELETE /account"}, "properties": {"repobilityId": "32aa9dbda9f7c10a", "scanner": "scanner-primary", "fingerprint": "d4186216041d91fb", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-452b2a235637ed5c", "level": "note", "message": {"text": "Unused endpoint: GET /account/data-summary"}, "properties": {"repobilityId": "e954d74684aeb41b", "scanner": "scanner-primary", "fingerprint": "452b2a235637ed5c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-396bfa79e87496dd", "level": "note", "message": {"text": "Unused endpoint: GET /taxii/"}, "properties": {"repobilityId": "1b34efcc51f6e028", "scanner": "scanner-primary", "fingerprint": "396bfa79e87496dd", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c5b424ee9bb2ca36", "level": "note", "message": {"text": "Unused endpoint: GET /taxii/api/"}, "properties": {"repobilityId": "f36c5c29d92b9205", "scanner": "scanner-primary", "fingerprint": "c5b424ee9bb2ca36", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-095430b4648486f4", "level": "note", "message": {"text": "Unused endpoint: GET /taxii/api/collections/"}, "properties": {"repobilityId": "6bbe0bf7177e3f71", "scanner": "scanner-primary", "fingerprint": "095430b4648486f4", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-24127e99f5c184fb", "level": "note", "message": {"text": "Unused endpoint: GET /state"}, "properties": {"repobilityId": "52bceda1fdb5067c", "scanner": "scanner-primary", "fingerprint": "24127e99f5c184fb", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-eab8b0c2637bf653", "level": "note", "message": {"text": "Unused endpoint: GET /proof"}, "properties": {"repobilityId": "5f056bb54f95479e", "scanner": "scanner-primary", "fingerprint": "eab8b0c2637bf653", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d66d77fe7899094f", "level": "note", "message": {"text": "Unused endpoint: GET /api/v1/iacs/matrix"}, "properties": {"repobilityId": "f7d51861a833a804", "scanner": "scanner-primary", "fingerprint": "d66d77fe7899094f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-77ca9ab52e0f6dab", "level": "note", "message": {"text": "Unused endpoint: GET /api/v1/posture"}, "properties": {"repobilityId": "11013a8596f87e25", "scanner": "scanner-primary", "fingerprint": "77ca9ab52e0f6dab", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-021f4682a9c91f4a", "level": "note", "message": {"text": "Unused endpoint: GET /api/v1/pentest/scopes"}, "properties": {"repobilityId": "9df85858e93e63ef", "scanner": "scanner-primary", "fingerprint": "021f4682a9c91f4a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8d3688237fb1e2c2", "level": "note", "message": {"text": "Unused endpoint: GET /api/v1/taxii/status"}, "properties": {"repobilityId": "cf497748ae90e9ac", "scanner": "scanner-primary", "fingerprint": "8d3688237fb1e2c2", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}