{"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-e0b6e93fd27a1cb8", "name": "Possibly dead Python function: forward", "shortDescription": {"text": "Possibly dead Python function: forward"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f524bf73c17f4587", "name": "Possibly dead Python function: forward", "shortDescription": {"text": "Possibly dead Python function: forward"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7eb098a3ba4ce02e", "name": "Possibly dead Python function: create_dummy_input_two_tower", "shortDescription": {"text": "Possibly dead Python function: create_dummy_input_two_tower"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7050c8118abd64d6", "name": "Possibly dead Python function: create_dummy_input_mmoe", "shortDescription": {"text": "Possibly dead Python function: create_dummy_input_mmoe"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2b7f9387f7586187", "name": "Possibly dead Python function: forward", "shortDescription": {"text": "Possibly dead Python function: forward"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-bbbd59697ccd08e5", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/quantedits/src/components/EffectsPanel.tsx:70", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantedits/src/components/EffectsPanel.tsx:70"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-afc8e9f4b381be88", "name": "TODO/FIXME marker in shipping code \u2014 apps/quantedits/src/components/EffectsPanel.tsx:28", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 apps/quantedits/src/components/EffectsPanel.tsx: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-80b3a319067e56e4", "name": "TODO/FIXME marker in shipping code \u2014 apps/quantedits/src/components/ToolPanel.tsx:38", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 apps/quantedits/src/components/ToolPanel.tsx:38"}, "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-b083a92070c61d90", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/quantedits/src/components/LayerPanel.tsx:137", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantedits/src/components/LayerPanel.tsx:137"}, "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-471d91816fb9259c", "name": "TODO/FIXME marker in shipping code \u2014 apps/quantedits/src/components/LayerPanel.tsx:43", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 apps/quantedits/src/components/LayerPanel.tsx:43"}, "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-8700bda944dcbb3f", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/quantedits/src/providers/brand-provider.tsx:17", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/quantedits/src/providers/brand-provider.tsx:17"}, "fullDescription": {"text": "Open XSS surface unless the input is provably trusted. Replace with explicit JSX or sanitize via a vetted library.\n\nWhy: OWASP basics. Already partially flagged by the security analyzer.\nRule id: fq.dangerous-html"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-71f0764e9c0a0bae", "name": "Icon-only button without accessible name \u2014 apps/quantedits/src/pages/assets.tsx:288", "shortDescription": {"text": "Icon-only button without accessible name \u2014 apps/quantedits/src/pages/assets.tsx:288"}, "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-36ed59546940e60e", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/quantedits/src/pages/index.tsx:122", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantedits/src/pages/index.tsx:122"}, "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-7680ca5624fdc16d", "name": "TODO/FIXME marker in shipping code \u2014 apps/quantchat/backend/routes/messages.ts:58", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 apps/quantchat/backend/routes/messages.ts:58"}, "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-7978805f4e3490d5", "name": "TODO/FIXME marker in shipping code \u2014 apps/quantchat/src/__tests__/realtime-chat.test.ts:3", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 apps/quantchat/src/__tests__/realtime-chat.test.ts:3"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c8ac03a692bf3533", "name": "Icon-only button without accessible name \u2014 apps/quantchat/src/components/SnapMap.tsx:96", "shortDescription": {"text": "Icon-only button without accessible name \u2014 apps/quantchat/src/components/SnapMap.tsx:96"}, "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-3b73cdb8ce43c677", "name": "Icon-only button without accessible name \u2014 apps/quantchat/src/components/Camera.tsx:107", "shortDescription": {"text": "Icon-only button without accessible name \u2014 apps/quantchat/src/components/Camera.tsx:107"}, "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-e00ae6ac2ae8e123", "name": "Icon-only button without accessible name \u2014 apps/quantchat/src/components/AIAssistant.tsx:95", "shortDescription": {"text": "Icon-only button without accessible name \u2014 apps/quantchat/src/components/AIAssistant.tsx:95"}, "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-14319700ba3a71e3", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/quantchat/src/components/LinkPreviewCard.tsx:37", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantchat/src/components/LinkPreviewCard.tsx:37"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-59e5e5149248b745", "name": "Icon-only button without accessible name \u2014 apps/quantchat/src/components/MessageInput.tsx:97", "shortDescription": {"text": "Icon-only button without accessible name \u2014 apps/quantchat/src/components/MessageInput.tsx:97"}, "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-c6a1220f8e3936ab", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/quantchat/src/providers/brand-provider.tsx:19", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/quantchat/src/providers/brand-provider.tsx:19"}, "fullDescription": {"text": "Open XSS surface unless the input is provably trusted. Replace with explicit JSX or sanitize via a vetted library.\n\nWhy: OWASP basics. Already partially flagged by the security analyzer.\nRule id: fq.dangerous-html"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3c405a7b59fdb77c", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/quantchat/src/app/page.tsx:134", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantchat/src/app/page.tsx:134"}, "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-6983d55b219fd710", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/quantchat/src/app/chat/[id]/page.tsx:448", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantchat/src/app/chat/[id]/page.tsx:448"}, "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-76b59f0ac75c9ec8", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/quantchat/src/app/stories/page.tsx:71", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantchat/src/app/stories/page.tsx:71"}, "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-a7f1fd6d62ad30ff", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/quantneon/src/components/MiniGameLobby.tsx:166", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantneon/src/components/MiniGameLobby.tsx:166"}, "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-720ecb03985086d4", "name": "Icon-only button without accessible name \u2014 apps/quantneon/src/components/CollabInvite.tsx:83", "shortDescription": {"text": "Icon-only button without accessible name \u2014 apps/quantneon/src/components/CollabInvite.tsx:83"}, "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-a6c6e7a98e80418d", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/quantneon/src/components/ShoppingTag.tsx:151", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantneon/src/components/ShoppingTag.tsx:151"}, "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-ef936bddb00c766c", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/quantneon/src/components/ShoppingCard.tsx:46", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantneon/src/components/ShoppingCard.tsx:46"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-74ae6e4709fec6e8", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/quantneon/src/components/FilterGallery.tsx:63", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantneon/src/components/FilterGallery.tsx:63"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-529de767978308c7", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/quantneon/src/components/StoryRing.tsx:46", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantneon/src/components/StoryRing.tsx:46"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-636778a5e6616037", "name": "Icon-only button without accessible name \u2014 apps/quantneon/src/components/ReelCreator.tsx:123", "shortDescription": {"text": "Icon-only button without accessible name \u2014 apps/quantneon/src/components/ReelCreator.tsx:123"}, "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-15d6c05dced80673", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/quantneon/src/components/ReelPlayer.tsx:64", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantneon/src/components/ReelPlayer.tsx:64"}, "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-b694e8bebdcfa9b9", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/quantneon/src/pages/messages.tsx:364", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantneon/src/pages/messages.tsx:364"}, "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-41e66c5b11508c03", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/quantneon/src/pages/shop.tsx:94", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantneon/src/pages/shop.tsx:94"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4916186ccb9eba9e", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/quantneon/src/pages/index.tsx:116", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantneon/src/pages/index.tsx:116"}, "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-22cb41b20d17c419", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/quantneon/src/pages/collab.tsx:286", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantneon/src/pages/collab.tsx:286"}, "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-7068423129a3874b", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/quantneon/src/pages/shopping.tsx:352", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantneon/src/pages/shopping.tsx:352"}, "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-a53cb783e5f047a0", "name": "Icon-only button without accessible name \u2014 apps/quantneon/src/pages/highlights.tsx:356", "shortDescription": {"text": "Icon-only button without accessible name \u2014 apps/quantneon/src/pages/highlights.tsx:356"}, "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-e6087a5c76198fb6", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/quantneon/src/pages/highlights.tsx:322", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantneon/src/pages/highlights.tsx:322"}, "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-5a01a02f3183a15f", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/quantneon/src/pages/games.tsx:72", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantneon/src/pages/games.tsx:72"}, "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-170465c814c6a07e", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/quantneon/src/pages/broadcast.tsx:376", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantneon/src/pages/broadcast.tsx:376"}, "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-5c1ba3c864d4d9f7", "name": "Icon-only button without accessible name \u2014 apps/quantmax/src/components/GiftPanel.tsx:171", "shortDescription": {"text": "Icon-only button without accessible name \u2014 apps/quantmax/src/components/GiftPanel.tsx:171"}, "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-99791f7fbeef5cab", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/quantmax/src/components/VideoChatRoom.tsx:53", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantmax/src/components/VideoChatRoom.tsx:53"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1976c0d40ebe5f52", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/quantmax/src/components/VideoFeed.tsx:82", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantmax/src/components/VideoFeed.tsx:82"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9a6aa0f795d4a659", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/quantmax/src/pages/matches.tsx:114", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantmax/src/pages/matches.tsx:114"}, "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-4f1d6a4820e1611a", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/quantmax/src/pages/index.tsx:316", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantmax/src/pages/index.tsx:316"}, "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-1ebc241aa58f76bb", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/quantmax/src/pages/discover.tsx:321", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantmax/src/pages/discover.tsx:321"}, "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-fb1018fcb8f9b4d0", "name": "Stray `console.log` in TS/JS \u2014 apps/quantmail/backend/__tests__/ai-code-review.service.test.ts:78", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/quantmail/backend/__tests__/ai-code-review.service.test.ts:78"}, "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-ce17091114b49560", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/quantmail/src/components/EmailThread.tsx:182", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/quantmail/src/components/EmailThread.tsx:182"}, "fullDescription": {"text": "Open XSS surface unless the input is provably trusted. Replace with explicit JSX or sanitize via a vetted library.\n\nWhy: OWASP basics. Already partially flagged by the security analyzer.\nRule id: fq.dangerous-html"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-8359ccc2d6e14258", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/quantmail/src/components/AppSidebar.tsx:104", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantmail/src/components/AppSidebar.tsx:104"}, "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-0d62044aeeab8387", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/quantmail/src/components/RichTextEditor.tsx:327", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/quantmail/src/components/RichTextEditor.tsx:327"}, "fullDescription": {"text": "Open XSS surface unless the input is provably trusted. Replace with explicit JSX or sanitize via a vetted library.\n\nWhy: OWASP basics. Already partially flagged by the security analyzer.\nRule id: fq.dangerous-html"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-03cf2199557cb388", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/quantmail/src/providers/brand-provider.tsx:19", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/quantmail/src/providers/brand-provider.tsx:19"}, "fullDescription": {"text": "Open XSS surface unless the input is provably trusted. Replace with explicit JSX or sanitize via a vetted library.\n\nWhy: OWASP basics. Already partially flagged by the security analyzer.\nRule id: fq.dangerous-html"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-381a84e5160d5c98", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/quantmail/src/app/page.tsx:108", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantmail/src/app/page.tsx:108"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e8de693106c0e91f", "name": "Stray `console.log` in TS/JS \u2014 apps/quantmail/src/app/compose/page.tsx:70", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/quantmail/src/app/compose/page.tsx: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-a5209606d9c0e035", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/quantmail/src/app/thread/[id]/page.tsx:397", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantmail/src/app/thread/[id]/page.tsx:397"}, "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-20680a74d007408e", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/quantmail/src/app/pipelines/page.tsx:123", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantmail/src/app/pipelines/page.tsx:123"}, "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-ab382e93e407b5c0", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/quantmail/src/app/drive/page.tsx:144", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantmail/src/app/drive/page.tsx:144"}, "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-ee0a919b6d45235b", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/quantmail/src/app/repos/page.tsx:95", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantmail/src/app/repos/page.tsx:95"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a1850272ff4d8e92", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/quantmail/src/app/repos/[id]/page.tsx:202", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantmail/src/app/repos/[id]/page.tsx:202"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4866bd62afe71b1a", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/quantmail/src/app/contacts/page.tsx:161", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantmail/src/app/contacts/page.tsx:161"}, "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-56390a993a859ea9", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/quantdocs/src/components/CommentsPanel.tsx:120", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantdocs/src/components/CommentsPanel.tsx:120"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-caa65ef16766105a", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/quantdocs/src/components/DocEditor.tsx:93", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/quantdocs/src/components/DocEditor.tsx:93"}, "fullDescription": {"text": "Open XSS surface unless the input is provably trusted. Replace with explicit JSX or sanitize via a vetted library.\n\nWhy: OWASP basics. Already partially flagged by the security analyzer.\nRule id: fq.dangerous-html"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-333f4b55220bcc74", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/quantdocs/src/components/ShareDialog.tsx:102", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantdocs/src/components/ShareDialog.tsx:102"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-086b13a2093443ea", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/quantdocs/src/components/DocList.tsx:146", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantdocs/src/components/DocList.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-221153b278e9fb0a", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/quantdocs/src/app/doc/[id]/page.tsx:83", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantdocs/src/app/doc/[id]/page.tsx:83"}, "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-e0e35c6d0763d7c4", "name": "TODO/FIXME marker in shipping code \u2014 apps/quanttube/backend/routes/upload.ts:28", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 apps/quanttube/backend/routes/upload.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-54a262a93a3946c6", "name": "TODO/FIXME marker in shipping code \u2014 apps/quanttube/backend/services/video-processor.service.ts:3", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 apps/quanttube/backend/services/video-processor.service.ts:3"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-bd994dbad362caa1", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/quantcalendar/src/components/EventCard.tsx:35", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantcalendar/src/components/EventCard.tsx:35"}, "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-776cd3cb0c097e5f", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/quantcalendar/src/components/CalendarSidebar.tsx:116", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantcalendar/src/components/CalendarSidebar.tsx:116"}, "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-d056904f152753b8", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/admin/src/components/AdminLayout.tsx:90", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/admin/src/components/AdminLayout.tsx:90"}, "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-4e158aef96ab2a6d", "name": "TODO/FIXME marker in shipping code \u2014 apps/admin/src/app/api/settings/route.ts:57", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 apps/admin/src/app/api/settings/route.ts:57"}, "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-6a0905461fea5b2b", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/admin/src/app/observability/components/ErrorTracker.tsx:182", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/admin/src/app/observability/components/ErrorTracker.tsx:182"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-53b0367fc1619e1a", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/admin/src/app/audit/page.tsx:344", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/admin/src/app/audit/page.tsx:344"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-567b1a2d2807d3c7", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/admin/src/app/feature-flags/page.tsx:401", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/admin/src/app/feature-flags/page.tsx:401"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9f48d8a7e35d1e2b", "name": "TODO/FIXME marker in shipping code \u2014 apps/quantdrive/backend/routes/upload.ts:29", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 apps/quantdrive/backend/routes/upload.ts:29"}, "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-265263407925fe9d", "name": "TODO/FIXME marker in shipping code \u2014 apps/quantdrive/backend/services/storage.service.ts:33", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 apps/quantdrive/backend/services/storage.service.ts:33"}, "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-3c67b08ce5f91b4d", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/quantdrive/src/components/SearchResults.tsx:91", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantdrive/src/components/SearchResults.tsx:91"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a8841ff260e73eee", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/quantdrive/src/components/FileCard.tsx:52", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantdrive/src/components/FileCard.tsx:52"}, "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-f93eb1c7a2926c5e", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/quantdrive/src/components/FilePreview.tsx:98", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantdrive/src/components/FilePreview.tsx:98"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b9eda92eca6f98fd", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/quantdrive/src/components/UploadArea.tsx:190", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantdrive/src/components/UploadArea.tsx:190"}, "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-ba5ac659bc7bb338", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/quantdrive/src/components/FolderCard.tsx:27", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantdrive/src/components/FolderCard.tsx:27"}, "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-71a4ad3fc79d88af", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/quantdrive/src/components/ActivityPanel.tsx:135", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantdrive/src/components/ActivityPanel.tsx:135"}, "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-4a6b1d54552cf5b6", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/quantads/src/components/FunnelChart.tsx:189", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantads/src/components/FunnelChart.tsx:189"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-45aa4bd160137f08", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/quantads/src/components/AuctionViewer.tsx:265", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantads/src/components/AuctionViewer.tsx:265"}, "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-ac06e91346145ce7", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/quantads/src/app/campaigns/page.tsx:43", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantads/src/app/campaigns/page.tsx:43"}, "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-74809fe530e9ed68", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/quantads/src/app/creatives/page.tsx:38", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantads/src/app/creatives/page.tsx:38"}, "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-6082768483a0f549", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/quantads/src/pages/pixels.tsx:406", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantads/src/pages/pixels.tsx:406"}, "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-e69c28aac3d55d44", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/quantads/src/pages/creative-studio.tsx:432", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantads/src/pages/creative-studio.tsx:432"}, "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-4410d6ebc852a3a2", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/quantube/src/components/Recommendations.tsx:120", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantube/src/components/Recommendations.tsx:120"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-363631ef348b5e4a", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/quantube/src/components/ChapterEditor.tsx:206", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantube/src/components/ChapterEditor.tsx:206"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-910be71e8c6b7bb9", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/quantube/src/components/VideoUploader.tsx:194", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantube/src/components/VideoUploader.tsx:194"}, "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-9bb56f1af4213c2d", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/quantube/src/components/VideoPlayer.tsx:186", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantube/src/components/VideoPlayer.tsx:186"}, "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-05e84246fc5a0a13", "name": "TODO/FIXME marker in shipping code \u2014 apps/quantube/src/components/LiveChat.tsx:20", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 apps/quantube/src/components/LiveChat.tsx:20"}, "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-bc96d81ed4b9709a", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/quantube/src/components/MusicPlayer.tsx:158", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantube/src/components/MusicPlayer.tsx:158"}, "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-bcfb06d65e0bfec2", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/quantube/src/components/ContentGrid.tsx:147", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantube/src/components/ContentGrid.tsx:147"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cc9a05610ea7cdac", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/quantube/src/components/MiniPlayer.tsx:70", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantube/src/components/MiniPlayer.tsx:70"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-877e056b5ab55e70", "name": "Icon-only button without accessible name \u2014 apps/quantube/src/components/LiveStreamChat.tsx:180", "shortDescription": {"text": "Icon-only button without accessible name \u2014 apps/quantube/src/components/LiveStreamChat.tsx:180"}, "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-e4108f0a18b0496f", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/quantube/src/components/LiveStreamChat.tsx:178", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantube/src/components/LiveStreamChat.tsx:178"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b9b48511063af969", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/quantube/src/pages/podcasts.tsx:272", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantube/src/pages/podcasts.tsx:272"}, "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-8ae31b73a68fe80d", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/quantube/src/pages/music.tsx:481", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantube/src/pages/music.tsx:481"}, "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-9af6805d53b764b0", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/quantube/src/pages/premium.tsx:488", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantube/src/pages/premium.tsx:488"}, "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-29ed2d81b12352b0", "name": "Icon-only button without accessible name \u2014 apps/quantube/src/pages/shorts.tsx:542", "shortDescription": {"text": "Icon-only button without accessible name \u2014 apps/quantube/src/pages/shorts.tsx:542"}, "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-aa0913d7942f6e72", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/quantube/src/pages/studio.tsx:291", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantube/src/pages/studio.tsx:291"}, "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-3eea25190080b00c", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/quantube/src/pages/live.tsx:219", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantube/src/pages/live.tsx:219"}, "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-ef1c8d4bb8ba73a3", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/quantube/src/pages/shows.tsx:243", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantube/src/pages/shows.tsx:243"}, "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-32239ce836590658", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/quantube/src/pages/library.tsx:269", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantube/src/pages/library.tsx:269"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4e0dae9dee12cd2c", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/quantube/src/pages/watch/[id].tsx:452", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantube/src/pages/watch/[id].tsx:452"}, "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-3bbad897675e3a1a", "name": "Icon-only button without accessible name \u2014 apps/quantube/src/pages/playlist/[id].tsx:496", "shortDescription": {"text": "Icon-only button without accessible name \u2014 apps/quantube/src/pages/playlist/[id].tsx:496"}, "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-6d517fc8b4afe197", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/quantube/src/pages/playlist/[id].tsx:457", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantube/src/pages/playlist/[id].tsx:457"}, "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-12661986da287d12", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/quantmeet/src/components/VideoTile.tsx:66", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantmeet/src/components/VideoTile.tsx:66"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a6968bd815e0d894", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/quantmeet/src/components/ParticipantList.tsx:46", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantmeet/src/components/ParticipantList.tsx:46"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-433a88261a9077c1", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/quantmeet/src/app/page.tsx:137", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantmeet/src/app/page.tsx:137"}, "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-ab7f5f60ed58bd6f", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/quantsync/src/components/TrendingSidebar.tsx:140", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantsync/src/components/TrendingSidebar.tsx:140"}, "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-99f724384d7f9169", "name": "Icon-only button without accessible name \u2014 apps/quantsync/src/components/SpaceRoom.tsx:153", "shortDescription": {"text": "Icon-only button without accessible name \u2014 apps/quantsync/src/components/SpaceRoom.tsx:153"}, "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-e2e89e04a1b8199b", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/quantsync/src/components/SpaceRoom.tsx:205", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantsync/src/components/SpaceRoom.tsx:205"}, "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-6fbe9fbef78eb603", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/quantsync/src/components/PostCard.tsx:222", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantsync/src/components/PostCard.tsx:222"}, "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-de9df6e0fbc6abe1", "name": "Icon-only button without accessible name \u2014 apps/quantsync/src/components/ThreadComposer.tsx:119", "shortDescription": {"text": "Icon-only button without accessible name \u2014 apps/quantsync/src/components/ThreadComposer.tsx:119"}, "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-6650a68724b7d54e", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/quantsync/src/app/page.tsx:125", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantsync/src/app/page.tsx:125"}, "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-d79c3b1f869d60df", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/quantsync/src/app/bookmarks/page.tsx:64", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantsync/src/app/bookmarks/page.tsx:64"}, "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-ec9ca9088b38539f", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/quantsync/src/legacy-pages/index.tsx:308", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantsync/src/legacy-pages/index.tsx:308"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-384f3747351904de", "name": "Icon-only button without accessible name \u2014 apps/quantsync/src/legacy-pages/compose.tsx:264", "shortDescription": {"text": "Icon-only button without accessible name \u2014 apps/quantsync/src/legacy-pages/compose.tsx:264"}, "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-99ac860ea1928ebe", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/quantsync/src/legacy-pages/spaces.tsx:236", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantsync/src/legacy-pages/spaces.tsx:236"}, "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-e7f8cbd6d17cf2da", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/quantsync/src/legacy-pages/communities.tsx:235", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantsync/src/legacy-pages/communities.tsx:235"}, "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-e81ce261e87144bd", "name": "TODO/FIXME marker in shipping code \u2014 apps/quantai/backend/routes/personal-agent.ts:26", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 apps/quantai/backend/routes/personal-agent.ts:26"}, "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-160af02836d9cea2", "name": "Stray `console.log` in TS/JS \u2014 apps/quantai/src/__tests__/code-interpreter.service.test.ts:13", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/quantai/src/__tests__/code-interpreter.service.test.ts:13"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-14978693cdce92c7", "name": "TODO/FIXME marker in shipping code \u2014 apps/quantai/src/components/DevicePreview.tsx:21", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 apps/quantai/src/components/DevicePreview.tsx:21"}, "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-74d33496b8e85544", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/quantai/src/components/PersonaSelector.tsx:170", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantai/src/components/PersonaSelector.tsx:170"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3b8de74568ea0e49", "name": "Icon-only button without accessible name \u2014 apps/quantai/src/components/WorkflowBuilder.tsx:150", "shortDescription": {"text": "Icon-only button without accessible name \u2014 apps/quantai/src/components/WorkflowBuilder.tsx:150"}, "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-8036fbe9df529ef3", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/quantai/src/components/ModelCard.tsx:28", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantai/src/components/ModelCard.tsx:28"}, "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-6fd3adc6f33515d6", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/quantai/src/components/ToolCallCard.tsx:65", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantai/src/components/ToolCallCard.tsx:65"}, "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-5ebe414aca2e63c5", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/quantai/src/components/PluginCard.tsx:31", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantai/src/components/PluginCard.tsx:31"}, "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-aa3a04370439e50d", "name": "Icon-only button without accessible name \u2014 apps/quantai/src/components/ImageCanvas.tsx:120", "shortDescription": {"text": "Icon-only button without accessible name \u2014 apps/quantai/src/components/ImageCanvas.tsx:120"}, "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-4e1c50ec57b4e05c", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/quantai/src/components/CodeEditor.tsx:339", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/quantai/src/components/CodeEditor.tsx:339"}, "fullDescription": {"text": "Open XSS surface unless the input is provably trusted. Replace with explicit JSX or sanitize via a vetted library.\n\nWhy: OWASP basics. Already partially flagged by the security analyzer.\nRule id: fq.dangerous-html"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d83a861d86ef8060", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/quantai/src/components/WorkflowProgressCard.tsx:107", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantai/src/components/WorkflowProgressCard.tsx:107"}, "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-28fcc58e348004c7", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/quantai/src/app/page.tsx:557", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantai/src/app/page.tsx:557"}, "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-7ca60adaabc2bfa8", "name": "Stray `console.log` in TS/JS \u2014 apps/quantai/src/pages/code.tsx:47", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/quantai/src/pages/code.tsx:47"}, "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-3c5440d73166fdad", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/quantai/src/pages/code.tsx:472", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/quantai/src/pages/code.tsx:472"}, "fullDescription": {"text": "Open XSS surface unless the input is provably trusted. Replace with explicit JSX or sanitize via a vetted library.\n\nWhy: OWASP basics. Already partially flagged by the security analyzer.\nRule id: fq.dangerous-html"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d2869aa994a1558e", "name": "Stray `console.log` in TS/JS \u2014 scripts/doctor.ts:73", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/doctor.ts:73"}, "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-a0967ece750547f3", "name": "Stray `console.log` in TS/JS \u2014 scripts/env-check.ts:32", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/env-check.ts:32"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0028aafb018eb1cc", "name": "Stray `console.log` in TS/JS \u2014 scripts/smoke.ts:23", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/smoke.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-f621d6edebe9a8d4", "name": "Stray `console.log` in TS/JS \u2014 scripts/db-reset.ts:12", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/db-reset.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-8a9dec896092b518", "name": "Stray `console.log` in TS/JS \u2014 packages/cdn/src/core/cdn-manager.ts:23", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/cdn/src/core/cdn-manager.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-e5ab80e7c2e65620", "name": "Stray `console.log` in TS/JS \u2014 packages/ai/src/assistant/tools/quantai-tools.ts:29", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/ai/src/assistant/tools/quantai-tools.ts:29"}, "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-dfc1de8a0835af6e", "name": "Stray `console.log` in TS/JS \u2014 packages/ai/src/assistant/tools/quantmax-tools.ts:23", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/ai/src/assistant/tools/quantmax-tools.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-9a8f49520d860fb3", "name": "Stray `console.log` in TS/JS \u2014 packages/ai/src/assistant/tools/quantchat-tools.ts:20", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/ai/src/assistant/tools/quantchat-tools.ts:20"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-07573bb9b7305bd8", "name": "Stray `console.log` in TS/JS \u2014 packages/ai/src/assistant/tools/quantmail-tools.ts:21", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/ai/src/assistant/tools/quantmail-tools.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-e98d8f8948363323", "name": "Stray `console.log` in TS/JS \u2014 packages/ai/src/assistant/tools/quantads-tools.ts:25", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/ai/src/assistant/tools/quantads-tools.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-4766cffe8bcd90f7", "name": "Stray `console.log` in TS/JS \u2014 packages/ai/src/assistant/tools/quantube-tools.ts:20", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/ai/src/assistant/tools/quantube-tools.ts:20"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4c19b1e23f9442b5", "name": "Stray `console.log` in TS/JS \u2014 packages/ai/src/assistant/tools/quantneon-tools.ts:25", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/ai/src/assistant/tools/quantneon-tools.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-c9b1faa166b5d4e1", "name": "Stray `console.log` in TS/JS \u2014 packages/ai/src/assistant/tools/quantsync-tools.ts:20", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/ai/src/assistant/tools/quantsync-tools.ts:20"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-914c625670a0071b", "name": "TODO/FIXME marker in shipping code \u2014 packages/ai-memory/src/memory-store.ts:174", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 packages/ai-memory/src/memory-store.ts:174"}, "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-01f5e8bce5103a7a", "name": "Custom React Flow node registered without explicit width/height \u2014 packages/data-pipeline/src/__tests__/processors.test.t", "shortDescription": {"text": "Custom React Flow node registered without explicit width/height \u2014 packages/data-pipeline/src/__tests__/processors.test.ts:12"}, "fullDescription": {"text": "When you register a custom node type via `nodeTypes`, the RFNode object you build must include `width` and `height` props. Without them, MiniMap renders ZERO mini-nodes for that type and `fitView` underestimates the bounds (cuts off lane labels, etc.). Add `width: \u2026, height: \u2026` to the node object. See P-I.\n\nWhy: P-I in CHECKLIST.md \u2014 RF MiniMap + fitView need explicit dims on custom nodes.\nRule id: fq.rfnode.no-dims"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-cd944e10a9a441d9", "name": "Custom React Flow node registered without explicit width/height \u2014 packages/data-pipeline/src/__tests__/event-stream.test", "shortDescription": {"text": "Custom React Flow node registered without explicit width/height \u2014 packages/data-pipeline/src/__tests__/event-stream.test.ts:16"}, "fullDescription": {"text": "When you register a custom node type via `nodeTypes`, the RFNode object you build must include `width` and `height` props. Without them, MiniMap renders ZERO mini-nodes for that type and `fitView` underestimates the bounds (cuts off lane labels, etc.). Add `width: \u2026, height: \u2026` to the node object. See P-I.\n\nWhy: P-I in CHECKLIST.md \u2014 RF MiniMap + fitView need explicit dims on custom nodes.\nRule id: fq.rfnode.no-dims"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3ed2ac3a823541cd", "name": "Stray `console.log` in TS/JS \u2014 packages/scaling/src/core/auto-scaler.ts:84", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/scaling/src/core/auto-scaler.ts:84"}, "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-0021e1a29cb2d71e", "name": "TODO/FIXME marker in shipping code \u2014 packages/agentic/src/marketplace/agent-marketplace.ts:67", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 packages/agentic/src/marketplace/agent-marketplace.ts:67"}, "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-611fa960c0852c04", "name": "TODO/FIXME marker in shipping code \u2014 packages/agentic/src/voice/agent-voice.ts:13", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 packages/agentic/src/voice/agent-voice.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-684e6e757de9d9c0", "name": "TODO/FIXME marker in shipping code \u2014 packages/agentic/src/memory/memory-store.ts:44", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 packages/agentic/src/memory/memory-store.ts:44"}, "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-b811ab0d3ced429d", "name": "Stray `console.log` in TS/JS \u2014 packages/agentic/src/logging/agent-logs.ts:36", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/agentic/src/logging/agent-logs.ts:36"}, "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-a351255ab588de8a", "name": "TODO/FIXME marker in shipping code \u2014 packages/agentic/src/planning/planner.ts:81", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 packages/agentic/src/planning/planner.ts:81"}, "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-84c6e5121f38a496", "name": "Stray `console.log` in TS/JS \u2014 packages/common/src/logger.ts:24", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/common/src/logger.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-e5f971398ca00c53", "name": "Stray `console.log` in TS/JS \u2014 packages/agent-runtime/src/__tests__/agents/code-pilot.test.ts:89", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/agent-runtime/src/__tests__/agents/code-pilot.test.ts:89"}, "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-1a387a846af02d5e", "name": "Stray `console.log` in TS/JS \u2014 packages/database/prisma/seed.ts:6", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/database/prisma/seed.ts:6"}, "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-6ac2136132bb99db", "name": "Stray `console.log` in TS/JS \u2014 packages/database/src/seed.ts:57", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/database/src/seed.ts:57"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-74f6959d66d567de", "name": "TODO/FIXME marker in shipping code \u2014 packages/search/src/services/content-extractor.ts:117", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 packages/search/src/services/content-extractor.ts:117"}, "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-b7e4990e2b90b84b", "name": "Stray `console.log` in TS/JS \u2014 packages/quant-codex/src/scaffolder/templates.ts:283", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/quant-codex/src/scaffolder/templates.ts:283"}, "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-056f9e19a744e629", "name": "`truncate` class without `title=` for hover reveal \u2014 packages/shared-ui/src/agent/AgentCard.tsx:39", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/shared-ui/src/agent/AgentCard.tsx:39"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cf47e3d8d0c801c8", "name": "`truncate` class without `title=` for hover reveal \u2014 packages/shared-ui/src/components/MediaPlayer.tsx:198", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/shared-ui/src/components/MediaPlayer.tsx:198"}, "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-e0bfe5d8c3048a33", "name": "`truncate` class without `title=` for hover reveal \u2014 packages/shared-ui/src/components/Chat/ChatList.tsx:79", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/shared-ui/src/components/Chat/ChatList.tsx:79"}, "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-af70a758f6ee260d", "name": "`truncate` class without `title=` for hover reveal \u2014 packages/shared-ui/src/components/Chat/ChatBubble.tsx:64", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/shared-ui/src/components/Chat/ChatBubble.tsx:64"}, "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-64da258a7181e213", "name": "`truncate` class without `title=` for hover reveal \u2014 packages/shared-ui/src/components/Chat/ChatInput.tsx:99", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/shared-ui/src/components/Chat/ChatInput.tsx:99"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4ce88ddb444d045a", "name": "`truncate` class without `title=` for hover reveal \u2014 packages/shared-ui/src/components/Navigation/TopBar.tsx:63", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/shared-ui/src/components/Navigation/TopBar.tsx:63"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1de6b25e6164836f", "name": "`truncate` class without `title=` for hover reveal \u2014 packages/shared-ui/src/components/Feed/StoryRing.tsx:65", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/shared-ui/src/components/Feed/StoryRing.tsx:65"}, "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-ed762fc2f106bf06", "name": "`truncate` class without `title=` for hover reveal \u2014 packages/shared-ui/src/components/Layout/Sidebar.tsx:82", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/shared-ui/src/components/Layout/Sidebar.tsx:82"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-811e25ec596d6117", "name": "`truncate` class without `title=` for hover reveal \u2014 packages/shared-ui/src/components/Shell/ActivityFeed.tsx:236", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/shared-ui/src/components/Shell/ActivityFeed.tsx:236"}, "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-ba7d550e6a4bc37b", "name": "`truncate` class without `title=` for hover reveal \u2014 packages/shared-ui/src/components/Shell/NotificationCenter.tsx:71", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/shared-ui/src/components/Shell/NotificationCenter.tsx:71"}, "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-e62793df37bf61ad", "name": "`truncate` class without `title=` for hover reveal \u2014 packages/shared-ui/src/components/Shell/NotificationPanel.tsx:208", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/shared-ui/src/components/Shell/NotificationPanel.tsx:208"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b7ceb81018e9b4e3", "name": "`truncate` class without `title=` for hover reveal \u2014 packages/shared-ui/src/components/Shell/StarredItems.tsx:35", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/shared-ui/src/components/Shell/StarredItems.tsx:35"}, "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-0c6361753c419c35", "name": "`truncate` class without `title=` for hover reveal \u2014 packages/shared-ui/src/components/Shell/CrossAppRelations.tsx:94", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/shared-ui/src/components/Shell/CrossAppRelations.tsx:94"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-79deaa3815b85ba8", "name": "`truncate` class without `title=` for hover reveal \u2014 packages/shared-ui/src/components/Shell/RecentItems.tsx:38", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/shared-ui/src/components/Shell/RecentItems.tsx:38"}, "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-41554c05dfc3a5ce", "name": "`truncate` class without `title=` for hover reveal \u2014 packages/shared-ui/src/components/Shell/AppSwitcher.tsx:44", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/shared-ui/src/components/Shell/AppSwitcher.tsx:44"}, "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-29715e3add420dbc", "name": "`truncate` class without `title=` for hover reveal \u2014 packages/shared-ui/src/components/Shell/ProfileCard.tsx:43", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/shared-ui/src/components/Shell/ProfileCard.tsx:43"}, "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-2568469b2362d0c4", "name": "`truncate` class without `title=` for hover reveal \u2014 packages/shared-ui/src/components/Shell/UserMenu.tsx:50", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/shared-ui/src/components/Shell/UserMenu.tsx:50"}, "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-c54c66d16585d217", "name": "`truncate` class without `title=` for hover reveal \u2014 packages/shared-ui/src/components/Shell/UniversalSearch.tsx:303", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/shared-ui/src/components/Shell/UniversalSearch.tsx:303"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a7c2589e4311bd06", "name": "`truncate` class without `title=` for hover reveal \u2014 packages/shared-ui/src/components/Shell/WorkspaceSwitcher.tsx:63", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/shared-ui/src/components/Shell/WorkspaceSwitcher.tsx:63"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-db20b487e892b1b0", "name": "Stray `console.log` in TS/JS \u2014 packages/shared-ui/src/advanced/state-manager.ts:78", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/shared-ui/src/advanced/state-manager.ts:78"}, "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-4ce233b2557cc936", "name": "Stray `console.log` in TS/JS \u2014 packages/server/src/middleware/security.ts:108", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/server/src/middleware/security.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-7182a598b8114cb8", "name": "Stray `console.log` in TS/JS \u2014 packages/server/src/middleware/logging.ts:97", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/server/src/middleware/logging.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-503c8a1dfe273f28", "name": "Stray `console.log` in TS/JS \u2014 packages/realtime/src/websocket-client.ts:337", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/realtime/src/websocket-client.ts:337"}, "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-ebd9ac910f32ed29", "name": "TODO/FIXME marker in shipping code \u2014 services/search-indexer/src/api/proactive.router.ts:64", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 services/search-indexer/src/api/proactive.router.ts:64"}, "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-6a7ed4e5e00f193d", "name": "TODO/FIXME marker in shipping code \u2014 services/search-indexer/src/api/search.router.ts:131", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 services/search-indexer/src/api/search.router.ts:131"}, "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-ca49fa090ca4f0c2", "name": "Stray `console.log` in TS/JS \u2014 services/ci-runner/src/__tests__/artifact-uploader.test.ts:29", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 services/ci-runner/src/__tests__/artifact-uploader.test.ts:29"}, "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-23674a97ba9d0d1b", "name": "Privileged port 993 in use", "shortDescription": {"text": "Privileged port 993 in use"}, "fullDescription": {"text": "Port 993 is privileged (<1024). Make sure the service runs with the right caps or front it with a non-privileged port via a load balancer."}, "properties": {"scanner": "scanner-primary", "layer": "network", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-bb949ff7559ebeed", "name": "Privileged port 587 in use", "shortDescription": {"text": "Privileged port 587 in use"}, "fullDescription": {"text": "Port 587 is privileged (<1024). Make sure the service runs with the right caps or front it with a non-privileged port via a load balancer."}, "properties": {"scanner": "scanner-primary", "layer": "network", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d5a23937f08e752b", "name": "Privileged port 465 in use", "shortDescription": {"text": "Privileged port 465 in use"}, "fullDescription": {"text": "Port 465 is privileged (<1024). Make sure the service runs with the right caps or front it with a non-privileged port via a load balancer."}, "properties": {"scanner": "scanner-primary", "layer": "network", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ec1a7da37d1b1fc8", "name": "Docker base image is tag-pinned but not digest-pinned: node:22-slim", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: node:22-slim"}, "fullDescription": {"text": "Container tags can be retagged upstream. Pin production base images to a reviewed digest (`image@sha256:...`) when reproducibility and supply-chain integrity matter."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d2e9fd2428cc085c", "name": "Docker base image is tag-pinned but not digest-pinned: node:22-slim", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: node:22-slim"}, "fullDescription": {"text": "Container tags can be retagged upstream. Pin production base images to a reviewed digest (`image@sha256:...`) when reproducibility and supply-chain integrity matter."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0a3473e81e1e7ba2", "name": "Docker base image is tag-pinned but not digest-pinned: node:22-slim", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: node:22-slim"}, "fullDescription": {"text": "Container tags can be retagged upstream. Pin production base images to a reviewed digest (`image@sha256:...`) when reproducibility and supply-chain integrity matter."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ad2301531c545042", "name": "Docker base image is tag-pinned but not digest-pinned: node:22-slim", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: node:22-slim"}, "fullDescription": {"text": "Container tags can be retagged upstream. Pin production base images to a reviewed digest (`image@sha256:...`) when reproducibility and supply-chain integrity matter."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-427093338b4f88ad", "name": "Docker base image is tag-pinned but not digest-pinned: node:22-alpine", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: node:22-alpine"}, "fullDescription": {"text": "Container tags can be retagged upstream. Pin production base images to a reviewed digest (`image@sha256:...`) when reproducibility and supply-chain integrity matter."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f3be6b8b344f47f8", "name": "Insecure pattern 'dangerous_innerhtml' in apps/quantedits/src/providers/brand-provider.tsx:17", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in apps/quantedits/src/providers/brand-provider.tsx:17"}, "fullDescription": {"text": "Found a known-risky pattern (dangerous_innerhtml). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-be18f42aebeb638f", "name": "Insecure pattern 'dangerous_innerhtml' in apps/quantchat/src/providers/brand-provider.tsx:19", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in apps/quantchat/src/providers/brand-provider.tsx:19"}, "fullDescription": {"text": "Found a known-risky pattern (dangerous_innerhtml). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3db127322cf47f66", "name": "Insecure pattern 'dangerous_innerhtml' in apps/quantmail/src/components/EmailThread.tsx:182", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in apps/quantmail/src/components/EmailThread.tsx:182"}, "fullDescription": {"text": "Found a known-risky pattern (dangerous_innerhtml). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c9458e1c58499a2b", "name": "Insecure pattern 'dangerous_innerhtml' in apps/quantmail/src/components/RichTextEditor.tsx:327", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in apps/quantmail/src/components/RichTextEditor.tsx:327"}, "fullDescription": {"text": "Found a known-risky pattern (dangerous_innerhtml). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c6d1274f010f51ac", "name": "Insecure pattern 'direct_innerhtml_assignment' in apps/quantmail/src/components/RichTextEditor.tsx:112", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in apps/quantmail/src/components/RichTextEditor.tsx:112"}, "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-e3103dd4e7dadaf5", "name": "Insecure pattern 'dangerous_innerhtml' in apps/quantmail/src/providers/brand-provider.tsx:19", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in apps/quantmail/src/providers/brand-provider.tsx:19"}, "fullDescription": {"text": "Found a known-risky pattern (dangerous_innerhtml). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a745530da17ea0d9", "name": "Possible secret in apps/quantmail/src/app/register/page.tsx", "shortDescription": {"text": "Possible secret in apps/quantmail/src/app/register/page.tsx"}, "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-438a97ba428b9142", "name": "Insecure pattern 'dangerous_innerhtml' in apps/quantdocs/src/components/DocEditor.tsx:93", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in apps/quantdocs/src/components/DocEditor.tsx:93"}, "fullDescription": {"text": "Found a known-risky pattern (dangerous_innerhtml). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2a30dfc5c900345a", "name": "Insecure pattern 'node_child_process' in apps/quanttube/backend/services/video-stream.service.ts:1", "shortDescription": {"text": "Insecure pattern 'node_child_process' in apps/quanttube/backend/services/video-stream.service.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-81a9fb5ce3fb6510", "name": "Insecure pattern 'dangerous_innerhtml' in apps/quantai/src/components/CodeEditor.tsx:339", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in apps/quantai/src/components/CodeEditor.tsx:339"}, "fullDescription": {"text": "Found a known-risky pattern (dangerous_innerhtml). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-77a474512ed2f5c4", "name": "Insecure pattern 'dangerous_innerhtml' in apps/quantai/src/pages/code.tsx:472", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in apps/quantai/src/pages/code.tsx:472"}, "fullDescription": {"text": "Found a known-risky pattern (dangerous_innerhtml). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d264da5109333cce", "name": "Insecure pattern 'node_child_process' in scripts/doctor.ts:5", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/doctor.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-4ec2109e51190236", "name": "Insecure pattern 'node_child_process' in scripts/smoke.ts:5", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/smoke.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-adf6572b3b55763f", "name": "Insecure pattern 'node_child_process' in scripts/db-reset.ts:5", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/db-reset.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-9d7f8dae1a5ebaab", "name": "Insecure pattern 'private_key_in_repo' in packages/federation/src/activitypub/actor.test.ts:9", "shortDescription": {"text": "Insecure pattern 'private_key_in_repo' in packages/federation/src/activitypub/actor.test.ts:9"}, "fullDescription": {"text": "Found a known-risky pattern (private_key_in_repo). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-b6a1d90eddc3df2f", "name": "Insecure pattern 'eval_used' in packages/agentic/src/sandbox/agent-sandbox.ts:15", "shortDescription": {"text": "Insecure pattern 'eval_used' in packages/agentic/src/sandbox/agent-sandbox.ts:15"}, "fullDescription": {"text": "Found a known-risky pattern (eval_used). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1d0e3e24d6b21ae0", "name": "Insecure pattern 'local_storage_auth_token' in packages/shared-ui/src/hooks/useAuth.ts:146", "shortDescription": {"text": "Insecure pattern 'local_storage_auth_token' in packages/shared-ui/src/hooks/useAuth.ts:146"}, "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-c46a49f26657acea", "name": "Insecure pattern 'cors_wildcard' in packages/server/src/middleware/cors.ts:92", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in packages/server/src/middleware/cors.ts:92"}, "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-28ba6a16d7ee3927", "name": "Insecure pattern 'node_child_process' in services/git-server/src/__tests__/git-upload-pack.service.test.ts:36", "shortDescription": {"text": "Insecure pattern 'node_child_process' in services/git-server/src/__tests__/git-upload-pack.service.test.ts:36"}, "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-11a8cb78e97726ea", "name": "Insecure pattern 'node_child_process' in services/git-server/src/__tests__/git-receive-pack.service.test.ts:37", "shortDescription": {"text": "Insecure pattern 'node_child_process' in services/git-server/src/__tests__/git-receive-pack.service.test.ts:37"}, "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-0fdf69496e1a7096", "name": "Insecure pattern 'node_child_process' in services/git-server/src/__tests__/git-http.routes.test.ts:62", "shortDescription": {"text": "Insecure pattern 'node_child_process' in services/git-server/src/__tests__/git-http.routes.test.ts:62"}, "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-851a208f31180d30", "name": "Insecure pattern 'node_child_process' in services/git-server/src/services/git-receive-pack.ts:1", "shortDescription": {"text": "Insecure pattern 'node_child_process' in services/git-server/src/services/git-receive-pack.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-4c12c74ba0df2102", "name": "Insecure pattern 'node_child_process' in services/git-server/src/services/repo-storage.ts:1", "shortDescription": {"text": "Insecure pattern 'node_child_process' in services/git-server/src/services/repo-storage.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-30eda8623e1d4391", "name": "Insecure pattern 'node_child_process' in services/git-server/src/services/git-upload-pack.ts:1", "shortDescription": {"text": "Insecure pattern 'node_child_process' in services/git-server/src/services/git-upload-pack.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-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/setup-node@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-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-be5b6ac28962a744", "name": "42 TODO/FIXME markers", "shortDescription": {"text": "42 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-97321d123ea1e415", "name": "Node manifest has dependencies but no lockfile: apps/quantedits/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: apps/quantedits/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-4c55d1e004e20c4b", "name": "Node manifest has dependencies but no lockfile: apps/quantchat/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: apps/quantchat/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-a8a9e3b820e064aa", "name": "Node manifest has dependencies but no lockfile: apps/quantneon/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: apps/quantneon/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-9d7e6610aa7fee1e", "name": "Node manifest has dependencies but no lockfile: apps/quantmax/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: apps/quantmax/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-c5c0d8922dcb4e82", "name": "Node manifest has dependencies but no lockfile: apps/quant-mobile/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: apps/quant-mobile/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-971ed5dee569ba08", "name": "Node manifest has dependencies but no lockfile: apps/quantmail/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: apps/quantmail/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-16e828b65e647811", "name": "Node manifest has dependencies but no lockfile: apps/quantdocs/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: apps/quantdocs/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-1cf131fdebd0314f", "name": "Node manifest has dependencies but no lockfile: apps/quanttube/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: apps/quanttube/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-9f6d9aaea4f8a426", "name": "Node manifest has dependencies but no lockfile: apps/marketing/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: apps/marketing/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-84d36017c7960675", "name": "Node manifest has dependencies but no lockfile: apps/quantcalendar/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: apps/quantcalendar/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-5c30f715681a4005", "name": "Node manifest has dependencies but no lockfile: apps/admin/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: apps/admin/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-ece8cfc7decd503a", "name": "Node manifest has dependencies but no lockfile: apps/status/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: apps/status/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-356595244bd980f4", "name": "Node manifest has dependencies but no lockfile: apps/quantdrive/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: apps/quantdrive/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-784a5fe6c0c9ba5d", "name": "Node manifest has dependencies but no lockfile: apps/quantads/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: apps/quantads/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-e4a6f2cce60b0513", "name": "Node manifest has dependencies but no lockfile: apps/quantube/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: apps/quantube/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-3d8d2122c62c6f21", "name": "Node manifest has dependencies but no lockfile: apps/quantmeet/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: apps/quantmeet/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-623f4ff5838d1320", "name": "Node manifest has dependencies but no lockfile: apps/quantsync/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: apps/quantsync/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-c96f64f250fe0834", "name": "Node manifest has dependencies but no lockfile: apps/quantai/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: apps/quantai/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-084b29ef36e3e74e", "name": "Node manifest has dependencies but no lockfile: packages/governance/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/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-819c741d8ada6565", "name": "Node manifest has dependencies but no lockfile: packages/quant-live/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/quant-live/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-c17406ec5d390ef6", "name": "Node manifest has dependencies but no lockfile: packages/spatial-ui/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/spatial-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-4b52f3d5e0999caa", "name": "Node manifest has dependencies but no lockfile: packages/security/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/security/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-fb528631fbc0ba1b", "name": "Node manifest has dependencies but no lockfile: packages/data-plane/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/data-plane/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-32be58ad3515a00b", "name": "Node manifest has dependencies but no lockfile: packages/federation/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/federation/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-216e7150e1489d73", "name": "Node manifest has dependencies but no lockfile: packages/maps/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/maps/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-c046771bceb7b4d6", "name": "Node manifest has dependencies but no lockfile: packages/server-core/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/server-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-0724b71eef0f4c25", "name": "Node manifest has dependencies but no lockfile: packages/brand/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/brand/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-221338910f785920", "name": "Node manifest has dependencies but no lockfile: packages/service-discovery/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/service-discovery/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-680e20cc34b251ea", "name": "Node manifest has dependencies but no lockfile: packages/voice-first-os/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/voice-first-os/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-172dcdf252860fa6", "name": "Node manifest has dependencies but no lockfile: packages/notifications/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/notifications/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-1685b47d589f10e5", "name": "Node manifest has dependencies but no lockfile: packages/quant-orchestrator/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/quant-orchestrator/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-d29e76e9c6cfc70a", "name": "Node manifest has dependencies but no lockfile: packages/data-warehouse/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/data-warehouse/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-f1cfd581de8ee42a", "name": "Node manifest has dependencies but no lockfile: packages/user-owned-ai/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/user-owned-ai/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-c8934c51a341c4cf", "name": "Node manifest has dependencies but no lockfile: packages/security-advanced/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/security-advanced/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-80f569ae36a3e3bf", "name": "Node manifest has dependencies but no lockfile: packages/ai/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/ai/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-eaf9fe63338941b6", "name": "Node manifest has dependencies but no lockfile: packages/ml-pipeline/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/ml-pipeline/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-cbb9c2411959b6f5", "name": "Node manifest has dependencies but no lockfile: packages/testing/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/testing/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-5d65d7d68ad70e8a", "name": "Node manifest has dependencies but no lockfile: packages/ai-memory/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/ai-memory/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-41b225e183229484", "name": "Node manifest has dependencies but no lockfile: packages/auth/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/auth/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-0b5fba449f9e46a0", "name": "Node manifest has dependencies but no lockfile: packages/data-pipeline/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/data-pipeline/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-699b79f228175d77", "name": "Node manifest has dependencies but no lockfile: packages/recommendations/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/recommendations/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-1098d2c1b75c3d7b", "name": "Node manifest has dependencies but no lockfile: packages/voice-brain-dump/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/voice-brain-dump/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-f8366d7d4d7aad88", "name": "Node manifest has dependencies but no lockfile: packages/quant-health/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/quant-health/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-b2f28a23f2857d58", "name": "Node manifest has dependencies but no lockfile: packages/encryption/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/encryption/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-682fba9dac8d14eb", "name": "Node manifest has dependencies but no lockfile: packages/agentic/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/agentic/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-8e27b4847bdf1280", "name": "Node manifest has dependencies but no lockfile: packages/media/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/media/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-dc51b310340199f7", "name": "Node manifest has dependencies but no lockfile: packages/ai-organization/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/ai-organization/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-5cf4a5ff8562974f", "name": "Node manifest has dependencies but no lockfile: packages/common/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/common/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-d6be2b5aafc666ae", "name": "Node manifest has dependencies but no lockfile: packages/identity-permissions/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/identity-permissions/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-a19a8898a5da7a8e", "name": "Node manifest has dependencies but no lockfile: packages/generative-media/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/generative-media/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-5e60ccd40bde3ec8", "name": "Node manifest has dependencies but no lockfile: packages/moderation/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/moderation/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-941c68b2f6975c35", "name": "Node manifest has dependencies but no lockfile: packages/performance/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/performance/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-d86033276650fcba", "name": "Node manifest has dependencies but no lockfile: packages/ai-daily-brief/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/ai-daily-brief/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-6d3ecfd9cfa8a78f", "name": "Node manifest has dependencies but no lockfile: packages/triton-client/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/triton-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-25718c56b5e0c9fa", "name": "Node manifest has dependencies but no lockfile: packages/webrtc/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/webrtc/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-75da16db4c903c1b", "name": "Node manifest has dependencies but no lockfile: packages/edge-config/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/edge-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-1cf0bc1fa4557f44", "name": "Node manifest has dependencies but no lockfile: packages/cross-publish/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/cross-publish/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-687b0c75e1f9c8e4", "name": "Node manifest has dependencies but no lockfile: packages/information-agents/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/information-agents/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-a23836ded381e4c3", "name": "Node manifest has dependencies but no lockfile: packages/chaos-testing/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/chaos-testing/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-6da696781542104a", "name": "Node manifest has dependencies but no lockfile: packages/error-monitoring/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/error-monitoring/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-75a9c75180309457", "name": "Node manifest has dependencies but no lockfile: packages/teams/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/teams/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-480337df8d279ba0", "name": "Node manifest has dependencies but no lockfile: packages/observability/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/observability/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-ac2b3ca867ec398f", "name": "Node manifest has dependencies but no lockfile: packages/quant-notebook/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/quant-notebook/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-3fdfdc77c22dd8d7", "name": "Node manifest has dependencies but no lockfile: packages/audit/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/audit/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-ce45dd1b8dcb2452", "name": "Node manifest has dependencies but no lockfile: packages/agent-runtime/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/agent-runtime/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-cb01c01804de0b47", "name": "Node manifest has dependencies but no lockfile: packages/database/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/database/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-7812d14a3ca35b58", "name": "Node manifest has dependencies but no lockfile: packages/voice-input/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/voice-input/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-0c4eb249a752bcca", "name": "Node manifest has dependencies but no lockfile: packages/bharat-ai/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/bharat-ai/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-e0cafd9b24c16070", "name": "Node manifest has dependencies but no lockfile: packages/search/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/search/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-79be929b82135c3b", "name": "Node manifest has dependencies but no lockfile: packages/device-control/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/device-control/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-7903dcbfa2d3afe4", "name": "Node manifest has dependencies but no lockfile: packages/ar-lenses/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/ar-lenses/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-1a1bb6e48960a445", "name": "Node manifest has dependencies but no lockfile: packages/social-graph/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/social-graph/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-bb08e9316eb1e6bb", "name": "Node manifest has dependencies but no lockfile: packages/universal-timeline/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/universal-timeline/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-bebd7397b0010c6d", "name": "Node manifest has dependencies but no lockfile: packages/quant-codex/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/quant-codex/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-02dd83edc2f3d81d", "name": "Node manifest has dependencies but no lockfile: packages/sync-engine/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/sync-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-b713844b2b631ab0", "name": "Node manifest has dependencies but no lockfile: packages/dev-platform/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/dev-platform/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-36fe6cdeb59e47d7", "name": "Node manifest has dependencies but no lockfile: packages/shared-ui/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/shared-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-f0db31c5c18b9cfd", "name": "Node manifest has dependencies but no lockfile: packages/browser-agent/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/browser-agent/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-4d20acbe78ecf818", "name": "Node manifest has dependencies but no lockfile: packages/ranking/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/ranking/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-c31af925d3473636", "name": "Node manifest has dependencies but no lockfile: packages/robotics-bridge/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/robotics-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-0ecaaf0b3082b1ac", "name": "Node manifest has dependencies but no lockfile: packages/contextual-sidekick/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/contextual-sidekick/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-d534205eabfdf82a", "name": "Node manifest has dependencies but no lockfile: packages/organizations/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/organizations/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-2823251a6bbf197e", "name": "Node manifest has dependencies but no lockfile: packages/launch-beta/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/launch-beta/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-e8eeaea1067ef6eb", "name": "Node manifest has dependencies but no lockfile: packages/queue/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/queue/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-4314f60b8423c869", "name": "Node manifest has dependencies but no lockfile: packages/command-palette/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/command-palette/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-f80f2a25a7b6e49e", "name": "Node manifest has dependencies but no lockfile: packages/quant-studio/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/quant-studio/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-8949b133357b0911", "name": "Node manifest has dependencies but no lockfile: packages/photos/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/photos/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-482f4e9d55d59aff", "name": "Node manifest has dependencies but no lockfile: packages/onboarding/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/onboarding/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-704687da550383ed", "name": "Node manifest has dependencies but no lockfile: packages/payments/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/payments/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-3f43f57b9337a160", "name": "Node manifest has dependencies but no lockfile: packages/agent-swarm/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/agent-swarm/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-65327c0d8f58f8e3", "name": "Node manifest has dependencies but no lockfile: packages/cross-app-gaming/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/cross-app-gaming/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-aaf184d514190968", "name": "Node manifest has dependencies but no lockfile: packages/health-server/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/health-server/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-55418565003a3fb8", "name": "Node manifest has dependencies but no lockfile: packages/iot-control/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/iot-control/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-cd483461e03e5f91", "name": "Node manifest has dependencies but no lockfile: packages/quant-flow/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/quant-flow/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-b739f2f2be1d714d", "name": "Node manifest has dependencies but no lockfile: packages/server/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/server/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-ec6080c636aac2d6", "name": "Node manifest has dependencies but no lockfile: packages/code-agent/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/code-agent/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-a100d470bad2a3a7", "name": "Node manifest has dependencies but no lockfile: packages/quant-commerce/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/quant-commerce/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-427657017a90ce14", "name": "Node manifest has dependencies but no lockfile: packages/ml-runtime/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/ml-runtime/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-eb776bb4e62626da", "name": "Node manifest has dependencies but no lockfile: packages/privacy-ads/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/privacy-ads/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-51c04f061a047cb7", "name": "Node manifest has dependencies but no lockfile: packages/local-first/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/local-first/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-9497c45353459fa5", "name": "Node manifest has dependencies but no lockfile: packages/co-presence/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/co-presence/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-f3274361409bbeea", "name": "Node manifest has dependencies but no lockfile: packages/quant-economy/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/quant-economy/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-9ed576bd82ffb61a", "name": "Node manifest has dependencies but no lockfile: packages/launch-public/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/launch-public/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-3579b7b3269a8923", "name": "Node manifest has dependencies but no lockfile: packages/feature-flags/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/feature-flags/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-3032292e6c26b5db", "name": "Node manifest has dependencies but no lockfile: packages/quant-automate/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/quant-automate/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-64374b8073480f8e", "name": "Node manifest has dependencies but no lockfile: packages/wearables/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/wearables/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-379db86f370ad9a5", "name": "Node manifest has dependencies but no lockfile: packages/app-store/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/app-store/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-1f50989207eeba59", "name": "Node manifest has dependencies but no lockfile: packages/realtime/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/realtime/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-1bd75cc814364198", "name": "Node manifest has dependencies but no lockfile: packages/wellbeing/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/wellbeing/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-587750e95a527750", "name": "Node manifest has dependencies but no lockfile: packages/universal-capture/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/universal-capture/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-137007a5b04ba75f", "name": "Node manifest has dependencies but no lockfile: packages/storage/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/storage/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-a90cde49d14c2585", "name": "Node manifest has dependencies but no lockfile: packages/creator-economy/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/creator-economy/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-bad1968469930fc3", "name": "Node manifest has dependencies but no lockfile: packages/cross-app-workflows/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/cross-app-workflows/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-7af1356c5de19fa9", "name": "Node manifest has dependencies but no lockfile: packages/quant-tools/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/quant-tools/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-15e6cc2e8fb1efeb", "name": "Node manifest has dependencies but no lockfile: services/search-indexer/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: services/search-indexer/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-9aea0b0aa56c549f", "name": "Node manifest has dependencies but no lockfile: services/moderation-worker/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: services/moderation-worker/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-2c068855e97904f6", "name": "Node manifest has dependencies but no lockfile: services/matchmaking/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: services/matchmaking/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-41ca2d814d7e09d4", "name": "Node manifest has dependencies but no lockfile: services/git-server/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: services/git-server/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-fe7607a6a5432584", "name": "Node manifest has dependencies but no lockfile: services/smtp-inbound/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: services/smtp-inbound/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-12074c86530297c3", "name": "Node manifest has dependencies but no lockfile: services/ws-gateway/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: services/ws-gateway/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-8c0f7432a938e1c5", "name": "Node manifest has dependencies but no lockfile: services/cdc-relay/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: services/cdc-relay/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-866ad37eb7265777", "name": "Node manifest has dependencies but no lockfile: services/ci-runner/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: services/ci-runner/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-eb850abe5d3c8bc3", "name": "Node manifest has dependencies but no lockfile: e2e/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: e2e/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 187 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 583 placeholder/mock markers across 242 source files. This often means the repo looks complete while core flows still use generated scaffolding or fake data."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2d0c7b7ab8f8aacf", "name": "Critical user flow still appears backed by mock or placeholder data", "shortDescription": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "fullDescription": {"text": "A payment/auth/admin/order/billing-style flow contains mock, fake, TODO, dummy, or placeholder markers in runtime source. In the Fable corpus this is a high-leverage completeness smell: the app can look finished while the money, identity, or tenant flow is still scaffolded."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ea8f3013f588db25", "name": "Shallow git history limits provenance confidence", "shortDescription": {"text": "Shallow git history limits provenance confidence"}, "fullDescription": {"text": "The repository is a shallow clone. Origin/evolution analysis cannot distinguish fresh generation, imported legacy code, or long-lived human code with high confidence."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8424db9c75e04ba4", "name": "Very short observed git history", "shortDescription": {"text": "Very short observed git history"}, "fullDescription": {"text": "The repo has multiple source files but two or fewer visible commits. This is not a failure by itself, but it lowers confidence in evolution-based diagnosis."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-71f3decba72710d6", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantedits/src/services/api-client.ts:38", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantedits/src/services/api-client.ts:38"}, "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-bab91152c75c5817", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantchat/src/app/api/media/upload/route.ts:7", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantchat/src/app/api/media/upload/route.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-a738646c4e73efa2", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantchat/src/app/api/messages/[id]/route.ts:8", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantchat/src/app/api/messages/[id]/route.ts:8"}, "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-5c6725271655796b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantchat/src/app/api/stories/route.ts:7", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantchat/src/app/api/stories/route.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-ba77c754187dd5da", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantchat/src/app/api/stories/[storyId]/route.ts:10", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantchat/src/app/api/stories/[storyId]/route.ts:10"}, "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-27746800087d5ee6", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantchat/src/app/api/stories/[storyId]/reply/route.ts:11", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantchat/src/app/api/stories/[storyId]/reply/route.ts:11"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-bd99138091461611", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantchat/src/app/api/stories/[storyId]/view/route.ts:10", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantchat/src/app/api/stories/[storyId]/view/route.ts:10"}, "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-bd88a0be6cab3463", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantchat/src/app/api/stories/[storyId]/viewers/route.ts:10", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantchat/src/app/api/stories/[storyId]/viewers/route.ts:10"}, "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-008f81eff07da93d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantchat/src/app/api/stories/feed/route.ts:6", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantchat/src/app/api/stories/feed/route.ts:6"}, "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-6febdcd17abd1a6d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantchat/src/pages/memories.tsx:60", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantchat/src/pages/memories.tsx:60"}, "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-4f7d30ee8df0b874", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantchat/src/hooks/useChat.ts:187", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantchat/src/hooks/useChat.ts:187"}, "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-e9f4b61d86200340", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantchat/src/hooks/useMedia.ts:298", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantchat/src/hooks/useMedia.ts:298"}, "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-3011ceb2529f254a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantchat/src/services/api-client.ts:486", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantchat/src/services/api-client.ts:486"}, "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-d6fda7ad519be34e", "name": "Commented-code block (5 lines) in apps/quantneon/src/components/MiniGameLobby.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in apps/quantneon/src/components/MiniGameLobby.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-892e0de4ae4bacf5", "name": "Commented-code block (5 lines) in apps/quantneon/src/components/ShoppingTag.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in apps/quantneon/src/components/ShoppingTag.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-90637ccc8380f0d2", "name": "Commented-code block (5 lines) in apps/quantneon/src/components/ARTryOn.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in apps/quantneon/src/components/ARTryOn.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8ccb0191bd773672", "name": "Commented-code block (5 lines) in apps/quantneon/src/hooks/useFeed.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in apps/quantneon/src/hooks/useFeed.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-9b067774c9949dac", "name": "Commented-code block (5 lines) in apps/quantneon/src/hooks/useReels.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in apps/quantneon/src/hooks/useReels.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-cec51a2b52415932", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantneon/src/services/api-client.ts:38", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantneon/src/services/api-client.ts:38"}, "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-757077c83405c897", "name": "Commented-code block (5 lines) in apps/quantmax/src/components/SwipeStack.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in apps/quantmax/src/components/SwipeStack.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f2b010a67ed83696", "name": "Commented-code block (6 lines) in apps/quantmax/src/components/DateTimer.tsx:1", "shortDescription": {"text": "Commented-code block (6 lines) in apps/quantmax/src/components/DateTimer.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-47eccb58d97aa79f", "name": "Commented-code block (5 lines) in apps/quantmax/src/components/RandomMatcher.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in apps/quantmax/src/components/RandomMatcher.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-27e46160742ed3d9", "name": "Commented-code block (5 lines) in apps/quantmax/src/components/GiftPanel.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in apps/quantmax/src/components/GiftPanel.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4834e22b8a3bd846", "name": "Commented-code block (6 lines) in apps/quantmax/src/components/VideoCreator.tsx:1", "shortDescription": {"text": "Commented-code block (6 lines) in apps/quantmax/src/components/VideoCreator.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-dfcb7fdb76dd348d", "name": "Commented-code block (5 lines) in apps/quantmax/src/pages/create.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in apps/quantmax/src/pages/create.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e56221238bcb5f73", "name": "Commented-code block (5 lines) in apps/quantmax/src/pages/challenges.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in apps/quantmax/src/pages/challenges.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fab9fcf6233ff6c0", "name": "Commented-code block (6 lines) in apps/quantmax/src/pages/profile.tsx:1", "shortDescription": {"text": "Commented-code block (6 lines) in apps/quantmax/src/pages/profile.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7e87def32f368221", "name": "Commented-code block (6 lines) in apps/quantmax/src/pages/virtual-dates.tsx:1", "shortDescription": {"text": "Commented-code block (6 lines) in apps/quantmax/src/pages/virtual-dates.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b43bcb34ce244cfd", "name": "Commented-code block (5 lines) in apps/quantmax/src/pages/index.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in apps/quantmax/src/pages/index.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5cc3463efe487365", "name": "Commented-code block (5 lines) in apps/quantmax/src/pages/discover.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in apps/quantmax/src/pages/discover.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6dc660b2f1133170", "name": "Commented-code block (6 lines) in apps/quantmax/src/pages/creator-fund.tsx:1", "shortDescription": {"text": "Commented-code block (6 lines) in apps/quantmax/src/pages/creator-fund.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-85b2dff0fa522c8f", "name": "Commented-code block (6 lines) in apps/quantmax/src/pages/speed-dating.tsx:1", "shortDescription": {"text": "Commented-code block (6 lines) in apps/quantmax/src/pages/speed-dating.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0734f220acfa91ab", "name": "Commented-code block (5 lines) in apps/quantmax/src/pages/videochat.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in apps/quantmax/src/pages/videochat.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b3507431cb069099", "name": "Commented-code block (5 lines) in apps/quantmax/src/hooks/useLive.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in apps/quantmax/src/hooks/useLive.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-51ce96fa0933d1a3", "name": "Commented-code block (5 lines) in apps/quantmax/src/hooks/useCreator.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in apps/quantmax/src/hooks/useCreator.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-b8bbc7f4aca37a50", "name": "Commented-code block (7 lines) in apps/quantmax/src/hooks/useFeed.ts:1", "shortDescription": {"text": "Commented-code block (7 lines) in apps/quantmax/src/hooks/useFeed.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-ee981367f95d7a36", "name": "Commented-code block (8 lines) in apps/quantmax/src/hooks/useMatching.ts:1", "shortDescription": {"text": "Commented-code block (8 lines) in apps/quantmax/src/hooks/useMatching.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-682456007ad13556", "name": "Commented-code block (7 lines) in apps/quantmax/src/hooks/useVideoChat.ts:1", "shortDescription": {"text": "Commented-code block (7 lines) in apps/quantmax/src/hooks/useVideoChat.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-fbfaef72827792b8", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantmax/src/services/api-client.ts:34", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantmax/src/services/api-client.ts:34"}, "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-8a242ef4964762c8", "name": "Legacy-named symbol `startOld` in apps/quantmail/src/components/GitDiff.tsx:17", "shortDescription": {"text": "Legacy-named symbol `startOld` in apps/quantmail/src/components/GitDiff.tsx:17"}, "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-a9fec8cdc5e28f0a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantmail/src/app/api/drive/upload/route.ts:7", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantmail/src/app/api/drive/upload/route.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-9f2a8355ff59fd7d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantmail/src/app/api/drive/files/route.ts:7", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantmail/src/app/api/drive/files/route.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-43988d5fd027a222", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantmail/src/app/api/drive/files/trash/route.ts:7", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantmail/src/app/api/drive/files/trash/route.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-639205cd8d047ce6", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantmail/src/app/api/drive/files/[fileId]/route.ts:11", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantmail/src/app/api/drive/files/[fileId]/route.ts:11"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2377c5f5b0c7e46c", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantmail/src/app/api/drive/files/[fileId]/star/route.ts:10", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantmail/src/app/api/drive/files/[fileId]/star/route.ts:10"}, "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-b4731c3dffad8691", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantmail/src/app/api/drive/files/[fileId]/share/route.ts:11", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantmail/src/app/api/drive/files/[fileId]/share/route.ts:11"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-1ad7ba3ba4c7eca8", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantmail/src/app/api/drive/files/[fileId]/copy/route.ts:10", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantmail/src/app/api/drive/files/[fileId]/copy/route.ts:10"}, "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-59c9dbcc1bc5b07e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantmail/src/app/api/drive/files/[fileId]/versions/route.ts:10", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantmail/src/app/api/drive/files/[fileId]/versions/route.ts:10"}, "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-9a4618a7bace2c5e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantmail/src/app/api/drive/files/[fileId]/versions/[versionId]/resto", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantmail/src/app/api/drive/files/[fileId]/versions/[versionId]/restore/route.ts:10"}, "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-54f281200c209e9b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantmail/src/app/api/drive/files/[fileId]/download/route.ts:10", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantmail/src/app/api/drive/files/[fileId]/download/route.ts:10"}, "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-14106ee61bb1c2a2", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantmail/src/app/api/drive/files/move/route.ts:7", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantmail/src/app/api/drive/files/move/route.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-17dcc2e629ef3cd6", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantmail/src/app/api/drive/search/route.ts:7", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantmail/src/app/api/drive/search/route.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-febad5c6b609c3d7", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantmail/src/app/api/drive/folders/route.ts:7", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantmail/src/app/api/drive/folders/route.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-e266366ca088d585", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantmail/src/hooks/useGit.ts:120", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantmail/src/hooks/useGit.ts:120"}, "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-9baf345b5890201f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantmail/src/hooks/useEmail.ts:94", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantmail/src/hooks/useEmail.ts:94"}, "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-7e6e25ed8be8f9e2", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantmail/src/hooks/useDrive.ts:83", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantmail/src/hooks/useDrive.ts:83"}, "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-1b7a38b87802b021", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantmail/src/services/api-client.ts:586", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantmail/src/services/api-client.ts:586"}, "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-354388294c1d4c90", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantdocs/src/hooks/useDocument.ts:20", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantdocs/src/hooks/useDocument.ts:20"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ea427d25998da492", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantdocs/src/hooks/useDocuments.ts:22", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantdocs/src/hooks/useDocuments.ts:22"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d60479d45d08b863", "name": "Commented-code block (5 lines) in apps/quanttube/backend/services/video-processor.service.ts:3", "shortDescription": {"text": "Commented-code block (5 lines) in apps/quanttube/backend/services/video-processor.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-3b36237ef6a6b204", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantcalendar/src/app/api/events/route.ts:7", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantcalendar/src/app/api/events/route.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-dc4ebf3722cbc29d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantcalendar/src/app/api/calendars/route.ts:6", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantcalendar/src/app/api/calendars/route.ts:6"}, "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-82a8579c3106d706", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantcalendar/src/hooks/useCalendars.ts:17", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantcalendar/src/hooks/useCalendars.ts:17"}, "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-74d8a7c0576b74a9", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantcalendar/src/hooks/useEvents.ts:28", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantcalendar/src/hooks/useEvents.ts:28"}, "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-8799d118c64d39bf", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/admin/src/app/audit/page.tsx:168", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/admin/src/app/audit/page.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-fd7c47624be7d1f1", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantdrive/src/app/api/files/route.ts:7", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantdrive/src/app/api/files/route.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-2e1ea1c536465b20", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantdrive/src/app/api/storage/quota/route.ts:6", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantdrive/src/app/api/storage/quota/route.ts:6"}, "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-d87523ad82404db6", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantdrive/src/hooks/useStorageQuota.ts:13", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantdrive/src/hooks/useStorageQuota.ts:13"}, "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-243e87ffdc2aaeb1", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantdrive/src/hooks/useFiles.ts:26", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantdrive/src/hooks/useFiles.ts:26"}, "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-7309fd563e36023b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantads/src/components/AuctionViewer.tsx:75", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantads/src/components/AuctionViewer.tsx: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-3df9f1f20508831a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantads/src/pages/brand-safety.tsx:276", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantads/src/pages/brand-safety.tsx:276"}, "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-cdaf0aef18f25773", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantads/src/services/api-client.ts:28", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantads/src/services/api-client.ts:28"}, "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-f30723846bb093ba", "name": "Commented-code block (5 lines) in apps/quantube/src/components/MusicPlayer.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in apps/quantube/src/components/MusicPlayer.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d4bf0d1c15b29463", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantube/src/services/api-client.ts:58", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantube/src/services/api-client.ts:58"}, "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-dadb2e74a7c4d5dd", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantmeet/src/app/page.tsx:21", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantmeet/src/app/page.tsx:21"}, "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-1d60d0b566b6613b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantmeet/src/hooks/useParticipants.ts:46", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantmeet/src/hooks/useParticipants.ts:46"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3b5fa67fe41f2bc9", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantmeet/src/hooks/useMeeting.ts:17", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantmeet/src/hooks/useMeeting.ts:17"}, "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-fdc895073602cb92", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantsync/src/components/PostCard.tsx:134", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantsync/src/components/PostCard.tsx:134"}, "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-244445a4ff46872c", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantsync/src/legacy-pages/settings.tsx:152", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantsync/src/legacy-pages/settings.tsx:152"}, "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-5936a359788a4405", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantsync/src/legacy-pages/analytics.tsx:67", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantsync/src/legacy-pages/analytics.tsx:67"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a059d28ea38abef7", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantsync/src/legacy-pages/messages.tsx:117", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantsync/src/legacy-pages/messages.tsx: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-7d43d83f35af9ed8", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantsync/src/legacy-pages/index.tsx:60", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantsync/src/legacy-pages/index.tsx:60"}, "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-a12b95fc9c6b58db", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantsync/src/legacy-pages/compose.tsx:227", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantsync/src/legacy-pages/compose.tsx:227"}, "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-f117db91cf06519c", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantsync/src/legacy-pages/lists.tsx:114", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantsync/src/legacy-pages/lists.tsx:114"}, "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-cd64d3f9c6f3340d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantsync/src/legacy-pages/spaces.tsx:111", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantsync/src/legacy-pages/spaces.tsx:111"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-7136abadba954252", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantsync/src/legacy-pages/trending.tsx:57", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantsync/src/legacy-pages/trending.tsx:57"}, "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-0db4181670a86556", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantsync/src/legacy-pages/search.tsx:117", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantsync/src/legacy-pages/search.tsx: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-9af2210c70a73ba7", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantsync/src/legacy-pages/bookmarks.tsx:48", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantsync/src/legacy-pages/bookmarks.tsx:48"}, "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-564f927ba0db2e2a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantsync/src/legacy-pages/notifications.tsx:48", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantsync/src/legacy-pages/notifications.tsx:48"}, "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-cd4cdd81af3c571b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantsync/src/legacy-pages/communities.tsx:79", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantsync/src/legacy-pages/communities.tsx:79"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-245cdc5a615a9e73", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantsync/src/legacy-pages/anonymous.tsx:51", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantsync/src/legacy-pages/anonymous.tsx:51"}, "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-6bf8f8d548c7626a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantsync/src/legacy-pages/post/[id].tsx:92", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantsync/src/legacy-pages/post/[id].tsx:92"}, "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-547ee586d524afd9", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantsync/src/legacy-pages/profile/[id].tsx:107", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantsync/src/legacy-pages/profile/[id].tsx:107"}, "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-9e8e42269db0df7a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantsync/src/hooks/useSpaces.ts:272", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantsync/src/hooks/useSpaces.ts:272"}, "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-c56f83f40dae3adb", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantsync/src/hooks/useCommunity.ts:133", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantsync/src/hooks/useCommunity.ts:133"}, "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-f2581255fee826ca", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantsync/src/hooks/useFeed.ts:86", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantsync/src/hooks/useFeed.ts:86"}, "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-2466bd2a779139ef", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantsync/src/services/api-client.ts:42", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantsync/src/services/api-client.ts:42"}, "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-b7d04cf4c2579bb7", "name": "Commented-code block (5 lines) in apps/quantai/backend/routes/memory.ts:117", "shortDescription": {"text": "Commented-code block (5 lines) in apps/quantai/backend/routes/memory.ts:117"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-bb40ace6a82d9549", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantai/src/app/api/models/route.ts:6", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantai/src/app/api/models/route.ts:6"}, "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-028461d786a79d3a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantai/src/app/api/models/compare/route.ts:7", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantai/src/app/api/models/compare/route.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-cdf2a60d7f896f21", "name": "Commented-code block (5 lines) in apps/quantai/src/app/api/ai/stream/route.ts:34", "shortDescription": {"text": "Commented-code block (5 lines) in apps/quantai/src/app/api/ai/stream/route.ts:34"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6562cbbcc7c30d48", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantai/src/app/api/analytics/route.ts:6", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantai/src/app/api/analytics/route.ts:6"}, "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-bfd63bed27400fa0", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantai/src/app/api/assistant/personality/route.ts:7", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantai/src/app/api/assistant/personality/route.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-b52664b0f5afec9c", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantai/src/app/api/assistant/conversations/route.ts:6", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantai/src/app/api/assistant/conversations/route.ts:6"}, "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-b8e8ec10b3e49f92", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantai/src/app/api/assistant/conversations/[id]/route.ts:10", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantai/src/app/api/assistant/conversations/[id]/route.ts:10"}, "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-be90d4a2e6548643", "name": "Commented-code block (5 lines) in apps/quantai/src/app/api/assistant/chat/route.ts:43", "shortDescription": {"text": "Commented-code block (5 lines) in apps/quantai/src/app/api/assistant/chat/route.ts:43"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-65b7f710befcf64c", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantai/src/app/api/assistant/chat/route.ts:17", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantai/src/app/api/assistant/chat/route.ts:17"}, "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-674538749694b48a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantai/src/app/api/automations/route.ts:6", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantai/src/app/api/automations/route.ts:6"}, "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-1070cbcfc8a8d358", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantai/src/app/api/automations/[id]/route.ts:10", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantai/src/app/api/automations/[id]/route.ts:10"}, "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-a1bd5503b503dc71", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantai/src/app/api/automations/[id]/execute/route.ts:7", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantai/src/app/api/automations/[id]/execute/route.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-bd169b5baa0ae2f9", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantai/src/app/api/automations/[id]/toggle/route.ts:8", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantai/src/app/api/automations/[id]/toggle/route.ts:8"}, "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-c12491c8a65b21a3", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantai/src/app/api/ecosystem/apps/route.ts:6", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantai/src/app/api/ecosystem/apps/route.ts:6"}, "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-d78e1e94b378178a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantai/src/app/api/ecosystem/apps/[appId]/toggle-ai/route.ts:11", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantai/src/app/api/ecosystem/apps/[appId]/toggle-ai/route.ts:11"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-35254b5770c5f875", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantai/src/app/api/ecosystem/apps/[appId]/config/route.ts:11", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantai/src/app/api/ecosystem/apps/[appId]/config/route.ts:11"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-980b4948d015738f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantai/src/app/api/orchestrate/route.ts:7", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantai/src/app/api/orchestrate/route.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-79c082616a57266d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantai/src/app/api/devices/route.ts:6", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantai/src/app/api/devices/route.ts:6"}, "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-4b8f9acc268bcdc0", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantai/src/app/api/devices/[deviceId]/screen/route.ts:10", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantai/src/app/api/devices/[deviceId]/screen/route.ts:10"}, "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-12e5a56610127e57", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantai/src/app/api/devices/[deviceId]/command/route.ts:11", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantai/src/app/api/devices/[deviceId]/command/route.ts:11"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-7381e263313f5a94", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantai/src/app/api/plugins/route.ts:6", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantai/src/app/api/plugins/route.ts:6"}, "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-1eb95a5573de81a3", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantai/src/app/api/plugins/[id]/install/route.ts:7", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantai/src/app/api/plugins/[id]/install/route.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-659807af240a6f8f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantai/src/app/api/plugins/[id]/uninstall/route.ts:10", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantai/src/app/api/plugins/[id]/uninstall/route.ts:10"}, "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-1769d14702075d3e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantai/src/app/api/training/route.ts:6", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantai/src/app/api/training/route.ts:6"}, "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-0d425a03bf8dc5aa", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantai/src/app/api/training/[id]/route.ts:10", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantai/src/app/api/training/[id]/route.ts:10"}, "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-a6a347ee7f1ffe13", "name": "Commented-code block (6 lines) in apps/quantai/src/pages/translate.tsx:1", "shortDescription": {"text": "Commented-code block (6 lines) in apps/quantai/src/pages/translate.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c0b29d055c5b4b79", "name": "Commented-code block (5 lines) in apps/quantai/src/pages/automation.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in apps/quantai/src/pages/automation.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-20630e9605189581", "name": "Commented-code block (5 lines) in apps/quantai/src/pages/image-gen.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in apps/quantai/src/pages/image-gen.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-43b6733f14773eff", "name": "Commented-code block (5 lines) in apps/quantai/src/pages/ecosystem.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in apps/quantai/src/pages/ecosystem.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a467e98b123f2822", "name": "Commented-code block (5 lines) in apps/quantai/src/pages/personas.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in apps/quantai/src/pages/personas.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0e32fbe16d18d074", "name": "Commented-code block (5 lines) in apps/quantai/src/pages/device.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in apps/quantai/src/pages/device.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-61ea796cbc7231f9", "name": "Commented-code block (5 lines) in apps/quantai/src/pages/plugins.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in apps/quantai/src/pages/plugins.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ba64941bb22ff459", "name": "Commented-code block (5 lines) in apps/quantai/src/pages/models.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in apps/quantai/src/pages/models.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-aaf1387af9d0cc14", "name": "Commented-code block (5 lines) in apps/quantai/src/pages/code.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in apps/quantai/src/pages/code.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fe6887442185ee67", "name": "Commented-code block (5 lines) in apps/quantai/src/pages/memory.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in apps/quantai/src/pages/memory.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9e10f63dd7dba229", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantai/src/hooks/useAIChat.ts:300", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantai/src/hooks/useAIChat.ts:300"}, "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-c30d6dd279007b6d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantai/src/services/api-client.ts:17", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantai/src/services/api-client.ts:17"}, "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-cb3bc35d12bef7f9", "name": "Legacy-named symbol `eleven_multilingual_v2` in packages/quant-live/src/__tests__/elevenlabs-provider.test.ts:101", "shortDescription": {"text": "Legacy-named symbol `eleven_multilingual_v2` in packages/quant-live/src/__tests__/elevenlabs-provider.test.ts:101"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f2d20ebce3ecce60", "name": "Legacy-named symbol `eleven_monolingual_v1` in packages/quant-live/src/tts/elevenlabs-provider.ts:31", "shortDescription": {"text": "Legacy-named symbol `eleven_monolingual_v1` in packages/quant-live/src/tts/elevenlabs-provider.ts:31"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-90e2156883ac66ab", "name": "`fetch()` without try/.catch or AbortSignal \u2014 packages/quant-live/src/daily-brief/app-aggregator.ts:14", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/quant-live/src/daily-brief/app-aggregator.ts: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-a4bc3cff7ce7912f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 packages/quant-live/src/asr/whisper-provider.ts:135", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/quant-live/src/asr/whisper-provider.ts:135"}, "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-32a2ce4dd07e1417", "name": "`fetch()` without try/.catch or AbortSignal \u2014 packages/federation/src/mail-protocols/imap-adapter.ts:103", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/federation/src/mail-protocols/imap-adapter.ts:103"}, "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-e53bebff9b2d3893", "name": "`fetch()` without try/.catch or AbortSignal \u2014 packages/federation/src/mail-protocols/__tests__/imap-adapter.test.ts:44", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/federation/src/mail-protocols/__tests__/imap-adapter.test.ts:44"}, "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-563322eefd618cd6", "name": "`fetch()` without try/.catch or AbortSignal \u2014 packages/maps/src/routing/router.ts:13", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/maps/src/routing/router.ts:13"}, "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-ea6e26d154801aff", "name": "`fetch()` without try/.catch or AbortSignal \u2014 packages/maps/src/geocoding/geocoder.ts:13", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/maps/src/geocoding/geocoder.ts:13"}, "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-8edd3f7d5970083c", "name": "Commented-code block (5 lines) in packages/notifications/src/services/apns-client.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in packages/notifications/src/services/apns-client.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-5cb4c00a5c15cd04", "name": "`fetch()` without try/.catch or AbortSignal \u2014 packages/quant-orchestrator/src/daily-brief.ts:43", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/quant-orchestrator/src/daily-brief.ts:43"}, "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-f40467ef1636a25f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 packages/quant-orchestrator/src/types.ts:80", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/quant-orchestrator/src/types.ts:80"}, "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-14226631b7a7c94a", "name": "Commented-code block (6 lines) in packages/auth/src/providers/phone-provider.ts:229", "shortDescription": {"text": "Commented-code block (6 lines) in packages/auth/src/providers/phone-provider.ts:229"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-282e3190b9112b07", "name": "Commented-code block (5 lines) in packages/auth/src/e2e/signal-session.ts:158", "shortDescription": {"text": "Commented-code block (5 lines) in packages/auth/src/e2e/signal-session.ts:158"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-77bb5fdba4d563c0", "name": "Commented-code block (5 lines) in packages/auth/src/e2e/zk-email/key-discovery.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in packages/auth/src/e2e/zk-email/key-discovery.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-4b6089a969a2d8d0", "name": "Commented-code block (6 lines) in packages/identity-permissions/src/core/memory-manager.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in packages/identity-permissions/src/core/memory-manager.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-52336b600cd6f657", "name": "Commented-code block (5 lines) in packages/identity-permissions/src/core/context-graph.ts:14", "shortDescription": {"text": "Commented-code block (5 lines) in packages/identity-permissions/src/core/context-graph.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-abd6413bb41ee07c", "name": "Commented-code block (7 lines) in packages/identity-permissions/src/core/consent-manager.ts:1", "shortDescription": {"text": "Commented-code block (7 lines) in packages/identity-permissions/src/core/consent-manager.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-fe103b916111f2ed", "name": "Commented-code block (6 lines) in packages/identity-permissions/src/core/rbac.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in packages/identity-permissions/src/core/rbac.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-3193704aaedf2213", "name": "Commented-code block (5 lines) in packages/identity-permissions/src/core/permission-engine.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in packages/identity-permissions/src/core/permission-engine.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-54a0a39791d136c3", "name": "Legacy-named symbol `CSAMGuardLegacy` in packages/moderation/src/index.ts:17", "shortDescription": {"text": "Legacy-named symbol `CSAMGuardLegacy` in packages/moderation/src/index.ts:17"}, "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-30cb469680f71f5b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 packages/moderation/src/services/csam-hash-provider.ts:39", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/moderation/src/services/csam-hash-provider.ts:39"}, "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-b8f0adb0e3c9a348", "name": "Legacy-named symbol `CSAMGuardLegacy` in packages/moderation/src/services/csam-match-service.test.ts:2", "shortDescription": {"text": "Legacy-named symbol `CSAMGuardLegacy` in packages/moderation/src/services/csam-match-service.test.ts:2"}, "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-6695f8efc2fe97ad", "name": "Legacy-named symbol `CSAMGuardLegacy` in packages/moderation/src/services/csam-matcher.ts:11", "shortDescription": {"text": "Legacy-named symbol `CSAMGuardLegacy` in packages/moderation/src/services/csam-matcher.ts:11"}, "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-c613949220ac0173", "name": "Commented-code block (5 lines) in packages/moderation/src/services/csam-matcher.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in packages/moderation/src/services/csam-matcher.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-119a1adfce4e3bdf", "name": "`fetch()` without try/.catch or AbortSignal \u2014 packages/moderation/src/services/csam-matcher.ts:60", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/moderation/src/services/csam-matcher.ts:60"}, "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-dfe7543f1fde95c0", "name": "Commented-code block (5 lines) in packages/performance/src/core/resource-preloader.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in packages/performance/src/core/resource-preloader.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-e0078b10f16e75d7", "name": "Commented-code block (5 lines) in packages/performance/src/core/bundle-analyzer.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in packages/performance/src/core/bundle-analyzer.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-012d5a425eda44e6", "name": "Commented-code block (5 lines) in packages/performance/src/core/memory-leak-detector.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in packages/performance/src/core/memory-leak-detector.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-33e8bfb7c814e32b", "name": "Commented-code block (5 lines) in packages/performance/src/core/service-worker-gen.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in packages/performance/src/core/service-worker-gen.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-fb2987f35cecad5c", "name": "Commented-code block (5 lines) in packages/performance/src/core/code-splitter.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in packages/performance/src/core/code-splitter.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-c85bad583c4b2519", "name": "Commented-code block (5 lines) in packages/performance/src/core/background-sync.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in packages/performance/src/core/background-sync.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-98daaef157b9fd10", "name": "Commented-code block (5 lines) in packages/performance/src/core/web-vitals.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in packages/performance/src/core/web-vitals.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-a867afd19399e52f", "name": "Commented-code block (5 lines) in packages/performance/src/core/virtual-scroll.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in packages/performance/src/core/virtual-scroll.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-32a61e6715c3b959", "name": "`fetch()` without try/.catch or AbortSignal \u2014 packages/error-monitoring/src/transports/sentry-transport.ts:118", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/error-monitoring/src/transports/sentry-transport.ts:118"}, "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-efd11ffcb5c32f2b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 packages/error-monitoring/src/transports/glitchtip-transport.ts:89", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/error-monitoring/src/transports/glitchtip-transport.ts:89"}, "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-539ce4f89ec868c4", "name": "Legacy-named symbol `identify_backup` in packages/observability/src/disaster-recovery.ts:178", "shortDescription": {"text": "Legacy-named symbol `identify_backup` in packages/observability/src/disaster-recovery.ts:178"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b0caf732ae493c5b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 packages/search/src/services/vector-client.ts:110", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/search/src/services/vector-client.ts:110"}, "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-c920282020726e77", "name": "Legacy-named symbol `asset_copy` in packages/ar-lenses/src/__tests__/ethics.test.ts:276", "shortDescription": {"text": "Legacy-named symbol `asset_copy` in packages/ar-lenses/src/__tests__/ethics.test.ts:276"}, "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-58ef8596c562270c", "name": "Commented-code block (6 lines) in packages/social-graph/src/core/community-detector.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in packages/social-graph/src/core/community-detector.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-a203120e77848ec4", "name": "Commented-code block (6 lines) in packages/social-graph/src/core/graph-store.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in packages/social-graph/src/core/graph-store.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-de17575237fe9562", "name": "Commented-code block (6 lines) in packages/social-graph/src/core/follower-manager.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in packages/social-graph/src/core/follower-manager.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-bb17803099c4f92b", "name": "Commented-code block (6 lines) in packages/social-graph/src/core/path-finder.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in packages/social-graph/src/core/path-finder.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-f0cc47729bf671a7", "name": "Commented-code block (6 lines) in packages/social-graph/src/core/influence-scorer.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in packages/social-graph/src/core/influence-scorer.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-bb3cc5113e27d85c", "name": "Legacy-named symbol `isDeprecated` in packages/dev-platform/src/__tests__/dev-platform.test.ts:266", "shortDescription": {"text": "Legacy-named symbol `isDeprecated` in packages/dev-platform/src/__tests__/dev-platform.test.ts:266"}, "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-6a89aff67c8abc38", "name": "Legacy-named symbol `isDeprecated` in packages/dev-platform/src/sdk/sdk-tracker.ts:49", "shortDescription": {"text": "Legacy-named symbol `isDeprecated` in packages/dev-platform/src/sdk/sdk-tracker.ts:49"}, "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-f8068fbd0c159553", "name": "Commented-code block (5 lines) in packages/shared-ui/src/__tests__/a11y.test.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in packages/shared-ui/src/__tests__/a11y.test.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8ae2ecb0c8fdf777", "name": "Commented-code block (6 lines) in packages/payments/src/services/upi-payment.service.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in packages/payments/src/services/upi-payment.service.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-abaf19528fdd65d2", "name": "Commented-code block (6 lines) in packages/payments/src/services/razorpay-gateway.service.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in packages/payments/src/services/razorpay-gateway.service.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-12af1c556a3a0ed7", "name": "Commented-code block (5 lines) in packages/payments/src/services/pay-per-view.service.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in packages/payments/src/services/pay-per-view.service.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-e7f7fc29ea591466", "name": "Commented-code block (5 lines) in packages/payments/src/services/storefront.service.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in packages/payments/src/services/storefront.service.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-bcfb3508a4b32e32", "name": "Commented-code block (5 lines) in packages/payments/src/services/__tests__/creator-economy-e2e.test.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in packages/payments/src/services/__tests__/creator-economy-e2e.test.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-2ffd08357bb85ea2", "name": "Commented-code block (5 lines) in packages/server/src/middleware/auth.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in packages/server/src/middleware/auth.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-0bafa7dcdf0b98be", "name": "Legacy-named symbol `recommender_v1` in packages/ml-runtime/src/__tests__/model-loader.test.ts:48", "shortDescription": {"text": "Legacy-named symbol `recommender_v1` in packages/ml-runtime/src/__tests__/model-loader.test.ts:48"}, "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-4f62e0ce789e7c7f", "name": "Commented-code block (5 lines) in packages/privacy-ads/src/services/privacy-enforcer.service.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in packages/privacy-ads/src/services/privacy-enforcer.service.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-eb63bee69e738b87", "name": "Commented-code block (5 lines) in packages/privacy-ads/src/services/contextual-targeting.service.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in packages/privacy-ads/src/services/contextual-targeting.service.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-128d5b3cf7c6e312", "name": "Commented-code block (5 lines) in packages/privacy-ads/src/services/on-device-ranker.service.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in packages/privacy-ads/src/services/on-device-ranker.service.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-77c04e3621332da1", "name": "`fetch()` without try/.catch or AbortSignal \u2014 packages/quant-tools/src/tools/studio-tools.ts:132", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/quant-tools/src/tools/studio-tools.ts:132"}, "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-b1411a7d17854953", "name": "`fetch()` without try/.catch or AbortSignal \u2014 services/moderation-worker/src/main.ts:104", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 services/moderation-worker/src/main.ts:104"}, "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-9b45ff394a7cbb31", "name": "`fetch()` without try/.catch or AbortSignal \u2014 services/moderation-worker/src/handlers/image-handler.ts:18", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 services/moderation-worker/src/handlers/image-handler.ts:18"}, "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-b0b7578dd2a289b6", "name": "26 env vars used in code but missing from .env.example", "shortDescription": {"text": "26 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `ADMIN_SECRET`, `BASE_URL`, `CDN_API_KEY`, `CDN_ZONE_ID`, `CI`, `JWT_REFRESH_SECRET`, `NEXT_PUBLIC_API_URL`, `NEXT_PUBLIC_LIVEKIT_URL` + 18 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-33a6b62e30ce7ab4", "name": "Near-duplicate function bodies in 6 places", "shortDescription": {"text": "Near-duplicate function bodies in 6 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nscripts/ml/train_mmoe.py:forward, scripts/ml/train_mmoe.py:forward, scripts/ml/train_mmoe.py:forward, scripts/ml/train_mmoe.py:forward\n\nThis is *the* AI-coder failure mode (4\u00d7 more duplication in vibe-coded repos \u2014 see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-be46ea126aa5d8dc", "name": "Near-duplicate function bodies in 3 places", "shortDescription": {"text": "Near-duplicate function bodies in 3 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nscripts/ml/train_two_tower.py:forward, scripts/ml/train_two_tower.py:forward, scripts/ml/train_two_tower.py:forward\n\nThis is *the* AI-coder failure mode (4\u00d7 more duplication in vibe-coded repos \u2014 see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1fd0e1c4ff293af8", "name": "Dangling fetch: GET /api/analytics/dashboard?${params.toString()} (apps/quantedits/src/hooks/useAnalytics.ts:128)", "shortDescription": {"text": "Dangling fetch: GET /api/analytics/dashboard?${params.toString()} (apps/quantedits/src/hooks/useAnalytics.ts:128)"}, "fullDescription": {"text": "`apps/quantedits/src/hooks/useAnalytics.ts:128` calls `GET /api/analytics/dashboard?${params.toString()}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/analytics/dashboard`\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-b9dbe63c166ecb7d", "name": "Dangling fetch: GET /api/analytics/export?${params.toString()} (apps/quantedits/src/hooks/useAnalytics.ts:205)", "shortDescription": {"text": "Dangling fetch: GET /api/analytics/export?${params.toString()} (apps/quantedits/src/hooks/useAnalytics.ts:205)"}, "fullDescription": {"text": "`apps/quantedits/src/hooks/useAnalytics.ts:205` calls `GET /api/analytics/export?${params.toString()}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/analytics/export`\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-2299259eaca124c8", "name": "Dangling fetch: GET /api/groups/${groupId} (apps/quantchat/src/components/GroupChat.tsx:72)", "shortDescription": {"text": "Dangling fetch: GET /api/groups/${groupId} (apps/quantchat/src/components/GroupChat.tsx:72)"}, "fullDescription": {"text": "`apps/quantchat/src/components/GroupChat.tsx:72` calls `GET /api/groups/${groupId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/groups/<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-3fab0e3afdb479d5", "name": "Dangling fetch: POST /api/groups/${groupId}/members (apps/quantchat/src/components/GroupChat.tsx:97)", "shortDescription": {"text": "Dangling fetch: POST /api/groups/${groupId}/members (apps/quantchat/src/components/GroupChat.tsx:97)"}, "fullDescription": {"text": "`apps/quantchat/src/components/GroupChat.tsx:97` calls `POST /api/groups/${groupId}/members` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/groups/<p>/members`\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-c99bf0c41b1c3cd4", "name": "Dangling fetch: DELETE /api/groups/${groupId}/members/${userId} (apps/quantchat/src/components/GroupChat.tsx:116)", "shortDescription": {"text": "Dangling fetch: DELETE /api/groups/${groupId}/members/${userId} (apps/quantchat/src/components/GroupChat.tsx:116)"}, "fullDescription": {"text": "`apps/quantchat/src/components/GroupChat.tsx:116` calls `DELETE /api/groups/${groupId}/members/${userId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/groups/<p>/members/<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-cc10b751c9d1d9e8", "name": "Dangling fetch: PUT /api/groups/${groupId}/members/${userId}/role (apps/quantchat/src/components/GroupChat.tsx:131)", "shortDescription": {"text": "Dangling fetch: PUT /api/groups/${groupId}/members/${userId}/role (apps/quantchat/src/components/GroupChat.tsx:131)"}, "fullDescription": {"text": "`apps/quantchat/src/components/GroupChat.tsx:131` calls `PUT /api/groups/${groupId}/members/${userId}/role` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/groups/<p>/members/<p>/role`\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-efa6d6e5490840b5", "name": "Dangling fetch: POST /api/groups/${groupId}/polls (apps/quantchat/src/components/GroupChat.tsx:151)", "shortDescription": {"text": "Dangling fetch: POST /api/groups/${groupId}/polls (apps/quantchat/src/components/GroupChat.tsx:151)"}, "fullDescription": {"text": "`apps/quantchat/src/components/GroupChat.tsx:151` calls `POST /api/groups/${groupId}/polls` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/groups/<p>/polls`\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-1fe5dc64075985f5", "name": "Dangling fetch: POST /api/groups/${groupId}/polls/${pollId}/vote (apps/quantchat/src/components/GroupChat.tsx:177)", "shortDescription": {"text": "Dangling fetch: POST /api/groups/${groupId}/polls/${pollId}/vote (apps/quantchat/src/components/GroupChat.tsx:177)"}, "fullDescription": {"text": "`apps/quantchat/src/components/GroupChat.tsx:177` calls `POST /api/groups/${groupId}/polls/${pollId}/vote` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/groups/<p>/polls/<p>/vote`\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-8765b83696c8c437", "name": "Dangling fetch: DELETE /api/groups/${groupId}/pinned/${messageId} (apps/quantchat/src/components/GroupChat.tsx:209)", "shortDescription": {"text": "Dangling fetch: DELETE /api/groups/${groupId}/pinned/${messageId} (apps/quantchat/src/components/GroupChat.tsx:209)"}, "fullDescription": {"text": "`apps/quantchat/src/components/GroupChat.tsx:209` calls `DELETE /api/groups/${groupId}/pinned/${messageId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/groups/<p>/pinned/<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-1cf67aa637784f48", "name": "Dangling fetch: PUT /api/groups/${groupId}/settings (apps/quantchat/src/components/GroupChat.tsx:237)", "shortDescription": {"text": "Dangling fetch: PUT /api/groups/${groupId}/settings (apps/quantchat/src/components/GroupChat.tsx:237)"}, "fullDescription": {"text": "`apps/quantchat/src/components/GroupChat.tsx:237` calls `PUT /api/groups/${groupId}/settings` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/groups/<p>/settings`\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-0903f9262ee2e40f", "name": "Dangling fetch: GET /api/encryption/status/${conversationId} (apps/quantchat/src/components/E2EEncryption.tsx:43)", "shortDescription": {"text": "Dangling fetch: GET /api/encryption/status/${conversationId} (apps/quantchat/src/components/E2EEncryption.tsx:43)"}, "fullDescription": {"text": "`apps/quantchat/src/components/E2EEncryption.tsx:43` calls `GET /api/encryption/status/${conversationId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/encryption/status/<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-8e8408289e615cce", "name": "Dangling fetch: POST /api/encryption/verify/${conversationId} (apps/quantchat/src/components/E2EEncryption.tsx:65)", "shortDescription": {"text": "Dangling fetch: POST /api/encryption/verify/${conversationId} (apps/quantchat/src/components/E2EEncryption.tsx:65)"}, "fullDescription": {"text": "`apps/quantchat/src/components/E2EEncryption.tsx:65` calls `POST /api/encryption/verify/${conversationId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/encryption/verify/<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-764a7030ff5ec63d", "name": "Dangling fetch: GET /api/friends/suggestions?limit=${maxSuggestions} (apps/quantchat/src/components/QuickAdd.tsx:36)", "shortDescription": {"text": "Dangling fetch: GET /api/friends/suggestions?limit=${maxSuggestions} (apps/quantchat/src/components/QuickAdd.tsx:36)"}, "fullDescription": {"text": "`apps/quantchat/src/components/QuickAdd.tsx:36` calls `GET /api/friends/suggestions?limit=${maxSuggestions}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/friends/suggestions`\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-79e4abee13c699d0", "name": "Dangling fetch: POST /api/friends/add (apps/quantchat/src/components/QuickAdd.tsx:58)", "shortDescription": {"text": "Dangling fetch: POST /api/friends/add (apps/quantchat/src/components/QuickAdd.tsx:58)"}, "fullDescription": {"text": "`apps/quantchat/src/components/QuickAdd.tsx:58` calls `POST /api/friends/add` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/friends/add`\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-061123ec7d681cb8", "name": "Dangling fetch: POST /api/friends/suggestions/${friendId}/dismiss (apps/quantchat/src/components/QuickAdd.tsx:81)", "shortDescription": {"text": "Dangling fetch: POST /api/friends/suggestions/${friendId}/dismiss (apps/quantchat/src/components/QuickAdd.tsx:81)"}, "fullDescription": {"text": "`apps/quantchat/src/components/QuickAdd.tsx:81` calls `POST /api/friends/suggestions/${friendId}/dismiss` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/friends/suggestions/<p>/dismiss`\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-53050f1557dddfb4", "name": "Dangling fetch: GET /api/settings (apps/quantchat/src/pages/settings.tsx:163)", "shortDescription": {"text": "Dangling fetch: GET /api/settings (apps/quantchat/src/pages/settings.tsx:163)"}, "fullDescription": {"text": "`apps/quantchat/src/pages/settings.tsx:163` calls `GET /api/settings` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/settings`\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-ca5ebe7e770204de", "name": "Dangling fetch: PUT /api/settings (apps/quantchat/src/pages/settings.tsx:187)", "shortDescription": {"text": "Dangling fetch: PUT /api/settings (apps/quantchat/src/pages/settings.tsx:187)"}, "fullDescription": {"text": "`apps/quantchat/src/pages/settings.tsx:187` calls `PUT /api/settings` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/settings`\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-af7fd8d281a6a235", "name": "Dangling fetch: DELETE /api/settings/blocked/${userId} (apps/quantchat/src/pages/settings.tsx:203)", "shortDescription": {"text": "Dangling fetch: DELETE /api/settings/blocked/${userId} (apps/quantchat/src/pages/settings.tsx:203)"}, "fullDescription": {"text": "`apps/quantchat/src/pages/settings.tsx:203` calls `DELETE /api/settings/blocked/${userId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/settings/blocked/<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-d206108e27368f3c", "name": "Dangling fetch: POST /api/settings/export (apps/quantchat/src/pages/settings.tsx:220)", "shortDescription": {"text": "Dangling fetch: POST /api/settings/export (apps/quantchat/src/pages/settings.tsx:220)"}, "fullDescription": {"text": "`apps/quantchat/src/pages/settings.tsx:220` calls `POST /api/settings/export` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/settings/export`\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-8bab1e72b9bb10e1", "name": "Dangling fetch: DELETE /api/settings/account (apps/quantchat/src/pages/settings.tsx:244)", "shortDescription": {"text": "Dangling fetch: DELETE /api/settings/account (apps/quantchat/src/pages/settings.tsx:244)"}, "fullDescription": {"text": "`apps/quantchat/src/pages/settings.tsx:244` calls `DELETE /api/settings/account` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/settings/account`\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-d72d754f708ae13c", "name": "Dangling fetch: GET /api/spotlight/feed?limit=20 (apps/quantchat/src/pages/spotlight.tsx:58)", "shortDescription": {"text": "Dangling fetch: GET /api/spotlight/feed?limit=20 (apps/quantchat/src/pages/spotlight.tsx:58)"}, "fullDescription": {"text": "`apps/quantchat/src/pages/spotlight.tsx:58` calls `GET /api/spotlight/feed?limit=20` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/spotlight/feed`\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-5686361ffb06db99", "name": "Dangling fetch: POST /api/spotlight/${currentVideo.id}/like (apps/quantchat/src/pages/spotlight.tsx:119)", "shortDescription": {"text": "Dangling fetch: POST /api/spotlight/${currentVideo.id}/like (apps/quantchat/src/pages/spotlight.tsx:119)"}, "fullDescription": {"text": "`apps/quantchat/src/pages/spotlight.tsx:119` calls `POST /api/spotlight/${currentVideo.id}/like` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/spotlight/<p>/like`\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-dfa3cfa4a91e507e", "name": "Dangling fetch: POST /api/spotlight/${currentVideo.id}/bookmark (apps/quantchat/src/pages/spotlight.tsx:134)", "shortDescription": {"text": "Dangling fetch: POST /api/spotlight/${currentVideo.id}/bookmark (apps/quantchat/src/pages/spotlight.tsx:134)"}, "fullDescription": {"text": "`apps/quantchat/src/pages/spotlight.tsx:134` calls `POST /api/spotlight/${currentVideo.id}/bookmark` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/spotlight/<p>/bookmark`\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-6a15e19bd34f2a6d", "name": "Dangling fetch: POST /api/users/${currentVideo.creator.id}/follow (apps/quantchat/src/pages/spotlight.tsx:153)", "shortDescription": {"text": "Dangling fetch: POST /api/users/${currentVideo.creator.id}/follow (apps/quantchat/src/pages/spotlight.tsx:153)"}, "fullDescription": {"text": "`apps/quantchat/src/pages/spotlight.tsx:153` calls `POST /api/users/${currentVideo.creator.id}/follow` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/users/<p>/follow`\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-62bb91ee5b70629e", "name": "Dangling fetch: GET /api/spotlight/${currentVideo.id}/comments (apps/quantchat/src/pages/spotlight.tsx:178)", "shortDescription": {"text": "Dangling fetch: GET /api/spotlight/${currentVideo.id}/comments (apps/quantchat/src/pages/spotlight.tsx:178)"}, "fullDescription": {"text": "`apps/quantchat/src/pages/spotlight.tsx:178` calls `GET /api/spotlight/${currentVideo.id}/comments` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/spotlight/<p>/comments`\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-43bb01f6fcfde243", "name": "Dangling fetch: POST /api/spotlight/${currentVideo.id}/comments (apps/quantchat/src/pages/spotlight.tsx:195)", "shortDescription": {"text": "Dangling fetch: POST /api/spotlight/${currentVideo.id}/comments (apps/quantchat/src/pages/spotlight.tsx:195)"}, "fullDescription": {"text": "`apps/quantchat/src/pages/spotlight.tsx:195` calls `POST /api/spotlight/${currentVideo.id}/comments` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/spotlight/<p>/comments`\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-a7841f6847e3df16", "name": "Dangling fetch: POST /api/memories/batch/delete (apps/quantchat/src/pages/memories.tsx:105)", "shortDescription": {"text": "Dangling fetch: POST /api/memories/batch/delete (apps/quantchat/src/pages/memories.tsx:105)"}, "fullDescription": {"text": "`apps/quantchat/src/pages/memories.tsx:105` calls `POST /api/memories/batch/delete` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/memories/batch/delete`\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-7303e5ba21e01c2e", "name": "Dangling fetch: POST /api/memories/export (apps/quantchat/src/pages/memories.tsx:121)", "shortDescription": {"text": "Dangling fetch: POST /api/memories/export (apps/quantchat/src/pages/memories.tsx:121)"}, "fullDescription": {"text": "`apps/quantchat/src/pages/memories.tsx:121` calls `POST /api/memories/export` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/memories/export`\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-759c88acdd0ed7cd", "name": "Dangling fetch: PUT /api/memories/${id}/star (apps/quantchat/src/pages/memories.tsx:144)", "shortDescription": {"text": "Dangling fetch: PUT /api/memories/${id}/star (apps/quantchat/src/pages/memories.tsx:144)"}, "fullDescription": {"text": "`apps/quantchat/src/pages/memories.tsx:144` calls `PUT /api/memories/${id}/star` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/memories/<p>/star`\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-67641d63db82a993", "name": "Dangling fetch: POST /api/memories/auto-story (apps/quantchat/src/pages/memories.tsx:156)", "shortDescription": {"text": "Dangling fetch: POST /api/memories/auto-story (apps/quantchat/src/pages/memories.tsx:156)"}, "fullDescription": {"text": "`apps/quantchat/src/pages/memories.tsx:156` calls `POST /api/memories/auto-story` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/memories/auto-story`\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-d91e0db84ab6840a", "name": "Dangling fetch: GET /api/bitmoji/current (apps/quantchat/src/pages/bitmoji.tsx:142)", "shortDescription": {"text": "Dangling fetch: GET /api/bitmoji/current (apps/quantchat/src/pages/bitmoji.tsx:142)"}, "fullDescription": {"text": "`apps/quantchat/src/pages/bitmoji.tsx:142` calls `GET /api/bitmoji/current` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/bitmoji/current`\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-879e7db409fdc84e", "name": "Dangling fetch: POST /api/bitmoji/save (apps/quantchat/src/pages/bitmoji.tsx:209)", "shortDescription": {"text": "Dangling fetch: POST /api/bitmoji/save (apps/quantchat/src/pages/bitmoji.tsx:209)"}, "fullDescription": {"text": "`apps/quantchat/src/pages/bitmoji.tsx:209` calls `POST /api/bitmoji/save` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/bitmoji/save`\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-2d0f8cd1b41a1330", "name": "Dangling fetch: GET /api/stories/feed (apps/quantchat/src/hooks/useStories.ts:71)", "shortDescription": {"text": "Dangling fetch: GET /api/stories/feed (apps/quantchat/src/hooks/useStories.ts:71)"}, "fullDescription": {"text": "`apps/quantchat/src/hooks/useStories.ts:71` calls `GET /api/stories/feed` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/stories/feed`\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-001f7c6187ea1750", "name": "Dangling fetch: POST /api/stories/${storyId}/view (apps/quantchat/src/hooks/useStories.ts:101)", "shortDescription": {"text": "Dangling fetch: POST /api/stories/${storyId}/view (apps/quantchat/src/hooks/useStories.ts:101)"}, "fullDescription": {"text": "`apps/quantchat/src/hooks/useStories.ts:101` calls `POST /api/stories/${storyId}/view` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/stories/<p>/view`\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-19673fbc2bc0907e", "name": "Dangling fetch: POST /api/stories/${storyId}/reply (apps/quantchat/src/hooks/useStories.ts:139)", "shortDescription": {"text": "Dangling fetch: POST /api/stories/${storyId}/reply (apps/quantchat/src/hooks/useStories.ts:139)"}, "fullDescription": {"text": "`apps/quantchat/src/hooks/useStories.ts:139` calls `POST /api/stories/${storyId}/reply` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/stories/<p>/reply`\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-179e0f6dd5a684f3", "name": "Dangling fetch: GET /api/stories/${storyId}/viewers (apps/quantchat/src/hooks/useStories.ts:153)", "shortDescription": {"text": "Dangling fetch: GET /api/stories/${storyId}/viewers (apps/quantchat/src/hooks/useStories.ts:153)"}, "fullDescription": {"text": "`apps/quantchat/src/hooks/useStories.ts:153` calls `GET /api/stories/${storyId}/viewers` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/stories/<p>/viewers`\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-79c2406a40aa57bf", "name": "Dangling fetch: DELETE /api/stories/${storyId} (apps/quantchat/src/hooks/useStories.ts:168)", "shortDescription": {"text": "Dangling fetch: DELETE /api/stories/${storyId} (apps/quantchat/src/hooks/useStories.ts:168)"}, "fullDescription": {"text": "`apps/quantchat/src/hooks/useStories.ts:168` calls `DELETE /api/stories/${storyId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/stories/<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-46d476add8876adb", "name": "Dangling fetch: GET /api/messages/${conversationId}?page=${page}&limit=50 (apps/quantchat/src/hooks/useChat.ts:140)", "shortDescription": {"text": "Dangling fetch: GET /api/messages/${conversationId}?page=${page}&limit=50 (apps/quantchat/src/hooks/useChat.ts:140)"}, "fullDescription": {"text": "`apps/quantchat/src/hooks/useChat.ts:140` calls `GET /api/messages/${conversationId}?page=${page}&limit=50` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/messages/<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-1377ab8894435e69", "name": "Dangling fetch: POST /api/messages/${conversationId} (apps/quantchat/src/hooks/useChat.ts:187)", "shortDescription": {"text": "Dangling fetch: POST /api/messages/${conversationId} (apps/quantchat/src/hooks/useChat.ts:187)"}, "fullDescription": {"text": "`apps/quantchat/src/hooks/useChat.ts:187` calls `POST /api/messages/${conversationId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/messages/<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-d6be448af52e475a", "name": "Dangling fetch: GET /api/analytics/dashboard?${params.toString()} (apps/quantneon/src/hooks/useAnalytics.ts:128)", "shortDescription": {"text": "Dangling fetch: GET /api/analytics/dashboard?${params.toString()} (apps/quantneon/src/hooks/useAnalytics.ts:128)"}, "fullDescription": {"text": "`apps/quantneon/src/hooks/useAnalytics.ts:128` calls `GET /api/analytics/dashboard?${params.toString()}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/analytics/dashboard`\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-e5b1c5b0b92ec7a3", "name": "Dangling fetch: GET /api/analytics/export?${params.toString()} (apps/quantneon/src/hooks/useAnalytics.ts:205)", "shortDescription": {"text": "Dangling fetch: GET /api/analytics/export?${params.toString()} (apps/quantneon/src/hooks/useAnalytics.ts:205)"}, "fullDescription": {"text": "`apps/quantneon/src/hooks/useAnalytics.ts:205` calls `GET /api/analytics/export?${params.toString()}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/analytics/export`\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-d627cc82a7717028", "name": "Dangling fetch: POST /api/posts (apps/quantneon/src/services/api-client.ts:48)", "shortDescription": {"text": "Dangling fetch: POST /api/posts (apps/quantneon/src/services/api-client.ts:48)"}, "fullDescription": {"text": "`apps/quantneon/src/services/api-client.ts:48` calls `POST /api/posts` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/posts`\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-1fa2de197d1152c6", "name": "Dangling fetch: GET /api/posts/feed (apps/quantneon/src/services/api-client.ts:51)", "shortDescription": {"text": "Dangling fetch: GET /api/posts/feed (apps/quantneon/src/services/api-client.ts:51)"}, "fullDescription": {"text": "`apps/quantneon/src/services/api-client.ts:51` calls `GET /api/posts/feed` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/posts/feed`\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-191f0b6cde15a00a", "name": "Dangling fetch: GET /api/posts/${id} (apps/quantneon/src/services/api-client.ts:56)", "shortDescription": {"text": "Dangling fetch: GET /api/posts/${id} (apps/quantneon/src/services/api-client.ts:56)"}, "fullDescription": {"text": "`apps/quantneon/src/services/api-client.ts:56` calls `GET /api/posts/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/posts/<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-201739fb53aa6bd5", "name": "Dangling fetch: POST /api/posts/${id}/like (apps/quantneon/src/services/api-client.ts:59)", "shortDescription": {"text": "Dangling fetch: POST /api/posts/${id}/like (apps/quantneon/src/services/api-client.ts:59)"}, "fullDescription": {"text": "`apps/quantneon/src/services/api-client.ts:59` calls `POST /api/posts/${id}/like` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/posts/<p>/like`\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-e81e0e0d10d5b75d", "name": "Dangling fetch: POST /api/posts/${id}/comment (apps/quantneon/src/services/api-client.ts:62)", "shortDescription": {"text": "Dangling fetch: POST /api/posts/${id}/comment (apps/quantneon/src/services/api-client.ts:62)"}, "fullDescription": {"text": "`apps/quantneon/src/services/api-client.ts:62` calls `POST /api/posts/${id}/comment` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/posts/<p>/comment`\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-8c923688819d8f92", "name": "Dangling fetch: GET /api/reels/feed (apps/quantneon/src/services/api-client.ts:67)", "shortDescription": {"text": "Dangling fetch: GET /api/reels/feed (apps/quantneon/src/services/api-client.ts:67)"}, "fullDescription": {"text": "`apps/quantneon/src/services/api-client.ts:67` calls `GET /api/reels/feed` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/reels/feed`\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-7d4a05c1ccd10240", "name": "Dangling fetch: POST /api/reels (apps/quantneon/src/services/api-client.ts:70)", "shortDescription": {"text": "Dangling fetch: POST /api/reels (apps/quantneon/src/services/api-client.ts:70)"}, "fullDescription": {"text": "`apps/quantneon/src/services/api-client.ts:70` calls `POST /api/reels` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/reels`\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-117a5bf8b3dfb062", "name": "Dangling fetch: POST /api/reels/${id}/like (apps/quantneon/src/services/api-client.ts:73)", "shortDescription": {"text": "Dangling fetch: POST /api/reels/${id}/like (apps/quantneon/src/services/api-client.ts:73)"}, "fullDescription": {"text": "`apps/quantneon/src/services/api-client.ts:73` calls `POST /api/reels/${id}/like` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/reels/<p>/like`\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-7b7d75602c16bb77", "name": "Dangling fetch: GET /api/stories/feed (apps/quantneon/src/services/api-client.ts:81)", "shortDescription": {"text": "Dangling fetch: GET /api/stories/feed (apps/quantneon/src/services/api-client.ts:81)"}, "fullDescription": {"text": "`apps/quantneon/src/services/api-client.ts:81` calls `GET /api/stories/feed` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/stories/feed`\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-5bbc5d4143d18d13", "name": "Dangling fetch: POST /api/stories/${id}/view (apps/quantneon/src/services/api-client.ts:84)", "shortDescription": {"text": "Dangling fetch: POST /api/stories/${id}/view (apps/quantneon/src/services/api-client.ts:84)"}, "fullDescription": {"text": "`apps/quantneon/src/services/api-client.ts:84` calls `POST /api/stories/${id}/view` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/stories/<p>/view`\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-5c137e4e5532955f", "name": "Dangling fetch: GET /api/profiles/${id} (apps/quantneon/src/services/api-client.ts:89)", "shortDescription": {"text": "Dangling fetch: GET /api/profiles/${id} (apps/quantneon/src/services/api-client.ts:89)"}, "fullDescription": {"text": "`apps/quantneon/src/services/api-client.ts:89` calls `GET /api/profiles/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/profiles/<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-57155b5a3d53a4e0", "name": "Dangling fetch: POST /api/profiles/${id}/follow (apps/quantneon/src/services/api-client.ts:92)", "shortDescription": {"text": "Dangling fetch: POST /api/profiles/${id}/follow (apps/quantneon/src/services/api-client.ts:92)"}, "fullDescription": {"text": "`apps/quantneon/src/services/api-client.ts:92` calls `POST /api/profiles/${id}/follow` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/profiles/<p>/follow`\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-ac03c8944870672d", "name": "Dangling fetch: DELETE /api/profiles/${id}/follow (apps/quantneon/src/services/api-client.ts:95)", "shortDescription": {"text": "Dangling fetch: DELETE /api/profiles/${id}/follow (apps/quantneon/src/services/api-client.ts:95)"}, "fullDescription": {"text": "`apps/quantneon/src/services/api-client.ts:95` calls `DELETE /api/profiles/${id}/follow` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/profiles/<p>/follow`\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-b7a9f5b2d3e4deb5", "name": "Dangling fetch: GET /api/games (apps/quantneon/src/services/api-client.ts:100)", "shortDescription": {"text": "Dangling fetch: GET /api/games (apps/quantneon/src/services/api-client.ts:100)"}, "fullDescription": {"text": "`apps/quantneon/src/services/api-client.ts:100` calls `GET /api/games` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/games`\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-a351454f3bff2f47", "name": "Dangling fetch: POST /api/games/${id}/start (apps/quantneon/src/services/api-client.ts:103)", "shortDescription": {"text": "Dangling fetch: POST /api/games/${id}/start (apps/quantneon/src/services/api-client.ts:103)"}, "fullDescription": {"text": "`apps/quantneon/src/services/api-client.ts:103` calls `POST /api/games/${id}/start` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/games/<p>/start`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a4e34d00487a6c76", "name": "Dangling fetch: POST /api/games/${id}/action (apps/quantneon/src/services/api-client.ts:106)", "shortDescription": {"text": "Dangling fetch: POST /api/games/${id}/action (apps/quantneon/src/services/api-client.ts:106)"}, "fullDescription": {"text": "`apps/quantneon/src/services/api-client.ts:106` calls `POST /api/games/${id}/action` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/games/<p>/action`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5ca541989a4c5891", "name": "Dangling fetch: GET /api/shopping/products (apps/quantneon/src/services/api-client.ts:111)", "shortDescription": {"text": "Dangling fetch: GET /api/shopping/products (apps/quantneon/src/services/api-client.ts:111)"}, "fullDescription": {"text": "`apps/quantneon/src/services/api-client.ts:111` calls `GET /api/shopping/products` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/shopping/products`\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-9a86f391450657fb", "name": "Dangling fetch: POST /api/shopping/cart (apps/quantneon/src/services/api-client.ts:114)", "shortDescription": {"text": "Dangling fetch: POST /api/shopping/cart (apps/quantneon/src/services/api-client.ts:114)"}, "fullDescription": {"text": "`apps/quantneon/src/services/api-client.ts:114` calls `POST /api/shopping/cart` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/shopping/cart`\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-aa6959ae8aac0215", "name": "Dangling fetch: POST /api/shopping/checkout (apps/quantneon/src/services/api-client.ts:117)", "shortDescription": {"text": "Dangling fetch: POST /api/shopping/checkout (apps/quantneon/src/services/api-client.ts:117)"}, "fullDescription": {"text": "`apps/quantneon/src/services/api-client.ts:117` calls `POST /api/shopping/checkout` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/shopping/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-dd9129bb48ff6408", "name": "Dangling fetch: GET /api/ar/filters (apps/quantneon/src/services/api-client.ts:122)", "shortDescription": {"text": "Dangling fetch: GET /api/ar/filters (apps/quantneon/src/services/api-client.ts:122)"}, "fullDescription": {"text": "`apps/quantneon/src/services/api-client.ts:122` calls `GET /api/ar/filters` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/ar/filters`\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-0349cabad8cd65c5", "name": "Dangling fetch: POST /api/ar/process (apps/quantneon/src/services/api-client.ts:125)", "shortDescription": {"text": "Dangling fetch: POST /api/ar/process (apps/quantneon/src/services/api-client.ts:125)"}, "fullDescription": {"text": "`apps/quantneon/src/services/api-client.ts:125` calls `POST /api/ar/process` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/ar/process`\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-daa1631c58aa12dd", "name": "Dangling fetch: GET /api/explore (apps/quantneon/src/services/api-client.ts:130)", "shortDescription": {"text": "Dangling fetch: GET /api/explore (apps/quantneon/src/services/api-client.ts:130)"}, "fullDescription": {"text": "`apps/quantneon/src/services/api-client.ts:130` calls `GET /api/explore` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/explore`\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-c919f6c3db70e9d1", "name": "Dangling fetch: GET /api/explore/search (apps/quantneon/src/services/api-client.ts:133)", "shortDescription": {"text": "Dangling fetch: GET /api/explore/search (apps/quantneon/src/services/api-client.ts:133)"}, "fullDescription": {"text": "`apps/quantneon/src/services/api-client.ts:133` calls `GET /api/explore/search` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/explore/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-6ded0b067d6cf8ab", "name": "Dangling fetch: POST /api/ai/hashtags/suggest (apps/quantneon/src/services/api-client.ts:138)", "shortDescription": {"text": "Dangling fetch: POST /api/ai/hashtags/suggest (apps/quantneon/src/services/api-client.ts:138)"}, "fullDescription": {"text": "`apps/quantneon/src/services/api-client.ts:138` calls `POST /api/ai/hashtags/suggest` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/ai/hashtags/suggest`\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-770c4df178370741", "name": "Dangling fetch: POST /api/ai/caption/generate (apps/quantneon/src/services/api-client.ts:141)", "shortDescription": {"text": "Dangling fetch: POST /api/ai/caption/generate (apps/quantneon/src/services/api-client.ts:141)"}, "fullDescription": {"text": "`apps/quantneon/src/services/api-client.ts:141` calls `POST /api/ai/caption/generate` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/ai/caption/generate`\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-aa46e7a688d61104", "name": "Dangling fetch: GET /api/analytics/dashboard?${params.toString()} (apps/quantmax/src/hooks/useAnalytics.ts:128)", "shortDescription": {"text": "Dangling fetch: GET /api/analytics/dashboard?${params.toString()} (apps/quantmax/src/hooks/useAnalytics.ts:128)"}, "fullDescription": {"text": "`apps/quantmax/src/hooks/useAnalytics.ts:128` calls `GET /api/analytics/dashboard?${params.toString()}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/analytics/dashboard`\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-5ebb4b74dac7f364", "name": "Dangling fetch: GET /api/analytics/export?${params.toString()} (apps/quantmax/src/hooks/useAnalytics.ts:205)", "shortDescription": {"text": "Dangling fetch: GET /api/analytics/export?${params.toString()} (apps/quantmax/src/hooks/useAnalytics.ts:205)"}, "fullDescription": {"text": "`apps/quantmax/src/hooks/useAnalytics.ts:205` calls `GET /api/analytics/export?${params.toString()}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/analytics/export`\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-aad7154ac2f8febd", "name": "Dangling fetch: GET /api/docs/${id} (apps/quantdocs/src/hooks/useDocument.ts:20)", "shortDescription": {"text": "Dangling fetch: GET /api/docs/${id} (apps/quantdocs/src/hooks/useDocument.ts:20)"}, "fullDescription": {"text": "`apps/quantdocs/src/hooks/useDocument.ts:20` calls `GET /api/docs/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/docs/<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-eb7e54671f7082c4", "name": "Dangling fetch: POST /api/docs (apps/quantdocs/src/hooks/useDocuments.ts:36)", "shortDescription": {"text": "Dangling fetch: POST /api/docs (apps/quantdocs/src/hooks/useDocuments.ts:36)"}, "fullDescription": {"text": "`apps/quantdocs/src/hooks/useDocuments.ts:36` calls `POST /api/docs` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/docs`\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-6e583029408120d8", "name": "Dangling fetch: DELETE /api/docs/${id} (apps/quantdocs/src/hooks/useDocuments.ts:57)", "shortDescription": {"text": "Dangling fetch: DELETE /api/docs/${id} (apps/quantdocs/src/hooks/useDocuments.ts:57)"}, "fullDescription": {"text": "`apps/quantdocs/src/hooks/useDocuments.ts:57` calls `DELETE /api/docs/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/docs/<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-802b3d5e085bdea7", "name": "Dangling fetch: PATCH /api/docs/${id} (apps/quantdocs/src/hooks/useDocuments.ts:76)", "shortDescription": {"text": "Dangling fetch: PATCH /api/docs/${id} (apps/quantdocs/src/hooks/useDocuments.ts:76)"}, "fullDescription": {"text": "`apps/quantdocs/src/hooks/useDocuments.ts:76` calls `PATCH /api/docs/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/docs/<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-e593695431334fb4", "name": "Dangling fetch: GET /api/settings (apps/admin/src/app/settings/page.tsx:74)", "shortDescription": {"text": "Dangling fetch: GET /api/settings (apps/admin/src/app/settings/page.tsx:74)"}, "fullDescription": {"text": "`apps/admin/src/app/settings/page.tsx:74` calls `GET /api/settings` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/settings`\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-f5133e94a664760c", "name": "Dangling fetch: PUT /api/settings (apps/admin/src/app/settings/page.tsx:96)", "shortDescription": {"text": "Dangling fetch: PUT /api/settings (apps/admin/src/app/settings/page.tsx:96)"}, "fullDescription": {"text": "`apps/admin/src/app/settings/page.tsx:96` calls `PUT /api/settings` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/settings`\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-1fc6436e6b776ef2", "name": "Dangling fetch: GET /api/audit?limit=20 (apps/admin/src/app/security/page.tsx:130)", "shortDescription": {"text": "Dangling fetch: GET /api/audit?limit=20 (apps/admin/src/app/security/page.tsx:130)"}, "fullDescription": {"text": "`apps/admin/src/app/security/page.tsx:130` calls `GET /api/audit?limit=20` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/audit`\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-a85c8006164474b6", "name": "Dangling fetch: GET /api/ai/stats (apps/admin/src/app/ai/page.tsx:60)", "shortDescription": {"text": "Dangling fetch: GET /api/ai/stats (apps/admin/src/app/ai/page.tsx:60)"}, "fullDescription": {"text": "`apps/admin/src/app/ai/page.tsx:60` calls `GET /api/ai/stats` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/ai/stats`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3ad240e49cb1931f", "name": "Dangling fetch: GET http://localhost:${port}/health (apps/admin/src/app/api/health/route.ts:46)", "shortDescription": {"text": "Dangling fetch: GET http://localhost:${port}/health (apps/admin/src/app/api/health/route.ts:46)"}, "fullDescription": {"text": "`apps/admin/src/app/api/health/route.ts:46` calls `GET http://localhost:${port}/health` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost:/<p>/health`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-929e8b1364b8f2df", "name": "Dangling fetch: GET http://localhost:${app.port}/health (apps/admin/src/app/api/apps/[id]/restart/route.ts:31)", "shortDescription": {"text": "Dangling fetch: GET http://localhost:${app.port}/health (apps/admin/src/app/api/apps/[id]/restart/route.ts:31)"}, "fullDescription": {"text": "`apps/admin/src/app/api/apps/[id]/restart/route.ts:31` calls `GET http://localhost:${app.port}/health` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost:/<p>/health`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ed8ffef99caccd85", "name": "Dangling fetch: GET http://localhost:${port}/health (apps/admin/src/app/api/services/[id]/logs/route.ts:29)", "shortDescription": {"text": "Dangling fetch: GET http://localhost:${port}/health (apps/admin/src/app/api/services/[id]/logs/route.ts:29)"}, "fullDescription": {"text": "`apps/admin/src/app/api/services/[id]/logs/route.ts:29` calls `GET http://localhost:${port}/health` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost:/<p>/health`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-aa7ae4bfe86326f0", "name": "Dangling fetch: GET /api/audit?${params.toString()} (apps/admin/src/app/audit/page.tsx:168)", "shortDescription": {"text": "Dangling fetch: GET /api/audit?${params.toString()} (apps/admin/src/app/audit/page.tsx:168)"}, "fullDescription": {"text": "`apps/admin/src/app/audit/page.tsx:168` calls `GET /api/audit?${params.toString()}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/audit`\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-49dad2a9b9e17ae7", "name": "Dangling fetch: GET /api/database/stats (apps/admin/src/app/database/page.tsx:57)", "shortDescription": {"text": "Dangling fetch: GET /api/database/stats (apps/admin/src/app/database/page.tsx:57)"}, "fullDescription": {"text": "`apps/admin/src/app/database/page.tsx:57` calls `GET /api/database/stats` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/database/stats`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-bb5ff0a215237c99", "name": "Dangling fetch: GET /api/compliance (apps/admin/src/app/compliance/page.tsx:29)", "shortDescription": {"text": "Dangling fetch: GET /api/compliance (apps/admin/src/app/compliance/page.tsx:29)"}, "fullDescription": {"text": "`apps/admin/src/app/compliance/page.tsx:29` calls `GET /api/compliance` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/compliance`\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-e61820388825e7d9", "name": "Dangling fetch: POST /api/compliance (apps/admin/src/app/compliance/page.tsx:44)", "shortDescription": {"text": "Dangling fetch: POST /api/compliance (apps/admin/src/app/compliance/page.tsx:44)"}, "fullDescription": {"text": "`apps/admin/src/app/compliance/page.tsx:44` calls `POST /api/compliance` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/compliance`\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-668024acd041a1cd", "name": "Dangling fetch: POST /api/compliance (apps/admin/src/app/compliance/page.tsx:59)", "shortDescription": {"text": "Dangling fetch: POST /api/compliance (apps/admin/src/app/compliance/page.tsx:59)"}, "fullDescription": {"text": "`apps/admin/src/app/compliance/page.tsx:59` calls `POST /api/compliance` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/compliance`\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-44d6b1e6530d6010", "name": "Dangling fetch: POST /api/compliance (apps/admin/src/app/compliance/page.tsx:79)", "shortDescription": {"text": "Dangling fetch: POST /api/compliance (apps/admin/src/app/compliance/page.tsx:79)"}, "fullDescription": {"text": "`apps/admin/src/app/compliance/page.tsx:79` calls `POST /api/compliance` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/compliance`\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-03564fb6c8fc5501", "name": "Dangling fetch: POST /api/compliance (apps/admin/src/app/compliance/page.tsx:95)", "shortDescription": {"text": "Dangling fetch: POST /api/compliance (apps/admin/src/app/compliance/page.tsx:95)"}, "fullDescription": {"text": "`apps/admin/src/app/compliance/page.tsx:95` calls `POST /api/compliance` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/compliance`\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-b26f3636aff9d001", "name": "Dangling fetch: GET /api/feature-flags (apps/admin/src/app/feature-flags/page.tsx:129)", "shortDescription": {"text": "Dangling fetch: GET /api/feature-flags (apps/admin/src/app/feature-flags/page.tsx:129)"}, "fullDescription": {"text": "`apps/admin/src/app/feature-flags/page.tsx:129` calls `GET /api/feature-flags` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/feature-flags`\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-c38764e8412dae97", "name": "Dangling fetch: GET /api/storage/quota (apps/quantdrive/src/hooks/useStorageQuota.ts:13)", "shortDescription": {"text": "Dangling fetch: GET /api/storage/quota (apps/quantdrive/src/hooks/useStorageQuota.ts:13)"}, "fullDescription": {"text": "`apps/quantdrive/src/hooks/useStorageQuota.ts:13` calls `GET /api/storage/quota` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/storage/quota`\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-57a611a432d71704", "name": "Dangling fetch: POST /api/files (apps/quantdrive/src/hooks/useFiles.ts:40)", "shortDescription": {"text": "Dangling fetch: POST /api/files (apps/quantdrive/src/hooks/useFiles.ts:40)"}, "fullDescription": {"text": "`apps/quantdrive/src/hooks/useFiles.ts:40` calls `POST /api/files` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/files`\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-51d4532d40f5fe77", "name": "Dangling fetch: DELETE /api/files?id=${encodeURIComponent(fileId)} (apps/quantdrive/src/hooks/useFiles.ts:61)", "shortDescription": {"text": "Dangling fetch: DELETE /api/files?id=${encodeURIComponent(fileId)} (apps/quantdrive/src/hooks/useFiles.ts:61)"}, "fullDescription": {"text": "`apps/quantdrive/src/hooks/useFiles.ts:61` calls `DELETE /api/files?id=${encodeURIComponent(fileId)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/files`\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-b4c456d98dfdc811", "name": "Dangling fetch: PUT /api/files (apps/quantdrive/src/hooks/useFiles.ts:101)", "shortDescription": {"text": "Dangling fetch: PUT /api/files (apps/quantdrive/src/hooks/useFiles.ts:101)"}, "fullDescription": {"text": "`apps/quantdrive/src/hooks/useFiles.ts:101` calls `PUT /api/files` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/files`\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-57e6930f536837c2", "name": "Dangling fetch: PUT /api/files (apps/quantdrive/src/hooks/useFiles.ts:122)", "shortDescription": {"text": "Dangling fetch: PUT /api/files (apps/quantdrive/src/hooks/useFiles.ts:122)"}, "fullDescription": {"text": "`apps/quantdrive/src/hooks/useFiles.ts:122` calls `PUT /api/files` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/files`\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-d1a4b0245bfb2d85", "name": "Dangling fetch: PUT /api/files (apps/quantdrive/src/hooks/useFiles.ts:163)", "shortDescription": {"text": "Dangling fetch: PUT /api/files (apps/quantdrive/src/hooks/useFiles.ts:163)"}, "fullDescription": {"text": "`apps/quantdrive/src/hooks/useFiles.ts:163` calls `PUT /api/files` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/files`\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-d6ecc8a4d5dda57f", "name": "Dangling fetch: GET /api/campaigns/ab-tests/${testId} (apps/quantads/src/components/ABTestResults.tsx:74)", "shortDescription": {"text": "Dangling fetch: GET /api/campaigns/ab-tests/${testId} (apps/quantads/src/components/ABTestResults.tsx:74)"}, "fullDescription": {"text": "`apps/quantads/src/components/ABTestResults.tsx:74` calls `GET /api/campaigns/ab-tests/${testId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/campaigns/ab-tests/<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-02737a4e7493640a", "name": "Dangling fetch: GET /api/bidding/auctions?${params.toString()} (apps/quantads/src/components/AuctionViewer.tsx:75)", "shortDescription": {"text": "Dangling fetch: GET /api/bidding/auctions?${params.toString()} (apps/quantads/src/components/AuctionViewer.tsx:75)"}, "fullDescription": {"text": "`apps/quantads/src/components/AuctionViewer.tsx:75` calls `GET /api/bidding/auctions?${params.toString()}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/bidding/auctions`\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-9be396a4c2238f58", "name": "Dangling fetch: GET /api/pixels (apps/quantads/src/pages/pixels.tsx:99)", "shortDescription": {"text": "Dangling fetch: GET /api/pixels (apps/quantads/src/pages/pixels.tsx:99)"}, "fullDescription": {"text": "`apps/quantads/src/pages/pixels.tsx:99` calls `GET /api/pixels` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/pixels`\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-05e39d2acb2e65b8", "name": "Dangling fetch: GET /api/pixels/${pixelId}/events?${params.toString()} (apps/quantads/src/pages/pixels.tsx:118)", "shortDescription": {"text": "Dangling fetch: GET /api/pixels/${pixelId}/events?${params.toString()} (apps/quantads/src/pages/pixels.tsx:118)"}, "fullDescription": {"text": "`apps/quantads/src/pages/pixels.tsx:118` calls `GET /api/pixels/${pixelId}/events?${params.toString()}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/pixels/<p>/events`\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-e4d9c2dda31902df", "name": "Dangling fetch: GET /api/pixels/${pixelId}/attribution (apps/quantads/src/pages/pixels.tsx:129)", "shortDescription": {"text": "Dangling fetch: GET /api/pixels/${pixelId}/attribution (apps/quantads/src/pages/pixels.tsx:129)"}, "fullDescription": {"text": "`apps/quantads/src/pages/pixels.tsx:129` calls `GET /api/pixels/${pixelId}/attribution` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/pixels/<p>/attribution`\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-3f1100b535cebc57", "name": "Dangling fetch: POST /api/pixels (apps/quantads/src/pages/pixels.tsx:150)", "shortDescription": {"text": "Dangling fetch: POST /api/pixels (apps/quantads/src/pages/pixels.tsx:150)"}, "fullDescription": {"text": "`apps/quantads/src/pages/pixels.tsx:150` calls `POST /api/pixels` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/pixels`\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-5ca36df17d109d02", "name": "Dangling fetch: POST /api/pixels/${selectedPixel.id}/test (apps/quantads/src/pages/pixels.tsx:174)", "shortDescription": {"text": "Dangling fetch: POST /api/pixels/${selectedPixel.id}/test (apps/quantads/src/pages/pixels.tsx:174)"}, "fullDescription": {"text": "`apps/quantads/src/pages/pixels.tsx:174` calls `POST /api/pixels/${selectedPixel.id}/test` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/pixels/<p>/test`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-048bfea3805e885d", "name": "Dangling fetch: POST /api/campaigns (apps/quantads/src/pages/create-campaign.tsx:244)", "shortDescription": {"text": "Dangling fetch: POST /api/campaigns (apps/quantads/src/pages/create-campaign.tsx:244)"}, "fullDescription": {"text": "`apps/quantads/src/pages/create-campaign.tsx:244` calls `POST /api/campaigns` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/campaigns`\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-5325b9e2fe2c6bc5", "name": "Dangling fetch: GET /api/fraud/dashboard?range=${dateRange} (apps/quantads/src/pages/fraud.tsx:83)", "shortDescription": {"text": "Dangling fetch: GET /api/fraud/dashboard?range=${dateRange} (apps/quantads/src/pages/fraud.tsx:83)"}, "fullDescription": {"text": "`apps/quantads/src/pages/fraud.tsx:83` calls `GET /api/fraud/dashboard?range=${dateRange}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/fraud/dashboard`\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-5f0c6466bac7c731", "name": "Dangling fetch: POST /api/fraud/block-ip (apps/quantads/src/pages/fraud.tsx:104)", "shortDescription": {"text": "Dangling fetch: POST /api/fraud/block-ip (apps/quantads/src/pages/fraud.tsx:104)"}, "fullDescription": {"text": "`apps/quantads/src/pages/fraud.tsx:104` calls `POST /api/fraud/block-ip` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/fraud/block-ip`\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-2b4954f727b3e769", "name": "Dangling fetch: PUT /api/fraud/alerts/${id}/resolve (apps/quantads/src/pages/fraud.tsx:117)", "shortDescription": {"text": "Dangling fetch: PUT /api/fraud/alerts/${id}/resolve (apps/quantads/src/pages/fraud.tsx:117)"}, "fullDescription": {"text": "`apps/quantads/src/pages/fraud.tsx:117` calls `PUT /api/fraud/alerts/${id}/resolve` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/fraud/alerts/<p>/resolve`\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-6f4898ab41ba0c09", "name": "Dangling fetch: GET /api/brand-safety (apps/quantads/src/pages/brand-safety.tsx:192)", "shortDescription": {"text": "Dangling fetch: GET /api/brand-safety (apps/quantads/src/pages/brand-safety.tsx:192)"}, "fullDescription": {"text": "`apps/quantads/src/pages/brand-safety.tsx:192` calls `GET /api/brand-safety` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/brand-safety`\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-c507071c945ddb5a", "name": "Dangling fetch: POST /api/brand-safety/keywords (apps/quantads/src/pages/brand-safety.tsx:215)", "shortDescription": {"text": "Dangling fetch: POST /api/brand-safety/keywords (apps/quantads/src/pages/brand-safety.tsx:215)"}, "fullDescription": {"text": "`apps/quantads/src/pages/brand-safety.tsx:215` calls `POST /api/brand-safety/keywords` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/brand-safety/keywords`\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-1fcf42d9bd1224a8", "name": "Dangling fetch: DELETE /api/brand-safety/keywords/${id} (apps/quantads/src/pages/brand-safety.tsx:232)", "shortDescription": {"text": "Dangling fetch: DELETE /api/brand-safety/keywords/${id} (apps/quantads/src/pages/brand-safety.tsx:232)"}, "fullDescription": {"text": "`apps/quantads/src/pages/brand-safety.tsx:232` calls `DELETE /api/brand-safety/keywords/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/brand-safety/keywords/<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-38c7aa536375de4a", "name": "Dangling fetch: PUT /api/brand-safety/categories/${id} (apps/quantads/src/pages/brand-safety.tsx:241)", "shortDescription": {"text": "Dangling fetch: PUT /api/brand-safety/categories/${id} (apps/quantads/src/pages/brand-safety.tsx:241)"}, "fullDescription": {"text": "`apps/quantads/src/pages/brand-safety.tsx:241` calls `PUT /api/brand-safety/categories/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/brand-safety/categories/<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-409ffd5a5a122311", "name": "Dangling fetch: POST /api/brand-safety/exclusions (apps/quantads/src/pages/brand-safety.tsx:255)", "shortDescription": {"text": "Dangling fetch: POST /api/brand-safety/exclusions (apps/quantads/src/pages/brand-safety.tsx:255)"}, "fullDescription": {"text": "`apps/quantads/src/pages/brand-safety.tsx:255` calls `POST /api/brand-safety/exclusions` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/brand-safety/exclusions`\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-0eaa129e19cfb8bd", "name": "Dangling fetch: DELETE /api/brand-safety/exclusions/${id} (apps/quantads/src/pages/brand-safety.tsx:276)", "shortDescription": {"text": "Dangling fetch: DELETE /api/brand-safety/exclusions/${id} (apps/quantads/src/pages/brand-safety.tsx:276)"}, "fullDescription": {"text": "`apps/quantads/src/pages/brand-safety.tsx:276` calls `DELETE /api/brand-safety/exclusions/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/brand-safety/exclusions/<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-92c3d4dc52b3d632", "name": "Dangling fetch: PUT /api/brand-safety/inventory (apps/quantads/src/pages/brand-safety.tsx:282)", "shortDescription": {"text": "Dangling fetch: PUT /api/brand-safety/inventory (apps/quantads/src/pages/brand-safety.tsx:282)"}, "fullDescription": {"text": "`apps/quantads/src/pages/brand-safety.tsx:282` calls `PUT /api/brand-safety/inventory` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/brand-safety/inventory`\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-eafd67ea200abd5c", "name": "Dangling fetch: GET /api/creative-studio/templates (apps/quantads/src/pages/creative-studio.tsx:85)", "shortDescription": {"text": "Dangling fetch: GET /api/creative-studio/templates (apps/quantads/src/pages/creative-studio.tsx:85)"}, "fullDescription": {"text": "`apps/quantads/src/pages/creative-studio.tsx:85` calls `GET /api/creative-studio/templates` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/creative-studio/templates`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e9170332e5288352", "name": "Dangling fetch: GET /api/creative-studio/projects (apps/quantads/src/pages/creative-studio.tsx:212)", "shortDescription": {"text": "Dangling fetch: GET /api/creative-studio/projects (apps/quantads/src/pages/creative-studio.tsx:212)"}, "fullDescription": {"text": "`apps/quantads/src/pages/creative-studio.tsx:212` calls `GET /api/creative-studio/projects` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/creative-studio/projects`\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-fce188f48b3cfd47", "name": "Dangling fetch: POST /api/creative-studio/export (apps/quantads/src/pages/creative-studio.tsx:229)", "shortDescription": {"text": "Dangling fetch: POST /api/creative-studio/export (apps/quantads/src/pages/creative-studio.tsx:229)"}, "fullDescription": {"text": "`apps/quantads/src/pages/creative-studio.tsx:229` calls `POST /api/creative-studio/export` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/creative-studio/export`\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-df30dd120ec6c149", "name": "Dangling fetch: GET /api/analytics/dashboard?${params.toString()} (apps/quantube/src/hooks/useAnalytics.ts:128)", "shortDescription": {"text": "Dangling fetch: GET /api/analytics/dashboard?${params.toString()} (apps/quantube/src/hooks/useAnalytics.ts:128)"}, "fullDescription": {"text": "`apps/quantube/src/hooks/useAnalytics.ts:128` calls `GET /api/analytics/dashboard?${params.toString()}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/analytics/dashboard`\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-ec10cba530ff103d", "name": "Dangling fetch: GET /api/analytics/export?${params.toString()} (apps/quantube/src/hooks/useAnalytics.ts:205)", "shortDescription": {"text": "Dangling fetch: GET /api/analytics/export?${params.toString()} (apps/quantube/src/hooks/useAnalytics.ts:205)"}, "fullDescription": {"text": "`apps/quantube/src/hooks/useAnalytics.ts:205` calls `GET /api/analytics/export?${params.toString()}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/analytics/export`\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-db7d3cb35a55d7b0", "name": "Dangling fetch: POST /videos/upload (apps/quantube/src/services/api-client.ts:74)", "shortDescription": {"text": "Dangling fetch: POST /videos/upload (apps/quantube/src/services/api-client.ts:74)"}, "fullDescription": {"text": "`apps/quantube/src/services/api-client.ts:74` calls `POST /videos/upload` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/videos/upload`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7547dbe538861c42", "name": "Dangling fetch: GET /videos/trending (apps/quantube/src/services/api-client.ts:80)", "shortDescription": {"text": "Dangling fetch: GET /videos/trending (apps/quantube/src/services/api-client.ts:80)"}, "fullDescription": {"text": "`apps/quantube/src/services/api-client.ts:80` calls `GET /videos/trending` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/videos/trending`\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-ce80dc1b62f857ba", "name": "Dangling fetch: GET /videos/shorts (apps/quantube/src/services/api-client.ts:83)", "shortDescription": {"text": "Dangling fetch: GET /videos/shorts (apps/quantube/src/services/api-client.ts:83)"}, "fullDescription": {"text": "`apps/quantube/src/services/api-client.ts:83` calls `GET /videos/shorts` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/videos/shorts`\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-9521aa54d11f663c", "name": "Dangling fetch: GET /videos/${id} (apps/quantube/src/services/api-client.ts:86)", "shortDescription": {"text": "Dangling fetch: GET /videos/${id} (apps/quantube/src/services/api-client.ts:86)"}, "fullDescription": {"text": "`apps/quantube/src/services/api-client.ts:86` calls `GET /videos/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/videos/<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-dd485a220a6ccd37", "name": "Dangling fetch: GET /videos/${id}/manifest (apps/quantube/src/services/api-client.ts:92)", "shortDescription": {"text": "Dangling fetch: GET /videos/${id}/manifest (apps/quantube/src/services/api-client.ts:92)"}, "fullDescription": {"text": "`apps/quantube/src/services/api-client.ts:92` calls `GET /videos/${id}/manifest` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/videos/<p>/manifest`\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-7f4fd4fa734d4126", "name": "Dangling fetch: GET /videos/${id}/chapters (apps/quantube/src/services/api-client.ts:95)", "shortDescription": {"text": "Dangling fetch: GET /videos/${id}/chapters (apps/quantube/src/services/api-client.ts:95)"}, "fullDescription": {"text": "`apps/quantube/src/services/api-client.ts:95` calls `GET /videos/${id}/chapters` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/videos/<p>/chapters`\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-57b21b92d9086f87", "name": "Dangling fetch: GET /videos/${id}/subtitles (apps/quantube/src/services/api-client.ts:98)", "shortDescription": {"text": "Dangling fetch: GET /videos/${id}/subtitles (apps/quantube/src/services/api-client.ts:98)"}, "fullDescription": {"text": "`apps/quantube/src/services/api-client.ts:98` calls `GET /videos/${id}/subtitles` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/videos/<p>/subtitles`\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-dc8bb7fb6f7263aa", "name": "Dangling fetch: PUT /videos/${id} (apps/quantube/src/services/api-client.ts:101)", "shortDescription": {"text": "Dangling fetch: PUT /videos/${id} (apps/quantube/src/services/api-client.ts:101)"}, "fullDescription": {"text": "`apps/quantube/src/services/api-client.ts:101` calls `PUT /videos/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/videos/<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-a1d13ce613b83d23", "name": "Dangling fetch: DELETE /videos/${id} (apps/quantube/src/services/api-client.ts:104)", "shortDescription": {"text": "Dangling fetch: DELETE /videos/${id} (apps/quantube/src/services/api-client.ts:104)"}, "fullDescription": {"text": "`apps/quantube/src/services/api-client.ts:104` calls `DELETE /videos/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/videos/<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-fd70bd0b7805ebdb", "name": "Dangling fetch: GET /music (apps/quantube/src/services/api-client.ts:109)", "shortDescription": {"text": "Dangling fetch: GET /music (apps/quantube/src/services/api-client.ts:109)"}, "fullDescription": {"text": "`apps/quantube/src/services/api-client.ts:109` calls `GET /music` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/music`\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-10a95ee58a045510", "name": "Dangling fetch: GET /music/tracks (apps/quantube/src/services/api-client.ts:112)", "shortDescription": {"text": "Dangling fetch: GET /music/tracks (apps/quantube/src/services/api-client.ts:112)"}, "fullDescription": {"text": "`apps/quantube/src/services/api-client.ts:112` calls `GET /music/tracks` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/music/tracks`\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-6a7e081aa0738447", "name": "Dangling fetch: GET /music/tracks/${id} (apps/quantube/src/services/api-client.ts:115)", "shortDescription": {"text": "Dangling fetch: GET /music/tracks/${id} (apps/quantube/src/services/api-client.ts:115)"}, "fullDescription": {"text": "`apps/quantube/src/services/api-client.ts:115` calls `GET /music/tracks/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/music/tracks/<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-c1f09440bfe90f73", "name": "Dangling fetch: GET /music/tracks/${id}/stream (apps/quantube/src/services/api-client.ts:118)", "shortDescription": {"text": "Dangling fetch: GET /music/tracks/${id}/stream (apps/quantube/src/services/api-client.ts:118)"}, "fullDescription": {"text": "`apps/quantube/src/services/api-client.ts:118` calls `GET /music/tracks/${id}/stream` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/music/tracks/<p>/stream`\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-2f9e52f9de040504", "name": "Dangling fetch: GET /music/tracks/${id}/lyrics (apps/quantube/src/services/api-client.ts:123)", "shortDescription": {"text": "Dangling fetch: GET /music/tracks/${id}/lyrics (apps/quantube/src/services/api-client.ts:123)"}, "fullDescription": {"text": "`apps/quantube/src/services/api-client.ts:123` calls `GET /music/tracks/${id}/lyrics` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/music/tracks/<p>/lyrics`\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-cc267fcac2f35f3f", "name": "Dangling fetch: GET /music/albums (apps/quantube/src/services/api-client.ts:126)", "shortDescription": {"text": "Dangling fetch: GET /music/albums (apps/quantube/src/services/api-client.ts:126)"}, "fullDescription": {"text": "`apps/quantube/src/services/api-client.ts:126` calls `GET /music/albums` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/music/albums`\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-dd1dd4760d5f3ab0", "name": "Dangling fetch: GET /music/albums/${id} (apps/quantube/src/services/api-client.ts:129)", "shortDescription": {"text": "Dangling fetch: GET /music/albums/${id} (apps/quantube/src/services/api-client.ts:129)"}, "fullDescription": {"text": "`apps/quantube/src/services/api-client.ts:129` calls `GET /music/albums/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/music/albums/<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-181d7e813377708a", "name": "Dangling fetch: GET /music/artists (apps/quantube/src/services/api-client.ts:132)", "shortDescription": {"text": "Dangling fetch: GET /music/artists (apps/quantube/src/services/api-client.ts:132)"}, "fullDescription": {"text": "`apps/quantube/src/services/api-client.ts:132` calls `GET /music/artists` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/music/artists`\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-60e24798b6f4319c", "name": "Dangling fetch: GET /music/artists/${id} (apps/quantube/src/services/api-client.ts:135)", "shortDescription": {"text": "Dangling fetch: GET /music/artists/${id} (apps/quantube/src/services/api-client.ts:135)"}, "fullDescription": {"text": "`apps/quantube/src/services/api-client.ts:135` calls `GET /music/artists/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/music/artists/<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-9515c840de247b8c", "name": "Dangling fetch: GET /music/queue (apps/quantube/src/services/api-client.ts:138)", "shortDescription": {"text": "Dangling fetch: GET /music/queue (apps/quantube/src/services/api-client.ts:138)"}, "fullDescription": {"text": "`apps/quantube/src/services/api-client.ts:138` calls `GET /music/queue` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/music/queue`\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-c4cc94583a99051f", "name": "Dangling fetch: POST /music/queue (apps/quantube/src/services/api-client.ts:141)", "shortDescription": {"text": "Dangling fetch: POST /music/queue (apps/quantube/src/services/api-client.ts:141)"}, "fullDescription": {"text": "`apps/quantube/src/services/api-client.ts:141` calls `POST /music/queue` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/music/queue`\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-14ec01d3e54ea61d", "name": "Dangling fetch: GET /shows (apps/quantube/src/services/api-client.ts:146)", "shortDescription": {"text": "Dangling fetch: GET /shows (apps/quantube/src/services/api-client.ts:146)"}, "fullDescription": {"text": "`apps/quantube/src/services/api-client.ts:146` calls `GET /shows` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/shows`\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-2130bf783063e700", "name": "Dangling fetch: GET /shows/${id} (apps/quantube/src/services/api-client.ts:149)", "shortDescription": {"text": "Dangling fetch: GET /shows/${id} (apps/quantube/src/services/api-client.ts:149)"}, "fullDescription": {"text": "`apps/quantube/src/services/api-client.ts:149` calls `GET /shows/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/shows/<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-9dfd6bd6b796fad4", "name": "Dangling fetch: GET /shows/${showId}/seasons (apps/quantube/src/services/api-client.ts:152)", "shortDescription": {"text": "Dangling fetch: GET /shows/${showId}/seasons (apps/quantube/src/services/api-client.ts:152)"}, "fullDescription": {"text": "`apps/quantube/src/services/api-client.ts:152` calls `GET /shows/${showId}/seasons` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/shows/<p>/seasons`\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-ee9c27b3cdba0349", "name": "Dangling fetch: GET /shows/${showId}/episodes/${episodeId}/stream (apps/quantube/src/services/api-client.ts:155)", "shortDescription": {"text": "Dangling fetch: GET /shows/${showId}/episodes/${episodeId}/stream (apps/quantube/src/services/api-client.ts:155)"}, "fullDescription": {"text": "`apps/quantube/src/services/api-client.ts:155` calls `GET /shows/${showId}/episodes/${episodeId}/stream` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/shows/<p>/episodes/<p>/stream`\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-618ea94d378c555a", "name": "Dangling fetch: POST /shows/${showId}/progress (apps/quantube/src/services/api-client.ts:161)", "shortDescription": {"text": "Dangling fetch: POST /shows/${showId}/progress (apps/quantube/src/services/api-client.ts:161)"}, "fullDescription": {"text": "`apps/quantube/src/services/api-client.ts:161` calls `POST /shows/${showId}/progress` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/shows/<p>/progress`\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-86e0424bdf2bf46f", "name": "Dangling fetch: GET /channels/${id} (apps/quantube/src/services/api-client.ts:166)", "shortDescription": {"text": "Dangling fetch: GET /channels/${id} (apps/quantube/src/services/api-client.ts:166)"}, "fullDescription": {"text": "`apps/quantube/src/services/api-client.ts:166` calls `GET /channels/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/channels/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b649e195b92abdf3", "name": "Dangling fetch: POST /channels/${channelId}/subscribe (apps/quantube/src/services/api-client.ts:196)", "shortDescription": {"text": "Dangling fetch: POST /channels/${channelId}/subscribe (apps/quantube/src/services/api-client.ts:196)"}, "fullDescription": {"text": "`apps/quantube/src/services/api-client.ts:196` calls `POST /channels/${channelId}/subscribe` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/channels/<p>/subscribe`\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-f296397bdb424b05", "name": "Dangling fetch: DELETE /channels/${channelId}/subscribe (apps/quantube/src/services/api-client.ts:199)", "shortDescription": {"text": "Dangling fetch: DELETE /channels/${channelId}/subscribe (apps/quantube/src/services/api-client.ts:199)"}, "fullDescription": {"text": "`apps/quantube/src/services/api-client.ts:199` calls `DELETE /channels/${channelId}/subscribe` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/channels/<p>/subscribe`\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-c4d050d79724b6b1", "name": "Dangling fetch: GET /subscriptions (apps/quantube/src/services/api-client.ts:202)", "shortDescription": {"text": "Dangling fetch: GET /subscriptions (apps/quantube/src/services/api-client.ts:202)"}, "fullDescription": {"text": "`apps/quantube/src/services/api-client.ts:202` calls `GET /subscriptions` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/subscriptions`\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-c91ab06ad923330b", "name": "Dangling fetch: GET /playlists (apps/quantube/src/services/api-client.ts:207)", "shortDescription": {"text": "Dangling fetch: GET /playlists (apps/quantube/src/services/api-client.ts:207)"}, "fullDescription": {"text": "`apps/quantube/src/services/api-client.ts:207` calls `GET /playlists` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/playlists`\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-351605e70e0f768a", "name": "Dangling fetch: POST /playlists (apps/quantube/src/services/api-client.ts:210)", "shortDescription": {"text": "Dangling fetch: POST /playlists (apps/quantube/src/services/api-client.ts:210)"}, "fullDescription": {"text": "`apps/quantube/src/services/api-client.ts:210` calls `POST /playlists` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/playlists`\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-c7d3b1ff472c496c", "name": "Dangling fetch: POST /playlists/${playlistId}/items (apps/quantube/src/services/api-client.ts:213)", "shortDescription": {"text": "Dangling fetch: POST /playlists/${playlistId}/items (apps/quantube/src/services/api-client.ts:213)"}, "fullDescription": {"text": "`apps/quantube/src/services/api-client.ts:213` calls `POST /playlists/${playlistId}/items` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/playlists/<p>/items`\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-e1afc1af7d3ea437", "name": "Dangling fetch: GET /live (apps/quantube/src/services/api-client.ts:218)", "shortDescription": {"text": "Dangling fetch: GET /live (apps/quantube/src/services/api-client.ts:218)"}, "fullDescription": {"text": "`apps/quantube/src/services/api-client.ts:218` calls `GET /live` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/live`\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-d22203732e66dd8e", "name": "Dangling fetch: GET /live/${id} (apps/quantube/src/services/api-client.ts:221)", "shortDescription": {"text": "Dangling fetch: GET /live/${id} (apps/quantube/src/services/api-client.ts:221)"}, "fullDescription": {"text": "`apps/quantube/src/services/api-client.ts:221` calls `GET /live/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/live/<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-f48a60c5dc67aa5f", "name": "Dangling fetch: GET /live/${id}/watch (apps/quantube/src/services/api-client.ts:224)", "shortDescription": {"text": "Dangling fetch: GET /live/${id}/watch (apps/quantube/src/services/api-client.ts:224)"}, "fullDescription": {"text": "`apps/quantube/src/services/api-client.ts:224` calls `GET /live/${id}/watch` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/live/<p>/watch`\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-46c795138935d7ad", "name": "Dangling fetch: POST /live/${streamId}/chat (apps/quantube/src/services/api-client.ts:227)", "shortDescription": {"text": "Dangling fetch: POST /live/${streamId}/chat (apps/quantube/src/services/api-client.ts:227)"}, "fullDescription": {"text": "`apps/quantube/src/services/api-client.ts:227` calls `POST /live/${streamId}/chat` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/live/<p>/chat`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8749c1393e0a41e3", "name": "Dangling fetch: POST /interactions/like (apps/quantube/src/services/api-client.ts:232)", "shortDescription": {"text": "Dangling fetch: POST /interactions/like (apps/quantube/src/services/api-client.ts:232)"}, "fullDescription": {"text": "`apps/quantube/src/services/api-client.ts:232` calls `POST /interactions/like` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/interactions/like`\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-39ee93db7f8091fd", "name": "Dangling fetch: POST /interactions/comment (apps/quantube/src/services/api-client.ts:235)", "shortDescription": {"text": "Dangling fetch: POST /interactions/comment (apps/quantube/src/services/api-client.ts:235)"}, "fullDescription": {"text": "`apps/quantube/src/services/api-client.ts:235` calls `POST /interactions/comment` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/interactions/comment`\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-1a11f7e1fac07199", "name": "Dangling fetch: GET /interactions/comments/${contentId} (apps/quantube/src/services/api-client.ts:238)", "shortDescription": {"text": "Dangling fetch: GET /interactions/comments/${contentId} (apps/quantube/src/services/api-client.ts:238)"}, "fullDescription": {"text": "`apps/quantube/src/services/api-client.ts:238` calls `GET /interactions/comments/${contentId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/interactions/comments/<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-764ce10d01718744", "name": "Dangling fetch: POST /interactions/watch-later (apps/quantube/src/services/api-client.ts:241)", "shortDescription": {"text": "Dangling fetch: POST /interactions/watch-later (apps/quantube/src/services/api-client.ts:241)"}, "fullDescription": {"text": "`apps/quantube/src/services/api-client.ts:241` calls `POST /interactions/watch-later` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/interactions/watch-later`\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-5f8662e8b245c64f", "name": "Dangling fetch: GET /interactions/history (apps/quantube/src/services/api-client.ts:244)", "shortDescription": {"text": "Dangling fetch: GET /interactions/history (apps/quantube/src/services/api-client.ts:244)"}, "fullDescription": {"text": "`apps/quantube/src/services/api-client.ts:244` calls `GET /interactions/history` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/interactions/history`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1f3badf404a4d5ca", "name": "Dangling fetch: GET /search/autocomplete (apps/quantube/src/services/api-client.ts:254)", "shortDescription": {"text": "Dangling fetch: GET /search/autocomplete (apps/quantube/src/services/api-client.ts:254)"}, "fullDescription": {"text": "`apps/quantube/src/services/api-client.ts:254` calls `GET /search/autocomplete` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/search/autocomplete`\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-7b95cb478c835f1b", "name": "Dangling fetch: GET /ai/recommendations (apps/quantube/src/services/api-client.ts:259)", "shortDescription": {"text": "Dangling fetch: GET /ai/recommendations (apps/quantube/src/services/api-client.ts:259)"}, "fullDescription": {"text": "`apps/quantube/src/services/api-client.ts:259` calls `GET /ai/recommendations` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/ai/recommendations`\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-726f677bf1360dca", "name": "Dangling fetch: GET /ai/recommendations/personalized (apps/quantube/src/services/api-client.ts:264)", "shortDescription": {"text": "Dangling fetch: GET /ai/recommendations/personalized (apps/quantube/src/services/api-client.ts:264)"}, "fullDescription": {"text": "`apps/quantube/src/services/api-client.ts:264` calls `GET /ai/recommendations/personalized` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/ai/recommendations/personalized`\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-0cc093e741006d86", "name": "Dangling fetch: GET /api/meetings/recent (apps/quantmeet/src/app/page.tsx:21)", "shortDescription": {"text": "Dangling fetch: GET /api/meetings/recent (apps/quantmeet/src/app/page.tsx:21)"}, "fullDescription": {"text": "`apps/quantmeet/src/app/page.tsx:21` calls `GET /api/meetings/recent` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/meetings/recent`\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-2c16dae183c8990d", "name": "Dangling fetch: GET /api/rooms/${roomId}/participants (apps/quantmeet/src/hooks/useParticipants.ts:46)", "shortDescription": {"text": "Dangling fetch: GET /api/rooms/${roomId}/participants (apps/quantmeet/src/hooks/useParticipants.ts:46)"}, "fullDescription": {"text": "`apps/quantmeet/src/hooks/useParticipants.ts:46` calls `GET /api/rooms/${roomId}/participants` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/rooms/<p>/participants`\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-f22b9f299b405799", "name": "Dangling fetch: GET /api/rooms/${roomId} (apps/quantmeet/src/hooks/useMeeting.ts:17)", "shortDescription": {"text": "Dangling fetch: GET /api/rooms/${roomId} (apps/quantmeet/src/hooks/useMeeting.ts:17)"}, "fullDescription": {"text": "`apps/quantmeet/src/hooks/useMeeting.ts:17` calls `GET /api/rooms/${roomId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/rooms/<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-7fa5a1e0cb5a69cd", "name": "Dangling fetch: POST /api/rooms (apps/quantmeet/src/hooks/useMeeting.ts:32)", "shortDescription": {"text": "Dangling fetch: POST /api/rooms (apps/quantmeet/src/hooks/useMeeting.ts:32)"}, "fullDescription": {"text": "`apps/quantmeet/src/hooks/useMeeting.ts:32` calls `POST /api/rooms` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/rooms`\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-5159b717a12ee930", "name": "Dangling fetch: POST /api/rooms/${params.roomId}/join (apps/quantmeet/src/hooks/useMeeting.ts:53)", "shortDescription": {"text": "Dangling fetch: POST /api/rooms/${params.roomId}/join (apps/quantmeet/src/hooks/useMeeting.ts:53)"}, "fullDescription": {"text": "`apps/quantmeet/src/hooks/useMeeting.ts:53` calls `POST /api/rooms/${params.roomId}/join` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/rooms/<p>/join`\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-c4f60c04cf06c01b", "name": "Dangling fetch: POST /api/posts/${id}/poll/vote (apps/quantsync/src/components/PostCard.tsx:134)", "shortDescription": {"text": "Dangling fetch: POST /api/posts/${id}/poll/vote (apps/quantsync/src/components/PostCard.tsx:134)"}, "fullDescription": {"text": "`apps/quantsync/src/components/PostCard.tsx:134` calls `POST /api/posts/${id}/poll/vote` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/posts/<p>/poll/vote`\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-ca558a61b6299f36", "name": "Dangling fetch: GET /api/settings (apps/quantsync/src/legacy-pages/settings.tsx:100)", "shortDescription": {"text": "Dangling fetch: GET /api/settings (apps/quantsync/src/legacy-pages/settings.tsx:100)"}, "fullDescription": {"text": "`apps/quantsync/src/legacy-pages/settings.tsx:100` calls `GET /api/settings` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/settings`\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-4163a80ce965fe07", "name": "Dangling fetch: PUT /api/settings (apps/quantsync/src/legacy-pages/settings.tsx:124)", "shortDescription": {"text": "Dangling fetch: PUT /api/settings (apps/quantsync/src/legacy-pages/settings.tsx:124)"}, "fullDescription": {"text": "`apps/quantsync/src/legacy-pages/settings.tsx:124` calls `PUT /api/settings` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/settings`\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-34ca1cd28347653c", "name": "Dangling fetch: POST /api/users/${userId}/unblock (apps/quantsync/src/legacy-pages/settings.tsx:152)", "shortDescription": {"text": "Dangling fetch: POST /api/users/${userId}/unblock (apps/quantsync/src/legacy-pages/settings.tsx:152)"}, "fullDescription": {"text": "`apps/quantsync/src/legacy-pages/settings.tsx:152` calls `POST /api/users/${userId}/unblock` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/users/<p>/unblock`\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-227ce6df1b7e0fc2", "name": "Dangling fetch: GET /api/analytics/overview?${params.toString()} (apps/quantsync/src/legacy-pages/analytics.tsx:66)", "shortDescription": {"text": "Dangling fetch: GET /api/analytics/overview?${params.toString()} (apps/quantsync/src/legacy-pages/analytics.tsx:66)"}, "fullDescription": {"text": "`apps/quantsync/src/legacy-pages/analytics.tsx:66` calls `GET /api/analytics/overview?${params.toString()}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/analytics/overview`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a79c3c0f38bd12a1", "name": "Dangling fetch: GET /api/analytics/metrics?${params.toString()} (apps/quantsync/src/legacy-pages/analytics.tsx:67)", "shortDescription": {"text": "Dangling fetch: GET /api/analytics/metrics?${params.toString()} (apps/quantsync/src/legacy-pages/analytics.tsx:67)"}, "fullDescription": {"text": "`apps/quantsync/src/legacy-pages/analytics.tsx:67` calls `GET /api/analytics/metrics?${params.toString()}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/analytics/metrics`\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-d8e7a9d5a943f4d5", "name": "Dangling fetch: GET /api/analytics/top-posts?${params.toString()} (apps/quantsync/src/legacy-pages/analytics.tsx:68)", "shortDescription": {"text": "Dangling fetch: GET /api/analytics/top-posts?${params.toString()} (apps/quantsync/src/legacy-pages/analytics.tsx:68)"}, "fullDescription": {"text": "`apps/quantsync/src/legacy-pages/analytics.tsx:68` calls `GET /api/analytics/top-posts?${params.toString()}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/analytics/top-posts`\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-facf8311f3a10941", "name": "Dangling fetch: GET /api/analytics/demographics (apps/quantsync/src/legacy-pages/analytics.tsx:69)", "shortDescription": {"text": "Dangling fetch: GET /api/analytics/demographics (apps/quantsync/src/legacy-pages/analytics.tsx:69)"}, "fullDescription": {"text": "`apps/quantsync/src/legacy-pages/analytics.tsx:69` calls `GET /api/analytics/demographics` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/analytics/demographics`\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-c4b59fbb197a8c3a", "name": "Dangling fetch: GET /api/analytics/heatmap?${params.toString()} (apps/quantsync/src/legacy-pages/analytics.tsx:70)", "shortDescription": {"text": "Dangling fetch: GET /api/analytics/heatmap?${params.toString()} (apps/quantsync/src/legacy-pages/analytics.tsx:70)"}, "fullDescription": {"text": "`apps/quantsync/src/legacy-pages/analytics.tsx:70` calls `GET /api/analytics/heatmap?${params.toString()}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/analytics/heatmap`\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-7a00c3a97347e5ee", "name": "Dangling fetch: GET /api/messages/conversations (apps/quantsync/src/legacy-pages/messages.tsx:49)", "shortDescription": {"text": "Dangling fetch: GET /api/messages/conversations (apps/quantsync/src/legacy-pages/messages.tsx:49)"}, "fullDescription": {"text": "`apps/quantsync/src/legacy-pages/messages.tsx:49` calls `GET /api/messages/conversations` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/messages/conversations`\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-dd55bf13703fcfc2", "name": "Dangling fetch: GET /api/messages/requests (apps/quantsync/src/legacy-pages/messages.tsx:63)", "shortDescription": {"text": "Dangling fetch: GET /api/messages/requests (apps/quantsync/src/legacy-pages/messages.tsx:63)"}, "fullDescription": {"text": "`apps/quantsync/src/legacy-pages/messages.tsx:63` calls `GET /api/messages/requests` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/messages/requests`\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-19a3be7ef18388f5", "name": "Dangling fetch: POST /api/messages/send (apps/quantsync/src/legacy-pages/messages.tsx:80)", "shortDescription": {"text": "Dangling fetch: POST /api/messages/send (apps/quantsync/src/legacy-pages/messages.tsx:80)"}, "fullDescription": {"text": "`apps/quantsync/src/legacy-pages/messages.tsx:80` calls `POST /api/messages/send` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/messages/send`\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-8d5c9d668d6eb29e", "name": "Dangling fetch: POST /api/messages/groups (apps/quantsync/src/legacy-pages/messages.tsx:100)", "shortDescription": {"text": "Dangling fetch: POST /api/messages/groups (apps/quantsync/src/legacy-pages/messages.tsx:100)"}, "fullDescription": {"text": "`apps/quantsync/src/legacy-pages/messages.tsx:100` calls `POST /api/messages/groups` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/messages/groups`\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-346f0fff6322aa5c", "name": "Dangling fetch: POST /api/messages/requests/${requestId}/accept (apps/quantsync/src/legacy-pages/messages.tsx:117)", "shortDescription": {"text": "Dangling fetch: POST /api/messages/requests/${requestId}/accept (apps/quantsync/src/legacy-pages/messages.tsx:117)"}, "fullDescription": {"text": "`apps/quantsync/src/legacy-pages/messages.tsx:117` calls `POST /api/messages/requests/${requestId}/accept` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/messages/requests/<p>/accept`\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-89bdef2d7435c6f0", "name": "Dangling fetch: POST /api/messages/requests/${requestId}/decline (apps/quantsync/src/legacy-pages/messages.tsx:125)", "shortDescription": {"text": "Dangling fetch: POST /api/messages/requests/${requestId}/decline (apps/quantsync/src/legacy-pages/messages.tsx:125)"}, "fullDescription": {"text": "`apps/quantsync/src/legacy-pages/messages.tsx:125` calls `POST /api/messages/requests/${requestId}/decline` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/messages/requests/<p>/decline`\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-95121e8f46b18410", "name": "Dangling fetch: GET /api/users/search?q=${encodeURIComponent(q)}&limit=5 (apps/quantsync/src/legacy-pages/messages.tsx:1", "shortDescription": {"text": "Dangling fetch: GET /api/users/search?q=${encodeURIComponent(q)}&limit=5 (apps/quantsync/src/legacy-pages/messages.tsx:135)"}, "fullDescription": {"text": "`apps/quantsync/src/legacy-pages/messages.tsx:135` calls `GET /api/users/search?q=${encodeURIComponent(q)}&limit=5` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/users/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-3112a8f98ce66ac1", "name": "Dangling fetch: POST /api/posts/${postId}/like (apps/quantsync/src/legacy-pages/index.tsx:153)", "shortDescription": {"text": "Dangling fetch: POST /api/posts/${postId}/like (apps/quantsync/src/legacy-pages/index.tsx:153)"}, "fullDescription": {"text": "`apps/quantsync/src/legacy-pages/index.tsx:153` calls `POST /api/posts/${postId}/like` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/posts/<p>/like`\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-1592c4a9368a262f", "name": "Dangling fetch: POST /api/posts/${postId}/repost (apps/quantsync/src/legacy-pages/index.tsx:169)", "shortDescription": {"text": "Dangling fetch: POST /api/posts/${postId}/repost (apps/quantsync/src/legacy-pages/index.tsx:169)"}, "fullDescription": {"text": "`apps/quantsync/src/legacy-pages/index.tsx:169` calls `POST /api/posts/${postId}/repost` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/posts/<p>/repost`\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-2e737cbfaf68a041", "name": "Dangling fetch: POST /api/posts/${postId}/bookmark (apps/quantsync/src/legacy-pages/index.tsx:198)", "shortDescription": {"text": "Dangling fetch: POST /api/posts/${postId}/bookmark (apps/quantsync/src/legacy-pages/index.tsx:198)"}, "fullDescription": {"text": "`apps/quantsync/src/legacy-pages/index.tsx:198` calls `POST /api/posts/${postId}/bookmark` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/posts/<p>/bookmark`\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-ee5e8bbca156d5af", "name": "Dangling fetch: GET /api/users/search?q=${encodeURIComponent(query)}&limit=5 (apps/quantsync/src/legacy-pages/compose.ts", "shortDescription": {"text": "Dangling fetch: GET /api/users/search?q=${encodeURIComponent(query)}&limit=5 (apps/quantsync/src/legacy-pages/compose.tsx:125)"}, "fullDescription": {"text": "`apps/quantsync/src/legacy-pages/compose.tsx:125` calls `GET /api/users/search?q=${encodeURIComponent(query)}&limit=5` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/users/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-0bc51fdd12ab6cd8", "name": "Dangling fetch: GET /api/hashtags/suggest?q=${encodeURIComponent(query)}&limit=5 (apps/quantsync/src/legacy-pages/compos", "shortDescription": {"text": "Dangling fetch: GET /api/hashtags/suggest?q=${encodeURIComponent(query)}&limit=5 (apps/quantsync/src/legacy-pages/compose.tsx:135)"}, "fullDescription": {"text": "`apps/quantsync/src/legacy-pages/compose.tsx:135` calls `GET /api/hashtags/suggest?q=${encodeURIComponent(query)}&limit=5` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/hashtags/suggest`\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-4d994da67038e3ff", "name": "Dangling fetch: POST /api/posts (apps/quantsync/src/legacy-pages/compose.tsx:227)", "shortDescription": {"text": "Dangling fetch: POST /api/posts (apps/quantsync/src/legacy-pages/compose.tsx:227)"}, "fullDescription": {"text": "`apps/quantsync/src/legacy-pages/compose.tsx:227` calls `POST /api/posts` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/posts`\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-a88c754ac8f65c7a", "name": "Dangling fetch: GET /api/lists (apps/quantsync/src/legacy-pages/lists.tsx:55)", "shortDescription": {"text": "Dangling fetch: GET /api/lists (apps/quantsync/src/legacy-pages/lists.tsx:55)"}, "fullDescription": {"text": "`apps/quantsync/src/legacy-pages/lists.tsx:55` calls `GET /api/lists` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lists`\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-1b5ef482b705c6f0", "name": "Dangling fetch: GET /api/lists/following (apps/quantsync/src/legacy-pages/lists.tsx:56)", "shortDescription": {"text": "Dangling fetch: GET /api/lists/following (apps/quantsync/src/legacy-pages/lists.tsx:56)"}, "fullDescription": {"text": "`apps/quantsync/src/legacy-pages/lists.tsx:56` calls `GET /api/lists/following` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lists/following`\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-97f9fa67f4654ce1", "name": "Dangling fetch: GET /api/lists/discover (apps/quantsync/src/legacy-pages/lists.tsx:57)", "shortDescription": {"text": "Dangling fetch: GET /api/lists/discover (apps/quantsync/src/legacy-pages/lists.tsx:57)"}, "fullDescription": {"text": "`apps/quantsync/src/legacy-pages/lists.tsx:57` calls `GET /api/lists/discover` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lists/discover`\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-5f7c000802b53e6b", "name": "Dangling fetch: GET /api/lists/${listId}/posts (apps/quantsync/src/legacy-pages/lists.tsx:77)", "shortDescription": {"text": "Dangling fetch: GET /api/lists/${listId}/posts (apps/quantsync/src/legacy-pages/lists.tsx:77)"}, "fullDescription": {"text": "`apps/quantsync/src/legacy-pages/lists.tsx:77` calls `GET /api/lists/${listId}/posts` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lists/<p>/posts`\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-810bf5493a8c293b", "name": "Dangling fetch: POST /api/lists (apps/quantsync/src/legacy-pages/lists.tsx:92)", "shortDescription": {"text": "Dangling fetch: POST /api/lists (apps/quantsync/src/legacy-pages/lists.tsx:92)"}, "fullDescription": {"text": "`apps/quantsync/src/legacy-pages/lists.tsx:92` calls `POST /api/lists` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lists`\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-b29bed1739934e3f", "name": "Dangling fetch: POST /api/lists/${listId}/follow (apps/quantsync/src/legacy-pages/lists.tsx:114)", "shortDescription": {"text": "Dangling fetch: POST /api/lists/${listId}/follow (apps/quantsync/src/legacy-pages/lists.tsx:114)"}, "fullDescription": {"text": "`apps/quantsync/src/legacy-pages/lists.tsx:114` calls `POST /api/lists/${listId}/follow` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lists/<p>/follow`\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-da61129e53659797", "name": "Dangling fetch: POST /api/lists/${listId}/pin (apps/quantsync/src/legacy-pages/lists.tsx:119)", "shortDescription": {"text": "Dangling fetch: POST /api/lists/${listId}/pin (apps/quantsync/src/legacy-pages/lists.tsx:119)"}, "fullDescription": {"text": "`apps/quantsync/src/legacy-pages/lists.tsx:119` calls `POST /api/lists/${listId}/pin` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lists/<p>/pin`\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-e458daa869c1aa05", "name": "Dangling fetch: DELETE /api/lists/${listId} (apps/quantsync/src/legacy-pages/lists.tsx:123)", "shortDescription": {"text": "Dangling fetch: DELETE /api/lists/${listId} (apps/quantsync/src/legacy-pages/lists.tsx:123)"}, "fullDescription": {"text": "`apps/quantsync/src/legacy-pages/lists.tsx:123` calls `DELETE /api/lists/${listId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lists/<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-c3393678090ec460", "name": "Dangling fetch: GET /api/spaces (apps/quantsync/src/legacy-pages/spaces.tsx:70)", "shortDescription": {"text": "Dangling fetch: GET /api/spaces (apps/quantsync/src/legacy-pages/spaces.tsx:70)"}, "fullDescription": {"text": "`apps/quantsync/src/legacy-pages/spaces.tsx:70` calls `GET /api/spaces` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/spaces`\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-325af0c3599f42b4", "name": "Dangling fetch: POST /api/spaces/${spaceId}/join (apps/quantsync/src/legacy-pages/spaces.tsx:91)", "shortDescription": {"text": "Dangling fetch: POST /api/spaces/${spaceId}/join (apps/quantsync/src/legacy-pages/spaces.tsx:91)"}, "fullDescription": {"text": "`apps/quantsync/src/legacy-pages/spaces.tsx:91` calls `POST /api/spaces/${spaceId}/join` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/spaces/<p>/join`\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-21d10f584e972e1d", "name": "Dangling fetch: POST /api/spaces/${activeSpace.id}/leave (apps/quantsync/src/legacy-pages/spaces.tsx:103)", "shortDescription": {"text": "Dangling fetch: POST /api/spaces/${activeSpace.id}/leave (apps/quantsync/src/legacy-pages/spaces.tsx:103)"}, "fullDescription": {"text": "`apps/quantsync/src/legacy-pages/spaces.tsx:103` calls `POST /api/spaces/${activeSpace.id}/leave` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/spaces/<p>/leave`\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-2b5cb1bbf59f1b43", "name": "Dangling fetch: POST /api/spaces/${activeSpace.id}/mic (apps/quantsync/src/legacy-pages/spaces.tsx:111)", "shortDescription": {"text": "Dangling fetch: POST /api/spaces/${activeSpace.id}/mic (apps/quantsync/src/legacy-pages/spaces.tsx:111)"}, "fullDescription": {"text": "`apps/quantsync/src/legacy-pages/spaces.tsx:111` calls `POST /api/spaces/${activeSpace.id}/mic` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/spaces/<p>/mic`\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-773a8cd2e03e112b", "name": "Dangling fetch: POST /api/spaces/${activeSpace.id}/hand (apps/quantsync/src/legacy-pages/spaces.tsx:121)", "shortDescription": {"text": "Dangling fetch: POST /api/spaces/${activeSpace.id}/hand (apps/quantsync/src/legacy-pages/spaces.tsx:121)"}, "fullDescription": {"text": "`apps/quantsync/src/legacy-pages/spaces.tsx:121` calls `POST /api/spaces/${activeSpace.id}/hand` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/spaces/<p>/hand`\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-e07440baa774b999", "name": "Dangling fetch: POST /api/spaces/${activeSpace.id}/react (apps/quantsync/src/legacy-pages/spaces.tsx:128)", "shortDescription": {"text": "Dangling fetch: POST /api/spaces/${activeSpace.id}/react (apps/quantsync/src/legacy-pages/spaces.tsx:128)"}, "fullDescription": {"text": "`apps/quantsync/src/legacy-pages/spaces.tsx:128` calls `POST /api/spaces/${activeSpace.id}/react` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/spaces/<p>/react`\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-9dfbfe96ad19c66d", "name": "Dangling fetch: POST /api/spaces (apps/quantsync/src/legacy-pages/spaces.tsx:149)", "shortDescription": {"text": "Dangling fetch: POST /api/spaces (apps/quantsync/src/legacy-pages/spaces.tsx:149)"}, "fullDescription": {"text": "`apps/quantsync/src/legacy-pages/spaces.tsx:149` calls `POST /api/spaces` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/spaces`\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-03a400d9e6b0b77b", "name": "Dangling fetch: GET /api/trending/hashtags?${params.toString()} (apps/quantsync/src/legacy-pages/trending.tsx:56)", "shortDescription": {"text": "Dangling fetch: GET /api/trending/hashtags?${params.toString()} (apps/quantsync/src/legacy-pages/trending.tsx:56)"}, "fullDescription": {"text": "`apps/quantsync/src/legacy-pages/trending.tsx:56` calls `GET /api/trending/hashtags?${params.toString()}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/trending/hashtags`\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-9357dae64be19fda", "name": "Dangling fetch: GET /api/trending/posts?${params.toString()} (apps/quantsync/src/legacy-pages/trending.tsx:57)", "shortDescription": {"text": "Dangling fetch: GET /api/trending/posts?${params.toString()} (apps/quantsync/src/legacy-pages/trending.tsx:57)"}, "fullDescription": {"text": "`apps/quantsync/src/legacy-pages/trending.tsx:57` calls `GET /api/trending/posts?${params.toString()}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/trending/posts`\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-d83364c31f7d8070", "name": "Dangling fetch: GET /api/trending/foryou (apps/quantsync/src/legacy-pages/trending.tsx:74)", "shortDescription": {"text": "Dangling fetch: GET /api/trending/foryou (apps/quantsync/src/legacy-pages/trending.tsx:74)"}, "fullDescription": {"text": "`apps/quantsync/src/legacy-pages/trending.tsx:74` calls `GET /api/trending/foryou` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/trending/foryou`\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-f85ec16c9a0bea8c", "name": "Dangling fetch: GET /api/search/suggest?q=${encodeURIComponent(q)} (apps/quantsync/src/legacy-pages/search.tsx:84)", "shortDescription": {"text": "Dangling fetch: GET /api/search/suggest?q=${encodeURIComponent(q)} (apps/quantsync/src/legacy-pages/search.tsx:84)"}, "fullDescription": {"text": "`apps/quantsync/src/legacy-pages/search.tsx:84` calls `GET /api/search/suggest?q=${encodeURIComponent(q)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/search/suggest`\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-0a4c36ac54d474b4", "name": "Dangling fetch: POST /api/users/${userId}/follow (apps/quantsync/src/legacy-pages/search.tsx:150)", "shortDescription": {"text": "Dangling fetch: POST /api/users/${userId}/follow (apps/quantsync/src/legacy-pages/search.tsx:150)"}, "fullDescription": {"text": "`apps/quantsync/src/legacy-pages/search.tsx:150` calls `POST /api/users/${userId}/follow` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/users/<p>/follow`\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-a170170b40610338", "name": "Dangling fetch: GET /api/bookmarks?${params.toString()} (apps/quantsync/src/legacy-pages/bookmarks.tsx:48)", "shortDescription": {"text": "Dangling fetch: GET /api/bookmarks?${params.toString()} (apps/quantsync/src/legacy-pages/bookmarks.tsx:48)"}, "fullDescription": {"text": "`apps/quantsync/src/legacy-pages/bookmarks.tsx:48` calls `GET /api/bookmarks?${params.toString()}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/bookmarks`\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-92168d14d353dd8c", "name": "Dangling fetch: GET /api/bookmarks/folders (apps/quantsync/src/legacy-pages/bookmarks.tsx:49)", "shortDescription": {"text": "Dangling fetch: GET /api/bookmarks/folders (apps/quantsync/src/legacy-pages/bookmarks.tsx:49)"}, "fullDescription": {"text": "`apps/quantsync/src/legacy-pages/bookmarks.tsx:49` calls `GET /api/bookmarks/folders` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/bookmarks/folders`\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-f9cf49fc954a2458", "name": "Dangling fetch: DELETE /api/posts/${postId}/bookmark (apps/quantsync/src/legacy-pages/bookmarks.tsx:70)", "shortDescription": {"text": "Dangling fetch: DELETE /api/posts/${postId}/bookmark (apps/quantsync/src/legacy-pages/bookmarks.tsx:70)"}, "fullDescription": {"text": "`apps/quantsync/src/legacy-pages/bookmarks.tsx:70` calls `DELETE /api/posts/${postId}/bookmark` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/posts/<p>/bookmark`\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-18f966112dc5aa55", "name": "Dangling fetch: POST /api/bookmarks/folders (apps/quantsync/src/legacy-pages/bookmarks.tsx:76)", "shortDescription": {"text": "Dangling fetch: POST /api/bookmarks/folders (apps/quantsync/src/legacy-pages/bookmarks.tsx:76)"}, "fullDescription": {"text": "`apps/quantsync/src/legacy-pages/bookmarks.tsx:76` calls `POST /api/bookmarks/folders` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/bookmarks/folders`\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-1e0cba242e4d27ff", "name": "Dangling fetch: POST /api/bookmarks/${postId}/move (apps/quantsync/src/legacy-pages/bookmarks.tsx:91)", "shortDescription": {"text": "Dangling fetch: POST /api/bookmarks/${postId}/move (apps/quantsync/src/legacy-pages/bookmarks.tsx:91)"}, "fullDescription": {"text": "`apps/quantsync/src/legacy-pages/bookmarks.tsx:91` calls `POST /api/bookmarks/${postId}/move` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/bookmarks/<p>/move`\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-30d0f712ab567ba5", "name": "Dangling fetch: POST /api/notifications/read-all (apps/quantsync/src/legacy-pages/notifications.tsx:68)", "shortDescription": {"text": "Dangling fetch: POST /api/notifications/read-all (apps/quantsync/src/legacy-pages/notifications.tsx:68)"}, "fullDescription": {"text": "`apps/quantsync/src/legacy-pages/notifications.tsx:68` calls `POST /api/notifications/read-all` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/notifications/read-all`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-905f4ae734c4e2b5", "name": "Dangling fetch: POST /api/notifications/${notifId}/read (apps/quantsync/src/legacy-pages/notifications.tsx:74)", "shortDescription": {"text": "Dangling fetch: POST /api/notifications/${notifId}/read (apps/quantsync/src/legacy-pages/notifications.tsx:74)"}, "fullDescription": {"text": "`apps/quantsync/src/legacy-pages/notifications.tsx:74` calls `POST /api/notifications/${notifId}/read` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/notifications/<p>/read`\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-3021cd876d51a1f6", "name": "Dangling fetch: GET /api/communities?${params.toString()} (apps/quantsync/src/legacy-pages/communities.tsx:79)", "shortDescription": {"text": "Dangling fetch: GET /api/communities?${params.toString()} (apps/quantsync/src/legacy-pages/communities.tsx:79)"}, "fullDescription": {"text": "`apps/quantsync/src/legacy-pages/communities.tsx:79` calls `GET /api/communities?${params.toString()}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/communities`\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-f607b4b3ead4890e", "name": "Dangling fetch: GET /api/communities/joined (apps/quantsync/src/legacy-pages/communities.tsx:94)", "shortDescription": {"text": "Dangling fetch: GET /api/communities/joined (apps/quantsync/src/legacy-pages/communities.tsx:94)"}, "fullDescription": {"text": "`apps/quantsync/src/legacy-pages/communities.tsx:94` calls `GET /api/communities/joined` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/communities/joined`\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-850fb6b0dda602a6", "name": "Dangling fetch: POST /api/communities/${communityId}/join (apps/quantsync/src/legacy-pages/communities.tsx:115)", "shortDescription": {"text": "Dangling fetch: POST /api/communities/${communityId}/join (apps/quantsync/src/legacy-pages/communities.tsx:115)"}, "fullDescription": {"text": "`apps/quantsync/src/legacy-pages/communities.tsx:115` calls `POST /api/communities/${communityId}/join` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/communities/<p>/join`\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-5e1de132949979d0", "name": "Dangling fetch: POST /api/communities/${communityId}/leave (apps/quantsync/src/legacy-pages/communities.tsx:136)", "shortDescription": {"text": "Dangling fetch: POST /api/communities/${communityId}/leave (apps/quantsync/src/legacy-pages/communities.tsx:136)"}, "fullDescription": {"text": "`apps/quantsync/src/legacy-pages/communities.tsx:136` calls `POST /api/communities/${communityId}/leave` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/communities/<p>/leave`\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-122cd6450b00965f", "name": "Dangling fetch: POST /api/communities (apps/quantsync/src/legacy-pages/communities.tsx:157)", "shortDescription": {"text": "Dangling fetch: POST /api/communities (apps/quantsync/src/legacy-pages/communities.tsx:157)"}, "fullDescription": {"text": "`apps/quantsync/src/legacy-pages/communities.tsx:157` calls `POST /api/communities` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/communities`\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-cf6791d6d49619b7", "name": "Dangling fetch: GET /api/anonymous/posts?${params.toString()} (apps/quantsync/src/legacy-pages/anonymous.tsx:51)", "shortDescription": {"text": "Dangling fetch: GET /api/anonymous/posts?${params.toString()} (apps/quantsync/src/legacy-pages/anonymous.tsx:51)"}, "fullDescription": {"text": "`apps/quantsync/src/legacy-pages/anonymous.tsx:51` calls `GET /api/anonymous/posts?${params.toString()}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/anonymous/posts`\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-02fd4ed55cd3b7ab", "name": "Dangling fetch: GET /api/anonymous/trust-profile (apps/quantsync/src/legacy-pages/anonymous.tsx:73)", "shortDescription": {"text": "Dangling fetch: GET /api/anonymous/trust-profile (apps/quantsync/src/legacy-pages/anonymous.tsx:73)"}, "fullDescription": {"text": "`apps/quantsync/src/legacy-pages/anonymous.tsx:73` calls `GET /api/anonymous/trust-profile` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/anonymous/trust-profile`\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-f6b805eace91223c", "name": "Dangling fetch: POST /api/anonymous/posts/${postId}/vote (apps/quantsync/src/legacy-pages/anonymous.tsx:106)", "shortDescription": {"text": "Dangling fetch: POST /api/anonymous/posts/${postId}/vote (apps/quantsync/src/legacy-pages/anonymous.tsx:106)"}, "fullDescription": {"text": "`apps/quantsync/src/legacy-pages/anonymous.tsx:106` calls `POST /api/anonymous/posts/${postId}/vote` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/anonymous/posts/<p>/vote`\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-d37970409eec0a98", "name": "Dangling fetch: POST /api/anonymous/posts/${postId}/reveal (apps/quantsync/src/legacy-pages/anonymous.tsx:115)", "shortDescription": {"text": "Dangling fetch: POST /api/anonymous/posts/${postId}/reveal (apps/quantsync/src/legacy-pages/anonymous.tsx:115)"}, "fullDescription": {"text": "`apps/quantsync/src/legacy-pages/anonymous.tsx:115` calls `POST /api/anonymous/posts/${postId}/reveal` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/anonymous/posts/<p>/reveal`\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-a057a971b760fab9", "name": "Dangling fetch: POST /api/anonymous/posts (apps/quantsync/src/legacy-pages/anonymous.tsx:131)", "shortDescription": {"text": "Dangling fetch: POST /api/anonymous/posts (apps/quantsync/src/legacy-pages/anonymous.tsx:131)"}, "fullDescription": {"text": "`apps/quantsync/src/legacy-pages/anonymous.tsx:131` calls `POST /api/anonymous/posts` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/anonymous/posts`\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-87666b466b833f18", "name": "Dangling fetch: GET /api/verification/status (apps/quantsync/src/legacy-pages/verification.tsx:83)", "shortDescription": {"text": "Dangling fetch: GET /api/verification/status (apps/quantsync/src/legacy-pages/verification.tsx:83)"}, "fullDescription": {"text": "`apps/quantsync/src/legacy-pages/verification.tsx:83` calls `GET /api/verification/status` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/verification/status`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8509bb016e628037", "name": "Dangling fetch: GET /api/verification/eligibility (apps/quantsync/src/legacy-pages/verification.tsx:84)", "shortDescription": {"text": "Dangling fetch: GET /api/verification/eligibility (apps/quantsync/src/legacy-pages/verification.tsx:84)"}, "fullDescription": {"text": "`apps/quantsync/src/legacy-pages/verification.tsx:84` calls `GET /api/verification/eligibility` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/verification/eligibility`\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-b7cb1260e334045d", "name": "Dangling fetch: GET /api/verification/requirements (apps/quantsync/src/legacy-pages/verification.tsx:85)", "shortDescription": {"text": "Dangling fetch: GET /api/verification/requirements (apps/quantsync/src/legacy-pages/verification.tsx:85)"}, "fullDescription": {"text": "`apps/quantsync/src/legacy-pages/verification.tsx:85` calls `GET /api/verification/requirements` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/verification/requirements`\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-cbc35c2da49a0738", "name": "Dangling fetch: POST /api/verification/apply (apps/quantsync/src/legacy-pages/verification.tsx:106)", "shortDescription": {"text": "Dangling fetch: POST /api/verification/apply (apps/quantsync/src/legacy-pages/verification.tsx:106)"}, "fullDescription": {"text": "`apps/quantsync/src/legacy-pages/verification.tsx:106` calls `POST /api/verification/apply` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/verification/apply`\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-b06f8be0337c1d7a", "name": "Dangling fetch: GET /api/posts/${postId} (apps/quantsync/src/legacy-pages/post/[id].tsx:65)", "shortDescription": {"text": "Dangling fetch: GET /api/posts/${postId} (apps/quantsync/src/legacy-pages/post/[id].tsx:65)"}, "fullDescription": {"text": "`apps/quantsync/src/legacy-pages/post/[id].tsx:65` calls `GET /api/posts/${postId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/posts/<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-ab2e0f985aba5058", "name": "Dangling fetch: GET /api/posts/${postId}/replies (apps/quantsync/src/legacy-pages/post/[id].tsx:66)", "shortDescription": {"text": "Dangling fetch: GET /api/posts/${postId}/replies (apps/quantsync/src/legacy-pages/post/[id].tsx:66)"}, "fullDescription": {"text": "`apps/quantsync/src/legacy-pages/post/[id].tsx:66` calls `GET /api/posts/${postId}/replies` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/posts/<p>/replies`\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-513b9b853fd91d89", "name": "Dangling fetch: POST /api/posts/${postId}/like (apps/quantsync/src/legacy-pages/post/[id].tsx:92)", "shortDescription": {"text": "Dangling fetch: POST /api/posts/${postId}/like (apps/quantsync/src/legacy-pages/post/[id].tsx:92)"}, "fullDescription": {"text": "`apps/quantsync/src/legacy-pages/post/[id].tsx:92` calls `POST /api/posts/${postId}/like` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/posts/<p>/like`\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-1736eff85357b2ac", "name": "Dangling fetch: POST /api/posts/${postId}/repost (apps/quantsync/src/legacy-pages/post/[id].tsx:106)", "shortDescription": {"text": "Dangling fetch: POST /api/posts/${postId}/repost (apps/quantsync/src/legacy-pages/post/[id].tsx:106)"}, "fullDescription": {"text": "`apps/quantsync/src/legacy-pages/post/[id].tsx:106` calls `POST /api/posts/${postId}/repost` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/posts/<p>/repost`\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-8122b4e22bb4f883", "name": "Dangling fetch: POST /api/posts/${postId}/bookmark (apps/quantsync/src/legacy-pages/post/[id].tsx:120)", "shortDescription": {"text": "Dangling fetch: POST /api/posts/${postId}/bookmark (apps/quantsync/src/legacy-pages/post/[id].tsx:120)"}, "fullDescription": {"text": "`apps/quantsync/src/legacy-pages/post/[id].tsx:120` calls `POST /api/posts/${postId}/bookmark` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/posts/<p>/bookmark`\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-0ca44309474cff5a", "name": "Dangling fetch: POST /api/posts/${targetId}/reply (apps/quantsync/src/legacy-pages/post/[id].tsx:128)", "shortDescription": {"text": "Dangling fetch: POST /api/posts/${targetId}/reply (apps/quantsync/src/legacy-pages/post/[id].tsx:128)"}, "fullDescription": {"text": "`apps/quantsync/src/legacy-pages/post/[id].tsx:128` calls `POST /api/posts/${targetId}/reply` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/posts/<p>/reply`\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-7fa7f4f0d0c14729", "name": "Dangling fetch: POST /api/posts/${replyId}/like (apps/quantsync/src/legacy-pages/post/[id].tsx:153)", "shortDescription": {"text": "Dangling fetch: POST /api/posts/${replyId}/like (apps/quantsync/src/legacy-pages/post/[id].tsx:153)"}, "fullDescription": {"text": "`apps/quantsync/src/legacy-pages/post/[id].tsx:153` calls `POST /api/posts/${replyId}/like` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/posts/<p>/like`\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-3dfe84335fed2461", "name": "Dangling fetch: GET /api/communities/${communityId} (apps/quantsync/src/legacy-pages/community/[id].tsx:69)", "shortDescription": {"text": "Dangling fetch: GET /api/communities/${communityId} (apps/quantsync/src/legacy-pages/community/[id].tsx:69)"}, "fullDescription": {"text": "`apps/quantsync/src/legacy-pages/community/[id].tsx:69` calls `GET /api/communities/${communityId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/communities/<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-587e6f453775a971", "name": "Dangling fetch: POST /api/communities/${communityId}/${action} (apps/quantsync/src/legacy-pages/community/[id].tsx:104)", "shortDescription": {"text": "Dangling fetch: POST /api/communities/${communityId}/${action} (apps/quantsync/src/legacy-pages/community/[id].tsx:104)"}, "fullDescription": {"text": "`apps/quantsync/src/legacy-pages/community/[id].tsx:104` calls `POST /api/communities/${communityId}/${action}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/communities/<p>/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ab3e0c26b3d2fd4d", "name": "Dangling fetch: POST /api/posts/${postId}/like (apps/quantsync/src/legacy-pages/community/[id].tsx:126)", "shortDescription": {"text": "Dangling fetch: POST /api/posts/${postId}/like (apps/quantsync/src/legacy-pages/community/[id].tsx:126)"}, "fullDescription": {"text": "`apps/quantsync/src/legacy-pages/community/[id].tsx:126` calls `POST /api/posts/${postId}/like` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/posts/<p>/like`\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-e9339fd60e533d9a", "name": "Dangling fetch: DELETE /api/communities/${communityId}/posts/${postId} (apps/quantsync/src/legacy-pages/community/[id].t", "shortDescription": {"text": "Dangling fetch: DELETE /api/communities/${communityId}/posts/${postId} (apps/quantsync/src/legacy-pages/community/[id].tsx:133)"}, "fullDescription": {"text": "`apps/quantsync/src/legacy-pages/community/[id].tsx:133` calls `DELETE /api/communities/${communityId}/posts/${postId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/communities/<p>/posts/<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-dc8bdf98b979e443", "name": "Dangling fetch: POST /api/communities/${communityId}/ban (apps/quantsync/src/legacy-pages/community/[id].tsx:153)", "shortDescription": {"text": "Dangling fetch: POST /api/communities/${communityId}/ban (apps/quantsync/src/legacy-pages/community/[id].tsx:153)"}, "fullDescription": {"text": "`apps/quantsync/src/legacy-pages/community/[id].tsx:153` calls `POST /api/communities/${communityId}/ban` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/communities/<p>/ban`\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-4db78ca6ee2af319", "name": "Dangling fetch: GET /api/users/${userId}/${tab} (apps/quantsync/src/legacy-pages/profile/[id].tsx:74)", "shortDescription": {"text": "Dangling fetch: GET /api/users/${userId}/${tab} (apps/quantsync/src/legacy-pages/profile/[id].tsx:74)"}, "fullDescription": {"text": "`apps/quantsync/src/legacy-pages/profile/[id].tsx:74` calls `GET /api/users/${userId}/${tab}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/users/<p>/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3b22e9a7b65f4b50", "name": "Dangling fetch: POST /api/users/${userId}/${action} (apps/quantsync/src/legacy-pages/profile/[id].tsx:107)", "shortDescription": {"text": "Dangling fetch: POST /api/users/${userId}/${action} (apps/quantsync/src/legacy-pages/profile/[id].tsx:107)"}, "fullDescription": {"text": "`apps/quantsync/src/legacy-pages/profile/[id].tsx:107` calls `POST /api/users/${userId}/${action}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/users/<p>/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c978aceb87853e85", "name": "Dangling fetch: POST /api/users/${userId}/block (apps/quantsync/src/legacy-pages/profile/[id].tsx:113)", "shortDescription": {"text": "Dangling fetch: POST /api/users/${userId}/block (apps/quantsync/src/legacy-pages/profile/[id].tsx:113)"}, "fullDescription": {"text": "`apps/quantsync/src/legacy-pages/profile/[id].tsx:113` calls `POST /api/users/${userId}/block` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/users/<p>/block`\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-e91db7d44f825776", "name": "Dangling fetch: POST /api/users/${userId}/mute (apps/quantsync/src/legacy-pages/profile/[id].tsx:120)", "shortDescription": {"text": "Dangling fetch: POST /api/users/${userId}/mute (apps/quantsync/src/legacy-pages/profile/[id].tsx:120)"}, "fullDescription": {"text": "`apps/quantsync/src/legacy-pages/profile/[id].tsx:120` calls `POST /api/users/${userId}/mute` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/users/<p>/mute`\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-f67a02d40049c06c", "name": "Dangling fetch: POST /api/spaces/${spaceId}/join (apps/quantsync/src/hooks/useSpaces.ts:210)", "shortDescription": {"text": "Dangling fetch: POST /api/spaces/${spaceId}/join (apps/quantsync/src/hooks/useSpaces.ts:210)"}, "fullDescription": {"text": "`apps/quantsync/src/hooks/useSpaces.ts:210` calls `POST /api/spaces/${spaceId}/join` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/spaces/<p>/join`\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-76c997a85bc542ed", "name": "Dangling fetch: POST /api/spaces/${space.id}/leave (apps/quantsync/src/hooks/useSpaces.ts:240)", "shortDescription": {"text": "Dangling fetch: POST /api/spaces/${space.id}/leave (apps/quantsync/src/hooks/useSpaces.ts:240)"}, "fullDescription": {"text": "`apps/quantsync/src/hooks/useSpaces.ts:240` calls `POST /api/spaces/${space.id}/leave` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/spaces/<p>/leave`\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-252b8f78d96f6dbd", "name": "Dangling fetch: POST /api/spaces/${space.id}/hand (apps/quantsync/src/hooks/useSpaces.ts:272)", "shortDescription": {"text": "Dangling fetch: POST /api/spaces/${space.id}/hand (apps/quantsync/src/hooks/useSpaces.ts:272)"}, "fullDescription": {"text": "`apps/quantsync/src/hooks/useSpaces.ts:272` calls `POST /api/spaces/${space.id}/hand` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/spaces/<p>/hand`\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-63e25915ef702883", "name": "Dangling fetch: POST /api/spaces/${space.id}/hand (apps/quantsync/src/hooks/useSpaces.ts:282)", "shortDescription": {"text": "Dangling fetch: POST /api/spaces/${space.id}/hand (apps/quantsync/src/hooks/useSpaces.ts:282)"}, "fullDescription": {"text": "`apps/quantsync/src/hooks/useSpaces.ts:282` calls `POST /api/spaces/${space.id}/hand` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/spaces/<p>/hand`\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-d1c6879326cfd7ba", "name": "Dangling fetch: POST /api/spaces/${space.id}/invite-speaker (apps/quantsync/src/hooks/useSpaces.ts:296)", "shortDescription": {"text": "Dangling fetch: POST /api/spaces/${space.id}/invite-speaker (apps/quantsync/src/hooks/useSpaces.ts:296)"}, "fullDescription": {"text": "`apps/quantsync/src/hooks/useSpaces.ts:296` calls `POST /api/spaces/${space.id}/invite-speaker` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/spaces/<p>/invite-speaker`\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-b31792f59b4d49f6", "name": "Dangling fetch: POST /api/spaces/${space.id}/remove-speaker (apps/quantsync/src/hooks/useSpaces.ts:308)", "shortDescription": {"text": "Dangling fetch: POST /api/spaces/${space.id}/remove-speaker (apps/quantsync/src/hooks/useSpaces.ts:308)"}, "fullDescription": {"text": "`apps/quantsync/src/hooks/useSpaces.ts:308` calls `POST /api/spaces/${space.id}/remove-speaker` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/spaces/<p>/remove-speaker`\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-0ed2aa2e194d8f19", "name": "Dangling fetch: POST /api/spaces/${space.id}/mute-speaker (apps/quantsync/src/hooks/useSpaces.ts:320)", "shortDescription": {"text": "Dangling fetch: POST /api/spaces/${space.id}/mute-speaker (apps/quantsync/src/hooks/useSpaces.ts:320)"}, "fullDescription": {"text": "`apps/quantsync/src/hooks/useSpaces.ts:320` calls `POST /api/spaces/${space.id}/mute-speaker` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/spaces/<p>/mute-speaker`\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-3e071409341f867d", "name": "Dangling fetch: POST /api/spaces/${space.id}/end (apps/quantsync/src/hooks/useSpaces.ts:331)", "shortDescription": {"text": "Dangling fetch: POST /api/spaces/${space.id}/end (apps/quantsync/src/hooks/useSpaces.ts:331)"}, "fullDescription": {"text": "`apps/quantsync/src/hooks/useSpaces.ts:331` calls `POST /api/spaces/${space.id}/end` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/spaces/<p>/end`\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-f2fd9a28a83c1d18", "name": "Dangling fetch: POST /api/spaces/${space.id}/recording/start (apps/quantsync/src/hooks/useSpaces.ts:338)", "shortDescription": {"text": "Dangling fetch: POST /api/spaces/${space.id}/recording/start (apps/quantsync/src/hooks/useSpaces.ts:338)"}, "fullDescription": {"text": "`apps/quantsync/src/hooks/useSpaces.ts:338` calls `POST /api/spaces/${space.id}/recording/start` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/spaces/<p>/recording/start`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-385a65c0475c73c7", "name": "Dangling fetch: POST /api/spaces/${space.id}/recording/stop (apps/quantsync/src/hooks/useSpaces.ts:344)", "shortDescription": {"text": "Dangling fetch: POST /api/spaces/${space.id}/recording/stop (apps/quantsync/src/hooks/useSpaces.ts:344)"}, "fullDescription": {"text": "`apps/quantsync/src/hooks/useSpaces.ts:344` calls `POST /api/spaces/${space.id}/recording/stop` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/spaces/<p>/recording/stop`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-901452e7cc2804a4", "name": "Dangling fetch: GET /api/communities/${communityId} (apps/quantsync/src/hooks/useCommunity.ts:78)", "shortDescription": {"text": "Dangling fetch: GET /api/communities/${communityId} (apps/quantsync/src/hooks/useCommunity.ts:78)"}, "fullDescription": {"text": "`apps/quantsync/src/hooks/useCommunity.ts:78` calls `GET /api/communities/${communityId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/communities/<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-5dec81ecdcbcc540", "name": "Dangling fetch: GET /api/communities/${communityId}/posts?${params.toString()} (apps/quantsync/src/hooks/useCommunity.ts", "shortDescription": {"text": "Dangling fetch: GET /api/communities/${communityId}/posts?${params.toString()} (apps/quantsync/src/hooks/useCommunity.ts:95)"}, "fullDescription": {"text": "`apps/quantsync/src/hooks/useCommunity.ts:95` calls `GET /api/communities/${communityId}/posts?${params.toString()}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/communities/<p>/posts`\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-50b490b827a67851", "name": "Dangling fetch: POST /api/communities/${communityId}/join (apps/quantsync/src/hooks/useCommunity.ts:115)", "shortDescription": {"text": "Dangling fetch: POST /api/communities/${communityId}/join (apps/quantsync/src/hooks/useCommunity.ts:115)"}, "fullDescription": {"text": "`apps/quantsync/src/hooks/useCommunity.ts:115` calls `POST /api/communities/${communityId}/join` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/communities/<p>/join`\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-bad1cf0b4f206bbb", "name": "Dangling fetch: POST /api/communities/${communityId}/leave (apps/quantsync/src/hooks/useCommunity.ts:125)", "shortDescription": {"text": "Dangling fetch: POST /api/communities/${communityId}/leave (apps/quantsync/src/hooks/useCommunity.ts:125)"}, "fullDescription": {"text": "`apps/quantsync/src/hooks/useCommunity.ts:125` calls `POST /api/communities/${communityId}/leave` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/communities/<p>/leave`\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-4fef83132942cf14", "name": "Dangling fetch: POST /api/communities/${communityId}/posts (apps/quantsync/src/hooks/useCommunity.ts:133)", "shortDescription": {"text": "Dangling fetch: POST /api/communities/${communityId}/posts (apps/quantsync/src/hooks/useCommunity.ts:133)"}, "fullDescription": {"text": "`apps/quantsync/src/hooks/useCommunity.ts:133` calls `POST /api/communities/${communityId}/posts` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/communities/<p>/posts`\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-6dd65a9b3bb97731", "name": "Dangling fetch: POST /api/posts/${postId}/like (apps/quantsync/src/hooks/useCommunity.ts:144)", "shortDescription": {"text": "Dangling fetch: POST /api/posts/${postId}/like (apps/quantsync/src/hooks/useCommunity.ts:144)"}, "fullDescription": {"text": "`apps/quantsync/src/hooks/useCommunity.ts:144` calls `POST /api/posts/${postId}/like` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/posts/<p>/like`\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-157d0e1978a31722", "name": "Dangling fetch: DELETE /api/communities/${communityId}/posts/${postId} (apps/quantsync/src/hooks/useCommunity.ts:148)", "shortDescription": {"text": "Dangling fetch: DELETE /api/communities/${communityId}/posts/${postId} (apps/quantsync/src/hooks/useCommunity.ts:148)"}, "fullDescription": {"text": "`apps/quantsync/src/hooks/useCommunity.ts:148` calls `DELETE /api/communities/${communityId}/posts/${postId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/communities/<p>/posts/<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-f6b254c7f8f1c7e9", "name": "Dangling fetch: POST /api/communities/${communityId}/ban (apps/quantsync/src/hooks/useCommunity.ts:157)", "shortDescription": {"text": "Dangling fetch: POST /api/communities/${communityId}/ban (apps/quantsync/src/hooks/useCommunity.ts:157)"}, "fullDescription": {"text": "`apps/quantsync/src/hooks/useCommunity.ts:157` calls `POST /api/communities/${communityId}/ban` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/communities/<p>/ban`\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-b63402d40770546d", "name": "Dangling fetch: PUT /api/communities/${communityId}/rules (apps/quantsync/src/hooks/useCommunity.ts:165)", "shortDescription": {"text": "Dangling fetch: PUT /api/communities/${communityId}/rules (apps/quantsync/src/hooks/useCommunity.ts:165)"}, "fullDescription": {"text": "`apps/quantsync/src/hooks/useCommunity.ts:165` calls `PUT /api/communities/${communityId}/rules` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/communities/<p>/rules`\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-1090aa0b66041ae4", "name": "Dangling fetch: POST /api/communities/${communityId}/moderators (apps/quantsync/src/hooks/useCommunity.ts:176)", "shortDescription": {"text": "Dangling fetch: POST /api/communities/${communityId}/moderators (apps/quantsync/src/hooks/useCommunity.ts:176)"}, "fullDescription": {"text": "`apps/quantsync/src/hooks/useCommunity.ts:176` calls `POST /api/communities/${communityId}/moderators` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/communities/<p>/moderators`\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-fcb5108a79fe64cc", "name": "Dangling fetch: DELETE /api/communities/${communityId}/moderators/${userId} (apps/quantsync/src/hooks/useCommunity.ts:18", "shortDescription": {"text": "Dangling fetch: DELETE /api/communities/${communityId}/moderators/${userId} (apps/quantsync/src/hooks/useCommunity.ts:185)"}, "fullDescription": {"text": "`apps/quantsync/src/hooks/useCommunity.ts:185` calls `DELETE /api/communities/${communityId}/moderators/${userId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/communities/<p>/moderators/<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-c5845066cf2febb4", "name": "Dangling fetch: PUT /api/communities/${communityId} (apps/quantsync/src/hooks/useCommunity.ts:190)", "shortDescription": {"text": "Dangling fetch: PUT /api/communities/${communityId} (apps/quantsync/src/hooks/useCommunity.ts:190)"}, "fullDescription": {"text": "`apps/quantsync/src/hooks/useCommunity.ts:190` calls `PUT /api/communities/${communityId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/communities/<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-07e732a884784b5a", "name": "Dangling fetch: POST /api/posts/${postId}/like (apps/quantsync/src/hooks/useFeed.ts:195)", "shortDescription": {"text": "Dangling fetch: POST /api/posts/${postId}/like (apps/quantsync/src/hooks/useFeed.ts:195)"}, "fullDescription": {"text": "`apps/quantsync/src/hooks/useFeed.ts:195` calls `POST /api/posts/${postId}/like` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/posts/<p>/like`\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-de4c21afa1ca1e6b", "name": "Dangling fetch: POST /api/posts/${postId}/repost (apps/quantsync/src/hooks/useFeed.ts:210)", "shortDescription": {"text": "Dangling fetch: POST /api/posts/${postId}/repost (apps/quantsync/src/hooks/useFeed.ts:210)"}, "fullDescription": {"text": "`apps/quantsync/src/hooks/useFeed.ts:210` calls `POST /api/posts/${postId}/repost` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/posts/<p>/repost`\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-8ed859c0dff527fb", "name": "Dangling fetch: POST /api/posts/${postId}/bookmark (apps/quantsync/src/hooks/useFeed.ts:224)", "shortDescription": {"text": "Dangling fetch: POST /api/posts/${postId}/bookmark (apps/quantsync/src/hooks/useFeed.ts:224)"}, "fullDescription": {"text": "`apps/quantsync/src/hooks/useFeed.ts:224` calls `POST /api/posts/${postId}/bookmark` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/posts/<p>/bookmark`\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-e3a4fc97a928a68f", "name": "Dangling fetch: DELETE /api/posts/${postId} (apps/quantsync/src/hooks/useFeed.ts:229)", "shortDescription": {"text": "Dangling fetch: DELETE /api/posts/${postId} (apps/quantsync/src/hooks/useFeed.ts:229)"}, "fullDescription": {"text": "`apps/quantsync/src/hooks/useFeed.ts:229` calls `DELETE /api/posts/${postId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/posts/<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-7742804696913a36", "name": "Dangling fetch: GET /api/analytics/agents/top (apps/quantai/src/components/AgentPerformance.tsx:20)", "shortDescription": {"text": "Dangling fetch: GET /api/analytics/agents/top (apps/quantai/src/components/AgentPerformance.tsx:20)"}, "fullDescription": {"text": "`apps/quantai/src/components/AgentPerformance.tsx:20` calls `GET /api/analytics/agents/top` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/analytics/agents/top`\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-ee5ee1fc687f3b0b", "name": "Dangling fetch: POST /api/marketplace/${agentId}/install (apps/quantai/src/components/Marketplace.tsx:44)", "shortDescription": {"text": "Dangling fetch: POST /api/marketplace/${agentId}/install (apps/quantai/src/components/Marketplace.tsx:44)"}, "fullDescription": {"text": "`apps/quantai/src/components/Marketplace.tsx:44` calls `POST /api/marketplace/${agentId}/install` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/marketplace/<p>/install`\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-abff0063ec9148f8", "name": "Dangling fetch: POST /api/agentic/agents/run (apps/quantai/src/components/AgentDashboard.tsx:42)", "shortDescription": {"text": "Dangling fetch: POST /api/agentic/agents/run (apps/quantai/src/components/AgentDashboard.tsx:42)"}, "fullDescription": {"text": "`apps/quantai/src/components/AgentDashboard.tsx:42` calls `POST /api/agentic/agents/run` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/agentic/agents/run`\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-2278060231c0923f", "name": "Dangling fetch: POST /api/agentic/workflows (apps/quantai/src/components/WorkflowDashboard.tsx:13)", "shortDescription": {"text": "Dangling fetch: POST /api/agentic/workflows (apps/quantai/src/components/WorkflowDashboard.tsx:13)"}, "fullDescription": {"text": "`apps/quantai/src/components/WorkflowDashboard.tsx:13` calls `POST /api/agentic/workflows` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/agentic/workflows`\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-aa85206b615ad162", "name": "Dangling fetch: POST /api/assistant/chat (apps/quantai/src/app/ask/page.tsx:40)", "shortDescription": {"text": "Dangling fetch: POST /api/assistant/chat (apps/quantai/src/app/ask/page.tsx:40)"}, "fullDescription": {"text": "`apps/quantai/src/app/ask/page.tsx:40` calls `POST /api/assistant/chat` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/assistant/chat`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c6f00a834d265379", "name": "Dangling fetch: GET /data (packages/agent-runtime/src/__tests__/device/tier1-api.test.ts:29)", "shortDescription": {"text": "Dangling fetch: GET /data (packages/agent-runtime/src/__tests__/device/tier1-api.test.ts:29)"}, "fullDescription": {"text": "`packages/agent-runtime/src/__tests__/device/tier1-api.test.ts:29` calls `GET /data` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:callApi\nNormalized path used for matching: `/data`\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-dd2e6f615ba6f584", "name": "Dangling fetch: GET /unknown (packages/agent-runtime/src/__tests__/device/tier1-api.test.ts:37)", "shortDescription": {"text": "Dangling fetch: GET /unknown (packages/agent-runtime/src/__tests__/device/tier1-api.test.ts:37)"}, "fullDescription": {"text": "`packages/agent-runtime/src/__tests__/device/tier1-api.test.ts:37` calls `GET /unknown` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:callApi\nNormalized path used for matching: `/unknown`\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-1b7d5300057fdc92", "name": "Dangling fetch: POST https://api.openai.com/v1/moderations (services/moderation-worker/src/main.ts:104)", "shortDescription": {"text": "Dangling fetch: POST https://api.openai.com/v1/moderations (services/moderation-worker/src/main.ts:104)"}, "fullDescription": {"text": "`services/moderation-worker/src/main.ts:104` calls `POST https://api.openai.com/v1/moderations` 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.openai.com/v1/moderations`\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-71bbbcde54147323", "name": "Unused endpoint: POST /suggest-titles", "shortDescription": {"text": "Unused endpoint: POST /suggest-titles"}, "fullDescription": {"text": "`apps/quantedits/backend/routes/ai.ts` declares `POST /suggest-titles` 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-88623a7fde233a62", "name": "Unused endpoint: POST /captions", "shortDescription": {"text": "Unused endpoint: POST /captions"}, "fullDescription": {"text": "`apps/quantedits/backend/routes/ai.ts` declares `POST /captions` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7a009b1a56794f45", "name": "Unused endpoint: POST /", "shortDescription": {"text": "Unused endpoint: POST /"}, "fullDescription": {"text": "`apps/quantedits/backend/routes/assets.ts` declares `POST /` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-176b92c16d18d938", "name": "Unused endpoint: GET /project/:projectId", "shortDescription": {"text": "Unused endpoint: GET /project/:projectId"}, "fullDescription": {"text": "`apps/quantedits/backend/routes/assets.ts` declares `GET /project/:projectId` 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-fbf37139aa25d03c", "name": "Unused endpoint: POST /upload-url", "shortDescription": {"text": "Unused endpoint: POST /upload-url"}, "fullDescription": {"text": "`apps/quantedits/backend/routes/assets.ts` declares `POST /upload-url` 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/quantedits/backend/routes/projects.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-94b275825d72ce35", "name": "Unused endpoint: POST /smart-replies", "shortDescription": {"text": "Unused endpoint: POST /smart-replies"}, "fullDescription": {"text": "`apps/quantchat/backend/routes/ai.ts` declares `POST /smart-replies` 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-d878fa5259ab02d4", "name": "Unused endpoint: POST /initiate", "shortDescription": {"text": "Unused endpoint: POST /initiate"}, "fullDescription": {"text": "`apps/quantchat/backend/routes/calls.ts` declares `POST /initiate` 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-5e798566755a8932", "name": "Unused endpoint: POST /group", "shortDescription": {"text": "Unused endpoint: POST /group"}, "fullDescription": {"text": "`apps/quantchat/backend/routes/calls.ts` declares `POST /group` 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-0d3a434fedb1fa40", "name": "Unused endpoint: GET /chat", "shortDescription": {"text": "Unused endpoint: GET /chat"}, "fullDescription": {"text": "`apps/quantchat/backend/routes/websocket.ts` declares `GET /chat` 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-ce07d245de360d7d", "name": "Unused endpoint: GET /presence", "shortDescription": {"text": "Unused endpoint: GET /presence"}, "fullDescription": {"text": "`apps/quantchat/backend/routes/websocket.ts` declares `GET /presence` 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-0f53365bbb1c16b8", "name": "Unused endpoint: POST /keys", "shortDescription": {"text": "Unused endpoint: POST /keys"}, "fullDescription": {"text": "`apps/quantchat/backend/routes/encryption.ts` declares `POST /keys` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-92efb2dc9205e7a4", "name": "Unused endpoint: POST /sessions", "shortDescription": {"text": "Unused endpoint: POST /sessions"}, "fullDescription": {"text": "`apps/quantchat/backend/routes/encryption.ts` declares `POST /sessions` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2a77854ef714f665", "name": "Unused endpoint: POST /auth/otp/request", "shortDescription": {"text": "Unused endpoint: POST /auth/otp/request"}, "fullDescription": {"text": "`apps/quantchat/src/services/api-client.ts` declares `POST /auth/otp/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-9640328f1b3a2f00", "name": "Unused endpoint: POST /auth/link-quantmail", "shortDescription": {"text": "Unused endpoint: POST /auth/link-quantmail"}, "fullDescription": {"text": "`apps/quantchat/src/services/api-client.ts` declares `POST /auth/link-quantmail` 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-b119bb52041e0c8d", "name": "Unused endpoint: GET /auth/profile", "shortDescription": {"text": "Unused endpoint: GET /auth/profile"}, "fullDescription": {"text": "`apps/quantchat/src/services/api-client.ts` declares `GET /auth/profile` 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-9143464946a01de5", "name": "Unused endpoint: PUT /auth/profile", "shortDescription": {"text": "Unused endpoint: PUT /auth/profile"}, "fullDescription": {"text": "`apps/quantchat/src/services/api-client.ts` declares `PUT /auth/profile` 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-c059f57186114027", "name": "Unused endpoint: POST /auth/logout", "shortDescription": {"text": "Unused endpoint: POST /auth/logout"}, "fullDescription": {"text": "`apps/quantchat/src/services/api-client.ts` declares `POST /auth/logout` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6f0fc82742855439", "name": "Unused endpoint: GET /conversations", "shortDescription": {"text": "Unused endpoint: GET /conversations"}, "fullDescription": {"text": "`apps/quantchat/src/services/api-client.ts` declares `GET /conversations` 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-8ee7ac4b5c5364e8", "name": "Unused endpoint: POST /conversations", "shortDescription": {"text": "Unused endpoint: POST /conversations"}, "fullDescription": {"text": "`apps/quantchat/src/services/api-client.ts` declares `POST /conversations` 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-02c674b3fe3d15e7", "name": "Unused endpoint: GET /stories/me", "shortDescription": {"text": "Unused endpoint: GET /stories/me"}, "fullDescription": {"text": "`apps/quantchat/src/services/api-client.ts` declares `GET /stories/me` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a770f2c42555b943", "name": "Unused endpoint: POST /highlights", "shortDescription": {"text": "Unused endpoint: POST /highlights"}, "fullDescription": {"text": "`apps/quantchat/src/services/api-client.ts` declares `POST /highlights` 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-1c4ffc6656593a98", "name": "Unused endpoint: GET /close-friends", "shortDescription": {"text": "Unused endpoint: GET /close-friends"}, "fullDescription": {"text": "`apps/quantchat/src/services/api-client.ts` declares `GET /close-friends` 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-b89468a42b666f81", "name": "Unused endpoint: PUT /close-friends", "shortDescription": {"text": "Unused endpoint: PUT /close-friends"}, "fullDescription": {"text": "`apps/quantchat/src/services/api-client.ts` declares `PUT /close-friends` 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-94abdc3e6eb8f544", "name": "Unused endpoint: POST /snaps", "shortDescription": {"text": "Unused endpoint: POST /snaps"}, "fullDescription": {"text": "`apps/quantchat/src/services/api-client.ts` declares `POST /snaps` 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-bdeedf7d9def86e5", "name": "Unused endpoint: GET /streaks", "shortDescription": {"text": "Unused endpoint: GET /streaks"}, "fullDescription": {"text": "`apps/quantchat/src/services/api-client.ts` declares `GET /streaks` 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-b253facae3c4682f", "name": "Unused endpoint: POST /calls", "shortDescription": {"text": "Unused endpoint: POST /calls"}, "fullDescription": {"text": "`apps/quantchat/src/services/api-client.ts` declares `POST /calls` 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-2c32862bde9a5360", "name": "Unused endpoint: GET /calls/history", "shortDescription": {"text": "Unused endpoint: GET /calls/history"}, "fullDescription": {"text": "`apps/quantchat/src/services/api-client.ts` declares `GET /calls/history` 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-651cd7d3c2c3dfca", "name": "Unused endpoint: GET /calls/ice-servers", "shortDescription": {"text": "Unused endpoint: GET /calls/ice-servers"}, "fullDescription": {"text": "`apps/quantchat/src/services/api-client.ts` declares `GET /calls/ice-servers` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3dfaaa08dd3fb680", "name": "Unused endpoint: POST /groups", "shortDescription": {"text": "Unused endpoint: POST /groups"}, "fullDescription": {"text": "`apps/quantchat/src/services/api-client.ts` declares `POST /groups` 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-e3e7e5fea4199d0c", "name": "Unused endpoint: GET /groups", "shortDescription": {"text": "Unused endpoint: GET /groups"}, "fullDescription": {"text": "`apps/quantchat/src/services/api-client.ts` declares `GET /groups` 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-59fc96a44decafe2", "name": "Unused endpoint: POST /groups/join", "shortDescription": {"text": "Unused endpoint: POST /groups/join"}, "fullDescription": {"text": "`apps/quantchat/src/services/api-client.ts` declares `POST /groups/join` 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-b90c0f149d3e6a3c", "name": "Unused endpoint: GET /discover", "shortDescription": {"text": "Unused endpoint: GET /discover"}, "fullDescription": {"text": "`apps/quantchat/src/services/api-client.ts` declares `GET /discover` 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-30562755f5bc0073", "name": "Unused endpoint: GET /discover/trending", "shortDescription": {"text": "Unused endpoint: GET /discover/trending"}, "fullDescription": {"text": "`apps/quantchat/src/services/api-client.ts` declares `GET /discover/trending` 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-dd8c0936ea872340", "name": "Unused endpoint: GET /discover/publishers", "shortDescription": {"text": "Unused endpoint: GET /discover/publishers"}, "fullDescription": {"text": "`apps/quantchat/src/services/api-client.ts` declares `GET /discover/publishers` 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-5719b2fbd9a411a2", "name": "Unused endpoint: GET /filters", "shortDescription": {"text": "Unused endpoint: GET /filters"}, "fullDescription": {"text": "`apps/quantchat/src/services/api-client.ts` declares `GET /filters` 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-b482f1edbe179202", "name": "Unused endpoint: GET /filters/trending", "shortDescription": {"text": "Unused endpoint: GET /filters/trending"}, "fullDescription": {"text": "`apps/quantchat/src/services/api-client.ts` declares `GET /filters/trending` 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-31ec2d524d679686", "name": "Unused endpoint: POST /ai/smart-replies", "shortDescription": {"text": "Unused endpoint: POST /ai/smart-replies"}, "fullDescription": {"text": "`apps/quantchat/src/services/api-client.ts` declares `POST /ai/smart-replies` 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-9a33d191aef15085", "name": "Unused endpoint: POST /ai/translate", "shortDescription": {"text": "Unused endpoint: POST /ai/translate"}, "fullDescription": {"text": "`apps/quantchat/src/services/api-client.ts` declares `POST /ai/translate` 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-f85a32feeafd78c9", "name": "Unused endpoint: POST /ai/chat", "shortDescription": {"text": "Unused endpoint: POST /ai/chat"}, "fullDescription": {"text": "`apps/quantchat/src/services/api-client.ts` declares `POST /ai/chat` 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-256131983c7f4cd8", "name": "Unused endpoint: GET /bitmoji/me", "shortDescription": {"text": "Unused endpoint: GET /bitmoji/me"}, "fullDescription": {"text": "`apps/quantchat/src/services/api-client.ts` declares `GET /bitmoji/me` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ba074cbc68e23fea", "name": "Unused endpoint: POST /bitmoji", "shortDescription": {"text": "Unused endpoint: POST /bitmoji"}, "fullDescription": {"text": "`apps/quantchat/src/services/api-client.ts` declares `POST /bitmoji` 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-4fb8cccb55073f5c", "name": "Unused endpoint: PUT /bitmoji", "shortDescription": {"text": "Unused endpoint: PUT /bitmoji"}, "fullDescription": {"text": "`apps/quantchat/src/services/api-client.ts` declares `PUT /bitmoji` 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-1bfaef6611039633", "name": "Unused endpoint: POST /map/location", "shortDescription": {"text": "Unused endpoint: POST /map/location"}, "fullDescription": {"text": "`apps/quantchat/src/services/api-client.ts` declares `POST /map/location` 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-7decfc593c6891e5", "name": "Unused endpoint: GET /map/places", "shortDescription": {"text": "Unused endpoint: GET /map/places"}, "fullDescription": {"text": "`apps/quantchat/src/services/api-client.ts` declares `GET /map/places` 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-e51647bb43596a84", "name": "Unused endpoint: POST /map/ghost-mode", "shortDescription": {"text": "Unused endpoint: POST /map/ghost-mode"}, "fullDescription": {"text": "`apps/quantchat/src/services/api-client.ts` declares `POST /map/ghost-mode` 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-eeefd9c38a969305", "name": "Unused endpoint: POST /filters", "shortDescription": {"text": "Unused endpoint: POST /filters"}, "fullDescription": {"text": "`apps/quantneon/backend/routes/ai.ts` declares `POST /filters` 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-9a88e32ba95dda7c", "name": "Unused endpoint: POST /apply", "shortDescription": {"text": "Unused endpoint: POST /apply"}, "fullDescription": {"text": "`apps/quantneon/backend/routes/filters.ts` declares `POST /apply` 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-c54d68079daf388d", "name": "Unused endpoint: GET /user/:userId", "shortDescription": {"text": "Unused endpoint: GET /user/:userId"}, "fullDescription": {"text": "`apps/quantneon/backend/routes/stories.ts` declares `GET /user/:userId` 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-791cca043ca5e0b3", "name": "Unused endpoint: POST /expire", "shortDescription": {"text": "Unused endpoint: POST /expire"}, "fullDescription": {"text": "`apps/quantneon/backend/routes/stories.ts` declares `POST /expire` 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/17660"}, "properties": {"repository": "quantchat-yy/Quant-Ecosystem", "repoUrl": "https://github.com/quantchat-yy/Quant-Ecosystem", "branch": "main"}, "results": [{"ruleId": "scanner-e0b6e93fd27a1cb8", "level": "note", "message": {"text": "Possibly dead Python function: forward"}, "properties": {"repobilityId": "ea414cce7f8e5874", "scanner": "scanner-primary", "fingerprint": "e0b6e93fd27a1cb8", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/ml/train_mmoe.py:458"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-f524bf73c17f4587", "level": "note", "message": {"text": "Possibly dead Python function: forward"}, "properties": {"repobilityId": "ea414cce7f8e5874", "scanner": "scanner-primary", "fingerprint": "f524bf73c17f4587", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/ml/train_two_tower.py:129"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-7eb098a3ba4ce02e", "level": "note", "message": {"text": "Possibly dead Python function: create_dummy_input_two_tower"}, "properties": {"repobilityId": "fae513393928867a", "scanner": "scanner-primary", "fingerprint": "7eb098a3ba4ce02e", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/ml/export_to_onnx.py:89"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-7050c8118abd64d6", "level": "note", "message": {"text": "Possibly dead Python function: create_dummy_input_mmoe"}, "properties": {"repobilityId": "7b8870772534dbba", "scanner": "scanner-primary", "fingerprint": "7050c8118abd64d6", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/ml/export_to_onnx.py:99"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-2b7f9387f7586187", "level": "note", "message": {"text": "Possibly dead Python function: forward"}, "properties": {"repobilityId": "ea414cce7f8e5874", "scanner": "scanner-primary", "fingerprint": "2b7f9387f7586187", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/ml/export_to_onnx.py:172"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-bbbd59697ccd08e5", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantedits/src/components/EffectsPanel.tsx:70"}, "properties": {"repobilityId": "7a108c8900dd7777", "scanner": "scanner-primary", "fingerprint": "bbbd59697ccd08e5", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-afc8e9f4b381be88", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 apps/quantedits/src/components/EffectsPanel.tsx:28"}, "properties": {"repobilityId": "8f8d8e1db27e6689", "scanner": "scanner-primary", "fingerprint": "afc8e9f4b381be88", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-80b3a319067e56e4", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 apps/quantedits/src/components/ToolPanel.tsx:38"}, "properties": {"repobilityId": "8f1fb323b0f66c3f", "scanner": "scanner-primary", "fingerprint": "80b3a319067e56e4", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-b083a92070c61d90", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantedits/src/components/LayerPanel.tsx:137"}, "properties": {"repobilityId": "60ab67c5522fc9ed", "scanner": "scanner-primary", "fingerprint": "b083a92070c61d90", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-471d91816fb9259c", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 apps/quantedits/src/components/LayerPanel.tsx:43"}, "properties": {"repobilityId": "1977f4d3151d995e", "scanner": "scanner-primary", "fingerprint": "471d91816fb9259c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-8700bda944dcbb3f", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/quantedits/src/providers/brand-provider.tsx:17"}, "properties": {"repobilityId": "94a34608049f800d", "scanner": "scanner-primary", "fingerprint": "8700bda944dcbb3f", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-71f0764e9c0a0bae", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 apps/quantedits/src/pages/assets.tsx:288"}, "properties": {"repobilityId": "6d86f24a939d8872", "scanner": "scanner-primary", "fingerprint": "71f0764e9c0a0bae", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-36ed59546940e60e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantedits/src/pages/index.tsx:122"}, "properties": {"repobilityId": "287cc0d48613f8d6", "scanner": "scanner-primary", "fingerprint": "36ed59546940e60e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-7680ca5624fdc16d", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 apps/quantchat/backend/routes/messages.ts:58"}, "properties": {"repobilityId": "35356dde20d6b120", "scanner": "scanner-primary", "fingerprint": "7680ca5624fdc16d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-7978805f4e3490d5", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 apps/quantchat/src/__tests__/realtime-chat.test.ts:3"}, "properties": {"repobilityId": "d37f85261f5cceb8", "scanner": "scanner-primary", "fingerprint": "7978805f4e3490d5", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-c8ac03a692bf3533", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 apps/quantchat/src/components/SnapMap.tsx:96"}, "properties": {"repobilityId": "025a455d4e98de82", "scanner": "scanner-primary", "fingerprint": "c8ac03a692bf3533", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-3b73cdb8ce43c677", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 apps/quantchat/src/components/Camera.tsx:107"}, "properties": {"repobilityId": "013f334558e73ffd", "scanner": "scanner-primary", "fingerprint": "3b73cdb8ce43c677", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-e00ae6ac2ae8e123", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 apps/quantchat/src/components/AIAssistant.tsx:95"}, "properties": {"repobilityId": "f57758868dc0deb9", "scanner": "scanner-primary", "fingerprint": "e00ae6ac2ae8e123", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-14319700ba3a71e3", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantchat/src/components/LinkPreviewCard.tsx:37"}, "properties": {"repobilityId": "7d5f11999c430e17", "scanner": "scanner-primary", "fingerprint": "14319700ba3a71e3", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-59e5e5149248b745", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 apps/quantchat/src/components/MessageInput.tsx:97"}, "properties": {"repobilityId": "ae7624189531618b", "scanner": "scanner-primary", "fingerprint": "59e5e5149248b745", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-c6a1220f8e3936ab", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/quantchat/src/providers/brand-provider.tsx:19"}, "properties": {"repobilityId": "0de7ae3afc01a541", "scanner": "scanner-primary", "fingerprint": "c6a1220f8e3936ab", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-3c405a7b59fdb77c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantchat/src/app/page.tsx:134"}, "properties": {"repobilityId": "68bba072f446d891", "scanner": "scanner-primary", "fingerprint": "3c405a7b59fdb77c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-6983d55b219fd710", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantchat/src/app/chat/[id]/page.tsx:448"}, "properties": {"repobilityId": "b0f89f93f52b23d3", "scanner": "scanner-primary", "fingerprint": "6983d55b219fd710", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-76b59f0ac75c9ec8", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantchat/src/app/stories/page.tsx:71"}, "properties": {"repobilityId": "e2ff3bb74ddf5922", "scanner": "scanner-primary", "fingerprint": "76b59f0ac75c9ec8", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a7f1fd6d62ad30ff", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantneon/src/components/MiniGameLobby.tsx:166"}, "properties": {"repobilityId": "744031f66fe67e83", "scanner": "scanner-primary", "fingerprint": "a7f1fd6d62ad30ff", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-720ecb03985086d4", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 apps/quantneon/src/components/CollabInvite.tsx:83"}, "properties": {"repobilityId": "4e86ced65b00f85a", "scanner": "scanner-primary", "fingerprint": "720ecb03985086d4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-a6c6e7a98e80418d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantneon/src/components/ShoppingTag.tsx:151"}, "properties": {"repobilityId": "58a8517328db9feb", "scanner": "scanner-primary", "fingerprint": "a6c6e7a98e80418d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ef936bddb00c766c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantneon/src/components/ShoppingCard.tsx:46"}, "properties": {"repobilityId": "6767498515d8c30f", "scanner": "scanner-primary", "fingerprint": "ef936bddb00c766c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-74ae6e4709fec6e8", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantneon/src/components/FilterGallery.tsx:63"}, "properties": {"repobilityId": "ea1ca7695978514c", "scanner": "scanner-primary", "fingerprint": "74ae6e4709fec6e8", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-529de767978308c7", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantneon/src/components/StoryRing.tsx:46"}, "properties": {"repobilityId": "e974b7897df123fb", "scanner": "scanner-primary", "fingerprint": "529de767978308c7", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-636778a5e6616037", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 apps/quantneon/src/components/ReelCreator.tsx:123"}, "properties": {"repobilityId": "be0f7e17812da484", "scanner": "scanner-primary", "fingerprint": "636778a5e6616037", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-15d6c05dced80673", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantneon/src/components/ReelPlayer.tsx:64"}, "properties": {"repobilityId": "cf984682d0a2b1d0", "scanner": "scanner-primary", "fingerprint": "15d6c05dced80673", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b694e8bebdcfa9b9", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantneon/src/pages/messages.tsx:364"}, "properties": {"repobilityId": "5e522468a1600ae0", "scanner": "scanner-primary", "fingerprint": "b694e8bebdcfa9b9", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-41e66c5b11508c03", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantneon/src/pages/shop.tsx:94"}, "properties": {"repobilityId": "398a685221101344", "scanner": "scanner-primary", "fingerprint": "41e66c5b11508c03", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4916186ccb9eba9e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantneon/src/pages/index.tsx:116"}, "properties": {"repobilityId": "2cda31dea69e8d1f", "scanner": "scanner-primary", "fingerprint": "4916186ccb9eba9e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-22cb41b20d17c419", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantneon/src/pages/collab.tsx:286"}, "properties": {"repobilityId": "b13ba2bb89f90976", "scanner": "scanner-primary", "fingerprint": "22cb41b20d17c419", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-7068423129a3874b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantneon/src/pages/shopping.tsx:352"}, "properties": {"repobilityId": "d696b612768fe943", "scanner": "scanner-primary", "fingerprint": "7068423129a3874b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a53cb783e5f047a0", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 apps/quantneon/src/pages/highlights.tsx:356"}, "properties": {"repobilityId": "54ecc085d3fd3c21", "scanner": "scanner-primary", "fingerprint": "a53cb783e5f047a0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-e6087a5c76198fb6", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantneon/src/pages/highlights.tsx:322"}, "properties": {"repobilityId": "46f3792931ea1349", "scanner": "scanner-primary", "fingerprint": "e6087a5c76198fb6", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-5a01a02f3183a15f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantneon/src/pages/games.tsx:72"}, "properties": {"repobilityId": "36471cbba2432243", "scanner": "scanner-primary", "fingerprint": "5a01a02f3183a15f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-170465c814c6a07e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantneon/src/pages/broadcast.tsx:376"}, "properties": {"repobilityId": "3386b268e01d98f4", "scanner": "scanner-primary", "fingerprint": "170465c814c6a07e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-5c1ba3c864d4d9f7", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 apps/quantmax/src/components/GiftPanel.tsx:171"}, "properties": {"repobilityId": "768142ee419641cb", "scanner": "scanner-primary", "fingerprint": "5c1ba3c864d4d9f7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-99791f7fbeef5cab", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantmax/src/components/VideoChatRoom.tsx:53"}, "properties": {"repobilityId": "15b84540ea183b02", "scanner": "scanner-primary", "fingerprint": "99791f7fbeef5cab", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1976c0d40ebe5f52", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantmax/src/components/VideoFeed.tsx:82"}, "properties": {"repobilityId": "61f3aa1b5c6fadc7", "scanner": "scanner-primary", "fingerprint": "1976c0d40ebe5f52", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-9a6aa0f795d4a659", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantmax/src/pages/matches.tsx:114"}, "properties": {"repobilityId": "c34c6e824dbf2362", "scanner": "scanner-primary", "fingerprint": "9a6aa0f795d4a659", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4f1d6a4820e1611a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantmax/src/pages/index.tsx:316"}, "properties": {"repobilityId": "ea8b65f5f603e17d", "scanner": "scanner-primary", "fingerprint": "4f1d6a4820e1611a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1ebc241aa58f76bb", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantmax/src/pages/discover.tsx:321"}, "properties": {"repobilityId": "df7b0ecde563419f", "scanner": "scanner-primary", "fingerprint": "1ebc241aa58f76bb", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-fb1018fcb8f9b4d0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/quantmail/backend/__tests__/ai-code-review.service.test.ts:78"}, "properties": {"repobilityId": "f6625627ad2282a2", "scanner": "scanner-primary", "fingerprint": "fb1018fcb8f9b4d0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ce17091114b49560", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/quantmail/src/components/EmailThread.tsx:182"}, "properties": {"repobilityId": "5906362a8b87da68", "scanner": "scanner-primary", "fingerprint": "ce17091114b49560", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-8359ccc2d6e14258", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantmail/src/components/AppSidebar.tsx:104"}, "properties": {"repobilityId": "2f683ef45b86439c", "scanner": "scanner-primary", "fingerprint": "8359ccc2d6e14258", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0d62044aeeab8387", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/quantmail/src/components/RichTextEditor.tsx:327"}, "properties": {"repobilityId": "e8d1a2b76018687d", "scanner": "scanner-primary", "fingerprint": "0d62044aeeab8387", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-03cf2199557cb388", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/quantmail/src/providers/brand-provider.tsx:19"}, "properties": {"repobilityId": "2e1f78df964f8a7a", "scanner": "scanner-primary", "fingerprint": "03cf2199557cb388", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-381a84e5160d5c98", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantmail/src/app/page.tsx:108"}, "properties": {"repobilityId": "4263a8792c2a3349", "scanner": "scanner-primary", "fingerprint": "381a84e5160d5c98", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e8de693106c0e91f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/quantmail/src/app/compose/page.tsx:70"}, "properties": {"repobilityId": "2b770ff07b7fad33", "scanner": "scanner-primary", "fingerprint": "e8de693106c0e91f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a5209606d9c0e035", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantmail/src/app/thread/[id]/page.tsx:397"}, "properties": {"repobilityId": "0539f4d6bfbf2ecd", "scanner": "scanner-primary", "fingerprint": "a5209606d9c0e035", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-20680a74d007408e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantmail/src/app/pipelines/page.tsx:123"}, "properties": {"repobilityId": "1311494ca119462d", "scanner": "scanner-primary", "fingerprint": "20680a74d007408e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ab382e93e407b5c0", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantmail/src/app/drive/page.tsx:144"}, "properties": {"repobilityId": "dd2af87ce831012c", "scanner": "scanner-primary", "fingerprint": "ab382e93e407b5c0", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ee0a919b6d45235b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantmail/src/app/repos/page.tsx:95"}, "properties": {"repobilityId": "db354012188f5ec4", "scanner": "scanner-primary", "fingerprint": "ee0a919b6d45235b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a1850272ff4d8e92", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantmail/src/app/repos/[id]/page.tsx:202"}, "properties": {"repobilityId": "1f86bf14e77396a5", "scanner": "scanner-primary", "fingerprint": "a1850272ff4d8e92", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4866bd62afe71b1a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantmail/src/app/contacts/page.tsx:161"}, "properties": {"repobilityId": "74afa687faa094f5", "scanner": "scanner-primary", "fingerprint": "4866bd62afe71b1a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-56390a993a859ea9", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantdocs/src/components/CommentsPanel.tsx:120"}, "properties": {"repobilityId": "80d95bf9c96f8378", "scanner": "scanner-primary", "fingerprint": "56390a993a859ea9", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-caa65ef16766105a", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/quantdocs/src/components/DocEditor.tsx:93"}, "properties": {"repobilityId": "6e7f1154556e23bf", "scanner": "scanner-primary", "fingerprint": "caa65ef16766105a", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-333f4b55220bcc74", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantdocs/src/components/ShareDialog.tsx:102"}, "properties": {"repobilityId": "a033ce5a3dbb701e", "scanner": "scanner-primary", "fingerprint": "333f4b55220bcc74", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-086b13a2093443ea", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantdocs/src/components/DocList.tsx:146"}, "properties": {"repobilityId": "b1767017fcd0e230", "scanner": "scanner-primary", "fingerprint": "086b13a2093443ea", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-221153b278e9fb0a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantdocs/src/app/doc/[id]/page.tsx:83"}, "properties": {"repobilityId": "1100d0e0de0d711e", "scanner": "scanner-primary", "fingerprint": "221153b278e9fb0a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e0e35c6d0763d7c4", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 apps/quanttube/backend/routes/upload.ts:28"}, "properties": {"repobilityId": "9a96216ba1b812eb", "scanner": "scanner-primary", "fingerprint": "e0e35c6d0763d7c4", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-54a262a93a3946c6", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 apps/quanttube/backend/services/video-processor.service.ts:3"}, "properties": {"repobilityId": "919ce5723f72a557", "scanner": "scanner-primary", "fingerprint": "54a262a93a3946c6", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-bd994dbad362caa1", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantcalendar/src/components/EventCard.tsx:35"}, "properties": {"repobilityId": "8fec9018686f74c4", "scanner": "scanner-primary", "fingerprint": "bd994dbad362caa1", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-776cd3cb0c097e5f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantcalendar/src/components/CalendarSidebar.tsx:116"}, "properties": {"repobilityId": "2bcbaf223bc89e66", "scanner": "scanner-primary", "fingerprint": "776cd3cb0c097e5f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d056904f152753b8", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/admin/src/components/AdminLayout.tsx:90"}, "properties": {"repobilityId": "5b4d2d70bee9bcd6", "scanner": "scanner-primary", "fingerprint": "d056904f152753b8", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4e158aef96ab2a6d", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 apps/admin/src/app/api/settings/route.ts:57"}, "properties": {"repobilityId": "53d350323f10c7ff", "scanner": "scanner-primary", "fingerprint": "4e158aef96ab2a6d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-6a0905461fea5b2b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/admin/src/app/observability/components/ErrorTracker.tsx:182"}, "properties": {"repobilityId": "f19b0a1e609960dd", "scanner": "scanner-primary", "fingerprint": "6a0905461fea5b2b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-53b0367fc1619e1a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/admin/src/app/audit/page.tsx:344"}, "properties": {"repobilityId": "b2b7e0a224639a67", "scanner": "scanner-primary", "fingerprint": "53b0367fc1619e1a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-567b1a2d2807d3c7", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/admin/src/app/feature-flags/page.tsx:401"}, "properties": {"repobilityId": "a21d914c5e88bcd9", "scanner": "scanner-primary", "fingerprint": "567b1a2d2807d3c7", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-9f48d8a7e35d1e2b", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 apps/quantdrive/backend/routes/upload.ts:29"}, "properties": {"repobilityId": "2f30e4bbf482884b", "scanner": "scanner-primary", "fingerprint": "9f48d8a7e35d1e2b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-265263407925fe9d", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 apps/quantdrive/backend/services/storage.service.ts:33"}, "properties": {"repobilityId": "179dd7bcf37ec001", "scanner": "scanner-primary", "fingerprint": "265263407925fe9d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-3c67b08ce5f91b4d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantdrive/src/components/SearchResults.tsx:91"}, "properties": {"repobilityId": "1789b5d93c4d936e", "scanner": "scanner-primary", "fingerprint": "3c67b08ce5f91b4d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a8841ff260e73eee", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantdrive/src/components/FileCard.tsx:52"}, "properties": {"repobilityId": "2ffcf0797d8bce6c", "scanner": "scanner-primary", "fingerprint": "a8841ff260e73eee", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f93eb1c7a2926c5e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantdrive/src/components/FilePreview.tsx:98"}, "properties": {"repobilityId": "f711fed4d15dfffe", "scanner": "scanner-primary", "fingerprint": "f93eb1c7a2926c5e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b9eda92eca6f98fd", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantdrive/src/components/UploadArea.tsx:190"}, "properties": {"repobilityId": "efd96333c06b3608", "scanner": "scanner-primary", "fingerprint": "b9eda92eca6f98fd", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ba5ac659bc7bb338", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantdrive/src/components/FolderCard.tsx:27"}, "properties": {"repobilityId": "35eba21fa643db26", "scanner": "scanner-primary", "fingerprint": "ba5ac659bc7bb338", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-71a4ad3fc79d88af", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantdrive/src/components/ActivityPanel.tsx:135"}, "properties": {"repobilityId": "fd5942bde7d75db5", "scanner": "scanner-primary", "fingerprint": "71a4ad3fc79d88af", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4a6b1d54552cf5b6", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantads/src/components/FunnelChart.tsx:189"}, "properties": {"repobilityId": "8eebb03423d8c6a4", "scanner": "scanner-primary", "fingerprint": "4a6b1d54552cf5b6", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-45aa4bd160137f08", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantads/src/components/AuctionViewer.tsx:265"}, "properties": {"repobilityId": "cca1cef2dc267e9c", "scanner": "scanner-primary", "fingerprint": "45aa4bd160137f08", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ac06e91346145ce7", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantads/src/app/campaigns/page.tsx:43"}, "properties": {"repobilityId": "c9864e0b7022cb83", "scanner": "scanner-primary", "fingerprint": "ac06e91346145ce7", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-74809fe530e9ed68", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantads/src/app/creatives/page.tsx:38"}, "properties": {"repobilityId": "16b4c7e1975d819c", "scanner": "scanner-primary", "fingerprint": "74809fe530e9ed68", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-6082768483a0f549", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantads/src/pages/pixels.tsx:406"}, "properties": {"repobilityId": "e14fc4f58f8d5f94", "scanner": "scanner-primary", "fingerprint": "6082768483a0f549", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e69c28aac3d55d44", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantads/src/pages/creative-studio.tsx:432"}, "properties": {"repobilityId": "b81c309a176bad36", "scanner": "scanner-primary", "fingerprint": "e69c28aac3d55d44", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4410d6ebc852a3a2", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantube/src/components/Recommendations.tsx:120"}, "properties": {"repobilityId": "50160f1e1ce28606", "scanner": "scanner-primary", "fingerprint": "4410d6ebc852a3a2", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-363631ef348b5e4a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantube/src/components/ChapterEditor.tsx:206"}, "properties": {"repobilityId": "a814ee0d630fd7aa", "scanner": "scanner-primary", "fingerprint": "363631ef348b5e4a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-910be71e8c6b7bb9", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantube/src/components/VideoUploader.tsx:194"}, "properties": {"repobilityId": "ea110e439a83e514", "scanner": "scanner-primary", "fingerprint": "910be71e8c6b7bb9", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-9bb56f1af4213c2d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantube/src/components/VideoPlayer.tsx:186"}, "properties": {"repobilityId": "d0c1928b75afbc1b", "scanner": "scanner-primary", "fingerprint": "9bb56f1af4213c2d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-05e84246fc5a0a13", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 apps/quantube/src/components/LiveChat.tsx:20"}, "properties": {"repobilityId": "7bb3f7205d48d662", "scanner": "scanner-primary", "fingerprint": "05e84246fc5a0a13", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-bc96d81ed4b9709a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantube/src/components/MusicPlayer.tsx:158"}, "properties": {"repobilityId": "8b46272ec01fb03c", "scanner": "scanner-primary", "fingerprint": "bc96d81ed4b9709a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-bcfb06d65e0bfec2", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantube/src/components/ContentGrid.tsx:147"}, "properties": {"repobilityId": "8eb9eae17a4f3e91", "scanner": "scanner-primary", "fingerprint": "bcfb06d65e0bfec2", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-cc9a05610ea7cdac", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantube/src/components/MiniPlayer.tsx:70"}, "properties": {"repobilityId": "76a6aa400acb81dc", "scanner": "scanner-primary", "fingerprint": "cc9a05610ea7cdac", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-877e056b5ab55e70", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 apps/quantube/src/components/LiveStreamChat.tsx:180"}, "properties": {"repobilityId": "02637b2902ba5da4", "scanner": "scanner-primary", "fingerprint": "877e056b5ab55e70", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-e4108f0a18b0496f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantube/src/components/LiveStreamChat.tsx:178"}, "properties": {"repobilityId": "7c736a2d8485b569", "scanner": "scanner-primary", "fingerprint": "e4108f0a18b0496f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b9b48511063af969", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantube/src/pages/podcasts.tsx:272"}, "properties": {"repobilityId": "e08d104e80849db5", "scanner": "scanner-primary", "fingerprint": "b9b48511063af969", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-8ae31b73a68fe80d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantube/src/pages/music.tsx:481"}, "properties": {"repobilityId": "8ac3171dbc2549ad", "scanner": "scanner-primary", "fingerprint": "8ae31b73a68fe80d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-9af6805d53b764b0", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantube/src/pages/premium.tsx:488"}, "properties": {"repobilityId": "24310ccd950dd203", "scanner": "scanner-primary", "fingerprint": "9af6805d53b764b0", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-29ed2d81b12352b0", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 apps/quantube/src/pages/shorts.tsx:542"}, "properties": {"repobilityId": "d2a12fc266f4c231", "scanner": "scanner-primary", "fingerprint": "29ed2d81b12352b0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-aa0913d7942f6e72", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantube/src/pages/studio.tsx:291"}, "properties": {"repobilityId": "d8c98781a8372b48", "scanner": "scanner-primary", "fingerprint": "aa0913d7942f6e72", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-3eea25190080b00c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantube/src/pages/live.tsx:219"}, "properties": {"repobilityId": "ebd4129b7797d062", "scanner": "scanner-primary", "fingerprint": "3eea25190080b00c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ef1c8d4bb8ba73a3", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantube/src/pages/shows.tsx:243"}, "properties": {"repobilityId": "5a28722ec7c80de5", "scanner": "scanner-primary", "fingerprint": "ef1c8d4bb8ba73a3", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-32239ce836590658", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantube/src/pages/library.tsx:269"}, "properties": {"repobilityId": "bc72d7d3823919a4", "scanner": "scanner-primary", "fingerprint": "32239ce836590658", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4e0dae9dee12cd2c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantube/src/pages/watch/[id].tsx:452"}, "properties": {"repobilityId": "ecd34143d3d5532e", "scanner": "scanner-primary", "fingerprint": "4e0dae9dee12cd2c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-3bbad897675e3a1a", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 apps/quantube/src/pages/playlist/[id].tsx:496"}, "properties": {"repobilityId": "d26a658af0bc2ea3", "scanner": "scanner-primary", "fingerprint": "3bbad897675e3a1a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-6d517fc8b4afe197", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantube/src/pages/playlist/[id].tsx:457"}, "properties": {"repobilityId": "71c17dcc8b850d64", "scanner": "scanner-primary", "fingerprint": "6d517fc8b4afe197", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-12661986da287d12", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantmeet/src/components/VideoTile.tsx:66"}, "properties": {"repobilityId": "c9a37083c962b0ae", "scanner": "scanner-primary", "fingerprint": "12661986da287d12", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a6968bd815e0d894", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantmeet/src/components/ParticipantList.tsx:46"}, "properties": {"repobilityId": "23e9b2569cec265e", "scanner": "scanner-primary", "fingerprint": "a6968bd815e0d894", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-433a88261a9077c1", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantmeet/src/app/page.tsx:137"}, "properties": {"repobilityId": "3ee3f87719739442", "scanner": "scanner-primary", "fingerprint": "433a88261a9077c1", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ab7f5f60ed58bd6f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantsync/src/components/TrendingSidebar.tsx:140"}, "properties": {"repobilityId": "3a9f0544c5a9852d", "scanner": "scanner-primary", "fingerprint": "ab7f5f60ed58bd6f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-99f724384d7f9169", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 apps/quantsync/src/components/SpaceRoom.tsx:153"}, "properties": {"repobilityId": "7a34042c592a9883", "scanner": "scanner-primary", "fingerprint": "99f724384d7f9169", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-e2e89e04a1b8199b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantsync/src/components/SpaceRoom.tsx:205"}, "properties": {"repobilityId": "6eb0dda5b79d61f0", "scanner": "scanner-primary", "fingerprint": "e2e89e04a1b8199b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-6fbe9fbef78eb603", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantsync/src/components/PostCard.tsx:222"}, "properties": {"repobilityId": "8b6ba43bf47edaeb", "scanner": "scanner-primary", "fingerprint": "6fbe9fbef78eb603", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-de9df6e0fbc6abe1", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 apps/quantsync/src/components/ThreadComposer.tsx:119"}, "properties": {"repobilityId": "5aa58371f4fe2bd2", "scanner": "scanner-primary", "fingerprint": "de9df6e0fbc6abe1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-6650a68724b7d54e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantsync/src/app/page.tsx:125"}, "properties": {"repobilityId": "d9a4f029ab1931f1", "scanner": "scanner-primary", "fingerprint": "6650a68724b7d54e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d79c3b1f869d60df", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantsync/src/app/bookmarks/page.tsx:64"}, "properties": {"repobilityId": "a8e35766c8dbe777", "scanner": "scanner-primary", "fingerprint": "d79c3b1f869d60df", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ec9ca9088b38539f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantsync/src/legacy-pages/index.tsx:308"}, "properties": {"repobilityId": "10a679862438cee2", "scanner": "scanner-primary", "fingerprint": "ec9ca9088b38539f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-384f3747351904de", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 apps/quantsync/src/legacy-pages/compose.tsx:264"}, "properties": {"repobilityId": "181f17084746bbea", "scanner": "scanner-primary", "fingerprint": "384f3747351904de", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-99ac860ea1928ebe", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantsync/src/legacy-pages/spaces.tsx:236"}, "properties": {"repobilityId": "0e3fe28e59f60cba", "scanner": "scanner-primary", "fingerprint": "99ac860ea1928ebe", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e7f8cbd6d17cf2da", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantsync/src/legacy-pages/communities.tsx:235"}, "properties": {"repobilityId": "a3e14339aa9d22f2", "scanner": "scanner-primary", "fingerprint": "e7f8cbd6d17cf2da", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e81ce261e87144bd", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 apps/quantai/backend/routes/personal-agent.ts:26"}, "properties": {"repobilityId": "3520217ac8ad5925", "scanner": "scanner-primary", "fingerprint": "e81ce261e87144bd", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-160af02836d9cea2", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/quantai/src/__tests__/code-interpreter.service.test.ts:13"}, "properties": {"repobilityId": "f7f7dc7d289939fc", "scanner": "scanner-primary", "fingerprint": "160af02836d9cea2", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-14978693cdce92c7", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 apps/quantai/src/components/DevicePreview.tsx:21"}, "properties": {"repobilityId": "cd4109eb6d0bf23e", "scanner": "scanner-primary", "fingerprint": "14978693cdce92c7", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-74d33496b8e85544", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantai/src/components/PersonaSelector.tsx:170"}, "properties": {"repobilityId": "a882960815463af7", "scanner": "scanner-primary", "fingerprint": "74d33496b8e85544", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-3b8de74568ea0e49", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 apps/quantai/src/components/WorkflowBuilder.tsx:150"}, "properties": {"repobilityId": "da051067ed6c1838", "scanner": "scanner-primary", "fingerprint": "3b8de74568ea0e49", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-8036fbe9df529ef3", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantai/src/components/ModelCard.tsx:28"}, "properties": {"repobilityId": "24d26083009cd8a8", "scanner": "scanner-primary", "fingerprint": "8036fbe9df529ef3", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-6fd3adc6f33515d6", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantai/src/components/ToolCallCard.tsx:65"}, "properties": {"repobilityId": "ff0ae11e22ba4922", "scanner": "scanner-primary", "fingerprint": "6fd3adc6f33515d6", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-5ebe414aca2e63c5", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantai/src/components/PluginCard.tsx:31"}, "properties": {"repobilityId": "11f675e1af2d1022", "scanner": "scanner-primary", "fingerprint": "5ebe414aca2e63c5", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-aa3a04370439e50d", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 apps/quantai/src/components/ImageCanvas.tsx:120"}, "properties": {"repobilityId": "dcafdeaff45a84bc", "scanner": "scanner-primary", "fingerprint": "aa3a04370439e50d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-4e1c50ec57b4e05c", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/quantai/src/components/CodeEditor.tsx:339"}, "properties": {"repobilityId": "bf2a5726d11ed216", "scanner": "scanner-primary", "fingerprint": "4e1c50ec57b4e05c", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-d83a861d86ef8060", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantai/src/components/WorkflowProgressCard.tsx:107"}, "properties": {"repobilityId": "44c933d495a15211", "scanner": "scanner-primary", "fingerprint": "d83a861d86ef8060", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-28fcc58e348004c7", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/quantai/src/app/page.tsx:557"}, "properties": {"repobilityId": "48c39b3dd3dbec09", "scanner": "scanner-primary", "fingerprint": "28fcc58e348004c7", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-7ca60adaabc2bfa8", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/quantai/src/pages/code.tsx:47"}, "properties": {"repobilityId": "8984cc096574a4ee", "scanner": "scanner-primary", "fingerprint": "7ca60adaabc2bfa8", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3c5440d73166fdad", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/quantai/src/pages/code.tsx:472"}, "properties": {"repobilityId": "36af6746c295c928", "scanner": "scanner-primary", "fingerprint": "3c5440d73166fdad", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-d2869aa994a1558e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/doctor.ts:73"}, "properties": {"repobilityId": "126c9a8b8235bb87", "scanner": "scanner-primary", "fingerprint": "d2869aa994a1558e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a0967ece750547f3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/env-check.ts:32"}, "properties": {"repobilityId": "fd21ac1f8ad71317", "scanner": "scanner-primary", "fingerprint": "a0967ece750547f3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0028aafb018eb1cc", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/smoke.ts:23"}, "properties": {"repobilityId": "de00c54bafd05579", "scanner": "scanner-primary", "fingerprint": "0028aafb018eb1cc", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f621d6edebe9a8d4", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/db-reset.ts:12"}, "properties": {"repobilityId": "1e7c63390f00cb59", "scanner": "scanner-primary", "fingerprint": "f621d6edebe9a8d4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8a9dec896092b518", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/cdn/src/core/cdn-manager.ts:23"}, "properties": {"repobilityId": "a19febf62339c660", "scanner": "scanner-primary", "fingerprint": "8a9dec896092b518", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e5ab80e7c2e65620", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/ai/src/assistant/tools/quantai-tools.ts:29"}, "properties": {"repobilityId": "b4e06fba72095e86", "scanner": "scanner-primary", "fingerprint": "e5ab80e7c2e65620", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-dfc1de8a0835af6e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/ai/src/assistant/tools/quantmax-tools.ts:23"}, "properties": {"repobilityId": "2cfe3d3848ac4516", "scanner": "scanner-primary", "fingerprint": "dfc1de8a0835af6e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9a8f49520d860fb3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/ai/src/assistant/tools/quantchat-tools.ts:20"}, "properties": {"repobilityId": "45b41759c5729e86", "scanner": "scanner-primary", "fingerprint": "9a8f49520d860fb3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-07573bb9b7305bd8", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/ai/src/assistant/tools/quantmail-tools.ts:21"}, "properties": {"repobilityId": "df71c58d1bf06698", "scanner": "scanner-primary", "fingerprint": "07573bb9b7305bd8", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e98d8f8948363323", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/ai/src/assistant/tools/quantads-tools.ts:25"}, "properties": {"repobilityId": "cb192e91d28780ce", "scanner": "scanner-primary", "fingerprint": "e98d8f8948363323", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4766cffe8bcd90f7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/ai/src/assistant/tools/quantube-tools.ts:20"}, "properties": {"repobilityId": "850c0372f16e1f05", "scanner": "scanner-primary", "fingerprint": "4766cffe8bcd90f7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4c19b1e23f9442b5", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/ai/src/assistant/tools/quantneon-tools.ts:25"}, "properties": {"repobilityId": "63add3f0810c5bc3", "scanner": "scanner-primary", "fingerprint": "4c19b1e23f9442b5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c9b1faa166b5d4e1", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/ai/src/assistant/tools/quantsync-tools.ts:20"}, "properties": {"repobilityId": "664ad4ed7d12059c", "scanner": "scanner-primary", "fingerprint": "c9b1faa166b5d4e1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-914c625670a0071b", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 packages/ai-memory/src/memory-store.ts:174"}, "properties": {"repobilityId": "e8734a8530aa13f8", "scanner": "scanner-primary", "fingerprint": "914c625670a0071b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-01f5e8bce5103a7a", "level": "warning", "message": {"text": "Custom React Flow node registered without explicit width/height \u2014 packages/data-pipeline/src/__tests__/processors.test.ts:12"}, "properties": {"repobilityId": "e0bd89124aab4988", "scanner": "scanner-primary", "fingerprint": "01f5e8bce5103a7a", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.rfnode.no-dims"]}}, {"ruleId": "scanner-cd944e10a9a441d9", "level": "warning", "message": {"text": "Custom React Flow node registered without explicit width/height \u2014 packages/data-pipeline/src/__tests__/event-stream.test.ts:16"}, "properties": {"repobilityId": "d9b41febaedb7a7b", "scanner": "scanner-primary", "fingerprint": "cd944e10a9a441d9", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.rfnode.no-dims"]}}, {"ruleId": "scanner-3ed2ac3a823541cd", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/scaling/src/core/auto-scaler.ts:84"}, "properties": {"repobilityId": "657d305090de0a8e", "scanner": "scanner-primary", "fingerprint": "3ed2ac3a823541cd", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0021e1a29cb2d71e", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 packages/agentic/src/marketplace/agent-marketplace.ts:67"}, "properties": {"repobilityId": "24cf4a0523f82508", "scanner": "scanner-primary", "fingerprint": "0021e1a29cb2d71e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-611fa960c0852c04", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 packages/agentic/src/voice/agent-voice.ts:13"}, "properties": {"repobilityId": "8bac90f118cb0d93", "scanner": "scanner-primary", "fingerprint": "611fa960c0852c04", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-684e6e757de9d9c0", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 packages/agentic/src/memory/memory-store.ts:44"}, "properties": {"repobilityId": "f7b8af32bae7d682", "scanner": "scanner-primary", "fingerprint": "684e6e757de9d9c0", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-b811ab0d3ced429d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/agentic/src/logging/agent-logs.ts:36"}, "properties": {"repobilityId": "af991f807ee67263", "scanner": "scanner-primary", "fingerprint": "b811ab0d3ced429d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a351255ab588de8a", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 packages/agentic/src/planning/planner.ts:81"}, "properties": {"repobilityId": "26cc1228a52947d3", "scanner": "scanner-primary", "fingerprint": "a351255ab588de8a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-84c6e5121f38a496", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/common/src/logger.ts:24"}, "properties": {"repobilityId": "46539d203384780e", "scanner": "scanner-primary", "fingerprint": "84c6e5121f38a496", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e5f971398ca00c53", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/agent-runtime/src/__tests__/agents/code-pilot.test.ts:89"}, "properties": {"repobilityId": "4d6720f05824885c", "scanner": "scanner-primary", "fingerprint": "e5f971398ca00c53", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1a387a846af02d5e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/database/prisma/seed.ts:6"}, "properties": {"repobilityId": "7d02f3de957c4f8e", "scanner": "scanner-primary", "fingerprint": "1a387a846af02d5e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6ac2136132bb99db", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/database/src/seed.ts:57"}, "properties": {"repobilityId": "7f636c96ab38b907", "scanner": "scanner-primary", "fingerprint": "6ac2136132bb99db", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-74f6959d66d567de", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 packages/search/src/services/content-extractor.ts:117"}, "properties": {"repobilityId": "9bccac5d37090899", "scanner": "scanner-primary", "fingerprint": "74f6959d66d567de", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-b7e4990e2b90b84b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/quant-codex/src/scaffolder/templates.ts:283"}, "properties": {"repobilityId": "f969e41fd0bfb3fc", "scanner": "scanner-primary", "fingerprint": "b7e4990e2b90b84b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-056f9e19a744e629", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/shared-ui/src/agent/AgentCard.tsx:39"}, "properties": {"repobilityId": "53c72e999eb1abd1", "scanner": "scanner-primary", "fingerprint": "056f9e19a744e629", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-cf47e3d8d0c801c8", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/shared-ui/src/components/MediaPlayer.tsx:198"}, "properties": {"repobilityId": "b6d0f3fd80736281", "scanner": "scanner-primary", "fingerprint": "cf47e3d8d0c801c8", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e0bfe5d8c3048a33", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/shared-ui/src/components/Chat/ChatList.tsx:79"}, "properties": {"repobilityId": "fb1f0d41bc6413da", "scanner": "scanner-primary", "fingerprint": "e0bfe5d8c3048a33", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-af70a758f6ee260d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/shared-ui/src/components/Chat/ChatBubble.tsx:64"}, "properties": {"repobilityId": "5076f90686977bf2", "scanner": "scanner-primary", "fingerprint": "af70a758f6ee260d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-64da258a7181e213", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/shared-ui/src/components/Chat/ChatInput.tsx:99"}, "properties": {"repobilityId": "1b5149d0d0510535", "scanner": "scanner-primary", "fingerprint": "64da258a7181e213", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4ce88ddb444d045a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/shared-ui/src/components/Navigation/TopBar.tsx:63"}, "properties": {"repobilityId": "d0b2b96bc9187f95", "scanner": "scanner-primary", "fingerprint": "4ce88ddb444d045a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1de6b25e6164836f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/shared-ui/src/components/Feed/StoryRing.tsx:65"}, "properties": {"repobilityId": "11342e6e77c5aff4", "scanner": "scanner-primary", "fingerprint": "1de6b25e6164836f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ed762fc2f106bf06", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/shared-ui/src/components/Layout/Sidebar.tsx:82"}, "properties": {"repobilityId": "e4af6e2e98bd614d", "scanner": "scanner-primary", "fingerprint": "ed762fc2f106bf06", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-811e25ec596d6117", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/shared-ui/src/components/Shell/ActivityFeed.tsx:236"}, "properties": {"repobilityId": "10d1f084fe13a08b", "scanner": "scanner-primary", "fingerprint": "811e25ec596d6117", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ba7d550e6a4bc37b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/shared-ui/src/components/Shell/NotificationCenter.tsx:71"}, "properties": {"repobilityId": "df562542318369ad", "scanner": "scanner-primary", "fingerprint": "ba7d550e6a4bc37b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e62793df37bf61ad", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/shared-ui/src/components/Shell/NotificationPanel.tsx:208"}, "properties": {"repobilityId": "cccdffeb3a0be634", "scanner": "scanner-primary", "fingerprint": "e62793df37bf61ad", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b7ceb81018e9b4e3", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/shared-ui/src/components/Shell/StarredItems.tsx:35"}, "properties": {"repobilityId": "605a69d8eff72e5e", "scanner": "scanner-primary", "fingerprint": "b7ceb81018e9b4e3", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0c6361753c419c35", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/shared-ui/src/components/Shell/CrossAppRelations.tsx:94"}, "properties": {"repobilityId": "966daf45a88a13b6", "scanner": "scanner-primary", "fingerprint": "0c6361753c419c35", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-79deaa3815b85ba8", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/shared-ui/src/components/Shell/RecentItems.tsx:38"}, "properties": {"repobilityId": "26ac784cb0f1a9c4", "scanner": "scanner-primary", "fingerprint": "79deaa3815b85ba8", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-41554c05dfc3a5ce", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/shared-ui/src/components/Shell/AppSwitcher.tsx:44"}, "properties": {"repobilityId": "095c33849b460e49", "scanner": "scanner-primary", "fingerprint": "41554c05dfc3a5ce", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-29715e3add420dbc", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/shared-ui/src/components/Shell/ProfileCard.tsx:43"}, "properties": {"repobilityId": "c27bd1659784df8c", "scanner": "scanner-primary", "fingerprint": "29715e3add420dbc", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-2568469b2362d0c4", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/shared-ui/src/components/Shell/UserMenu.tsx:50"}, "properties": {"repobilityId": "e479fe23adec5d9a", "scanner": "scanner-primary", "fingerprint": "2568469b2362d0c4", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c54c66d16585d217", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/shared-ui/src/components/Shell/UniversalSearch.tsx:303"}, "properties": {"repobilityId": "5593d22fbca3ccb2", "scanner": "scanner-primary", "fingerprint": "c54c66d16585d217", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a7c2589e4311bd06", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/shared-ui/src/components/Shell/WorkspaceSwitcher.tsx:63"}, "properties": {"repobilityId": "af088fea1f69b880", "scanner": "scanner-primary", "fingerprint": "a7c2589e4311bd06", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-db20b487e892b1b0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/shared-ui/src/advanced/state-manager.ts:78"}, "properties": {"repobilityId": "bc85d797e6f106a7", "scanner": "scanner-primary", "fingerprint": "db20b487e892b1b0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4ce233b2557cc936", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/server/src/middleware/security.ts:108"}, "properties": {"repobilityId": "203689a70b46b4f6", "scanner": "scanner-primary", "fingerprint": "4ce233b2557cc936", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7182a598b8114cb8", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/server/src/middleware/logging.ts:97"}, "properties": {"repobilityId": "e4574eba70090cb8", "scanner": "scanner-primary", "fingerprint": "7182a598b8114cb8", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-503c8a1dfe273f28", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/realtime/src/websocket-client.ts:337"}, "properties": {"repobilityId": "ada99434d89cb6c1", "scanner": "scanner-primary", "fingerprint": "503c8a1dfe273f28", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ebd9ac910f32ed29", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 services/search-indexer/src/api/proactive.router.ts:64"}, "properties": {"repobilityId": "9e14117386ca0062", "scanner": "scanner-primary", "fingerprint": "ebd9ac910f32ed29", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-6a7ed4e5e00f193d", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 services/search-indexer/src/api/search.router.ts:131"}, "properties": {"repobilityId": "ad69046d231ca334", "scanner": "scanner-primary", "fingerprint": "6a7ed4e5e00f193d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-ca49fa090ca4f0c2", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 services/ci-runner/src/__tests__/artifact-uploader.test.ts:29"}, "properties": {"repobilityId": "0aa778c21bb18819", "scanner": "scanner-primary", "fingerprint": "ca49fa090ca4f0c2", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-23674a97ba9d0d1b", "level": "warning", "message": {"text": "Privileged port 993 in use"}, "properties": {"repobilityId": "a36e56a26353e9ee", "scanner": "scanner-primary", "fingerprint": "23674a97ba9d0d1b", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/federation/src/__tests__/imap-bridge.test.ts"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-bb949ff7559ebeed", "level": "warning", "message": {"text": "Privileged port 587 in use"}, "properties": {"repobilityId": "a87a96c3b2e62c08", "scanner": "scanner-primary", "fingerprint": "bb949ff7559ebeed", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/smtp-inbound/src/smtp-server.test.ts"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-d5a23937f08e752b", "level": "warning", "message": {"text": "Privileged port 465 in use"}, "properties": {"repobilityId": "bcd1f06b60a2b6bc", "scanner": "scanner-primary", "fingerprint": "d5a23937f08e752b", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/smtp-inbound/src/sender.test.ts"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-ec1a7da37d1b1fc8", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: node:22-slim"}, "properties": {"repobilityId": "78d8e3de6af5452a", "scanner": "scanner-primary", "fingerprint": "ec1a7da37d1b1fc8", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/quantchat/Dockerfile"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-ec1a7da37d1b1fc8", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: node:22-slim"}, "properties": {"repobilityId": "7fef9d4ab7ffef74", "scanner": "scanner-primary", "fingerprint": "ec1a7da37d1b1fc8", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/quantchat/Dockerfile"}, "region": {"startLine": 13}}}]}, {"ruleId": "scanner-d2e9fd2428cc085c", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: node:22-slim"}, "properties": {"repobilityId": "aa66a3d910ee55e4", "scanner": "scanner-primary", "fingerprint": "d2e9fd2428cc085c", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/quantmail/Dockerfile"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-d2e9fd2428cc085c", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: node:22-slim"}, "properties": {"repobilityId": "d8ce236dbaa4213f", "scanner": "scanner-primary", "fingerprint": "d2e9fd2428cc085c", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/quantmail/Dockerfile"}, "region": {"startLine": 13}}}]}, {"ruleId": "scanner-0a3473e81e1e7ba2", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: node:22-slim"}, "properties": {"repobilityId": "f003973a1805aa48", "scanner": "scanner-primary", "fingerprint": "0a3473e81e1e7ba2", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/admin/Dockerfile"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-0a3473e81e1e7ba2", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: node:22-slim"}, "properties": {"repobilityId": "cbf9248a796cec13", "scanner": "scanner-primary", "fingerprint": "0a3473e81e1e7ba2", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/admin/Dockerfile"}, "region": {"startLine": 13}}}]}, {"ruleId": "scanner-ad2301531c545042", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: node:22-slim"}, "properties": {"repobilityId": "024c71f832c098f3", "scanner": "scanner-primary", "fingerprint": "ad2301531c545042", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/quantai/Dockerfile"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-ad2301531c545042", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: node:22-slim"}, "properties": {"repobilityId": "73e19058349115d4", "scanner": "scanner-primary", "fingerprint": "ad2301531c545042", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/quantai/Dockerfile"}, "region": {"startLine": 13}}}]}, {"ruleId": "scanner-427093338b4f88ad", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: node:22-alpine"}, "properties": {"repobilityId": "bc47e93c97e46e3d", "scanner": "scanner-primary", "fingerprint": "427093338b4f88ad", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/ws-gateway/Dockerfile"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-427093338b4f88ad", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: node:22-alpine"}, "properties": {"repobilityId": "a6b1e840a38fc575", "scanner": "scanner-primary", "fingerprint": "427093338b4f88ad", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/ws-gateway/Dockerfile"}, "region": {"startLine": 43}}}]}, {"ruleId": "scanner-f3be6b8b344f47f8", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in apps/quantedits/src/providers/brand-provider.tsx:17"}, "properties": {"repobilityId": "decc9319325c4147", "scanner": "scanner-primary", "fingerprint": "f3be6b8b344f47f8", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/quantedits/src/providers/brand-provider.tsx"}, "region": {"startLine": 17}}}]}, {"ruleId": "scanner-be18f42aebeb638f", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in apps/quantchat/src/providers/brand-provider.tsx:19"}, "properties": {"repobilityId": "69eb63c1845aa6a1", "scanner": "scanner-primary", "fingerprint": "be18f42aebeb638f", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/quantchat/src/providers/brand-provider.tsx"}, "region": {"startLine": 19}}}]}, {"ruleId": "scanner-3db127322cf47f66", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in apps/quantmail/src/components/EmailThread.tsx:182"}, "properties": {"repobilityId": "236bbe71b6094f62", "scanner": "scanner-primary", "fingerprint": "3db127322cf47f66", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/quantmail/src/components/EmailThread.tsx"}, "region": {"startLine": 182}}}]}, {"ruleId": "scanner-c9458e1c58499a2b", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in apps/quantmail/src/components/RichTextEditor.tsx:327"}, "properties": {"repobilityId": "6e58a6b90ec909a6", "scanner": "scanner-primary", "fingerprint": "c9458e1c58499a2b", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/quantmail/src/components/RichTextEditor.tsx"}, "region": {"startLine": 327}}}]}, {"ruleId": "scanner-c6d1274f010f51ac", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in apps/quantmail/src/components/RichTextEditor.tsx:112"}, "properties": {"repobilityId": "f954be5444ca8c39", "scanner": "scanner-primary", "fingerprint": "c6d1274f010f51ac", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/quantmail/src/components/RichTextEditor.tsx"}, "region": {"startLine": 112}}}]}, {"ruleId": "scanner-e3103dd4e7dadaf5", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in apps/quantmail/src/providers/brand-provider.tsx:19"}, "properties": {"repobilityId": "a560887a674c0501", "scanner": "scanner-primary", "fingerprint": "e3103dd4e7dadaf5", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/quantmail/src/providers/brand-provider.tsx"}, "region": {"startLine": 19}}}]}, {"ruleId": "scanner-a745530da17ea0d9", "level": "error", "message": {"text": "Possible secret in apps/quantmail/src/app/register/page.tsx"}, "properties": {"repobilityId": "1d42ee65428fd0f4", "scanner": "scanner-primary", "fingerprint": "a745530da17ea0d9", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/quantmail/src/app/register/page.tsx"}, "region": {"startLine": 35}}}]}, {"ruleId": "scanner-a745530da17ea0d9", "level": "error", "message": {"text": "Possible secret in apps/quantmail/src/app/register/page.tsx"}, "properties": {"repobilityId": "1d42ee65428fd0f4", "scanner": "scanner-primary", "fingerprint": "a745530da17ea0d9", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/quantmail/src/app/register/page.tsx"}, "region": {"startLine": 37}}}]}, {"ruleId": "scanner-a745530da17ea0d9", "level": "error", "message": {"text": "Possible secret in apps/quantmail/src/app/register/page.tsx"}, "properties": {"repobilityId": "1d42ee65428fd0f4", "scanner": "scanner-primary", "fingerprint": "a745530da17ea0d9", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/quantmail/src/app/register/page.tsx"}, "region": {"startLine": 41}}}]}, {"ruleId": "scanner-a745530da17ea0d9", "level": "error", "message": {"text": "Possible secret in apps/quantmail/src/app/register/page.tsx"}, "properties": {"repobilityId": "1d42ee65428fd0f4", "scanner": "scanner-primary", "fingerprint": "a745530da17ea0d9", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/quantmail/src/app/register/page.tsx"}, "region": {"startLine": 43}}}]}, {"ruleId": "scanner-438a97ba428b9142", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in apps/quantdocs/src/components/DocEditor.tsx:93"}, "properties": {"repobilityId": "c2603870d95ee065", "scanner": "scanner-primary", "fingerprint": "438a97ba428b9142", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/quantdocs/src/components/DocEditor.tsx"}, "region": {"startLine": 93}}}]}, {"ruleId": "scanner-2a30dfc5c900345a", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in apps/quanttube/backend/services/video-stream.service.ts:1"}, "properties": {"repobilityId": "93cbf4310be56d39", "scanner": "scanner-primary", "fingerprint": "2a30dfc5c900345a", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/quanttube/backend/services/video-stream.service.ts"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-81a9fb5ce3fb6510", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in apps/quantai/src/components/CodeEditor.tsx:339"}, "properties": {"repobilityId": "d9c94bdddda2b434", "scanner": "scanner-primary", "fingerprint": "81a9fb5ce3fb6510", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/quantai/src/components/CodeEditor.tsx"}, "region": {"startLine": 339}}}]}, {"ruleId": "scanner-77a474512ed2f5c4", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in apps/quantai/src/pages/code.tsx:472"}, "properties": {"repobilityId": "e32bc343817fd47b", "scanner": "scanner-primary", "fingerprint": "77a474512ed2f5c4", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/quantai/src/pages/code.tsx"}, "region": {"startLine": 472}}}]}, {"ruleId": "scanner-d264da5109333cce", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/doctor.ts:5"}, "properties": {"repobilityId": "b6b2e6c386529a33", "scanner": "scanner-primary", "fingerprint": "d264da5109333cce", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/doctor.ts"}, "region": {"startLine": 5}}}]}, {"ruleId": "scanner-4ec2109e51190236", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/smoke.ts:5"}, "properties": {"repobilityId": "b09b9a623e781461", "scanner": "scanner-primary", "fingerprint": "4ec2109e51190236", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/smoke.ts"}, "region": {"startLine": 5}}}]}, {"ruleId": "scanner-adf6572b3b55763f", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/db-reset.ts:5"}, "properties": {"repobilityId": "11fa1f8f0b2c0eeb", "scanner": "scanner-primary", "fingerprint": "adf6572b3b55763f", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/db-reset.ts"}, "region": {"startLine": 5}}}]}, {"ruleId": "scanner-9d7f8dae1a5ebaab", "level": "error", "message": {"text": "Insecure pattern 'private_key_in_repo' in packages/federation/src/activitypub/actor.test.ts:9"}, "properties": {"repobilityId": "3a02e3bd772778d2", "scanner": "scanner-primary", "fingerprint": "9d7f8dae1a5ebaab", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["owasp", "private_key_in_repo"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/federation/src/activitypub/actor.test.ts"}, "region": {"startLine": 9}}}]}, {"ruleId": "scanner-b6a1d90eddc3df2f", "level": "error", "message": {"text": "Insecure pattern 'eval_used' in packages/agentic/src/sandbox/agent-sandbox.ts:15"}, "properties": {"repobilityId": "d6769482651e3b6d", "scanner": "scanner-primary", "fingerprint": "b6a1d90eddc3df2f", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["owasp", "eval_used"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/agentic/src/sandbox/agent-sandbox.ts"}, "region": {"startLine": 15}}}]}, {"ruleId": "scanner-1d0e3e24d6b21ae0", "level": "warning", "message": {"text": "Insecure pattern 'local_storage_auth_token' in packages/shared-ui/src/hooks/useAuth.ts:146"}, "properties": {"repobilityId": "72a22451cdc263ed", "scanner": "scanner-primary", "fingerprint": "1d0e3e24d6b21ae0", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "local_storage_auth_token"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/shared-ui/src/hooks/useAuth.ts"}, "region": {"startLine": 146}}}]}, {"ruleId": "scanner-c46a49f26657acea", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in packages/server/src/middleware/cors.ts:92"}, "properties": {"repobilityId": "b80d5a6226468abb", "scanner": "scanner-primary", "fingerprint": "c46a49f26657acea", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/server/src/middleware/cors.ts"}, "region": {"startLine": 92}}}]}, {"ruleId": "scanner-28ba6a16d7ee3927", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in services/git-server/src/__tests__/git-upload-pack.service.test.ts:36"}, "properties": {"repobilityId": "c88264357d56495f", "scanner": "scanner-primary", "fingerprint": "28ba6a16d7ee3927", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/git-server/src/__tests__/git-upload-pack.service.test.ts"}, "region": {"startLine": 36}}}]}, {"ruleId": "scanner-11a8cb78e97726ea", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in services/git-server/src/__tests__/git-receive-pack.service.test.ts:37"}, "properties": {"repobilityId": "3ec5f1e1ec412b39", "scanner": "scanner-primary", "fingerprint": "11a8cb78e97726ea", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/git-server/src/__tests__/git-receive-pack.service.test.ts"}, "region": {"startLine": 37}}}]}, {"ruleId": "scanner-0fdf69496e1a7096", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in services/git-server/src/__tests__/git-http.routes.test.ts:62"}, "properties": {"repobilityId": "687236c6c8af18c4", "scanner": "scanner-primary", "fingerprint": "0fdf69496e1a7096", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/git-server/src/__tests__/git-http.routes.test.ts"}, "region": {"startLine": 62}}}]}, {"ruleId": "scanner-851a208f31180d30", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in services/git-server/src/services/git-receive-pack.ts:1"}, "properties": {"repobilityId": "6778655015be75d5", "scanner": "scanner-primary", "fingerprint": "851a208f31180d30", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/git-server/src/services/git-receive-pack.ts"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-4c12c74ba0df2102", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in services/git-server/src/services/repo-storage.ts:1"}, "properties": {"repobilityId": "b253a49fc4b4e9ec", "scanner": "scanner-primary", "fingerprint": "4c12c74ba0df2102", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/git-server/src/services/repo-storage.ts"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-30eda8623e1d4391", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in services/git-server/src/services/git-upload-pack.ts:1"}, "properties": {"repobilityId": "4c2e15670f2662de", "scanner": "scanner-primary", "fingerprint": "30eda8623e1d4391", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/git-server/src/services/git-upload-pack.ts"}, "region": {"startLine": 1}}}]}, {"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": 31}}}]}, {"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": 64}}}]}, {"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-be5b6ac28962a744", "level": "note", "message": {"text": "42 TODO/FIXME markers"}, "properties": {"repobilityId": "4b38c118003e07d2", "scanner": "scanner-primary", "fingerprint": "be5b6ac28962a744", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["maintenance"]}}, {"ruleId": "scanner-97321d123ea1e415", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: apps/quantedits/package.json"}, "properties": {"repobilityId": "3a008dd383e72179", "scanner": "scanner-primary", "fingerprint": "97321d123ea1e415", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/quantedits/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-4c55d1e004e20c4b", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: apps/quantchat/package.json"}, "properties": {"repobilityId": "b6b6c84cb4daa028", "scanner": "scanner-primary", "fingerprint": "4c55d1e004e20c4b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/quantchat/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-a8a9e3b820e064aa", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: apps/quantneon/package.json"}, "properties": {"repobilityId": "b8777353fd75c66f", "scanner": "scanner-primary", "fingerprint": "a8a9e3b820e064aa", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/quantneon/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-9d7e6610aa7fee1e", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: apps/quantmax/package.json"}, "properties": {"repobilityId": "46a72f4f66e2c810", "scanner": "scanner-primary", "fingerprint": "9d7e6610aa7fee1e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/quantmax/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-c5c0d8922dcb4e82", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: apps/quant-mobile/package.json"}, "properties": {"repobilityId": "1af99d628d7e6450", "scanner": "scanner-primary", "fingerprint": "c5c0d8922dcb4e82", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/quant-mobile/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-971ed5dee569ba08", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: apps/quantmail/package.json"}, "properties": {"repobilityId": "dd06d5a2640bc465", "scanner": "scanner-primary", "fingerprint": "971ed5dee569ba08", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/quantmail/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-16e828b65e647811", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: apps/quantdocs/package.json"}, "properties": {"repobilityId": "acdf78b175ddbe8c", "scanner": "scanner-primary", "fingerprint": "16e828b65e647811", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/quantdocs/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-1cf131fdebd0314f", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: apps/quanttube/package.json"}, "properties": {"repobilityId": "01563e0c3011e500", "scanner": "scanner-primary", "fingerprint": "1cf131fdebd0314f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/quanttube/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-9f6d9aaea4f8a426", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: apps/marketing/package.json"}, "properties": {"repobilityId": "c5cbcc1a970dc1e0", "scanner": "scanner-primary", "fingerprint": "9f6d9aaea4f8a426", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/marketing/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-84d36017c7960675", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: apps/quantcalendar/package.json"}, "properties": {"repobilityId": "5c6ff7ad7e07856b", "scanner": "scanner-primary", "fingerprint": "84d36017c7960675", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/quantcalendar/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-5c30f715681a4005", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: apps/admin/package.json"}, "properties": {"repobilityId": "17d56c8f05bdd359", "scanner": "scanner-primary", "fingerprint": "5c30f715681a4005", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/admin/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-ece8cfc7decd503a", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: apps/status/package.json"}, "properties": {"repobilityId": "0aa27f97527ce9d1", "scanner": "scanner-primary", "fingerprint": "ece8cfc7decd503a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/status/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-356595244bd980f4", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: apps/quantdrive/package.json"}, "properties": {"repobilityId": "68c8ce53c291d2b5", "scanner": "scanner-primary", "fingerprint": "356595244bd980f4", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/quantdrive/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-784a5fe6c0c9ba5d", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: apps/quantads/package.json"}, "properties": {"repobilityId": "b2d5e002f539b016", "scanner": "scanner-primary", "fingerprint": "784a5fe6c0c9ba5d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/quantads/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-e4a6f2cce60b0513", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: apps/quantube/package.json"}, "properties": {"repobilityId": "e101d14be7b03738", "scanner": "scanner-primary", "fingerprint": "e4a6f2cce60b0513", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/quantube/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3d8d2122c62c6f21", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: apps/quantmeet/package.json"}, "properties": {"repobilityId": "2e89118d215a84ce", "scanner": "scanner-primary", "fingerprint": "3d8d2122c62c6f21", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/quantmeet/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-623f4ff5838d1320", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: apps/quantsync/package.json"}, "properties": {"repobilityId": "ca9c7857fcd67883", "scanner": "scanner-primary", "fingerprint": "623f4ff5838d1320", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/quantsync/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-c96f64f250fe0834", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: apps/quantai/package.json"}, "properties": {"repobilityId": "e7e33a45cab42a3d", "scanner": "scanner-primary", "fingerprint": "c96f64f250fe0834", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/quantai/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-084b29ef36e3e74e", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/governance/package.json"}, "properties": {"repobilityId": "d91126cc0d7c141f", "scanner": "scanner-primary", "fingerprint": "084b29ef36e3e74e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/governance/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-819c741d8ada6565", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/quant-live/package.json"}, "properties": {"repobilityId": "3293a324c4f19a14", "scanner": "scanner-primary", "fingerprint": "819c741d8ada6565", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/quant-live/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-c17406ec5d390ef6", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/spatial-ui/package.json"}, "properties": {"repobilityId": "18ad7961b01268f6", "scanner": "scanner-primary", "fingerprint": "c17406ec5d390ef6", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/spatial-ui/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-4b52f3d5e0999caa", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/security/package.json"}, "properties": {"repobilityId": "4d89c300fd2f7300", "scanner": "scanner-primary", "fingerprint": "4b52f3d5e0999caa", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/security/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-fb528631fbc0ba1b", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/data-plane/package.json"}, "properties": {"repobilityId": "54f46fba38794a0a", "scanner": "scanner-primary", "fingerprint": "fb528631fbc0ba1b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/data-plane/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-32be58ad3515a00b", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/federation/package.json"}, "properties": {"repobilityId": "e4917a3cc77425e4", "scanner": "scanner-primary", "fingerprint": "32be58ad3515a00b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/federation/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-216e7150e1489d73", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/maps/package.json"}, "properties": {"repobilityId": "dd7928a9ebf20863", "scanner": "scanner-primary", "fingerprint": "216e7150e1489d73", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/maps/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-c046771bceb7b4d6", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/server-core/package.json"}, "properties": {"repobilityId": "b3b16803a9fe04a5", "scanner": "scanner-primary", "fingerprint": "c046771bceb7b4d6", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/server-core/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-0724b71eef0f4c25", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/brand/package.json"}, "properties": {"repobilityId": "81ba554baf1983d0", "scanner": "scanner-primary", "fingerprint": "0724b71eef0f4c25", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/brand/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-221338910f785920", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/service-discovery/package.json"}, "properties": {"repobilityId": "5413931a56028dff", "scanner": "scanner-primary", "fingerprint": "221338910f785920", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/service-discovery/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-680e20cc34b251ea", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/voice-first-os/package.json"}, "properties": {"repobilityId": "c39854ff950d073f", "scanner": "scanner-primary", "fingerprint": "680e20cc34b251ea", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/voice-first-os/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-172dcdf252860fa6", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/notifications/package.json"}, "properties": {"repobilityId": "6c88892cbe9bca9d", "scanner": "scanner-primary", "fingerprint": "172dcdf252860fa6", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/notifications/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-1685b47d589f10e5", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/quant-orchestrator/package.json"}, "properties": {"repobilityId": "2245b45d7605df7d", "scanner": "scanner-primary", "fingerprint": "1685b47d589f10e5", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/quant-orchestrator/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-d29e76e9c6cfc70a", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/data-warehouse/package.json"}, "properties": {"repobilityId": "b30cfc25dcb76697", "scanner": "scanner-primary", "fingerprint": "d29e76e9c6cfc70a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/data-warehouse/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-f1cfd581de8ee42a", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/user-owned-ai/package.json"}, "properties": {"repobilityId": "0c93076f01fec91f", "scanner": "scanner-primary", "fingerprint": "f1cfd581de8ee42a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/user-owned-ai/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-c8934c51a341c4cf", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/security-advanced/package.json"}, "properties": {"repobilityId": "83c960a8867fd48f", "scanner": "scanner-primary", "fingerprint": "c8934c51a341c4cf", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/security-advanced/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-80f569ae36a3e3bf", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/ai/package.json"}, "properties": {"repobilityId": "2d5eb1212f62ce31", "scanner": "scanner-primary", "fingerprint": "80f569ae36a3e3bf", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/ai/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-eaf9fe63338941b6", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/ml-pipeline/package.json"}, "properties": {"repobilityId": "4874bd550470ae9c", "scanner": "scanner-primary", "fingerprint": "eaf9fe63338941b6", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/ml-pipeline/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-cbb9c2411959b6f5", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/testing/package.json"}, "properties": {"repobilityId": "4ce99ff3a28064bf", "scanner": "scanner-primary", "fingerprint": "cbb9c2411959b6f5", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/testing/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-5d65d7d68ad70e8a", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/ai-memory/package.json"}, "properties": {"repobilityId": "447f98e4ce4350cd", "scanner": "scanner-primary", "fingerprint": "5d65d7d68ad70e8a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/ai-memory/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-41b225e183229484", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/auth/package.json"}, "properties": {"repobilityId": "c022328d0892fb4d", "scanner": "scanner-primary", "fingerprint": "41b225e183229484", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/auth/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-0b5fba449f9e46a0", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/data-pipeline/package.json"}, "properties": {"repobilityId": "fd88715e126333e6", "scanner": "scanner-primary", "fingerprint": "0b5fba449f9e46a0", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/data-pipeline/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-699b79f228175d77", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/recommendations/package.json"}, "properties": {"repobilityId": "aa2353bf60689f0a", "scanner": "scanner-primary", "fingerprint": "699b79f228175d77", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/recommendations/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-1098d2c1b75c3d7b", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/voice-brain-dump/package.json"}, "properties": {"repobilityId": "b0fd91013577ca71", "scanner": "scanner-primary", "fingerprint": "1098d2c1b75c3d7b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/voice-brain-dump/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-f8366d7d4d7aad88", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/quant-health/package.json"}, "properties": {"repobilityId": "101c599ff8f3a86b", "scanner": "scanner-primary", "fingerprint": "f8366d7d4d7aad88", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/quant-health/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-b2f28a23f2857d58", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/encryption/package.json"}, "properties": {"repobilityId": "7fb6da930c3dd479", "scanner": "scanner-primary", "fingerprint": "b2f28a23f2857d58", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/encryption/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-682fba9dac8d14eb", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/agentic/package.json"}, "properties": {"repobilityId": "03bc9b35c6c8de19", "scanner": "scanner-primary", "fingerprint": "682fba9dac8d14eb", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/agentic/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-8e27b4847bdf1280", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/media/package.json"}, "properties": {"repobilityId": "25c104db870e87dd", "scanner": "scanner-primary", "fingerprint": "8e27b4847bdf1280", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/media/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-dc51b310340199f7", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/ai-organization/package.json"}, "properties": {"repobilityId": "5ccd0e1d07284146", "scanner": "scanner-primary", "fingerprint": "dc51b310340199f7", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/ai-organization/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-5cf4a5ff8562974f", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/common/package.json"}, "properties": {"repobilityId": "025c6402077aab6f", "scanner": "scanner-primary", "fingerprint": "5cf4a5ff8562974f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/common/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-d6be2b5aafc666ae", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/identity-permissions/package.json"}, "properties": {"repobilityId": "3de87d76d8ba0d77", "scanner": "scanner-primary", "fingerprint": "d6be2b5aafc666ae", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/identity-permissions/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-a19a8898a5da7a8e", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/generative-media/package.json"}, "properties": {"repobilityId": "898cd918287a82d0", "scanner": "scanner-primary", "fingerprint": "a19a8898a5da7a8e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/generative-media/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-5e60ccd40bde3ec8", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/moderation/package.json"}, "properties": {"repobilityId": "863ad717f8fea805", "scanner": "scanner-primary", "fingerprint": "5e60ccd40bde3ec8", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/moderation/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-941c68b2f6975c35", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/performance/package.json"}, "properties": {"repobilityId": "dcb14334efd4876c", "scanner": "scanner-primary", "fingerprint": "941c68b2f6975c35", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/performance/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-d86033276650fcba", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/ai-daily-brief/package.json"}, "properties": {"repobilityId": "ba2ae694298a50cd", "scanner": "scanner-primary", "fingerprint": "d86033276650fcba", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/ai-daily-brief/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-6d3ecfd9cfa8a78f", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/triton-client/package.json"}, "properties": {"repobilityId": "b39a8dc01b15b95b", "scanner": "scanner-primary", "fingerprint": "6d3ecfd9cfa8a78f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/triton-client/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-25718c56b5e0c9fa", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/webrtc/package.json"}, "properties": {"repobilityId": "d57c8663710d48e2", "scanner": "scanner-primary", "fingerprint": "25718c56b5e0c9fa", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/webrtc/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-75da16db4c903c1b", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/edge-config/package.json"}, "properties": {"repobilityId": "d4f8d4510c9d3690", "scanner": "scanner-primary", "fingerprint": "75da16db4c903c1b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/edge-config/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-1cf0bc1fa4557f44", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/cross-publish/package.json"}, "properties": {"repobilityId": "44ba78177a529f5c", "scanner": "scanner-primary", "fingerprint": "1cf0bc1fa4557f44", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/cross-publish/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-687b0c75e1f9c8e4", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/information-agents/package.json"}, "properties": {"repobilityId": "ee36e4d3e410a26c", "scanner": "scanner-primary", "fingerprint": "687b0c75e1f9c8e4", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/information-agents/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-a23836ded381e4c3", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/chaos-testing/package.json"}, "properties": {"repobilityId": "df386bfd5d0e5318", "scanner": "scanner-primary", "fingerprint": "a23836ded381e4c3", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/chaos-testing/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-6da696781542104a", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/error-monitoring/package.json"}, "properties": {"repobilityId": "708894d20c3fdf23", "scanner": "scanner-primary", "fingerprint": "6da696781542104a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/error-monitoring/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-75a9c75180309457", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/teams/package.json"}, "properties": {"repobilityId": "23cd9b4ad9ad6c67", "scanner": "scanner-primary", "fingerprint": "75a9c75180309457", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/teams/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-480337df8d279ba0", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/observability/package.json"}, "properties": {"repobilityId": "c41ee2659f3040d3", "scanner": "scanner-primary", "fingerprint": "480337df8d279ba0", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/observability/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-ac2b3ca867ec398f", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/quant-notebook/package.json"}, "properties": {"repobilityId": "ac1e60d2aa9218ff", "scanner": "scanner-primary", "fingerprint": "ac2b3ca867ec398f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/quant-notebook/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3fdfdc77c22dd8d7", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/audit/package.json"}, "properties": {"repobilityId": "74254e2de25b27e6", "scanner": "scanner-primary", "fingerprint": "3fdfdc77c22dd8d7", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/audit/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-ce45dd1b8dcb2452", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/agent-runtime/package.json"}, "properties": {"repobilityId": "c6a4ab401c2554af", "scanner": "scanner-primary", "fingerprint": "ce45dd1b8dcb2452", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/agent-runtime/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-cb01c01804de0b47", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/database/package.json"}, "properties": {"repobilityId": "9b313fab9370ec72", "scanner": "scanner-primary", "fingerprint": "cb01c01804de0b47", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/database/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-7812d14a3ca35b58", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/voice-input/package.json"}, "properties": {"repobilityId": "b146d8b9d2691cdd", "scanner": "scanner-primary", "fingerprint": "7812d14a3ca35b58", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/voice-input/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-0c4eb249a752bcca", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/bharat-ai/package.json"}, "properties": {"repobilityId": "f707ef75233f63e7", "scanner": "scanner-primary", "fingerprint": "0c4eb249a752bcca", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/bharat-ai/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-e0cafd9b24c16070", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/search/package.json"}, "properties": {"repobilityId": "ff4e7b8557c970a3", "scanner": "scanner-primary", "fingerprint": "e0cafd9b24c16070", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/search/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-79be929b82135c3b", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/device-control/package.json"}, "properties": {"repobilityId": "0cc8974b8b5fe5af", "scanner": "scanner-primary", "fingerprint": "79be929b82135c3b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/device-control/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-7903dcbfa2d3afe4", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/ar-lenses/package.json"}, "properties": {"repobilityId": "785b452723f5605e", "scanner": "scanner-primary", "fingerprint": "7903dcbfa2d3afe4", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/ar-lenses/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-1a1bb6e48960a445", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/social-graph/package.json"}, "properties": {"repobilityId": "f8799f3290c94b4f", "scanner": "scanner-primary", "fingerprint": "1a1bb6e48960a445", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/social-graph/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-bb08e9316eb1e6bb", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/universal-timeline/package.json"}, "properties": {"repobilityId": "5cde50358387d5eb", "scanner": "scanner-primary", "fingerprint": "bb08e9316eb1e6bb", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/universal-timeline/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-bebd7397b0010c6d", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/quant-codex/package.json"}, "properties": {"repobilityId": "e084ce9229e165e7", "scanner": "scanner-primary", "fingerprint": "bebd7397b0010c6d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/quant-codex/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-02dd83edc2f3d81d", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/sync-engine/package.json"}, "properties": {"repobilityId": "851efc7dfbefc5f4", "scanner": "scanner-primary", "fingerprint": "02dd83edc2f3d81d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/sync-engine/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-b713844b2b631ab0", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/dev-platform/package.json"}, "properties": {"repobilityId": "f659453225b19be6", "scanner": "scanner-primary", "fingerprint": "b713844b2b631ab0", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/dev-platform/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-36fe6cdeb59e47d7", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/shared-ui/package.json"}, "properties": {"repobilityId": "30bb53285d5548e2", "scanner": "scanner-primary", "fingerprint": "36fe6cdeb59e47d7", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/shared-ui/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-f0db31c5c18b9cfd", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/browser-agent/package.json"}, "properties": {"repobilityId": "e093273d87b9100d", "scanner": "scanner-primary", "fingerprint": "f0db31c5c18b9cfd", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/browser-agent/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-4d20acbe78ecf818", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/ranking/package.json"}, "properties": {"repobilityId": "b3ab137ea09eea9d", "scanner": "scanner-primary", "fingerprint": "4d20acbe78ecf818", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/ranking/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-c31af925d3473636", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/robotics-bridge/package.json"}, "properties": {"repobilityId": "8b5a740ce3ccdc59", "scanner": "scanner-primary", "fingerprint": "c31af925d3473636", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/robotics-bridge/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-0ecaaf0b3082b1ac", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/contextual-sidekick/package.json"}, "properties": {"repobilityId": "5a816413a18484ab", "scanner": "scanner-primary", "fingerprint": "0ecaaf0b3082b1ac", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/contextual-sidekick/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-d534205eabfdf82a", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/organizations/package.json"}, "properties": {"repobilityId": "3243fe294f92f702", "scanner": "scanner-primary", "fingerprint": "d534205eabfdf82a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/organizations/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-2823251a6bbf197e", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/launch-beta/package.json"}, "properties": {"repobilityId": "14bc1261a02a9ac7", "scanner": "scanner-primary", "fingerprint": "2823251a6bbf197e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/launch-beta/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-e8eeaea1067ef6eb", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/queue/package.json"}, "properties": {"repobilityId": "7a4e97c4e09ea54e", "scanner": "scanner-primary", "fingerprint": "e8eeaea1067ef6eb", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/queue/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-4314f60b8423c869", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/command-palette/package.json"}, "properties": {"repobilityId": "791e3c0bfc58f6bc", "scanner": "scanner-primary", "fingerprint": "4314f60b8423c869", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/command-palette/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-f80f2a25a7b6e49e", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/quant-studio/package.json"}, "properties": {"repobilityId": "18ea42d440fa3f8b", "scanner": "scanner-primary", "fingerprint": "f80f2a25a7b6e49e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/quant-studio/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-8949b133357b0911", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/photos/package.json"}, "properties": {"repobilityId": "4ba896945ffbbbad", "scanner": "scanner-primary", "fingerprint": "8949b133357b0911", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/photos/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-482f4e9d55d59aff", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/onboarding/package.json"}, "properties": {"repobilityId": "65aff37a7ca5a1be", "scanner": "scanner-primary", "fingerprint": "482f4e9d55d59aff", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/onboarding/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-704687da550383ed", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/payments/package.json"}, "properties": {"repobilityId": "948161f44dc9bd5d", "scanner": "scanner-primary", "fingerprint": "704687da550383ed", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/payments/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3f43f57b9337a160", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/agent-swarm/package.json"}, "properties": {"repobilityId": "57c22dbf0e021376", "scanner": "scanner-primary", "fingerprint": "3f43f57b9337a160", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/agent-swarm/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-65327c0d8f58f8e3", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/cross-app-gaming/package.json"}, "properties": {"repobilityId": "c7a9831ed9bc3e27", "scanner": "scanner-primary", "fingerprint": "65327c0d8f58f8e3", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/cross-app-gaming/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-aaf184d514190968", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/health-server/package.json"}, "properties": {"repobilityId": "959b1a967ae56b6e", "scanner": "scanner-primary", "fingerprint": "aaf184d514190968", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/health-server/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-55418565003a3fb8", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/iot-control/package.json"}, "properties": {"repobilityId": "8599b14e4d0af1d3", "scanner": "scanner-primary", "fingerprint": "55418565003a3fb8", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/iot-control/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-cd483461e03e5f91", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/quant-flow/package.json"}, "properties": {"repobilityId": "d27f98ad3457c3a8", "scanner": "scanner-primary", "fingerprint": "cd483461e03e5f91", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/quant-flow/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-b739f2f2be1d714d", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/server/package.json"}, "properties": {"repobilityId": "d7cb4fafc3b292b2", "scanner": "scanner-primary", "fingerprint": "b739f2f2be1d714d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/server/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-ec6080c636aac2d6", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/code-agent/package.json"}, "properties": {"repobilityId": "ee7283d266a41633", "scanner": "scanner-primary", "fingerprint": "ec6080c636aac2d6", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/code-agent/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-a100d470bad2a3a7", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/quant-commerce/package.json"}, "properties": {"repobilityId": "72f3116eba68a920", "scanner": "scanner-primary", "fingerprint": "a100d470bad2a3a7", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/quant-commerce/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-427657017a90ce14", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/ml-runtime/package.json"}, "properties": {"repobilityId": "aaffaa985cb908ba", "scanner": "scanner-primary", "fingerprint": "427657017a90ce14", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/ml-runtime/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-eb776bb4e62626da", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/privacy-ads/package.json"}, "properties": {"repobilityId": "fc859456050f0543", "scanner": "scanner-primary", "fingerprint": "eb776bb4e62626da", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/privacy-ads/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-51c04f061a047cb7", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/local-first/package.json"}, "properties": {"repobilityId": "0d7abfcb865055b6", "scanner": "scanner-primary", "fingerprint": "51c04f061a047cb7", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/local-first/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-9497c45353459fa5", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/co-presence/package.json"}, "properties": {"repobilityId": "4e809f0bd726abae", "scanner": "scanner-primary", "fingerprint": "9497c45353459fa5", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/co-presence/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-f3274361409bbeea", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/quant-economy/package.json"}, "properties": {"repobilityId": "b5fed1762c91b920", "scanner": "scanner-primary", "fingerprint": "f3274361409bbeea", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/quant-economy/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-9ed576bd82ffb61a", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/launch-public/package.json"}, "properties": {"repobilityId": "3055453ea767189b", "scanner": "scanner-primary", "fingerprint": "9ed576bd82ffb61a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/launch-public/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3579b7b3269a8923", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/feature-flags/package.json"}, "properties": {"repobilityId": "e70cfd69df91e030", "scanner": "scanner-primary", "fingerprint": "3579b7b3269a8923", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/feature-flags/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3032292e6c26b5db", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/quant-automate/package.json"}, "properties": {"repobilityId": "fce6d65f07156923", "scanner": "scanner-primary", "fingerprint": "3032292e6c26b5db", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/quant-automate/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-64374b8073480f8e", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/wearables/package.json"}, "properties": {"repobilityId": "5faf6f8850160269", "scanner": "scanner-primary", "fingerprint": "64374b8073480f8e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/wearables/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-379db86f370ad9a5", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/app-store/package.json"}, "properties": {"repobilityId": "4244a09f6b8951e2", "scanner": "scanner-primary", "fingerprint": "379db86f370ad9a5", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/app-store/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-1f50989207eeba59", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/realtime/package.json"}, "properties": {"repobilityId": "5bc9ef4d652372e6", "scanner": "scanner-primary", "fingerprint": "1f50989207eeba59", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/realtime/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-1bd75cc814364198", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/wellbeing/package.json"}, "properties": {"repobilityId": "6bf8f72c4ea1284d", "scanner": "scanner-primary", "fingerprint": "1bd75cc814364198", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/wellbeing/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-587750e95a527750", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/universal-capture/package.json"}, "properties": {"repobilityId": "10e757b72d3c2af0", "scanner": "scanner-primary", "fingerprint": "587750e95a527750", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/universal-capture/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-137007a5b04ba75f", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/storage/package.json"}, "properties": {"repobilityId": "c54ae775ce7f58ec", "scanner": "scanner-primary", "fingerprint": "137007a5b04ba75f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/storage/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-a90cde49d14c2585", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/creator-economy/package.json"}, "properties": {"repobilityId": "cbc55325a181043a", "scanner": "scanner-primary", "fingerprint": "a90cde49d14c2585", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/creator-economy/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-bad1968469930fc3", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/cross-app-workflows/package.json"}, "properties": {"repobilityId": "df4c32146b5d8810", "scanner": "scanner-primary", "fingerprint": "bad1968469930fc3", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/cross-app-workflows/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-7af1356c5de19fa9", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/quant-tools/package.json"}, "properties": {"repobilityId": "31862d55117cba0d", "scanner": "scanner-primary", "fingerprint": "7af1356c5de19fa9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/quant-tools/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-15e6cc2e8fb1efeb", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: services/search-indexer/package.json"}, "properties": {"repobilityId": "a2a946438adbca53", "scanner": "scanner-primary", "fingerprint": "15e6cc2e8fb1efeb", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/search-indexer/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-9aea0b0aa56c549f", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: services/moderation-worker/package.json"}, "properties": {"repobilityId": "4d004a8d04b11d19", "scanner": "scanner-primary", "fingerprint": "9aea0b0aa56c549f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/moderation-worker/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-2c068855e97904f6", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: services/matchmaking/package.json"}, "properties": {"repobilityId": "99c6686f2f464554", "scanner": "scanner-primary", "fingerprint": "2c068855e97904f6", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/matchmaking/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-41ca2d814d7e09d4", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: services/git-server/package.json"}, "properties": {"repobilityId": "a90b64e6d67d1be9", "scanner": "scanner-primary", "fingerprint": "41ca2d814d7e09d4", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/git-server/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-fe7607a6a5432584", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: services/smtp-inbound/package.json"}, "properties": {"repobilityId": "ffc560e23a452276", "scanner": "scanner-primary", "fingerprint": "fe7607a6a5432584", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/smtp-inbound/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-12074c86530297c3", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: services/ws-gateway/package.json"}, "properties": {"repobilityId": "05934694978793a2", "scanner": "scanner-primary", "fingerprint": "12074c86530297c3", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/ws-gateway/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-8c0f7432a938e1c5", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: services/cdc-relay/package.json"}, "properties": {"repobilityId": "ba3b386a1cdb84dc", "scanner": "scanner-primary", "fingerprint": "8c0f7432a938e1c5", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/cdc-relay/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-866ad37eb7265777", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: services/ci-runner/package.json"}, "properties": {"repobilityId": "50124b768d476d62", "scanner": "scanner-primary", "fingerprint": "866ad37eb7265777", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/ci-runner/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-eb850abe5d3c8bc3", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: e2e/package.json"}, "properties": {"repobilityId": "4c9201e2b263799e", "scanner": "scanner-primary", "fingerprint": "eb850abe5d3c8bc3", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "e2e/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "cfeeb017d38a1051", "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": "59413cd720558c83", "scanner": "scanner-primary", "fingerprint": "72b2a6250083a784", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "incomplete", "generated-repo-pattern"]}}, {"ruleId": "scanner-2d0c7b7ab8f8aacf", "level": "warning", "message": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "properties": {"repobilityId": "017e1d0323240be0", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-ea8f3013f588db25", "level": "note", "message": {"text": "Shallow git history limits provenance confidence"}, "properties": {"repobilityId": "2401b6c0047c3cc6", "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": "b00b5c119751147e", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-71f3decba72710d6", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantedits/src/services/api-client.ts:38"}, "properties": {"repobilityId": "b1acd6a854ad7cc0", "scanner": "scanner-primary", "fingerprint": "71f3decba72710d6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-bab91152c75c5817", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantchat/src/app/api/media/upload/route.ts:7"}, "properties": {"repobilityId": "572d397c850e5715", "scanner": "scanner-primary", "fingerprint": "bab91152c75c5817", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a738646c4e73efa2", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantchat/src/app/api/messages/[id]/route.ts:8"}, "properties": {"repobilityId": "0124c525aa8cfc60", "scanner": "scanner-primary", "fingerprint": "a738646c4e73efa2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-5c6725271655796b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantchat/src/app/api/stories/route.ts:7"}, "properties": {"repobilityId": "201d63d02da9f8cf", "scanner": "scanner-primary", "fingerprint": "5c6725271655796b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ba77c754187dd5da", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantchat/src/app/api/stories/[storyId]/route.ts:10"}, "properties": {"repobilityId": "082335d8fc8142c2", "scanner": "scanner-primary", "fingerprint": "ba77c754187dd5da", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-27746800087d5ee6", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantchat/src/app/api/stories/[storyId]/reply/route.ts:11"}, "properties": {"repobilityId": "09c1061f5c58d0a7", "scanner": "scanner-primary", "fingerprint": "27746800087d5ee6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-bd99138091461611", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantchat/src/app/api/stories/[storyId]/view/route.ts:10"}, "properties": {"repobilityId": "3041114667efb21c", "scanner": "scanner-primary", "fingerprint": "bd99138091461611", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-bd88a0be6cab3463", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantchat/src/app/api/stories/[storyId]/viewers/route.ts:10"}, "properties": {"repobilityId": "94899fb4dcd49f7b", "scanner": "scanner-primary", "fingerprint": "bd88a0be6cab3463", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-008f81eff07da93d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantchat/src/app/api/stories/feed/route.ts:6"}, "properties": {"repobilityId": "72c8d176f563525d", "scanner": "scanner-primary", "fingerprint": "008f81eff07da93d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-6febdcd17abd1a6d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantchat/src/pages/memories.tsx:60"}, "properties": {"repobilityId": "60b8533ae8c46adb", "scanner": "scanner-primary", "fingerprint": "6febdcd17abd1a6d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4f7d30ee8df0b874", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantchat/src/hooks/useChat.ts:187"}, "properties": {"repobilityId": "b9a6e94b9a410b0e", "scanner": "scanner-primary", "fingerprint": "4f7d30ee8df0b874", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e9f4b61d86200340", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantchat/src/hooks/useMedia.ts:298"}, "properties": {"repobilityId": "bcad1fb8285cf9e4", "scanner": "scanner-primary", "fingerprint": "e9f4b61d86200340", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3011ceb2529f254a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantchat/src/services/api-client.ts:486"}, "properties": {"repobilityId": "a2d04d93d9fdfbde", "scanner": "scanner-primary", "fingerprint": "3011ceb2529f254a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d6fda7ad519be34e", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/quantneon/src/components/MiniGameLobby.tsx:1"}, "properties": {"repobilityId": "81a286b32f67ba38", "scanner": "scanner-primary", "fingerprint": "d6fda7ad519be34e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-892e0de4ae4bacf5", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/quantneon/src/components/ShoppingTag.tsx:1"}, "properties": {"repobilityId": "d41ed58866dccc73", "scanner": "scanner-primary", "fingerprint": "892e0de4ae4bacf5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-90637ccc8380f0d2", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/quantneon/src/components/ARTryOn.tsx:1"}, "properties": {"repobilityId": "211579fbdb3dddfa", "scanner": "scanner-primary", "fingerprint": "90637ccc8380f0d2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8ccb0191bd773672", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/quantneon/src/hooks/useFeed.ts:1"}, "properties": {"repobilityId": "27da4f5537a4c3f9", "scanner": "scanner-primary", "fingerprint": "8ccb0191bd773672", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9b067774c9949dac", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/quantneon/src/hooks/useReels.ts:1"}, "properties": {"repobilityId": "c6fcc2f5eca3e039", "scanner": "scanner-primary", "fingerprint": "9b067774c9949dac", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cec51a2b52415932", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantneon/src/services/api-client.ts:38"}, "properties": {"repobilityId": "b0d6722f23b2ad5a", "scanner": "scanner-primary", "fingerprint": "cec51a2b52415932", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-757077c83405c897", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/quantmax/src/components/SwipeStack.tsx:1"}, "properties": {"repobilityId": "6336324a25a526ca", "scanner": "scanner-primary", "fingerprint": "757077c83405c897", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f2b010a67ed83696", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/quantmax/src/components/DateTimer.tsx:1"}, "properties": {"repobilityId": "60287a2cf0e7b269", "scanner": "scanner-primary", "fingerprint": "f2b010a67ed83696", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-47eccb58d97aa79f", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/quantmax/src/components/RandomMatcher.tsx:1"}, "properties": {"repobilityId": "c29f4b7e2a3a7cf1", "scanner": "scanner-primary", "fingerprint": "47eccb58d97aa79f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-27e46160742ed3d9", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/quantmax/src/components/GiftPanel.tsx:1"}, "properties": {"repobilityId": "2ed5767f5b2f3639", "scanner": "scanner-primary", "fingerprint": "27e46160742ed3d9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4834e22b8a3bd846", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/quantmax/src/components/VideoCreator.tsx:1"}, "properties": {"repobilityId": "0aad42d0b1219bc0", "scanner": "scanner-primary", "fingerprint": "4834e22b8a3bd846", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-dfcb7fdb76dd348d", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/quantmax/src/pages/create.tsx:1"}, "properties": {"repobilityId": "e95cdb6cf6064141", "scanner": "scanner-primary", "fingerprint": "dfcb7fdb76dd348d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e56221238bcb5f73", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/quantmax/src/pages/challenges.tsx:1"}, "properties": {"repobilityId": "ed48d24a86e308de", "scanner": "scanner-primary", "fingerprint": "e56221238bcb5f73", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fab9fcf6233ff6c0", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/quantmax/src/pages/profile.tsx:1"}, "properties": {"repobilityId": "3b694aedf24d3c46", "scanner": "scanner-primary", "fingerprint": "fab9fcf6233ff6c0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7e87def32f368221", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/quantmax/src/pages/virtual-dates.tsx:1"}, "properties": {"repobilityId": "090453deee1496c1", "scanner": "scanner-primary", "fingerprint": "7e87def32f368221", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b43bcb34ce244cfd", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/quantmax/src/pages/index.tsx:1"}, "properties": {"repobilityId": "eb04cf6e72cf19bd", "scanner": "scanner-primary", "fingerprint": "b43bcb34ce244cfd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5cc3463efe487365", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/quantmax/src/pages/discover.tsx:1"}, "properties": {"repobilityId": "a379611219e78a0e", "scanner": "scanner-primary", "fingerprint": "5cc3463efe487365", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6dc660b2f1133170", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/quantmax/src/pages/creator-fund.tsx:1"}, "properties": {"repobilityId": "3935a5bd1493c0b2", "scanner": "scanner-primary", "fingerprint": "6dc660b2f1133170", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-85b2dff0fa522c8f", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/quantmax/src/pages/speed-dating.tsx:1"}, "properties": {"repobilityId": "18e3057ec44bcd6a", "scanner": "scanner-primary", "fingerprint": "85b2dff0fa522c8f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0734f220acfa91ab", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/quantmax/src/pages/videochat.tsx:1"}, "properties": {"repobilityId": "8fbf9cf8eed5a56d", "scanner": "scanner-primary", "fingerprint": "0734f220acfa91ab", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b3507431cb069099", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/quantmax/src/hooks/useLive.ts:1"}, "properties": {"repobilityId": "ef786aae5abbf303", "scanner": "scanner-primary", "fingerprint": "b3507431cb069099", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-51ce96fa0933d1a3", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/quantmax/src/hooks/useCreator.ts:1"}, "properties": {"repobilityId": "54e370f4d5b4f295", "scanner": "scanner-primary", "fingerprint": "51ce96fa0933d1a3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b8bbc7f4aca37a50", "level": "none", "message": {"text": "Commented-code block (7 lines) in apps/quantmax/src/hooks/useFeed.ts:1"}, "properties": {"repobilityId": "d1d08512cbfcc70a", "scanner": "scanner-primary", "fingerprint": "b8bbc7f4aca37a50", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ee981367f95d7a36", "level": "none", "message": {"text": "Commented-code block (8 lines) in apps/quantmax/src/hooks/useMatching.ts:1"}, "properties": {"repobilityId": "c5140e306673ce98", "scanner": "scanner-primary", "fingerprint": "ee981367f95d7a36", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-682456007ad13556", "level": "none", "message": {"text": "Commented-code block (7 lines) in apps/quantmax/src/hooks/useVideoChat.ts:1"}, "properties": {"repobilityId": "f92d43378bf747a4", "scanner": "scanner-primary", "fingerprint": "682456007ad13556", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fbfaef72827792b8", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantmax/src/services/api-client.ts:34"}, "properties": {"repobilityId": "62c5de87fc46eea5", "scanner": "scanner-primary", "fingerprint": "fbfaef72827792b8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-8a242ef4964762c8", "level": "note", "message": {"text": "Legacy-named symbol `startOld` in apps/quantmail/src/components/GitDiff.tsx:17"}, "properties": {"repobilityId": "f8a9fa3bb3e0ab42", "scanner": "scanner-primary", "fingerprint": "8a242ef4964762c8", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-a9fec8cdc5e28f0a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantmail/src/app/api/drive/upload/route.ts:7"}, "properties": {"repobilityId": "8be00a609b375c13", "scanner": "scanner-primary", "fingerprint": "a9fec8cdc5e28f0a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9f2a8355ff59fd7d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantmail/src/app/api/drive/files/route.ts:7"}, "properties": {"repobilityId": "1da3e1488fecc19e", "scanner": "scanner-primary", "fingerprint": "9f2a8355ff59fd7d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-43988d5fd027a222", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantmail/src/app/api/drive/files/trash/route.ts:7"}, "properties": {"repobilityId": "fbbd1fca60f0d94a", "scanner": "scanner-primary", "fingerprint": "43988d5fd027a222", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-639205cd8d047ce6", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantmail/src/app/api/drive/files/[fileId]/route.ts:11"}, "properties": {"repobilityId": "d541486a6a67998d", "scanner": "scanner-primary", "fingerprint": "639205cd8d047ce6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2377c5f5b0c7e46c", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantmail/src/app/api/drive/files/[fileId]/star/route.ts:10"}, "properties": {"repobilityId": "dc8923e54932039e", "scanner": "scanner-primary", "fingerprint": "2377c5f5b0c7e46c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b4731c3dffad8691", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantmail/src/app/api/drive/files/[fileId]/share/route.ts:11"}, "properties": {"repobilityId": "0bf001a0109e69a7", "scanner": "scanner-primary", "fingerprint": "b4731c3dffad8691", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-1ad7ba3ba4c7eca8", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantmail/src/app/api/drive/files/[fileId]/copy/route.ts:10"}, "properties": {"repobilityId": "da98729dfa7875dc", "scanner": "scanner-primary", "fingerprint": "1ad7ba3ba4c7eca8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-59c9dbcc1bc5b07e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantmail/src/app/api/drive/files/[fileId]/versions/route.ts:10"}, "properties": {"repobilityId": "2653208c116d864b", "scanner": "scanner-primary", "fingerprint": "59c9dbcc1bc5b07e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9a4618a7bace2c5e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantmail/src/app/api/drive/files/[fileId]/versions/[versionId]/restore/route.ts:10"}, "properties": {"repobilityId": "cad43ba9bea0cb4a", "scanner": "scanner-primary", "fingerprint": "9a4618a7bace2c5e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-54f281200c209e9b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantmail/src/app/api/drive/files/[fileId]/download/route.ts:10"}, "properties": {"repobilityId": "1076febd89fbe727", "scanner": "scanner-primary", "fingerprint": "54f281200c209e9b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-14106ee61bb1c2a2", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantmail/src/app/api/drive/files/move/route.ts:7"}, "properties": {"repobilityId": "81cc7b9ac423f276", "scanner": "scanner-primary", "fingerprint": "14106ee61bb1c2a2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-17dcc2e629ef3cd6", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantmail/src/app/api/drive/search/route.ts:7"}, "properties": {"repobilityId": "9e3bdc0d60a3c7bf", "scanner": "scanner-primary", "fingerprint": "17dcc2e629ef3cd6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-febad5c6b609c3d7", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantmail/src/app/api/drive/folders/route.ts:7"}, "properties": {"repobilityId": "db1a2abcbbe3045f", "scanner": "scanner-primary", "fingerprint": "febad5c6b609c3d7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e266366ca088d585", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantmail/src/hooks/useGit.ts:120"}, "properties": {"repobilityId": "2309396316b94f33", "scanner": "scanner-primary", "fingerprint": "e266366ca088d585", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9baf345b5890201f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantmail/src/hooks/useEmail.ts:94"}, "properties": {"repobilityId": "a597f0d331ea9b91", "scanner": "scanner-primary", "fingerprint": "9baf345b5890201f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-7e6e25ed8be8f9e2", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantmail/src/hooks/useDrive.ts:83"}, "properties": {"repobilityId": "4abfac52858aeabf", "scanner": "scanner-primary", "fingerprint": "7e6e25ed8be8f9e2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-1b7a38b87802b021", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantmail/src/services/api-client.ts:586"}, "properties": {"repobilityId": "a8c9c068891193ed", "scanner": "scanner-primary", "fingerprint": "1b7a38b87802b021", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-354388294c1d4c90", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantdocs/src/hooks/useDocument.ts:20"}, "properties": {"repobilityId": "a701428b4881d976", "scanner": "scanner-primary", "fingerprint": "354388294c1d4c90", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ea427d25998da492", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantdocs/src/hooks/useDocuments.ts:22"}, "properties": {"repobilityId": "b13897976807d37e", "scanner": "scanner-primary", "fingerprint": "ea427d25998da492", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d60479d45d08b863", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/quanttube/backend/services/video-processor.service.ts:3"}, "properties": {"repobilityId": "91212e821a99b0d2", "scanner": "scanner-primary", "fingerprint": "d60479d45d08b863", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3b36237ef6a6b204", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantcalendar/src/app/api/events/route.ts:7"}, "properties": {"repobilityId": "af48b3377cc7d394", "scanner": "scanner-primary", "fingerprint": "3b36237ef6a6b204", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-dc4ebf3722cbc29d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantcalendar/src/app/api/calendars/route.ts:6"}, "properties": {"repobilityId": "939e903ea8f30397", "scanner": "scanner-primary", "fingerprint": "dc4ebf3722cbc29d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-82a8579c3106d706", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantcalendar/src/hooks/useCalendars.ts:17"}, "properties": {"repobilityId": "05377a0eb4a5e646", "scanner": "scanner-primary", "fingerprint": "82a8579c3106d706", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-74d8a7c0576b74a9", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantcalendar/src/hooks/useEvents.ts:28"}, "properties": {"repobilityId": "43db4dd6345f6c78", "scanner": "scanner-primary", "fingerprint": "74d8a7c0576b74a9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-8799d118c64d39bf", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/admin/src/app/audit/page.tsx:168"}, "properties": {"repobilityId": "c0fa8c2afb56e27d", "scanner": "scanner-primary", "fingerprint": "8799d118c64d39bf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-fd7c47624be7d1f1", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantdrive/src/app/api/files/route.ts:7"}, "properties": {"repobilityId": "945af8950c69e741", "scanner": "scanner-primary", "fingerprint": "fd7c47624be7d1f1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2e1ea1c536465b20", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantdrive/src/app/api/storage/quota/route.ts:6"}, "properties": {"repobilityId": "77d1c33879f84264", "scanner": "scanner-primary", "fingerprint": "2e1ea1c536465b20", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d87523ad82404db6", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantdrive/src/hooks/useStorageQuota.ts:13"}, "properties": {"repobilityId": "32b7c50518d96efc", "scanner": "scanner-primary", "fingerprint": "d87523ad82404db6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-243e87ffdc2aaeb1", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantdrive/src/hooks/useFiles.ts:26"}, "properties": {"repobilityId": "b8f47033fefd7496", "scanner": "scanner-primary", "fingerprint": "243e87ffdc2aaeb1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-7309fd563e36023b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantads/src/components/AuctionViewer.tsx:75"}, "properties": {"repobilityId": "174db085d43b8251", "scanner": "scanner-primary", "fingerprint": "7309fd563e36023b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3df9f1f20508831a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantads/src/pages/brand-safety.tsx:276"}, "properties": {"repobilityId": "e41294983d77034f", "scanner": "scanner-primary", "fingerprint": "3df9f1f20508831a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-cdaf0aef18f25773", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantads/src/services/api-client.ts:28"}, "properties": {"repobilityId": "deb039fa1ee85140", "scanner": "scanner-primary", "fingerprint": "cdaf0aef18f25773", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f30723846bb093ba", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/quantube/src/components/MusicPlayer.tsx:1"}, "properties": {"repobilityId": "40be1515783bbf63", "scanner": "scanner-primary", "fingerprint": "f30723846bb093ba", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d4bf0d1c15b29463", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantube/src/services/api-client.ts:58"}, "properties": {"repobilityId": "028625d16c7c99f1", "scanner": "scanner-primary", "fingerprint": "d4bf0d1c15b29463", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-dadb2e74a7c4d5dd", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantmeet/src/app/page.tsx:21"}, "properties": {"repobilityId": "64c5129f229869e9", "scanner": "scanner-primary", "fingerprint": "dadb2e74a7c4d5dd", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-1d60d0b566b6613b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantmeet/src/hooks/useParticipants.ts:46"}, "properties": {"repobilityId": "815afb190b6577e2", "scanner": "scanner-primary", "fingerprint": "1d60d0b566b6613b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3b5fa67fe41f2bc9", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantmeet/src/hooks/useMeeting.ts:17"}, "properties": {"repobilityId": "870e43b0ae126c50", "scanner": "scanner-primary", "fingerprint": "3b5fa67fe41f2bc9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-fdc895073602cb92", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantsync/src/components/PostCard.tsx:134"}, "properties": {"repobilityId": "caefb180026dd501", "scanner": "scanner-primary", "fingerprint": "fdc895073602cb92", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-244445a4ff46872c", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantsync/src/legacy-pages/settings.tsx:152"}, "properties": {"repobilityId": "cee357b5a8b9915f", "scanner": "scanner-primary", "fingerprint": "244445a4ff46872c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-5936a359788a4405", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantsync/src/legacy-pages/analytics.tsx:67"}, "properties": {"repobilityId": "e25579009eef4f06", "scanner": "scanner-primary", "fingerprint": "5936a359788a4405", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a059d28ea38abef7", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantsync/src/legacy-pages/messages.tsx:117"}, "properties": {"repobilityId": "71331424a572f777", "scanner": "scanner-primary", "fingerprint": "a059d28ea38abef7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-7d43d83f35af9ed8", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantsync/src/legacy-pages/index.tsx:60"}, "properties": {"repobilityId": "b9b6451457316a4e", "scanner": "scanner-primary", "fingerprint": "7d43d83f35af9ed8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a12b95fc9c6b58db", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantsync/src/legacy-pages/compose.tsx:227"}, "properties": {"repobilityId": "8ce4cc35fda09404", "scanner": "scanner-primary", "fingerprint": "a12b95fc9c6b58db", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f117db91cf06519c", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantsync/src/legacy-pages/lists.tsx:114"}, "properties": {"repobilityId": "6eb0ecc5fb4e504a", "scanner": "scanner-primary", "fingerprint": "f117db91cf06519c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-cd64d3f9c6f3340d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantsync/src/legacy-pages/spaces.tsx:111"}, "properties": {"repobilityId": "4526819c8b630549", "scanner": "scanner-primary", "fingerprint": "cd64d3f9c6f3340d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-7136abadba954252", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantsync/src/legacy-pages/trending.tsx:57"}, "properties": {"repobilityId": "726109acbce96a5f", "scanner": "scanner-primary", "fingerprint": "7136abadba954252", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-0db4181670a86556", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantsync/src/legacy-pages/search.tsx:117"}, "properties": {"repobilityId": "3f84ca41698e71e8", "scanner": "scanner-primary", "fingerprint": "0db4181670a86556", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9af2210c70a73ba7", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantsync/src/legacy-pages/bookmarks.tsx:48"}, "properties": {"repobilityId": "b4abe55a75b31a22", "scanner": "scanner-primary", "fingerprint": "9af2210c70a73ba7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-564f927ba0db2e2a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantsync/src/legacy-pages/notifications.tsx:48"}, "properties": {"repobilityId": "7b343c324f15ba54", "scanner": "scanner-primary", "fingerprint": "564f927ba0db2e2a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-cd4cdd81af3c571b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantsync/src/legacy-pages/communities.tsx:79"}, "properties": {"repobilityId": "cd1b63e638dc4c92", "scanner": "scanner-primary", "fingerprint": "cd4cdd81af3c571b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-245cdc5a615a9e73", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantsync/src/legacy-pages/anonymous.tsx:51"}, "properties": {"repobilityId": "ea6fdf4f4f7c0c09", "scanner": "scanner-primary", "fingerprint": "245cdc5a615a9e73", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-6bf8f8d548c7626a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantsync/src/legacy-pages/post/[id].tsx:92"}, "properties": {"repobilityId": "f415d18d229925ed", "scanner": "scanner-primary", "fingerprint": "6bf8f8d548c7626a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-547ee586d524afd9", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantsync/src/legacy-pages/profile/[id].tsx:107"}, "properties": {"repobilityId": "5a38190232c8b98c", "scanner": "scanner-primary", "fingerprint": "547ee586d524afd9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9e8e42269db0df7a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantsync/src/hooks/useSpaces.ts:272"}, "properties": {"repobilityId": "4978d02045e93521", "scanner": "scanner-primary", "fingerprint": "9e8e42269db0df7a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c56f83f40dae3adb", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantsync/src/hooks/useCommunity.ts:133"}, "properties": {"repobilityId": "ea534dcc61de6884", "scanner": "scanner-primary", "fingerprint": "c56f83f40dae3adb", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f2581255fee826ca", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantsync/src/hooks/useFeed.ts:86"}, "properties": {"repobilityId": "9f8e45abf54b96b8", "scanner": "scanner-primary", "fingerprint": "f2581255fee826ca", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2466bd2a779139ef", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantsync/src/services/api-client.ts:42"}, "properties": {"repobilityId": "40044498345414d3", "scanner": "scanner-primary", "fingerprint": "2466bd2a779139ef", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b7d04cf4c2579bb7", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/quantai/backend/routes/memory.ts:117"}, "properties": {"repobilityId": "e6d3a6efe139595d", "scanner": "scanner-primary", "fingerprint": "b7d04cf4c2579bb7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bb40ace6a82d9549", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantai/src/app/api/models/route.ts:6"}, "properties": {"repobilityId": "bb751d772487bbf5", "scanner": "scanner-primary", "fingerprint": "bb40ace6a82d9549", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-028461d786a79d3a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantai/src/app/api/models/compare/route.ts:7"}, "properties": {"repobilityId": "e2c0f8f4f95e411e", "scanner": "scanner-primary", "fingerprint": "028461d786a79d3a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-cdf2a60d7f896f21", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/quantai/src/app/api/ai/stream/route.ts:34"}, "properties": {"repobilityId": "0c35e88a615b59f2", "scanner": "scanner-primary", "fingerprint": "cdf2a60d7f896f21", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6562cbbcc7c30d48", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantai/src/app/api/analytics/route.ts:6"}, "properties": {"repobilityId": "d7787d512a23f2f6", "scanner": "scanner-primary", "fingerprint": "6562cbbcc7c30d48", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-bfd63bed27400fa0", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantai/src/app/api/assistant/personality/route.ts:7"}, "properties": {"repobilityId": "55e6ce138888ab3b", "scanner": "scanner-primary", "fingerprint": "bfd63bed27400fa0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b52664b0f5afec9c", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantai/src/app/api/assistant/conversations/route.ts:6"}, "properties": {"repobilityId": "8054a7d4532b73bc", "scanner": "scanner-primary", "fingerprint": "b52664b0f5afec9c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b8e8ec10b3e49f92", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantai/src/app/api/assistant/conversations/[id]/route.ts:10"}, "properties": {"repobilityId": "faa78935b9d2f79e", "scanner": "scanner-primary", "fingerprint": "b8e8ec10b3e49f92", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-be90d4a2e6548643", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/quantai/src/app/api/assistant/chat/route.ts:43"}, "properties": {"repobilityId": "8d32898ba61fdf8b", "scanner": "scanner-primary", "fingerprint": "be90d4a2e6548643", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-65b7f710befcf64c", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantai/src/app/api/assistant/chat/route.ts:17"}, "properties": {"repobilityId": "5d13a8edc7e8e80f", "scanner": "scanner-primary", "fingerprint": "65b7f710befcf64c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-674538749694b48a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantai/src/app/api/automations/route.ts:6"}, "properties": {"repobilityId": "85c1cf8c99af433c", "scanner": "scanner-primary", "fingerprint": "674538749694b48a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-1070cbcfc8a8d358", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantai/src/app/api/automations/[id]/route.ts:10"}, "properties": {"repobilityId": "b8565caa3937e203", "scanner": "scanner-primary", "fingerprint": "1070cbcfc8a8d358", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a1bd5503b503dc71", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantai/src/app/api/automations/[id]/execute/route.ts:7"}, "properties": {"repobilityId": "e8d9c74b9e6a2007", "scanner": "scanner-primary", "fingerprint": "a1bd5503b503dc71", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-bd169b5baa0ae2f9", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantai/src/app/api/automations/[id]/toggle/route.ts:8"}, "properties": {"repobilityId": "5d8fce133c1abcb2", "scanner": "scanner-primary", "fingerprint": "bd169b5baa0ae2f9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c12491c8a65b21a3", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantai/src/app/api/ecosystem/apps/route.ts:6"}, "properties": {"repobilityId": "0076930e53c24a86", "scanner": "scanner-primary", "fingerprint": "c12491c8a65b21a3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d78e1e94b378178a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantai/src/app/api/ecosystem/apps/[appId]/toggle-ai/route.ts:11"}, "properties": {"repobilityId": "09315f536cefcc5e", "scanner": "scanner-primary", "fingerprint": "d78e1e94b378178a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-35254b5770c5f875", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantai/src/app/api/ecosystem/apps/[appId]/config/route.ts:11"}, "properties": {"repobilityId": "601e29cc312fe8f2", "scanner": "scanner-primary", "fingerprint": "35254b5770c5f875", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-980b4948d015738f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantai/src/app/api/orchestrate/route.ts:7"}, "properties": {"repobilityId": "996f2b8bd4edb93f", "scanner": "scanner-primary", "fingerprint": "980b4948d015738f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-79c082616a57266d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantai/src/app/api/devices/route.ts:6"}, "properties": {"repobilityId": "210af876d9e41daf", "scanner": "scanner-primary", "fingerprint": "79c082616a57266d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4b8f9acc268bcdc0", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantai/src/app/api/devices/[deviceId]/screen/route.ts:10"}, "properties": {"repobilityId": "725a4226f376c231", "scanner": "scanner-primary", "fingerprint": "4b8f9acc268bcdc0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-12e5a56610127e57", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantai/src/app/api/devices/[deviceId]/command/route.ts:11"}, "properties": {"repobilityId": "12aa135ea76cd787", "scanner": "scanner-primary", "fingerprint": "12e5a56610127e57", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-7381e263313f5a94", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantai/src/app/api/plugins/route.ts:6"}, "properties": {"repobilityId": "9e5dd6dbe536cc62", "scanner": "scanner-primary", "fingerprint": "7381e263313f5a94", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-1eb95a5573de81a3", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantai/src/app/api/plugins/[id]/install/route.ts:7"}, "properties": {"repobilityId": "daf68a2afa2ccb98", "scanner": "scanner-primary", "fingerprint": "1eb95a5573de81a3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-659807af240a6f8f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantai/src/app/api/plugins/[id]/uninstall/route.ts:10"}, "properties": {"repobilityId": "f4e83192e004ead8", "scanner": "scanner-primary", "fingerprint": "659807af240a6f8f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-1769d14702075d3e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantai/src/app/api/training/route.ts:6"}, "properties": {"repobilityId": "3148975a45fef00b", "scanner": "scanner-primary", "fingerprint": "1769d14702075d3e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-0d425a03bf8dc5aa", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantai/src/app/api/training/[id]/route.ts:10"}, "properties": {"repobilityId": "2e93f0110d21a2c2", "scanner": "scanner-primary", "fingerprint": "0d425a03bf8dc5aa", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a6a347ee7f1ffe13", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/quantai/src/pages/translate.tsx:1"}, "properties": {"repobilityId": "2adaabcdc08a9b87", "scanner": "scanner-primary", "fingerprint": "a6a347ee7f1ffe13", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c0b29d055c5b4b79", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/quantai/src/pages/automation.tsx:1"}, "properties": {"repobilityId": "62a1b72b01213a9a", "scanner": "scanner-primary", "fingerprint": "c0b29d055c5b4b79", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-20630e9605189581", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/quantai/src/pages/image-gen.tsx:1"}, "properties": {"repobilityId": "d7343df03147fe00", "scanner": "scanner-primary", "fingerprint": "20630e9605189581", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-43b6733f14773eff", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/quantai/src/pages/ecosystem.tsx:1"}, "properties": {"repobilityId": "1a85412a7d1643ba", "scanner": "scanner-primary", "fingerprint": "43b6733f14773eff", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a467e98b123f2822", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/quantai/src/pages/personas.tsx:1"}, "properties": {"repobilityId": "cb5d59b1efc82b47", "scanner": "scanner-primary", "fingerprint": "a467e98b123f2822", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0e32fbe16d18d074", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/quantai/src/pages/device.tsx:1"}, "properties": {"repobilityId": "c47f2bb5ad10f7a3", "scanner": "scanner-primary", "fingerprint": "0e32fbe16d18d074", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-61ea796cbc7231f9", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/quantai/src/pages/plugins.tsx:1"}, "properties": {"repobilityId": "4eacef8fa3bbc858", "scanner": "scanner-primary", "fingerprint": "61ea796cbc7231f9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ba64941bb22ff459", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/quantai/src/pages/models.tsx:1"}, "properties": {"repobilityId": "83bc9bd7a7ac911c", "scanner": "scanner-primary", "fingerprint": "ba64941bb22ff459", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-aaf1387af9d0cc14", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/quantai/src/pages/code.tsx:1"}, "properties": {"repobilityId": "e3eb5315ad8a9498", "scanner": "scanner-primary", "fingerprint": "aaf1387af9d0cc14", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fe6887442185ee67", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/quantai/src/pages/memory.tsx:1"}, "properties": {"repobilityId": "1d4ee540ffb5dc53", "scanner": "scanner-primary", "fingerprint": "fe6887442185ee67", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9e10f63dd7dba229", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantai/src/hooks/useAIChat.ts:300"}, "properties": {"repobilityId": "4b048143c1e90785", "scanner": "scanner-primary", "fingerprint": "9e10f63dd7dba229", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c30d6dd279007b6d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/quantai/src/services/api-client.ts:17"}, "properties": {"repobilityId": "0b70d26babbb54b1", "scanner": "scanner-primary", "fingerprint": "c30d6dd279007b6d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-cb3bc35d12bef7f9", "level": "note", "message": {"text": "Legacy-named symbol `eleven_multilingual_v2` in packages/quant-live/src/__tests__/elevenlabs-provider.test.ts:101"}, "properties": {"repobilityId": "cd1896f6215f2fc1", "scanner": "scanner-primary", "fingerprint": "cb3bc35d12bef7f9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-f2d20ebce3ecce60", "level": "note", "message": {"text": "Legacy-named symbol `eleven_monolingual_v1` in packages/quant-live/src/tts/elevenlabs-provider.ts:31"}, "properties": {"repobilityId": "b5e4fe62924004a3", "scanner": "scanner-primary", "fingerprint": "f2d20ebce3ecce60", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-90e2156883ac66ab", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/quant-live/src/daily-brief/app-aggregator.ts:14"}, "properties": {"repobilityId": "ddd0c0c74f1407be", "scanner": "scanner-primary", "fingerprint": "90e2156883ac66ab", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a4bc3cff7ce7912f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/quant-live/src/asr/whisper-provider.ts:135"}, "properties": {"repobilityId": "60a1ea3c7d61a964", "scanner": "scanner-primary", "fingerprint": "a4bc3cff7ce7912f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-32a2ce4dd07e1417", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/federation/src/mail-protocols/imap-adapter.ts:103"}, "properties": {"repobilityId": "d26979f25f5159fa", "scanner": "scanner-primary", "fingerprint": "32a2ce4dd07e1417", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e53bebff9b2d3893", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/federation/src/mail-protocols/__tests__/imap-adapter.test.ts:44"}, "properties": {"repobilityId": "574582e324f73597", "scanner": "scanner-primary", "fingerprint": "e53bebff9b2d3893", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-563322eefd618cd6", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/maps/src/routing/router.ts:13"}, "properties": {"repobilityId": "c11bef23fd8f0608", "scanner": "scanner-primary", "fingerprint": "563322eefd618cd6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ea6e26d154801aff", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/maps/src/geocoding/geocoder.ts:13"}, "properties": {"repobilityId": "5c912d77e7d6e0a3", "scanner": "scanner-primary", "fingerprint": "ea6e26d154801aff", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-8edd3f7d5970083c", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/notifications/src/services/apns-client.ts:1"}, "properties": {"repobilityId": "8a479ebec55afca9", "scanner": "scanner-primary", "fingerprint": "8edd3f7d5970083c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5cb4c00a5c15cd04", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/quant-orchestrator/src/daily-brief.ts:43"}, "properties": {"repobilityId": "93859d4a27392188", "scanner": "scanner-primary", "fingerprint": "5cb4c00a5c15cd04", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f40467ef1636a25f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/quant-orchestrator/src/types.ts:80"}, "properties": {"repobilityId": "6fedd98ce183046a", "scanner": "scanner-primary", "fingerprint": "f40467ef1636a25f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-14226631b7a7c94a", "level": "none", "message": {"text": "Commented-code block (6 lines) in packages/auth/src/providers/phone-provider.ts:229"}, "properties": {"repobilityId": "f1eb5e4fc364e2f0", "scanner": "scanner-primary", "fingerprint": "14226631b7a7c94a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-282e3190b9112b07", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/auth/src/e2e/signal-session.ts:158"}, "properties": {"repobilityId": "42ba599007464240", "scanner": "scanner-primary", "fingerprint": "282e3190b9112b07", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-77bb5fdba4d563c0", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/auth/src/e2e/zk-email/key-discovery.ts:1"}, "properties": {"repobilityId": "a64c1cb42f6040e0", "scanner": "scanner-primary", "fingerprint": "77bb5fdba4d563c0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4b6089a969a2d8d0", "level": "none", "message": {"text": "Commented-code block (6 lines) in packages/identity-permissions/src/core/memory-manager.ts:1"}, "properties": {"repobilityId": "04be8e0d83648b70", "scanner": "scanner-primary", "fingerprint": "4b6089a969a2d8d0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-52336b600cd6f657", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/identity-permissions/src/core/context-graph.ts:14"}, "properties": {"repobilityId": "34c8584f1ff75567", "scanner": "scanner-primary", "fingerprint": "52336b600cd6f657", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-abd6413bb41ee07c", "level": "none", "message": {"text": "Commented-code block (7 lines) in packages/identity-permissions/src/core/consent-manager.ts:1"}, "properties": {"repobilityId": "97cf16cf717c8fc1", "scanner": "scanner-primary", "fingerprint": "abd6413bb41ee07c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fe103b916111f2ed", "level": "none", "message": {"text": "Commented-code block (6 lines) in packages/identity-permissions/src/core/rbac.ts:1"}, "properties": {"repobilityId": "6aa0f26ea6ae843e", "scanner": "scanner-primary", "fingerprint": "fe103b916111f2ed", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3193704aaedf2213", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/identity-permissions/src/core/permission-engine.ts:1"}, "properties": {"repobilityId": "729f7db576faf2b7", "scanner": "scanner-primary", "fingerprint": "3193704aaedf2213", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-54a0a39791d136c3", "level": "note", "message": {"text": "Legacy-named symbol `CSAMGuardLegacy` in packages/moderation/src/index.ts:17"}, "properties": {"repobilityId": "dc2d1d72613f38a5", "scanner": "scanner-primary", "fingerprint": "54a0a39791d136c3", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-30cb469680f71f5b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/moderation/src/services/csam-hash-provider.ts:39"}, "properties": {"repobilityId": "26cca944fda2ec67", "scanner": "scanner-primary", "fingerprint": "30cb469680f71f5b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b8f0adb0e3c9a348", "level": "note", "message": {"text": "Legacy-named symbol `CSAMGuardLegacy` in packages/moderation/src/services/csam-match-service.test.ts:2"}, "properties": {"repobilityId": "9167dd75423fc86c", "scanner": "scanner-primary", "fingerprint": "b8f0adb0e3c9a348", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-6695f8efc2fe97ad", "level": "note", "message": {"text": "Legacy-named symbol `CSAMGuardLegacy` in packages/moderation/src/services/csam-matcher.ts:11"}, "properties": {"repobilityId": "0679c7d6220ca894", "scanner": "scanner-primary", "fingerprint": "6695f8efc2fe97ad", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-c613949220ac0173", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/moderation/src/services/csam-matcher.ts:1"}, "properties": {"repobilityId": "9be734d6e4eb2675", "scanner": "scanner-primary", "fingerprint": "c613949220ac0173", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-119a1adfce4e3bdf", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/moderation/src/services/csam-matcher.ts:60"}, "properties": {"repobilityId": "80a903097d76181a", "scanner": "scanner-primary", "fingerprint": "119a1adfce4e3bdf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-dfe7543f1fde95c0", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/performance/src/core/resource-preloader.ts:1"}, "properties": {"repobilityId": "7236f401a3dba136", "scanner": "scanner-primary", "fingerprint": "dfe7543f1fde95c0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e0078b10f16e75d7", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/performance/src/core/bundle-analyzer.ts:1"}, "properties": {"repobilityId": "054bfd1b4149b07b", "scanner": "scanner-primary", "fingerprint": "e0078b10f16e75d7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-012d5a425eda44e6", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/performance/src/core/memory-leak-detector.ts:1"}, "properties": {"repobilityId": "a820f5636e22f4f4", "scanner": "scanner-primary", "fingerprint": "012d5a425eda44e6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-33e8bfb7c814e32b", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/performance/src/core/service-worker-gen.ts:1"}, "properties": {"repobilityId": "05541999d75d9a4b", "scanner": "scanner-primary", "fingerprint": "33e8bfb7c814e32b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fb2987f35cecad5c", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/performance/src/core/code-splitter.ts:1"}, "properties": {"repobilityId": "0d5b37c878d20d90", "scanner": "scanner-primary", "fingerprint": "fb2987f35cecad5c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c85bad583c4b2519", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/performance/src/core/background-sync.ts:1"}, "properties": {"repobilityId": "8ec06cce2c2a74c7", "scanner": "scanner-primary", "fingerprint": "c85bad583c4b2519", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-98daaef157b9fd10", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/performance/src/core/web-vitals.ts:1"}, "properties": {"repobilityId": "54eaa81617c90e27", "scanner": "scanner-primary", "fingerprint": "98daaef157b9fd10", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a867afd19399e52f", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/performance/src/core/virtual-scroll.ts:1"}, "properties": {"repobilityId": "588fa6e69f80b07e", "scanner": "scanner-primary", "fingerprint": "a867afd19399e52f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-32a61e6715c3b959", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/error-monitoring/src/transports/sentry-transport.ts:118"}, "properties": {"repobilityId": "b902fcb95cbe92ae", "scanner": "scanner-primary", "fingerprint": "32a61e6715c3b959", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-efd11ffcb5c32f2b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/error-monitoring/src/transports/glitchtip-transport.ts:89"}, "properties": {"repobilityId": "08ff97e902a77804", "scanner": "scanner-primary", "fingerprint": "efd11ffcb5c32f2b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-539ce4f89ec868c4", "level": "note", "message": {"text": "Legacy-named symbol `identify_backup` in packages/observability/src/disaster-recovery.ts:178"}, "properties": {"repobilityId": "038bd3aff19cba49", "scanner": "scanner-primary", "fingerprint": "539ce4f89ec868c4", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-b0caf732ae493c5b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/search/src/services/vector-client.ts:110"}, "properties": {"repobilityId": "fd7062e5a3ad7c1e", "scanner": "scanner-primary", "fingerprint": "b0caf732ae493c5b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c920282020726e77", "level": "note", "message": {"text": "Legacy-named symbol `asset_copy` in packages/ar-lenses/src/__tests__/ethics.test.ts:276"}, "properties": {"repobilityId": "5b410ec20494e159", "scanner": "scanner-primary", "fingerprint": "c920282020726e77", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-58ef8596c562270c", "level": "none", "message": {"text": "Commented-code block (6 lines) in packages/social-graph/src/core/community-detector.ts:1"}, "properties": {"repobilityId": "5116a4e80398aa9c", "scanner": "scanner-primary", "fingerprint": "58ef8596c562270c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a203120e77848ec4", "level": "none", "message": {"text": "Commented-code block (6 lines) in packages/social-graph/src/core/graph-store.ts:1"}, "properties": {"repobilityId": "018c9304ceb1ad09", "scanner": "scanner-primary", "fingerprint": "a203120e77848ec4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-de17575237fe9562", "level": "none", "message": {"text": "Commented-code block (6 lines) in packages/social-graph/src/core/follower-manager.ts:1"}, "properties": {"repobilityId": "344f640d21e573c6", "scanner": "scanner-primary", "fingerprint": "de17575237fe9562", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bb17803099c4f92b", "level": "none", "message": {"text": "Commented-code block (6 lines) in packages/social-graph/src/core/path-finder.ts:1"}, "properties": {"repobilityId": "3d094aeb4aaa5c7a", "scanner": "scanner-primary", "fingerprint": "bb17803099c4f92b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f0cc47729bf671a7", "level": "none", "message": {"text": "Commented-code block (6 lines) in packages/social-graph/src/core/influence-scorer.ts:1"}, "properties": {"repobilityId": "dfbcdb113036e50d", "scanner": "scanner-primary", "fingerprint": "f0cc47729bf671a7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bb3cc5113e27d85c", "level": "note", "message": {"text": "Legacy-named symbol `isDeprecated` in packages/dev-platform/src/__tests__/dev-platform.test.ts:266"}, "properties": {"repobilityId": "d8bd22d8eba10484", "scanner": "scanner-primary", "fingerprint": "bb3cc5113e27d85c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-6a89aff67c8abc38", "level": "note", "message": {"text": "Legacy-named symbol `isDeprecated` in packages/dev-platform/src/sdk/sdk-tracker.ts:49"}, "properties": {"repobilityId": "28d6977b1ff1af49", "scanner": "scanner-primary", "fingerprint": "6a89aff67c8abc38", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-f8068fbd0c159553", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/shared-ui/src/__tests__/a11y.test.tsx:1"}, "properties": {"repobilityId": "e1ac291aa5bf6e05", "scanner": "scanner-primary", "fingerprint": "f8068fbd0c159553", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8ae2ecb0c8fdf777", "level": "none", "message": {"text": "Commented-code block (6 lines) in packages/payments/src/services/upi-payment.service.ts:1"}, "properties": {"repobilityId": "05ff9c336c81b057", "scanner": "scanner-primary", "fingerprint": "8ae2ecb0c8fdf777", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-abaf19528fdd65d2", "level": "none", "message": {"text": "Commented-code block (6 lines) in packages/payments/src/services/razorpay-gateway.service.ts:1"}, "properties": {"repobilityId": "95530340c72331da", "scanner": "scanner-primary", "fingerprint": "abaf19528fdd65d2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-12af1c556a3a0ed7", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/payments/src/services/pay-per-view.service.ts:1"}, "properties": {"repobilityId": "bdbcd0c870c0f4da", "scanner": "scanner-primary", "fingerprint": "12af1c556a3a0ed7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e7f7fc29ea591466", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/payments/src/services/storefront.service.ts:1"}, "properties": {"repobilityId": "f690b90045ad7473", "scanner": "scanner-primary", "fingerprint": "e7f7fc29ea591466", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bcfb3508a4b32e32", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/payments/src/services/__tests__/creator-economy-e2e.test.ts:1"}, "properties": {"repobilityId": "7cfa33ed6f6e5a47", "scanner": "scanner-primary", "fingerprint": "bcfb3508a4b32e32", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2ffd08357bb85ea2", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/server/src/middleware/auth.ts:1"}, "properties": {"repobilityId": "31efb129e1f461ee", "scanner": "scanner-primary", "fingerprint": "2ffd08357bb85ea2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0bafa7dcdf0b98be", "level": "note", "message": {"text": "Legacy-named symbol `recommender_v1` in packages/ml-runtime/src/__tests__/model-loader.test.ts:48"}, "properties": {"repobilityId": "97de5f4bedfad299", "scanner": "scanner-primary", "fingerprint": "0bafa7dcdf0b98be", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-4f62e0ce789e7c7f", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/privacy-ads/src/services/privacy-enforcer.service.ts:1"}, "properties": {"repobilityId": "ebd06433d0addb70", "scanner": "scanner-primary", "fingerprint": "4f62e0ce789e7c7f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-eb63bee69e738b87", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/privacy-ads/src/services/contextual-targeting.service.ts:1"}, "properties": {"repobilityId": "1ff6e1e25cdf3f81", "scanner": "scanner-primary", "fingerprint": "eb63bee69e738b87", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-128d5b3cf7c6e312", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/privacy-ads/src/services/on-device-ranker.service.ts:1"}, "properties": {"repobilityId": "6984b64aea13ac55", "scanner": "scanner-primary", "fingerprint": "128d5b3cf7c6e312", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-77c04e3621332da1", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/quant-tools/src/tools/studio-tools.ts:132"}, "properties": {"repobilityId": "62be3f5ca6243bed", "scanner": "scanner-primary", "fingerprint": "77c04e3621332da1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b1411a7d17854953", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 services/moderation-worker/src/main.ts:104"}, "properties": {"repobilityId": "cddbd2d7e7f3a59c", "scanner": "scanner-primary", "fingerprint": "b1411a7d17854953", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9b45ff394a7cbb31", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 services/moderation-worker/src/handlers/image-handler.ts:18"}, "properties": {"repobilityId": "ef0084782200d15d", "scanner": "scanner-primary", "fingerprint": "9b45ff394a7cbb31", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b0b7578dd2a289b6", "level": "note", "message": {"text": "26 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "8099a5c5713d37b9", "scanner": "scanner-primary", "fingerprint": "b0b7578dd2a289b6", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "config-drift"]}}, {"ruleId": "scanner-33a6b62e30ce7ab4", "level": "note", "message": {"text": "Near-duplicate function bodies in 6 places"}, "properties": {"repobilityId": "972ec44544375e58", "scanner": "scanner-primary", "fingerprint": "33a6b62e30ce7ab4", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-be46ea126aa5d8dc", "level": "note", "message": {"text": "Near-duplicate function bodies in 3 places"}, "properties": {"repobilityId": "9cd441b8ad880185", "scanner": "scanner-primary", "fingerprint": "be46ea126aa5d8dc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-1fd0e1c4ff293af8", "level": "error", "message": {"text": "Dangling fetch: GET /api/analytics/dashboard?${params.toString()} (apps/quantedits/src/hooks/useAnalytics.ts:128)"}, "properties": {"repobilityId": "65c75dc3cf68e54c", "scanner": "scanner-primary", "fingerprint": "1fd0e1c4ff293af8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b9dbe63c166ecb7d", "level": "error", "message": {"text": "Dangling fetch: GET /api/analytics/export?${params.toString()} (apps/quantedits/src/hooks/useAnalytics.ts:205)"}, "properties": {"repobilityId": "18c6c00b96654643", "scanner": "scanner-primary", "fingerprint": "b9dbe63c166ecb7d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2299259eaca124c8", "level": "error", "message": {"text": "Dangling fetch: GET /api/groups/${groupId} (apps/quantchat/src/components/GroupChat.tsx:72)"}, "properties": {"repobilityId": "bd5ed241b4a11235", "scanner": "scanner-primary", "fingerprint": "2299259eaca124c8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3fab0e3afdb479d5", "level": "error", "message": {"text": "Dangling fetch: POST /api/groups/${groupId}/members (apps/quantchat/src/components/GroupChat.tsx:97)"}, "properties": {"repobilityId": "00dba68301aadebd", "scanner": "scanner-primary", "fingerprint": "3fab0e3afdb479d5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c99bf0c41b1c3cd4", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/groups/${groupId}/members/${userId} (apps/quantchat/src/components/GroupChat.tsx:116)"}, "properties": {"repobilityId": "3cdb579f18cfcb2b", "scanner": "scanner-primary", "fingerprint": "c99bf0c41b1c3cd4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-cc10b751c9d1d9e8", "level": "error", "message": {"text": "Dangling fetch: PUT /api/groups/${groupId}/members/${userId}/role (apps/quantchat/src/components/GroupChat.tsx:131)"}, "properties": {"repobilityId": "233a9589ac9768ee", "scanner": "scanner-primary", "fingerprint": "cc10b751c9d1d9e8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-efa6d6e5490840b5", "level": "error", "message": {"text": "Dangling fetch: POST /api/groups/${groupId}/polls (apps/quantchat/src/components/GroupChat.tsx:151)"}, "properties": {"repobilityId": "f29b4671359f7bbe", "scanner": "scanner-primary", "fingerprint": "efa6d6e5490840b5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1fe5dc64075985f5", "level": "error", "message": {"text": "Dangling fetch: POST /api/groups/${groupId}/polls/${pollId}/vote (apps/quantchat/src/components/GroupChat.tsx:177)"}, "properties": {"repobilityId": "48e1122ccba9d769", "scanner": "scanner-primary", "fingerprint": "1fe5dc64075985f5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8765b83696c8c437", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/groups/${groupId}/pinned/${messageId} (apps/quantchat/src/components/GroupChat.tsx:209)"}, "properties": {"repobilityId": "5c47c72abcfdf04a", "scanner": "scanner-primary", "fingerprint": "8765b83696c8c437", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1cf67aa637784f48", "level": "error", "message": {"text": "Dangling fetch: PUT /api/groups/${groupId}/settings (apps/quantchat/src/components/GroupChat.tsx:237)"}, "properties": {"repobilityId": "66ab011df4ef1142", "scanner": "scanner-primary", "fingerprint": "1cf67aa637784f48", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0903f9262ee2e40f", "level": "error", "message": {"text": "Dangling fetch: GET /api/encryption/status/${conversationId} (apps/quantchat/src/components/E2EEncryption.tsx:43)"}, "properties": {"repobilityId": "d84b9ddbc252ad94", "scanner": "scanner-primary", "fingerprint": "0903f9262ee2e40f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8e8408289e615cce", "level": "error", "message": {"text": "Dangling fetch: POST /api/encryption/verify/${conversationId} (apps/quantchat/src/components/E2EEncryption.tsx:65)"}, "properties": {"repobilityId": "9c773b7ca7c6ffa2", "scanner": "scanner-primary", "fingerprint": "8e8408289e615cce", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-764a7030ff5ec63d", "level": "error", "message": {"text": "Dangling fetch: GET /api/friends/suggestions?limit=${maxSuggestions} (apps/quantchat/src/components/QuickAdd.tsx:36)"}, "properties": {"repobilityId": "96ba3eb6dd7b954b", "scanner": "scanner-primary", "fingerprint": "764a7030ff5ec63d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-79e4abee13c699d0", "level": "error", "message": {"text": "Dangling fetch: POST /api/friends/add (apps/quantchat/src/components/QuickAdd.tsx:58)"}, "properties": {"repobilityId": "ccace10557070872", "scanner": "scanner-primary", "fingerprint": "79e4abee13c699d0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-061123ec7d681cb8", "level": "error", "message": {"text": "Dangling fetch: POST /api/friends/suggestions/${friendId}/dismiss (apps/quantchat/src/components/QuickAdd.tsx:81)"}, "properties": {"repobilityId": "1a051b94023e0199", "scanner": "scanner-primary", "fingerprint": "061123ec7d681cb8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-53050f1557dddfb4", "level": "error", "message": {"text": "Dangling fetch: GET /api/settings (apps/quantchat/src/pages/settings.tsx:163)"}, "properties": {"repobilityId": "d44c7aefa20eff27", "scanner": "scanner-primary", "fingerprint": "53050f1557dddfb4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ca5ebe7e770204de", "level": "error", "message": {"text": "Dangling fetch: PUT /api/settings (apps/quantchat/src/pages/settings.tsx:187)"}, "properties": {"repobilityId": "4a6b1018fcfb5056", "scanner": "scanner-primary", "fingerprint": "ca5ebe7e770204de", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-af7fd8d281a6a235", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/settings/blocked/${userId} (apps/quantchat/src/pages/settings.tsx:203)"}, "properties": {"repobilityId": "c719ae54af277049", "scanner": "scanner-primary", "fingerprint": "af7fd8d281a6a235", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d206108e27368f3c", "level": "error", "message": {"text": "Dangling fetch: POST /api/settings/export (apps/quantchat/src/pages/settings.tsx:220)"}, "properties": {"repobilityId": "f589ba7daed942fa", "scanner": "scanner-primary", "fingerprint": "d206108e27368f3c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8bab1e72b9bb10e1", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/settings/account (apps/quantchat/src/pages/settings.tsx:244)"}, "properties": {"repobilityId": "069099624d85181e", "scanner": "scanner-primary", "fingerprint": "8bab1e72b9bb10e1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d72d754f708ae13c", "level": "error", "message": {"text": "Dangling fetch: GET /api/spotlight/feed?limit=20 (apps/quantchat/src/pages/spotlight.tsx:58)"}, "properties": {"repobilityId": "34678214f2a8cca9", "scanner": "scanner-primary", "fingerprint": "d72d754f708ae13c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5686361ffb06db99", "level": "error", "message": {"text": "Dangling fetch: POST /api/spotlight/${currentVideo.id}/like (apps/quantchat/src/pages/spotlight.tsx:119)"}, "properties": {"repobilityId": "05cb2e6497d02b2a", "scanner": "scanner-primary", "fingerprint": "5686361ffb06db99", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-dfa3cfa4a91e507e", "level": "error", "message": {"text": "Dangling fetch: POST /api/spotlight/${currentVideo.id}/bookmark (apps/quantchat/src/pages/spotlight.tsx:134)"}, "properties": {"repobilityId": "0b228505a7c94a72", "scanner": "scanner-primary", "fingerprint": "dfa3cfa4a91e507e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6a15e19bd34f2a6d", "level": "error", "message": {"text": "Dangling fetch: POST /api/users/${currentVideo.creator.id}/follow (apps/quantchat/src/pages/spotlight.tsx:153)"}, "properties": {"repobilityId": "3d67319ddcea45fb", "scanner": "scanner-primary", "fingerprint": "6a15e19bd34f2a6d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-62bb91ee5b70629e", "level": "error", "message": {"text": "Dangling fetch: GET /api/spotlight/${currentVideo.id}/comments (apps/quantchat/src/pages/spotlight.tsx:178)"}, "properties": {"repobilityId": "7c0dac74f2ec3abd", "scanner": "scanner-primary", "fingerprint": "62bb91ee5b70629e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-43bb01f6fcfde243", "level": "error", "message": {"text": "Dangling fetch: POST /api/spotlight/${currentVideo.id}/comments (apps/quantchat/src/pages/spotlight.tsx:195)"}, "properties": {"repobilityId": "5552444be826de80", "scanner": "scanner-primary", "fingerprint": "43bb01f6fcfde243", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a7841f6847e3df16", "level": "error", "message": {"text": "Dangling fetch: POST /api/memories/batch/delete (apps/quantchat/src/pages/memories.tsx:105)"}, "properties": {"repobilityId": "eac289c45af0f626", "scanner": "scanner-primary", "fingerprint": "a7841f6847e3df16", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7303e5ba21e01c2e", "level": "error", "message": {"text": "Dangling fetch: POST /api/memories/export (apps/quantchat/src/pages/memories.tsx:121)"}, "properties": {"repobilityId": "462482b90144f68a", "scanner": "scanner-primary", "fingerprint": "7303e5ba21e01c2e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-759c88acdd0ed7cd", "level": "error", "message": {"text": "Dangling fetch: PUT /api/memories/${id}/star (apps/quantchat/src/pages/memories.tsx:144)"}, "properties": {"repobilityId": "80c325a7bd75a5d9", "scanner": "scanner-primary", "fingerprint": "759c88acdd0ed7cd", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-67641d63db82a993", "level": "error", "message": {"text": "Dangling fetch: POST /api/memories/auto-story (apps/quantchat/src/pages/memories.tsx:156)"}, "properties": {"repobilityId": "44e105eb06c38d91", "scanner": "scanner-primary", "fingerprint": "67641d63db82a993", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d91e0db84ab6840a", "level": "error", "message": {"text": "Dangling fetch: GET /api/bitmoji/current (apps/quantchat/src/pages/bitmoji.tsx:142)"}, "properties": {"repobilityId": "d8ba9f72230fb15e", "scanner": "scanner-primary", "fingerprint": "d91e0db84ab6840a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-879e7db409fdc84e", "level": "error", "message": {"text": "Dangling fetch: POST /api/bitmoji/save (apps/quantchat/src/pages/bitmoji.tsx:209)"}, "properties": {"repobilityId": "a0f6f7e152caca7a", "scanner": "scanner-primary", "fingerprint": "879e7db409fdc84e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2d0f8cd1b41a1330", "level": "error", "message": {"text": "Dangling fetch: GET /api/stories/feed (apps/quantchat/src/hooks/useStories.ts:71)"}, "properties": {"repobilityId": "63d3e6f525635326", "scanner": "scanner-primary", "fingerprint": "2d0f8cd1b41a1330", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-001f7c6187ea1750", "level": "error", "message": {"text": "Dangling fetch: POST /api/stories/${storyId}/view (apps/quantchat/src/hooks/useStories.ts:101)"}, "properties": {"repobilityId": "fb6a999ed5742b90", "scanner": "scanner-primary", "fingerprint": "001f7c6187ea1750", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-19673fbc2bc0907e", "level": "error", "message": {"text": "Dangling fetch: POST /api/stories/${storyId}/reply (apps/quantchat/src/hooks/useStories.ts:139)"}, "properties": {"repobilityId": "cc2ca9bc67b439cc", "scanner": "scanner-primary", "fingerprint": "19673fbc2bc0907e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-179e0f6dd5a684f3", "level": "error", "message": {"text": "Dangling fetch: GET /api/stories/${storyId}/viewers (apps/quantchat/src/hooks/useStories.ts:153)"}, "properties": {"repobilityId": "7e4ce4b6f9dfd05c", "scanner": "scanner-primary", "fingerprint": "179e0f6dd5a684f3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-79c2406a40aa57bf", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/stories/${storyId} (apps/quantchat/src/hooks/useStories.ts:168)"}, "properties": {"repobilityId": "6e31618a6b951a34", "scanner": "scanner-primary", "fingerprint": "79c2406a40aa57bf", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-46d476add8876adb", "level": "error", "message": {"text": "Dangling fetch: GET /api/messages/${conversationId}?page=${page}&limit=50 (apps/quantchat/src/hooks/useChat.ts:140)"}, "properties": {"repobilityId": "1c61576b46868ee3", "scanner": "scanner-primary", "fingerprint": "46d476add8876adb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1377ab8894435e69", "level": "error", "message": {"text": "Dangling fetch: POST /api/messages/${conversationId} (apps/quantchat/src/hooks/useChat.ts:187)"}, "properties": {"repobilityId": "a9471ca3cfc8bd3e", "scanner": "scanner-primary", "fingerprint": "1377ab8894435e69", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d6be448af52e475a", "level": "error", "message": {"text": "Dangling fetch: GET /api/analytics/dashboard?${params.toString()} (apps/quantneon/src/hooks/useAnalytics.ts:128)"}, "properties": {"repobilityId": "0de3b52756d25ac0", "scanner": "scanner-primary", "fingerprint": "d6be448af52e475a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e5b1c5b0b92ec7a3", "level": "error", "message": {"text": "Dangling fetch: GET /api/analytics/export?${params.toString()} (apps/quantneon/src/hooks/useAnalytics.ts:205)"}, "properties": {"repobilityId": "9bcc83162afd0b0c", "scanner": "scanner-primary", "fingerprint": "e5b1c5b0b92ec7a3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d627cc82a7717028", "level": "error", "message": {"text": "Dangling fetch: POST /api/posts (apps/quantneon/src/services/api-client.ts:48)"}, "properties": {"repobilityId": "c14de68e39d1745b", "scanner": "scanner-primary", "fingerprint": "d627cc82a7717028", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-1fa2de197d1152c6", "level": "error", "message": {"text": "Dangling fetch: GET /api/posts/feed (apps/quantneon/src/services/api-client.ts:51)"}, "properties": {"repobilityId": "6fce99a0db58c501", "scanner": "scanner-primary", "fingerprint": "1fa2de197d1152c6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-191f0b6cde15a00a", "level": "error", "message": {"text": "Dangling fetch: GET /api/posts/${id} (apps/quantneon/src/services/api-client.ts:56)"}, "properties": {"repobilityId": "369ee62ac455201d", "scanner": "scanner-primary", "fingerprint": "191f0b6cde15a00a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-201739fb53aa6bd5", "level": "error", "message": {"text": "Dangling fetch: POST /api/posts/${id}/like (apps/quantneon/src/services/api-client.ts:59)"}, "properties": {"repobilityId": "0740f29eeab5b640", "scanner": "scanner-primary", "fingerprint": "201739fb53aa6bd5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-e81e0e0d10d5b75d", "level": "error", "message": {"text": "Dangling fetch: POST /api/posts/${id}/comment (apps/quantneon/src/services/api-client.ts:62)"}, "properties": {"repobilityId": "31f15feac58c0b7c", "scanner": "scanner-primary", "fingerprint": "e81e0e0d10d5b75d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-8c923688819d8f92", "level": "error", "message": {"text": "Dangling fetch: GET /api/reels/feed (apps/quantneon/src/services/api-client.ts:67)"}, "properties": {"repobilityId": "fab1521387df3141", "scanner": "scanner-primary", "fingerprint": "8c923688819d8f92", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-7d4a05c1ccd10240", "level": "error", "message": {"text": "Dangling fetch: POST /api/reels (apps/quantneon/src/services/api-client.ts:70)"}, "properties": {"repobilityId": "ae2b03306104cf78", "scanner": "scanner-primary", "fingerprint": "7d4a05c1ccd10240", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-117a5bf8b3dfb062", "level": "error", "message": {"text": "Dangling fetch: POST /api/reels/${id}/like (apps/quantneon/src/services/api-client.ts:73)"}, "properties": {"repobilityId": "dc357d13830b40a9", "scanner": "scanner-primary", "fingerprint": "117a5bf8b3dfb062", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-7b7d75602c16bb77", "level": "error", "message": {"text": "Dangling fetch: GET /api/stories/feed (apps/quantneon/src/services/api-client.ts:81)"}, "properties": {"repobilityId": "f9ee0deca3b69bff", "scanner": "scanner-primary", "fingerprint": "7b7d75602c16bb77", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-5bbc5d4143d18d13", "level": "error", "message": {"text": "Dangling fetch: POST /api/stories/${id}/view (apps/quantneon/src/services/api-client.ts:84)"}, "properties": {"repobilityId": "f088a63fdf4fed35", "scanner": "scanner-primary", "fingerprint": "5bbc5d4143d18d13", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-5c137e4e5532955f", "level": "error", "message": {"text": "Dangling fetch: GET /api/profiles/${id} (apps/quantneon/src/services/api-client.ts:89)"}, "properties": {"repobilityId": "b8c7c4f1e5431f75", "scanner": "scanner-primary", "fingerprint": "5c137e4e5532955f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-57155b5a3d53a4e0", "level": "error", "message": {"text": "Dangling fetch: POST /api/profiles/${id}/follow (apps/quantneon/src/services/api-client.ts:92)"}, "properties": {"repobilityId": "a5b877f944dc81d0", "scanner": "scanner-primary", "fingerprint": "57155b5a3d53a4e0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-ac03c8944870672d", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/profiles/${id}/follow (apps/quantneon/src/services/api-client.ts:95)"}, "properties": {"repobilityId": "631afe08e8414bb0", "scanner": "scanner-primary", "fingerprint": "ac03c8944870672d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-b7a9f5b2d3e4deb5", "level": "error", "message": {"text": "Dangling fetch: GET /api/games (apps/quantneon/src/services/api-client.ts:100)"}, "properties": {"repobilityId": "c4e3ad017d862084", "scanner": "scanner-primary", "fingerprint": "b7a9f5b2d3e4deb5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-a351454f3bff2f47", "level": "error", "message": {"text": "Dangling fetch: POST /api/games/${id}/start (apps/quantneon/src/services/api-client.ts:103)"}, "properties": {"repobilityId": "5809c630d1bb9470", "scanner": "scanner-primary", "fingerprint": "a351454f3bff2f47", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-a4e34d00487a6c76", "level": "error", "message": {"text": "Dangling fetch: POST /api/games/${id}/action (apps/quantneon/src/services/api-client.ts:106)"}, "properties": {"repobilityId": "41c8765c8fb28b62", "scanner": "scanner-primary", "fingerprint": "a4e34d00487a6c76", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-5ca541989a4c5891", "level": "error", "message": {"text": "Dangling fetch: GET /api/shopping/products (apps/quantneon/src/services/api-client.ts:111)"}, "properties": {"repobilityId": "7c21aa52a997a786", "scanner": "scanner-primary", "fingerprint": "5ca541989a4c5891", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-9a86f391450657fb", "level": "error", "message": {"text": "Dangling fetch: POST /api/shopping/cart (apps/quantneon/src/services/api-client.ts:114)"}, "properties": {"repobilityId": "b457527115a4741a", "scanner": "scanner-primary", "fingerprint": "9a86f391450657fb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-aa6959ae8aac0215", "level": "error", "message": {"text": "Dangling fetch: POST /api/shopping/checkout (apps/quantneon/src/services/api-client.ts:117)"}, "properties": {"repobilityId": "970fbe52b6a32765", "scanner": "scanner-primary", "fingerprint": "aa6959ae8aac0215", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-dd9129bb48ff6408", "level": "error", "message": {"text": "Dangling fetch: GET /api/ar/filters (apps/quantneon/src/services/api-client.ts:122)"}, "properties": {"repobilityId": "6cb883a3b0ca65fd", "scanner": "scanner-primary", "fingerprint": "dd9129bb48ff6408", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-0349cabad8cd65c5", "level": "error", "message": {"text": "Dangling fetch: POST /api/ar/process (apps/quantneon/src/services/api-client.ts:125)"}, "properties": {"repobilityId": "d88771d6415748ff", "scanner": "scanner-primary", "fingerprint": "0349cabad8cd65c5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-daa1631c58aa12dd", "level": "error", "message": {"text": "Dangling fetch: GET /api/explore (apps/quantneon/src/services/api-client.ts:130)"}, "properties": {"repobilityId": "ec9f3588dab5069d", "scanner": "scanner-primary", "fingerprint": "daa1631c58aa12dd", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-c919f6c3db70e9d1", "level": "error", "message": {"text": "Dangling fetch: GET /api/explore/search (apps/quantneon/src/services/api-client.ts:133)"}, "properties": {"repobilityId": "45a3519b24f2d0b7", "scanner": "scanner-primary", "fingerprint": "c919f6c3db70e9d1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-6ded0b067d6cf8ab", "level": "error", "message": {"text": "Dangling fetch: POST /api/ai/hashtags/suggest (apps/quantneon/src/services/api-client.ts:138)"}, "properties": {"repobilityId": "ce9f2d6a1df5fcf5", "scanner": "scanner-primary", "fingerprint": "6ded0b067d6cf8ab", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-770c4df178370741", "level": "error", "message": {"text": "Dangling fetch: POST /api/ai/caption/generate (apps/quantneon/src/services/api-client.ts:141)"}, "properties": {"repobilityId": "7d53ad65b4b3046a", "scanner": "scanner-primary", "fingerprint": "770c4df178370741", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-aa46e7a688d61104", "level": "error", "message": {"text": "Dangling fetch: GET /api/analytics/dashboard?${params.toString()} (apps/quantmax/src/hooks/useAnalytics.ts:128)"}, "properties": {"repobilityId": "ac78131c9a344ab3", "scanner": "scanner-primary", "fingerprint": "aa46e7a688d61104", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5ebb4b74dac7f364", "level": "error", "message": {"text": "Dangling fetch: GET /api/analytics/export?${params.toString()} (apps/quantmax/src/hooks/useAnalytics.ts:205)"}, "properties": {"repobilityId": "6f72cbe8438d6254", "scanner": "scanner-primary", "fingerprint": "5ebb4b74dac7f364", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-aad7154ac2f8febd", "level": "error", "message": {"text": "Dangling fetch: GET /api/docs/${id} (apps/quantdocs/src/hooks/useDocument.ts:20)"}, "properties": {"repobilityId": "af0aab33589b3a03", "scanner": "scanner-primary", "fingerprint": "aad7154ac2f8febd", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-eb7e54671f7082c4", "level": "error", "message": {"text": "Dangling fetch: POST /api/docs (apps/quantdocs/src/hooks/useDocuments.ts:36)"}, "properties": {"repobilityId": "e78101c3df40e098", "scanner": "scanner-primary", "fingerprint": "eb7e54671f7082c4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6e583029408120d8", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/docs/${id} (apps/quantdocs/src/hooks/useDocuments.ts:57)"}, "properties": {"repobilityId": "a5af7a3e5e6b3485", "scanner": "scanner-primary", "fingerprint": "6e583029408120d8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-802b3d5e085bdea7", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/docs/${id} (apps/quantdocs/src/hooks/useDocuments.ts:76)"}, "properties": {"repobilityId": "9c48674100d348c3", "scanner": "scanner-primary", "fingerprint": "802b3d5e085bdea7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e593695431334fb4", "level": "error", "message": {"text": "Dangling fetch: GET /api/settings (apps/admin/src/app/settings/page.tsx:74)"}, "properties": {"repobilityId": "13104bd39a33b0b7", "scanner": "scanner-primary", "fingerprint": "e593695431334fb4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f5133e94a664760c", "level": "error", "message": {"text": "Dangling fetch: PUT /api/settings (apps/admin/src/app/settings/page.tsx:96)"}, "properties": {"repobilityId": "9720f006a2d63321", "scanner": "scanner-primary", "fingerprint": "f5133e94a664760c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1fc6436e6b776ef2", "level": "error", "message": {"text": "Dangling fetch: GET /api/audit?limit=20 (apps/admin/src/app/security/page.tsx:130)"}, "properties": {"repobilityId": "25614bde876923de", "scanner": "scanner-primary", "fingerprint": "1fc6436e6b776ef2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a85c8006164474b6", "level": "error", "message": {"text": "Dangling fetch: GET /api/ai/stats (apps/admin/src/app/ai/page.tsx:60)"}, "properties": {"repobilityId": "e6af24e2af0ebd79", "scanner": "scanner-primary", "fingerprint": "a85c8006164474b6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3ad240e49cb1931f", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost:${port}/health (apps/admin/src/app/api/health/route.ts:46)"}, "properties": {"repobilityId": "1d147560a515dded", "scanner": "scanner-primary", "fingerprint": "3ad240e49cb1931f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-929e8b1364b8f2df", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost:${app.port}/health (apps/admin/src/app/api/apps/[id]/restart/route.ts:31)"}, "properties": {"repobilityId": "5716c635efb1a2c3", "scanner": "scanner-primary", "fingerprint": "929e8b1364b8f2df", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ed8ffef99caccd85", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost:${port}/health (apps/admin/src/app/api/services/[id]/logs/route.ts:29)"}, "properties": {"repobilityId": "d6e26e79755c964d", "scanner": "scanner-primary", "fingerprint": "ed8ffef99caccd85", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-aa7ae4bfe86326f0", "level": "error", "message": {"text": "Dangling fetch: GET /api/audit?${params.toString()} (apps/admin/src/app/audit/page.tsx:168)"}, "properties": {"repobilityId": "0f60b75a5506f293", "scanner": "scanner-primary", "fingerprint": "aa7ae4bfe86326f0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-49dad2a9b9e17ae7", "level": "error", "message": {"text": "Dangling fetch: GET /api/database/stats (apps/admin/src/app/database/page.tsx:57)"}, "properties": {"repobilityId": "99becc55e4a2900e", "scanner": "scanner-primary", "fingerprint": "49dad2a9b9e17ae7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-bb5ff0a215237c99", "level": "error", "message": {"text": "Dangling fetch: GET /api/compliance (apps/admin/src/app/compliance/page.tsx:29)"}, "properties": {"repobilityId": "d51ba4269b282189", "scanner": "scanner-primary", "fingerprint": "bb5ff0a215237c99", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e61820388825e7d9", "level": "error", "message": {"text": "Dangling fetch: POST /api/compliance (apps/admin/src/app/compliance/page.tsx:44)"}, "properties": {"repobilityId": "fb02fef196b77f04", "scanner": "scanner-primary", "fingerprint": "e61820388825e7d9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-668024acd041a1cd", "level": "error", "message": {"text": "Dangling fetch: POST /api/compliance (apps/admin/src/app/compliance/page.tsx:59)"}, "properties": {"repobilityId": "1a44e5dd6048b4d8", "scanner": "scanner-primary", "fingerprint": "668024acd041a1cd", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-44d6b1e6530d6010", "level": "error", "message": {"text": "Dangling fetch: POST /api/compliance (apps/admin/src/app/compliance/page.tsx:79)"}, "properties": {"repobilityId": "9c573ee386c16029", "scanner": "scanner-primary", "fingerprint": "44d6b1e6530d6010", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-03564fb6c8fc5501", "level": "error", "message": {"text": "Dangling fetch: POST /api/compliance (apps/admin/src/app/compliance/page.tsx:95)"}, "properties": {"repobilityId": "303138614fa794d6", "scanner": "scanner-primary", "fingerprint": "03564fb6c8fc5501", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b26f3636aff9d001", "level": "error", "message": {"text": "Dangling fetch: GET /api/feature-flags (apps/admin/src/app/feature-flags/page.tsx:129)"}, "properties": {"repobilityId": "bb520aab5fbe35b6", "scanner": "scanner-primary", "fingerprint": "b26f3636aff9d001", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c38764e8412dae97", "level": "error", "message": {"text": "Dangling fetch: GET /api/storage/quota (apps/quantdrive/src/hooks/useStorageQuota.ts:13)"}, "properties": {"repobilityId": "3f83fae72627d650", "scanner": "scanner-primary", "fingerprint": "c38764e8412dae97", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-57a611a432d71704", "level": "error", "message": {"text": "Dangling fetch: POST /api/files (apps/quantdrive/src/hooks/useFiles.ts:40)"}, "properties": {"repobilityId": "daf4f24fb98d88bf", "scanner": "scanner-primary", "fingerprint": "57a611a432d71704", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-51d4532d40f5fe77", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/files?id=${encodeURIComponent(fileId)} (apps/quantdrive/src/hooks/useFiles.ts:61)"}, "properties": {"repobilityId": "82f8d0bf0c77d770", "scanner": "scanner-primary", "fingerprint": "51d4532d40f5fe77", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b4c456d98dfdc811", "level": "error", "message": {"text": "Dangling fetch: PUT /api/files (apps/quantdrive/src/hooks/useFiles.ts:101)"}, "properties": {"repobilityId": "b0de7aa27c93e511", "scanner": "scanner-primary", "fingerprint": "b4c456d98dfdc811", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-57e6930f536837c2", "level": "error", "message": {"text": "Dangling fetch: PUT /api/files (apps/quantdrive/src/hooks/useFiles.ts:122)"}, "properties": {"repobilityId": "4f897e0bbea6a2c3", "scanner": "scanner-primary", "fingerprint": "57e6930f536837c2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d1a4b0245bfb2d85", "level": "error", "message": {"text": "Dangling fetch: PUT /api/files (apps/quantdrive/src/hooks/useFiles.ts:163)"}, "properties": {"repobilityId": "84bc466c5f03e435", "scanner": "scanner-primary", "fingerprint": "d1a4b0245bfb2d85", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d6ecc8a4d5dda57f", "level": "error", "message": {"text": "Dangling fetch: GET /api/campaigns/ab-tests/${testId} (apps/quantads/src/components/ABTestResults.tsx:74)"}, "properties": {"repobilityId": "45ab97cf602ecb42", "scanner": "scanner-primary", "fingerprint": "d6ecc8a4d5dda57f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-02737a4e7493640a", "level": "error", "message": {"text": "Dangling fetch: GET /api/bidding/auctions?${params.toString()} (apps/quantads/src/components/AuctionViewer.tsx:75)"}, "properties": {"repobilityId": "de3f1bd1d70007a5", "scanner": "scanner-primary", "fingerprint": "02737a4e7493640a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9be396a4c2238f58", "level": "error", "message": {"text": "Dangling fetch: GET /api/pixels (apps/quantads/src/pages/pixels.tsx:99)"}, "properties": {"repobilityId": "1c0069f753929247", "scanner": "scanner-primary", "fingerprint": "9be396a4c2238f58", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-05e39d2acb2e65b8", "level": "error", "message": {"text": "Dangling fetch: GET /api/pixels/${pixelId}/events?${params.toString()} (apps/quantads/src/pages/pixels.tsx:118)"}, "properties": {"repobilityId": "f7cf9346a0de2b84", "scanner": "scanner-primary", "fingerprint": "05e39d2acb2e65b8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e4d9c2dda31902df", "level": "error", "message": {"text": "Dangling fetch: GET /api/pixels/${pixelId}/attribution (apps/quantads/src/pages/pixels.tsx:129)"}, "properties": {"repobilityId": "36c1bdeec425cf92", "scanner": "scanner-primary", "fingerprint": "e4d9c2dda31902df", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3f1100b535cebc57", "level": "error", "message": {"text": "Dangling fetch: POST /api/pixels (apps/quantads/src/pages/pixels.tsx:150)"}, "properties": {"repobilityId": "6cc07fd5bc9833b9", "scanner": "scanner-primary", "fingerprint": "3f1100b535cebc57", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5ca36df17d109d02", "level": "error", "message": {"text": "Dangling fetch: POST /api/pixels/${selectedPixel.id}/test (apps/quantads/src/pages/pixels.tsx:174)"}, "properties": {"repobilityId": "3a4a953ba132c799", "scanner": "scanner-primary", "fingerprint": "5ca36df17d109d02", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-048bfea3805e885d", "level": "error", "message": {"text": "Dangling fetch: POST /api/campaigns (apps/quantads/src/pages/create-campaign.tsx:244)"}, "properties": {"repobilityId": "ddc5f71d28ca55b6", "scanner": "scanner-primary", "fingerprint": "048bfea3805e885d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5325b9e2fe2c6bc5", "level": "error", "message": {"text": "Dangling fetch: GET /api/fraud/dashboard?range=${dateRange} (apps/quantads/src/pages/fraud.tsx:83)"}, "properties": {"repobilityId": "a4bfd02a62a718fb", "scanner": "scanner-primary", "fingerprint": "5325b9e2fe2c6bc5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5f0c6466bac7c731", "level": "error", "message": {"text": "Dangling fetch: POST /api/fraud/block-ip (apps/quantads/src/pages/fraud.tsx:104)"}, "properties": {"repobilityId": "43934844200725bf", "scanner": "scanner-primary", "fingerprint": "5f0c6466bac7c731", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2b4954f727b3e769", "level": "error", "message": {"text": "Dangling fetch: PUT /api/fraud/alerts/${id}/resolve (apps/quantads/src/pages/fraud.tsx:117)"}, "properties": {"repobilityId": "9af041e9e4aa1061", "scanner": "scanner-primary", "fingerprint": "2b4954f727b3e769", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6f4898ab41ba0c09", "level": "error", "message": {"text": "Dangling fetch: GET /api/brand-safety (apps/quantads/src/pages/brand-safety.tsx:192)"}, "properties": {"repobilityId": "83d788a7d931c9f6", "scanner": "scanner-primary", "fingerprint": "6f4898ab41ba0c09", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c507071c945ddb5a", "level": "error", "message": {"text": "Dangling fetch: POST /api/brand-safety/keywords (apps/quantads/src/pages/brand-safety.tsx:215)"}, "properties": {"repobilityId": "3d4ac91aacbbf96f", "scanner": "scanner-primary", "fingerprint": "c507071c945ddb5a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1fcf42d9bd1224a8", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/brand-safety/keywords/${id} (apps/quantads/src/pages/brand-safety.tsx:232)"}, "properties": {"repobilityId": "0c1ff0eafcbc9d91", "scanner": "scanner-primary", "fingerprint": "1fcf42d9bd1224a8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-38c7aa536375de4a", "level": "error", "message": {"text": "Dangling fetch: PUT /api/brand-safety/categories/${id} (apps/quantads/src/pages/brand-safety.tsx:241)"}, "properties": {"repobilityId": "900d132efeeea2b4", "scanner": "scanner-primary", "fingerprint": "38c7aa536375de4a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-409ffd5a5a122311", "level": "error", "message": {"text": "Dangling fetch: POST /api/brand-safety/exclusions (apps/quantads/src/pages/brand-safety.tsx:255)"}, "properties": {"repobilityId": "4c22897626ad811b", "scanner": "scanner-primary", "fingerprint": "409ffd5a5a122311", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0eaa129e19cfb8bd", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/brand-safety/exclusions/${id} (apps/quantads/src/pages/brand-safety.tsx:276)"}, "properties": {"repobilityId": "2357116ab5657d51", "scanner": "scanner-primary", "fingerprint": "0eaa129e19cfb8bd", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-92c3d4dc52b3d632", "level": "error", "message": {"text": "Dangling fetch: PUT /api/brand-safety/inventory (apps/quantads/src/pages/brand-safety.tsx:282)"}, "properties": {"repobilityId": "bc5c3f7a99c6f11b", "scanner": "scanner-primary", "fingerprint": "92c3d4dc52b3d632", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-eafd67ea200abd5c", "level": "error", "message": {"text": "Dangling fetch: GET /api/creative-studio/templates (apps/quantads/src/pages/creative-studio.tsx:85)"}, "properties": {"repobilityId": "78ba50fa920ab78e", "scanner": "scanner-primary", "fingerprint": "eafd67ea200abd5c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e9170332e5288352", "level": "error", "message": {"text": "Dangling fetch: GET /api/creative-studio/projects (apps/quantads/src/pages/creative-studio.tsx:212)"}, "properties": {"repobilityId": "209d5cc57c50a6ca", "scanner": "scanner-primary", "fingerprint": "e9170332e5288352", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-fce188f48b3cfd47", "level": "error", "message": {"text": "Dangling fetch: POST /api/creative-studio/export (apps/quantads/src/pages/creative-studio.tsx:229)"}, "properties": {"repobilityId": "d3e316a1044ecad1", "scanner": "scanner-primary", "fingerprint": "fce188f48b3cfd47", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-df30dd120ec6c149", "level": "error", "message": {"text": "Dangling fetch: GET /api/analytics/dashboard?${params.toString()} (apps/quantube/src/hooks/useAnalytics.ts:128)"}, "properties": {"repobilityId": "6a757ec8d0bc21d8", "scanner": "scanner-primary", "fingerprint": "df30dd120ec6c149", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ec10cba530ff103d", "level": "error", "message": {"text": "Dangling fetch: GET /api/analytics/export?${params.toString()} (apps/quantube/src/hooks/useAnalytics.ts:205)"}, "properties": {"repobilityId": "82724c2e2e72738f", "scanner": "scanner-primary", "fingerprint": "ec10cba530ff103d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-db7d3cb35a55d7b0", "level": "error", "message": {"text": "Dangling fetch: POST /videos/upload (apps/quantube/src/services/api-client.ts:74)"}, "properties": {"repobilityId": "ad186f3c9402839c", "scanner": "scanner-primary", "fingerprint": "db7d3cb35a55d7b0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-7547dbe538861c42", "level": "error", "message": {"text": "Dangling fetch: GET /videos/trending (apps/quantube/src/services/api-client.ts:80)"}, "properties": {"repobilityId": "270a1dbadcd90e55", "scanner": "scanner-primary", "fingerprint": "7547dbe538861c42", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-ce80dc1b62f857ba", "level": "error", "message": {"text": "Dangling fetch: GET /videos/shorts (apps/quantube/src/services/api-client.ts:83)"}, "properties": {"repobilityId": "511b9c78e1dc4dad", "scanner": "scanner-primary", "fingerprint": "ce80dc1b62f857ba", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-9521aa54d11f663c", "level": "error", "message": {"text": "Dangling fetch: GET /videos/${id} (apps/quantube/src/services/api-client.ts:86)"}, "properties": {"repobilityId": "95b9753c7ce42faf", "scanner": "scanner-primary", "fingerprint": "9521aa54d11f663c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-dd485a220a6ccd37", "level": "error", "message": {"text": "Dangling fetch: GET /videos/${id}/manifest (apps/quantube/src/services/api-client.ts:92)"}, "properties": {"repobilityId": "1e6bdce42418a9d0", "scanner": "scanner-primary", "fingerprint": "dd485a220a6ccd37", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-7f4fd4fa734d4126", "level": "error", "message": {"text": "Dangling fetch: GET /videos/${id}/chapters (apps/quantube/src/services/api-client.ts:95)"}, "properties": {"repobilityId": "b14c12ea89404e46", "scanner": "scanner-primary", "fingerprint": "7f4fd4fa734d4126", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-57b21b92d9086f87", "level": "error", "message": {"text": "Dangling fetch: GET /videos/${id}/subtitles (apps/quantube/src/services/api-client.ts:98)"}, "properties": {"repobilityId": "27a1ed457010dc2c", "scanner": "scanner-primary", "fingerprint": "57b21b92d9086f87", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-dc8bb7fb6f7263aa", "level": "error", "message": {"text": "Dangling fetch: PUT /videos/${id} (apps/quantube/src/services/api-client.ts:101)"}, "properties": {"repobilityId": "ccd43327d8d2f069", "scanner": "scanner-primary", "fingerprint": "dc8bb7fb6f7263aa", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-a1d13ce613b83d23", "level": "error", "message": {"text": "Dangling fetch: DELETE /videos/${id} (apps/quantube/src/services/api-client.ts:104)"}, "properties": {"repobilityId": "b5a7e9ea50ee3f25", "scanner": "scanner-primary", "fingerprint": "a1d13ce613b83d23", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-fd70bd0b7805ebdb", "level": "error", "message": {"text": "Dangling fetch: GET /music (apps/quantube/src/services/api-client.ts:109)"}, "properties": {"repobilityId": "d0b2156d0a54c0a5", "scanner": "scanner-primary", "fingerprint": "fd70bd0b7805ebdb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-10a95ee58a045510", "level": "error", "message": {"text": "Dangling fetch: GET /music/tracks (apps/quantube/src/services/api-client.ts:112)"}, "properties": {"repobilityId": "4566207010966709", "scanner": "scanner-primary", "fingerprint": "10a95ee58a045510", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-6a7e081aa0738447", "level": "error", "message": {"text": "Dangling fetch: GET /music/tracks/${id} (apps/quantube/src/services/api-client.ts:115)"}, "properties": {"repobilityId": "93cf756a506e324c", "scanner": "scanner-primary", "fingerprint": "6a7e081aa0738447", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-c1f09440bfe90f73", "level": "error", "message": {"text": "Dangling fetch: GET /music/tracks/${id}/stream (apps/quantube/src/services/api-client.ts:118)"}, "properties": {"repobilityId": "fe7edacea281a730", "scanner": "scanner-primary", "fingerprint": "c1f09440bfe90f73", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-2f9e52f9de040504", "level": "error", "message": {"text": "Dangling fetch: GET /music/tracks/${id}/lyrics (apps/quantube/src/services/api-client.ts:123)"}, "properties": {"repobilityId": "f01efb20402110a3", "scanner": "scanner-primary", "fingerprint": "2f9e52f9de040504", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-cc267fcac2f35f3f", "level": "error", "message": {"text": "Dangling fetch: GET /music/albums (apps/quantube/src/services/api-client.ts:126)"}, "properties": {"repobilityId": "c45d21694398a5d6", "scanner": "scanner-primary", "fingerprint": "cc267fcac2f35f3f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-dd1dd4760d5f3ab0", "level": "error", "message": {"text": "Dangling fetch: GET /music/albums/${id} (apps/quantube/src/services/api-client.ts:129)"}, "properties": {"repobilityId": "e61cb5fb1151fb45", "scanner": "scanner-primary", "fingerprint": "dd1dd4760d5f3ab0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-181d7e813377708a", "level": "error", "message": {"text": "Dangling fetch: GET /music/artists (apps/quantube/src/services/api-client.ts:132)"}, "properties": {"repobilityId": "bc81d65df0be9422", "scanner": "scanner-primary", "fingerprint": "181d7e813377708a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-60e24798b6f4319c", "level": "error", "message": {"text": "Dangling fetch: GET /music/artists/${id} (apps/quantube/src/services/api-client.ts:135)"}, "properties": {"repobilityId": "e0b6b0bded90bd8d", "scanner": "scanner-primary", "fingerprint": "60e24798b6f4319c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-9515c840de247b8c", "level": "error", "message": {"text": "Dangling fetch: GET /music/queue (apps/quantube/src/services/api-client.ts:138)"}, "properties": {"repobilityId": "145cc22ca1788dcc", "scanner": "scanner-primary", "fingerprint": "9515c840de247b8c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-c4cc94583a99051f", "level": "error", "message": {"text": "Dangling fetch: POST /music/queue (apps/quantube/src/services/api-client.ts:141)"}, "properties": {"repobilityId": "d451df1928fcc692", "scanner": "scanner-primary", "fingerprint": "c4cc94583a99051f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-14ec01d3e54ea61d", "level": "error", "message": {"text": "Dangling fetch: GET /shows (apps/quantube/src/services/api-client.ts:146)"}, "properties": {"repobilityId": "5c6113fd2ca38657", "scanner": "scanner-primary", "fingerprint": "14ec01d3e54ea61d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-2130bf783063e700", "level": "error", "message": {"text": "Dangling fetch: GET /shows/${id} (apps/quantube/src/services/api-client.ts:149)"}, "properties": {"repobilityId": "7be33219970f6e68", "scanner": "scanner-primary", "fingerprint": "2130bf783063e700", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-9dfd6bd6b796fad4", "level": "error", "message": {"text": "Dangling fetch: GET /shows/${showId}/seasons (apps/quantube/src/services/api-client.ts:152)"}, "properties": {"repobilityId": "5bc3fe444f5d8fc0", "scanner": "scanner-primary", "fingerprint": "9dfd6bd6b796fad4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-ee9c27b3cdba0349", "level": "error", "message": {"text": "Dangling fetch: GET /shows/${showId}/episodes/${episodeId}/stream (apps/quantube/src/services/api-client.ts:155)"}, "properties": {"repobilityId": "184beeba43b74ebf", "scanner": "scanner-primary", "fingerprint": "ee9c27b3cdba0349", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-618ea94d378c555a", "level": "error", "message": {"text": "Dangling fetch: POST /shows/${showId}/progress (apps/quantube/src/services/api-client.ts:161)"}, "properties": {"repobilityId": "c0194590233e0e42", "scanner": "scanner-primary", "fingerprint": "618ea94d378c555a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-86e0424bdf2bf46f", "level": "error", "message": {"text": "Dangling fetch: GET /channels/${id} (apps/quantube/src/services/api-client.ts:166)"}, "properties": {"repobilityId": "7ea2ed9ab42c2481", "scanner": "scanner-primary", "fingerprint": "86e0424bdf2bf46f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-b649e195b92abdf3", "level": "error", "message": {"text": "Dangling fetch: POST /channels/${channelId}/subscribe (apps/quantube/src/services/api-client.ts:196)"}, "properties": {"repobilityId": "2e6c9111a857cda9", "scanner": "scanner-primary", "fingerprint": "b649e195b92abdf3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-f296397bdb424b05", "level": "error", "message": {"text": "Dangling fetch: DELETE /channels/${channelId}/subscribe (apps/quantube/src/services/api-client.ts:199)"}, "properties": {"repobilityId": "4a5069d3ff4f8f4e", "scanner": "scanner-primary", "fingerprint": "f296397bdb424b05", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-c4d050d79724b6b1", "level": "error", "message": {"text": "Dangling fetch: GET /subscriptions (apps/quantube/src/services/api-client.ts:202)"}, "properties": {"repobilityId": "1be40582ec773d5d", "scanner": "scanner-primary", "fingerprint": "c4d050d79724b6b1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-c91ab06ad923330b", "level": "error", "message": {"text": "Dangling fetch: GET /playlists (apps/quantube/src/services/api-client.ts:207)"}, "properties": {"repobilityId": "00d96af24f9030ec", "scanner": "scanner-primary", "fingerprint": "c91ab06ad923330b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-351605e70e0f768a", "level": "error", "message": {"text": "Dangling fetch: POST /playlists (apps/quantube/src/services/api-client.ts:210)"}, "properties": {"repobilityId": "9f3aa2f9b4dcc55f", "scanner": "scanner-primary", "fingerprint": "351605e70e0f768a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-c7d3b1ff472c496c", "level": "error", "message": {"text": "Dangling fetch: POST /playlists/${playlistId}/items (apps/quantube/src/services/api-client.ts:213)"}, "properties": {"repobilityId": "f7720e0f200638da", "scanner": "scanner-primary", "fingerprint": "c7d3b1ff472c496c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-e1afc1af7d3ea437", "level": "error", "message": {"text": "Dangling fetch: GET /live (apps/quantube/src/services/api-client.ts:218)"}, "properties": {"repobilityId": "591d8e97b1f00881", "scanner": "scanner-primary", "fingerprint": "e1afc1af7d3ea437", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-d22203732e66dd8e", "level": "error", "message": {"text": "Dangling fetch: GET /live/${id} (apps/quantube/src/services/api-client.ts:221)"}, "properties": {"repobilityId": "76d3f99a42609422", "scanner": "scanner-primary", "fingerprint": "d22203732e66dd8e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-f48a60c5dc67aa5f", "level": "error", "message": {"text": "Dangling fetch: GET /live/${id}/watch (apps/quantube/src/services/api-client.ts:224)"}, "properties": {"repobilityId": "eba24175514a9291", "scanner": "scanner-primary", "fingerprint": "f48a60c5dc67aa5f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-46c795138935d7ad", "level": "error", "message": {"text": "Dangling fetch: POST /live/${streamId}/chat (apps/quantube/src/services/api-client.ts:227)"}, "properties": {"repobilityId": "5d4226904057fcfb", "scanner": "scanner-primary", "fingerprint": "46c795138935d7ad", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-8749c1393e0a41e3", "level": "error", "message": {"text": "Dangling fetch: POST /interactions/like (apps/quantube/src/services/api-client.ts:232)"}, "properties": {"repobilityId": "5995fb9ca0f99e57", "scanner": "scanner-primary", "fingerprint": "8749c1393e0a41e3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-39ee93db7f8091fd", "level": "error", "message": {"text": "Dangling fetch: POST /interactions/comment (apps/quantube/src/services/api-client.ts:235)"}, "properties": {"repobilityId": "81b74ba6fb15b237", "scanner": "scanner-primary", "fingerprint": "39ee93db7f8091fd", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-1a11f7e1fac07199", "level": "error", "message": {"text": "Dangling fetch: GET /interactions/comments/${contentId} (apps/quantube/src/services/api-client.ts:238)"}, "properties": {"repobilityId": "a13fe4314d8f1ba7", "scanner": "scanner-primary", "fingerprint": "1a11f7e1fac07199", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-764ce10d01718744", "level": "error", "message": {"text": "Dangling fetch: POST /interactions/watch-later (apps/quantube/src/services/api-client.ts:241)"}, "properties": {"repobilityId": "c320bc40e2db425f", "scanner": "scanner-primary", "fingerprint": "764ce10d01718744", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-5f8662e8b245c64f", "level": "error", "message": {"text": "Dangling fetch: GET /interactions/history (apps/quantube/src/services/api-client.ts:244)"}, "properties": {"repobilityId": "0542e3cc5c5b54de", "scanner": "scanner-primary", "fingerprint": "5f8662e8b245c64f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-1f3badf404a4d5ca", "level": "error", "message": {"text": "Dangling fetch: GET /search/autocomplete (apps/quantube/src/services/api-client.ts:254)"}, "properties": {"repobilityId": "f910162100c857da", "scanner": "scanner-primary", "fingerprint": "1f3badf404a4d5ca", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-7b95cb478c835f1b", "level": "error", "message": {"text": "Dangling fetch: GET /ai/recommendations (apps/quantube/src/services/api-client.ts:259)"}, "properties": {"repobilityId": "5df76a555a8f0923", "scanner": "scanner-primary", "fingerprint": "7b95cb478c835f1b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-726f677bf1360dca", "level": "error", "message": {"text": "Dangling fetch: GET /ai/recommendations/personalized (apps/quantube/src/services/api-client.ts:264)"}, "properties": {"repobilityId": "8d0fcabe6ec396e8", "scanner": "scanner-primary", "fingerprint": "726f677bf1360dca", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-0cc093e741006d86", "level": "error", "message": {"text": "Dangling fetch: GET /api/meetings/recent (apps/quantmeet/src/app/page.tsx:21)"}, "properties": {"repobilityId": "90ccd1961c0332dc", "scanner": "scanner-primary", "fingerprint": "0cc093e741006d86", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2c16dae183c8990d", "level": "error", "message": {"text": "Dangling fetch: GET /api/rooms/${roomId}/participants (apps/quantmeet/src/hooks/useParticipants.ts:46)"}, "properties": {"repobilityId": "04db4e4f4ddf7e10", "scanner": "scanner-primary", "fingerprint": "2c16dae183c8990d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f22b9f299b405799", "level": "error", "message": {"text": "Dangling fetch: GET /api/rooms/${roomId} (apps/quantmeet/src/hooks/useMeeting.ts:17)"}, "properties": {"repobilityId": "8a8dfa9dd4489752", "scanner": "scanner-primary", "fingerprint": "f22b9f299b405799", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7fa5a1e0cb5a69cd", "level": "error", "message": {"text": "Dangling fetch: POST /api/rooms (apps/quantmeet/src/hooks/useMeeting.ts:32)"}, "properties": {"repobilityId": "c1a56364a3d45f2b", "scanner": "scanner-primary", "fingerprint": "7fa5a1e0cb5a69cd", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5159b717a12ee930", "level": "error", "message": {"text": "Dangling fetch: POST /api/rooms/${params.roomId}/join (apps/quantmeet/src/hooks/useMeeting.ts:53)"}, "properties": {"repobilityId": "e6fead89ec7c4e2c", "scanner": "scanner-primary", "fingerprint": "5159b717a12ee930", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c4f60c04cf06c01b", "level": "error", "message": {"text": "Dangling fetch: POST /api/posts/${id}/poll/vote (apps/quantsync/src/components/PostCard.tsx:134)"}, "properties": {"repobilityId": "0ad310c329716b2b", "scanner": "scanner-primary", "fingerprint": "c4f60c04cf06c01b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ca558a61b6299f36", "level": "error", "message": {"text": "Dangling fetch: GET /api/settings (apps/quantsync/src/legacy-pages/settings.tsx:100)"}, "properties": {"repobilityId": "2345da0f3d25be28", "scanner": "scanner-primary", "fingerprint": "ca558a61b6299f36", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4163a80ce965fe07", "level": "error", "message": {"text": "Dangling fetch: PUT /api/settings (apps/quantsync/src/legacy-pages/settings.tsx:124)"}, "properties": {"repobilityId": "ce99089348e51b5f", "scanner": "scanner-primary", "fingerprint": "4163a80ce965fe07", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-34ca1cd28347653c", "level": "error", "message": {"text": "Dangling fetch: POST /api/users/${userId}/unblock (apps/quantsync/src/legacy-pages/settings.tsx:152)"}, "properties": {"repobilityId": "b81da8d4d335d11f", "scanner": "scanner-primary", "fingerprint": "34ca1cd28347653c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-227ce6df1b7e0fc2", "level": "error", "message": {"text": "Dangling fetch: GET /api/analytics/overview?${params.toString()} (apps/quantsync/src/legacy-pages/analytics.tsx:66)"}, "properties": {"repobilityId": "60c3b1dd51354764", "scanner": "scanner-primary", "fingerprint": "227ce6df1b7e0fc2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a79c3c0f38bd12a1", "level": "error", "message": {"text": "Dangling fetch: GET /api/analytics/metrics?${params.toString()} (apps/quantsync/src/legacy-pages/analytics.tsx:67)"}, "properties": {"repobilityId": "721b62bb6c0ed9d8", "scanner": "scanner-primary", "fingerprint": "a79c3c0f38bd12a1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d8e7a9d5a943f4d5", "level": "error", "message": {"text": "Dangling fetch: GET /api/analytics/top-posts?${params.toString()} (apps/quantsync/src/legacy-pages/analytics.tsx:68)"}, "properties": {"repobilityId": "857bc8941c98f6bf", "scanner": "scanner-primary", "fingerprint": "d8e7a9d5a943f4d5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-facf8311f3a10941", "level": "error", "message": {"text": "Dangling fetch: GET /api/analytics/demographics (apps/quantsync/src/legacy-pages/analytics.tsx:69)"}, "properties": {"repobilityId": "7c93741a7eea78c3", "scanner": "scanner-primary", "fingerprint": "facf8311f3a10941", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c4b59fbb197a8c3a", "level": "error", "message": {"text": "Dangling fetch: GET /api/analytics/heatmap?${params.toString()} (apps/quantsync/src/legacy-pages/analytics.tsx:70)"}, "properties": {"repobilityId": "9f98898eb6fc9878", "scanner": "scanner-primary", "fingerprint": "c4b59fbb197a8c3a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7a00c3a97347e5ee", "level": "error", "message": {"text": "Dangling fetch: GET /api/messages/conversations (apps/quantsync/src/legacy-pages/messages.tsx:49)"}, "properties": {"repobilityId": "bad43910d18c873a", "scanner": "scanner-primary", "fingerprint": "7a00c3a97347e5ee", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-dd55bf13703fcfc2", "level": "error", "message": {"text": "Dangling fetch: GET /api/messages/requests (apps/quantsync/src/legacy-pages/messages.tsx:63)"}, "properties": {"repobilityId": "ff9279390f2ab5b3", "scanner": "scanner-primary", "fingerprint": "dd55bf13703fcfc2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-19a3be7ef18388f5", "level": "error", "message": {"text": "Dangling fetch: POST /api/messages/send (apps/quantsync/src/legacy-pages/messages.tsx:80)"}, "properties": {"repobilityId": "c83a58b183e490dd", "scanner": "scanner-primary", "fingerprint": "19a3be7ef18388f5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8d5c9d668d6eb29e", "level": "error", "message": {"text": "Dangling fetch: POST /api/messages/groups (apps/quantsync/src/legacy-pages/messages.tsx:100)"}, "properties": {"repobilityId": "e16b62c1033eacc2", "scanner": "scanner-primary", "fingerprint": "8d5c9d668d6eb29e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-346f0fff6322aa5c", "level": "error", "message": {"text": "Dangling fetch: POST /api/messages/requests/${requestId}/accept (apps/quantsync/src/legacy-pages/messages.tsx:117)"}, "properties": {"repobilityId": "d48fa84e383f3fe8", "scanner": "scanner-primary", "fingerprint": "346f0fff6322aa5c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-89bdef2d7435c6f0", "level": "error", "message": {"text": "Dangling fetch: POST /api/messages/requests/${requestId}/decline (apps/quantsync/src/legacy-pages/messages.tsx:125)"}, "properties": {"repobilityId": "0ff4ad95e71d4392", "scanner": "scanner-primary", "fingerprint": "89bdef2d7435c6f0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-95121e8f46b18410", "level": "error", "message": {"text": "Dangling fetch: GET /api/users/search?q=${encodeURIComponent(q)}&limit=5 (apps/quantsync/src/legacy-pages/messages.tsx:135)"}, "properties": {"repobilityId": "3e785cd0e9a59968", "scanner": "scanner-primary", "fingerprint": "95121e8f46b18410", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3112a8f98ce66ac1", "level": "error", "message": {"text": "Dangling fetch: POST /api/posts/${postId}/like (apps/quantsync/src/legacy-pages/index.tsx:153)"}, "properties": {"repobilityId": "9c4d3735dabbb016", "scanner": "scanner-primary", "fingerprint": "3112a8f98ce66ac1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1592c4a9368a262f", "level": "error", "message": {"text": "Dangling fetch: POST /api/posts/${postId}/repost (apps/quantsync/src/legacy-pages/index.tsx:169)"}, "properties": {"repobilityId": "73af2246ade6bf1d", "scanner": "scanner-primary", "fingerprint": "1592c4a9368a262f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2e737cbfaf68a041", "level": "error", "message": {"text": "Dangling fetch: POST /api/posts/${postId}/bookmark (apps/quantsync/src/legacy-pages/index.tsx:198)"}, "properties": {"repobilityId": "156de95ad0d939d5", "scanner": "scanner-primary", "fingerprint": "2e737cbfaf68a041", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ee5e8bbca156d5af", "level": "error", "message": {"text": "Dangling fetch: GET /api/users/search?q=${encodeURIComponent(query)}&limit=5 (apps/quantsync/src/legacy-pages/compose.tsx:125)"}, "properties": {"repobilityId": "a90edbb0fd40243e", "scanner": "scanner-primary", "fingerprint": "ee5e8bbca156d5af", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0bc51fdd12ab6cd8", "level": "error", "message": {"text": "Dangling fetch: GET /api/hashtags/suggest?q=${encodeURIComponent(query)}&limit=5 (apps/quantsync/src/legacy-pages/compose.tsx:135)"}, "properties": {"repobilityId": "a144c6dcb5db53d6", "scanner": "scanner-primary", "fingerprint": "0bc51fdd12ab6cd8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4d994da67038e3ff", "level": "error", "message": {"text": "Dangling fetch: POST /api/posts (apps/quantsync/src/legacy-pages/compose.tsx:227)"}, "properties": {"repobilityId": "d0d7c55268aa3472", "scanner": "scanner-primary", "fingerprint": "4d994da67038e3ff", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a88c754ac8f65c7a", "level": "error", "message": {"text": "Dangling fetch: GET /api/lists (apps/quantsync/src/legacy-pages/lists.tsx:55)"}, "properties": {"repobilityId": "1b6862c3518d8ac8", "scanner": "scanner-primary", "fingerprint": "a88c754ac8f65c7a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1b5ef482b705c6f0", "level": "error", "message": {"text": "Dangling fetch: GET /api/lists/following (apps/quantsync/src/legacy-pages/lists.tsx:56)"}, "properties": {"repobilityId": "e3c949c95255048c", "scanner": "scanner-primary", "fingerprint": "1b5ef482b705c6f0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-97f9fa67f4654ce1", "level": "error", "message": {"text": "Dangling fetch: GET /api/lists/discover (apps/quantsync/src/legacy-pages/lists.tsx:57)"}, "properties": {"repobilityId": "279945033085ca87", "scanner": "scanner-primary", "fingerprint": "97f9fa67f4654ce1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5f7c000802b53e6b", "level": "error", "message": {"text": "Dangling fetch: GET /api/lists/${listId}/posts (apps/quantsync/src/legacy-pages/lists.tsx:77)"}, "properties": {"repobilityId": "180c814ac684008d", "scanner": "scanner-primary", "fingerprint": "5f7c000802b53e6b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-810bf5493a8c293b", "level": "error", "message": {"text": "Dangling fetch: POST /api/lists (apps/quantsync/src/legacy-pages/lists.tsx:92)"}, "properties": {"repobilityId": "bd19556b14455733", "scanner": "scanner-primary", "fingerprint": "810bf5493a8c293b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b29bed1739934e3f", "level": "error", "message": {"text": "Dangling fetch: POST /api/lists/${listId}/follow (apps/quantsync/src/legacy-pages/lists.tsx:114)"}, "properties": {"repobilityId": "36d97bd74ae4ed7d", "scanner": "scanner-primary", "fingerprint": "b29bed1739934e3f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-da61129e53659797", "level": "error", "message": {"text": "Dangling fetch: POST /api/lists/${listId}/pin (apps/quantsync/src/legacy-pages/lists.tsx:119)"}, "properties": {"repobilityId": "6450bd4472a03ac6", "scanner": "scanner-primary", "fingerprint": "da61129e53659797", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e458daa869c1aa05", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/lists/${listId} (apps/quantsync/src/legacy-pages/lists.tsx:123)"}, "properties": {"repobilityId": "ff6c73fba63b7a92", "scanner": "scanner-primary", "fingerprint": "e458daa869c1aa05", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c3393678090ec460", "level": "error", "message": {"text": "Dangling fetch: GET /api/spaces (apps/quantsync/src/legacy-pages/spaces.tsx:70)"}, "properties": {"repobilityId": "51a2cbc75d4522aa", "scanner": "scanner-primary", "fingerprint": "c3393678090ec460", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-325af0c3599f42b4", "level": "error", "message": {"text": "Dangling fetch: POST /api/spaces/${spaceId}/join (apps/quantsync/src/legacy-pages/spaces.tsx:91)"}, "properties": {"repobilityId": "f4597f74fc09a25b", "scanner": "scanner-primary", "fingerprint": "325af0c3599f42b4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-21d10f584e972e1d", "level": "error", "message": {"text": "Dangling fetch: POST /api/spaces/${activeSpace.id}/leave (apps/quantsync/src/legacy-pages/spaces.tsx:103)"}, "properties": {"repobilityId": "178d3d991d95c567", "scanner": "scanner-primary", "fingerprint": "21d10f584e972e1d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2b5cb1bbf59f1b43", "level": "error", "message": {"text": "Dangling fetch: POST /api/spaces/${activeSpace.id}/mic (apps/quantsync/src/legacy-pages/spaces.tsx:111)"}, "properties": {"repobilityId": "9d782608333259ff", "scanner": "scanner-primary", "fingerprint": "2b5cb1bbf59f1b43", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-773a8cd2e03e112b", "level": "error", "message": {"text": "Dangling fetch: POST /api/spaces/${activeSpace.id}/hand (apps/quantsync/src/legacy-pages/spaces.tsx:121)"}, "properties": {"repobilityId": "ed1978e02c1617d1", "scanner": "scanner-primary", "fingerprint": "773a8cd2e03e112b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e07440baa774b999", "level": "error", "message": {"text": "Dangling fetch: POST /api/spaces/${activeSpace.id}/react (apps/quantsync/src/legacy-pages/spaces.tsx:128)"}, "properties": {"repobilityId": "b6e00ebec529cc2a", "scanner": "scanner-primary", "fingerprint": "e07440baa774b999", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9dfbfe96ad19c66d", "level": "error", "message": {"text": "Dangling fetch: POST /api/spaces (apps/quantsync/src/legacy-pages/spaces.tsx:149)"}, "properties": {"repobilityId": "24a3bf4dda7b031c", "scanner": "scanner-primary", "fingerprint": "9dfbfe96ad19c66d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-03a400d9e6b0b77b", "level": "error", "message": {"text": "Dangling fetch: GET /api/trending/hashtags?${params.toString()} (apps/quantsync/src/legacy-pages/trending.tsx:56)"}, "properties": {"repobilityId": "22ea48518ef72fe6", "scanner": "scanner-primary", "fingerprint": "03a400d9e6b0b77b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9357dae64be19fda", "level": "error", "message": {"text": "Dangling fetch: GET /api/trending/posts?${params.toString()} (apps/quantsync/src/legacy-pages/trending.tsx:57)"}, "properties": {"repobilityId": "71f217e2e88660a5", "scanner": "scanner-primary", "fingerprint": "9357dae64be19fda", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d83364c31f7d8070", "level": "error", "message": {"text": "Dangling fetch: GET /api/trending/foryou (apps/quantsync/src/legacy-pages/trending.tsx:74)"}, "properties": {"repobilityId": "bbf59aeedbfd6fac", "scanner": "scanner-primary", "fingerprint": "d83364c31f7d8070", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f85ec16c9a0bea8c", "level": "error", "message": {"text": "Dangling fetch: GET /api/search/suggest?q=${encodeURIComponent(q)} (apps/quantsync/src/legacy-pages/search.tsx:84)"}, "properties": {"repobilityId": "e67805da55419c30", "scanner": "scanner-primary", "fingerprint": "f85ec16c9a0bea8c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0a4c36ac54d474b4", "level": "error", "message": {"text": "Dangling fetch: POST /api/users/${userId}/follow (apps/quantsync/src/legacy-pages/search.tsx:150)"}, "properties": {"repobilityId": "302cfb33770b3f1d", "scanner": "scanner-primary", "fingerprint": "0a4c36ac54d474b4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a170170b40610338", "level": "error", "message": {"text": "Dangling fetch: GET /api/bookmarks?${params.toString()} (apps/quantsync/src/legacy-pages/bookmarks.tsx:48)"}, "properties": {"repobilityId": "e634c8c12baf5393", "scanner": "scanner-primary", "fingerprint": "a170170b40610338", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-92168d14d353dd8c", "level": "error", "message": {"text": "Dangling fetch: GET /api/bookmarks/folders (apps/quantsync/src/legacy-pages/bookmarks.tsx:49)"}, "properties": {"repobilityId": "02a3d5ccae866dd1", "scanner": "scanner-primary", "fingerprint": "92168d14d353dd8c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f9cf49fc954a2458", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/posts/${postId}/bookmark (apps/quantsync/src/legacy-pages/bookmarks.tsx:70)"}, "properties": {"repobilityId": "c3dd85afa674d76a", "scanner": "scanner-primary", "fingerprint": "f9cf49fc954a2458", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-18f966112dc5aa55", "level": "error", "message": {"text": "Dangling fetch: POST /api/bookmarks/folders (apps/quantsync/src/legacy-pages/bookmarks.tsx:76)"}, "properties": {"repobilityId": "43fa48bcea342a45", "scanner": "scanner-primary", "fingerprint": "18f966112dc5aa55", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1e0cba242e4d27ff", "level": "error", "message": {"text": "Dangling fetch: POST /api/bookmarks/${postId}/move (apps/quantsync/src/legacy-pages/bookmarks.tsx:91)"}, "properties": {"repobilityId": "6dfc3db45419626b", "scanner": "scanner-primary", "fingerprint": "1e0cba242e4d27ff", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-30d0f712ab567ba5", "level": "error", "message": {"text": "Dangling fetch: POST /api/notifications/read-all (apps/quantsync/src/legacy-pages/notifications.tsx:68)"}, "properties": {"repobilityId": "d010db6eaf1c5c93", "scanner": "scanner-primary", "fingerprint": "30d0f712ab567ba5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-905f4ae734c4e2b5", "level": "error", "message": {"text": "Dangling fetch: POST /api/notifications/${notifId}/read (apps/quantsync/src/legacy-pages/notifications.tsx:74)"}, "properties": {"repobilityId": "93e07396c32babb3", "scanner": "scanner-primary", "fingerprint": "905f4ae734c4e2b5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3021cd876d51a1f6", "level": "error", "message": {"text": "Dangling fetch: GET /api/communities?${params.toString()} (apps/quantsync/src/legacy-pages/communities.tsx:79)"}, "properties": {"repobilityId": "ec35fd23f422b16c", "scanner": "scanner-primary", "fingerprint": "3021cd876d51a1f6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f607b4b3ead4890e", "level": "error", "message": {"text": "Dangling fetch: GET /api/communities/joined (apps/quantsync/src/legacy-pages/communities.tsx:94)"}, "properties": {"repobilityId": "87c4bd9e60154b69", "scanner": "scanner-primary", "fingerprint": "f607b4b3ead4890e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-850fb6b0dda602a6", "level": "error", "message": {"text": "Dangling fetch: POST /api/communities/${communityId}/join (apps/quantsync/src/legacy-pages/communities.tsx:115)"}, "properties": {"repobilityId": "6628b8baa822813a", "scanner": "scanner-primary", "fingerprint": "850fb6b0dda602a6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5e1de132949979d0", "level": "error", "message": {"text": "Dangling fetch: POST /api/communities/${communityId}/leave (apps/quantsync/src/legacy-pages/communities.tsx:136)"}, "properties": {"repobilityId": "1508ee0db8cefdfa", "scanner": "scanner-primary", "fingerprint": "5e1de132949979d0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-122cd6450b00965f", "level": "error", "message": {"text": "Dangling fetch: POST /api/communities (apps/quantsync/src/legacy-pages/communities.tsx:157)"}, "properties": {"repobilityId": "8000de2084f4c7ee", "scanner": "scanner-primary", "fingerprint": "122cd6450b00965f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-cf6791d6d49619b7", "level": "error", "message": {"text": "Dangling fetch: GET /api/anonymous/posts?${params.toString()} (apps/quantsync/src/legacy-pages/anonymous.tsx:51)"}, "properties": {"repobilityId": "211ff8a0484a43c8", "scanner": "scanner-primary", "fingerprint": "cf6791d6d49619b7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-02fd4ed55cd3b7ab", "level": "error", "message": {"text": "Dangling fetch: GET /api/anonymous/trust-profile (apps/quantsync/src/legacy-pages/anonymous.tsx:73)"}, "properties": {"repobilityId": "039a0c0926ae9a8f", "scanner": "scanner-primary", "fingerprint": "02fd4ed55cd3b7ab", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f6b805eace91223c", "level": "error", "message": {"text": "Dangling fetch: POST /api/anonymous/posts/${postId}/vote (apps/quantsync/src/legacy-pages/anonymous.tsx:106)"}, "properties": {"repobilityId": "8cf677b58fe0fd88", "scanner": "scanner-primary", "fingerprint": "f6b805eace91223c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d37970409eec0a98", "level": "error", "message": {"text": "Dangling fetch: POST /api/anonymous/posts/${postId}/reveal (apps/quantsync/src/legacy-pages/anonymous.tsx:115)"}, "properties": {"repobilityId": "0754c340c6493d4a", "scanner": "scanner-primary", "fingerprint": "d37970409eec0a98", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a057a971b760fab9", "level": "error", "message": {"text": "Dangling fetch: POST /api/anonymous/posts (apps/quantsync/src/legacy-pages/anonymous.tsx:131)"}, "properties": {"repobilityId": "4716ebabe404464d", "scanner": "scanner-primary", "fingerprint": "a057a971b760fab9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-87666b466b833f18", "level": "error", "message": {"text": "Dangling fetch: GET /api/verification/status (apps/quantsync/src/legacy-pages/verification.tsx:83)"}, "properties": {"repobilityId": "7803907c8cf98a3f", "scanner": "scanner-primary", "fingerprint": "87666b466b833f18", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8509bb016e628037", "level": "error", "message": {"text": "Dangling fetch: GET /api/verification/eligibility (apps/quantsync/src/legacy-pages/verification.tsx:84)"}, "properties": {"repobilityId": "a741b1de80455f51", "scanner": "scanner-primary", "fingerprint": "8509bb016e628037", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b7cb1260e334045d", "level": "error", "message": {"text": "Dangling fetch: GET /api/verification/requirements (apps/quantsync/src/legacy-pages/verification.tsx:85)"}, "properties": {"repobilityId": "e7abee3e5267b311", "scanner": "scanner-primary", "fingerprint": "b7cb1260e334045d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-cbc35c2da49a0738", "level": "error", "message": {"text": "Dangling fetch: POST /api/verification/apply (apps/quantsync/src/legacy-pages/verification.tsx:106)"}, "properties": {"repobilityId": "5295ac36af986a8a", "scanner": "scanner-primary", "fingerprint": "cbc35c2da49a0738", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b06f8be0337c1d7a", "level": "error", "message": {"text": "Dangling fetch: GET /api/posts/${postId} (apps/quantsync/src/legacy-pages/post/[id].tsx:65)"}, "properties": {"repobilityId": "80ffc89eb1e73fc5", "scanner": "scanner-primary", "fingerprint": "b06f8be0337c1d7a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ab2e0f985aba5058", "level": "error", "message": {"text": "Dangling fetch: GET /api/posts/${postId}/replies (apps/quantsync/src/legacy-pages/post/[id].tsx:66)"}, "properties": {"repobilityId": "061d5c3400dcf828", "scanner": "scanner-primary", "fingerprint": "ab2e0f985aba5058", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-513b9b853fd91d89", "level": "error", "message": {"text": "Dangling fetch: POST /api/posts/${postId}/like (apps/quantsync/src/legacy-pages/post/[id].tsx:92)"}, "properties": {"repobilityId": "f362a58f95537472", "scanner": "scanner-primary", "fingerprint": "513b9b853fd91d89", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1736eff85357b2ac", "level": "error", "message": {"text": "Dangling fetch: POST /api/posts/${postId}/repost (apps/quantsync/src/legacy-pages/post/[id].tsx:106)"}, "properties": {"repobilityId": "d365862d6073f46f", "scanner": "scanner-primary", "fingerprint": "1736eff85357b2ac", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8122b4e22bb4f883", "level": "error", "message": {"text": "Dangling fetch: POST /api/posts/${postId}/bookmark (apps/quantsync/src/legacy-pages/post/[id].tsx:120)"}, "properties": {"repobilityId": "879570cbc6b383fe", "scanner": "scanner-primary", "fingerprint": "8122b4e22bb4f883", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0ca44309474cff5a", "level": "error", "message": {"text": "Dangling fetch: POST /api/posts/${targetId}/reply (apps/quantsync/src/legacy-pages/post/[id].tsx:128)"}, "properties": {"repobilityId": "d164f01e09a92f3d", "scanner": "scanner-primary", "fingerprint": "0ca44309474cff5a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7fa7f4f0d0c14729", "level": "error", "message": {"text": "Dangling fetch: POST /api/posts/${replyId}/like (apps/quantsync/src/legacy-pages/post/[id].tsx:153)"}, "properties": {"repobilityId": "ed9769b634652005", "scanner": "scanner-primary", "fingerprint": "7fa7f4f0d0c14729", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3dfe84335fed2461", "level": "error", "message": {"text": "Dangling fetch: GET /api/communities/${communityId} (apps/quantsync/src/legacy-pages/community/[id].tsx:69)"}, "properties": {"repobilityId": "ab2c3cf1beab2c7e", "scanner": "scanner-primary", "fingerprint": "3dfe84335fed2461", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-587e6f453775a971", "level": "error", "message": {"text": "Dangling fetch: POST /api/communities/${communityId}/${action} (apps/quantsync/src/legacy-pages/community/[id].tsx:104)"}, "properties": {"repobilityId": "c7b1da9c80bdf714", "scanner": "scanner-primary", "fingerprint": "587e6f453775a971", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ab3e0c26b3d2fd4d", "level": "error", "message": {"text": "Dangling fetch: POST /api/posts/${postId}/like (apps/quantsync/src/legacy-pages/community/[id].tsx:126)"}, "properties": {"repobilityId": "18e9762eefe066a3", "scanner": "scanner-primary", "fingerprint": "ab3e0c26b3d2fd4d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e9339fd60e533d9a", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/communities/${communityId}/posts/${postId} (apps/quantsync/src/legacy-pages/community/[id].tsx:133)"}, "properties": {"repobilityId": "24e0a8ece3da9584", "scanner": "scanner-primary", "fingerprint": "e9339fd60e533d9a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-dc8bdf98b979e443", "level": "error", "message": {"text": "Dangling fetch: POST /api/communities/${communityId}/ban (apps/quantsync/src/legacy-pages/community/[id].tsx:153)"}, "properties": {"repobilityId": "a8f6829c5f8f1ce3", "scanner": "scanner-primary", "fingerprint": "dc8bdf98b979e443", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4db78ca6ee2af319", "level": "error", "message": {"text": "Dangling fetch: GET /api/users/${userId}/${tab} (apps/quantsync/src/legacy-pages/profile/[id].tsx:74)"}, "properties": {"repobilityId": "7a5b1aed07ab1571", "scanner": "scanner-primary", "fingerprint": "4db78ca6ee2af319", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3b22e9a7b65f4b50", "level": "error", "message": {"text": "Dangling fetch: POST /api/users/${userId}/${action} (apps/quantsync/src/legacy-pages/profile/[id].tsx:107)"}, "properties": {"repobilityId": "fcca6257c5dc1d0a", "scanner": "scanner-primary", "fingerprint": "3b22e9a7b65f4b50", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c978aceb87853e85", "level": "error", "message": {"text": "Dangling fetch: POST /api/users/${userId}/block (apps/quantsync/src/legacy-pages/profile/[id].tsx:113)"}, "properties": {"repobilityId": "bf2e72f7662b433e", "scanner": "scanner-primary", "fingerprint": "c978aceb87853e85", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e91db7d44f825776", "level": "error", "message": {"text": "Dangling fetch: POST /api/users/${userId}/mute (apps/quantsync/src/legacy-pages/profile/[id].tsx:120)"}, "properties": {"repobilityId": "f9604a6d12f417b2", "scanner": "scanner-primary", "fingerprint": "e91db7d44f825776", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f67a02d40049c06c", "level": "error", "message": {"text": "Dangling fetch: POST /api/spaces/${spaceId}/join (apps/quantsync/src/hooks/useSpaces.ts:210)"}, "properties": {"repobilityId": "3e0d37eeecd5ebb8", "scanner": "scanner-primary", "fingerprint": "f67a02d40049c06c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-76c997a85bc542ed", "level": "error", "message": {"text": "Dangling fetch: POST /api/spaces/${space.id}/leave (apps/quantsync/src/hooks/useSpaces.ts:240)"}, "properties": {"repobilityId": "b10c92c232a10733", "scanner": "scanner-primary", "fingerprint": "76c997a85bc542ed", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-252b8f78d96f6dbd", "level": "error", "message": {"text": "Dangling fetch: POST /api/spaces/${space.id}/hand (apps/quantsync/src/hooks/useSpaces.ts:272)"}, "properties": {"repobilityId": "fa5554a0eec2a453", "scanner": "scanner-primary", "fingerprint": "252b8f78d96f6dbd", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-63e25915ef702883", "level": "error", "message": {"text": "Dangling fetch: POST /api/spaces/${space.id}/hand (apps/quantsync/src/hooks/useSpaces.ts:282)"}, "properties": {"repobilityId": "4815be50404f7282", "scanner": "scanner-primary", "fingerprint": "63e25915ef702883", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d1c6879326cfd7ba", "level": "error", "message": {"text": "Dangling fetch: POST /api/spaces/${space.id}/invite-speaker (apps/quantsync/src/hooks/useSpaces.ts:296)"}, "properties": {"repobilityId": "c2c9bba173ea7161", "scanner": "scanner-primary", "fingerprint": "d1c6879326cfd7ba", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b31792f59b4d49f6", "level": "error", "message": {"text": "Dangling fetch: POST /api/spaces/${space.id}/remove-speaker (apps/quantsync/src/hooks/useSpaces.ts:308)"}, "properties": {"repobilityId": "4ba13b9729d0ba6c", "scanner": "scanner-primary", "fingerprint": "b31792f59b4d49f6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0ed2aa2e194d8f19", "level": "error", "message": {"text": "Dangling fetch: POST /api/spaces/${space.id}/mute-speaker (apps/quantsync/src/hooks/useSpaces.ts:320)"}, "properties": {"repobilityId": "23ef77f1c4000394", "scanner": "scanner-primary", "fingerprint": "0ed2aa2e194d8f19", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3e071409341f867d", "level": "error", "message": {"text": "Dangling fetch: POST /api/spaces/${space.id}/end (apps/quantsync/src/hooks/useSpaces.ts:331)"}, "properties": {"repobilityId": "71236601cbacb251", "scanner": "scanner-primary", "fingerprint": "3e071409341f867d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f2fd9a28a83c1d18", "level": "error", "message": {"text": "Dangling fetch: POST /api/spaces/${space.id}/recording/start (apps/quantsync/src/hooks/useSpaces.ts:338)"}, "properties": {"repobilityId": "38da773f3e2132a8", "scanner": "scanner-primary", "fingerprint": "f2fd9a28a83c1d18", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-385a65c0475c73c7", "level": "error", "message": {"text": "Dangling fetch: POST /api/spaces/${space.id}/recording/stop (apps/quantsync/src/hooks/useSpaces.ts:344)"}, "properties": {"repobilityId": "a5a853e5d5aca776", "scanner": "scanner-primary", "fingerprint": "385a65c0475c73c7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-901452e7cc2804a4", "level": "error", "message": {"text": "Dangling fetch: GET /api/communities/${communityId} (apps/quantsync/src/hooks/useCommunity.ts:78)"}, "properties": {"repobilityId": "49ba08d4f48e8179", "scanner": "scanner-primary", "fingerprint": "901452e7cc2804a4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5dec81ecdcbcc540", "level": "error", "message": {"text": "Dangling fetch: GET /api/communities/${communityId}/posts?${params.toString()} (apps/quantsync/src/hooks/useCommunity.ts:95)"}, "properties": {"repobilityId": "99ce9696c9c41db2", "scanner": "scanner-primary", "fingerprint": "5dec81ecdcbcc540", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-50b490b827a67851", "level": "error", "message": {"text": "Dangling fetch: POST /api/communities/${communityId}/join (apps/quantsync/src/hooks/useCommunity.ts:115)"}, "properties": {"repobilityId": "8d921f4b51cbdf86", "scanner": "scanner-primary", "fingerprint": "50b490b827a67851", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-bad1cf0b4f206bbb", "level": "error", "message": {"text": "Dangling fetch: POST /api/communities/${communityId}/leave (apps/quantsync/src/hooks/useCommunity.ts:125)"}, "properties": {"repobilityId": "65c95a37697b0654", "scanner": "scanner-primary", "fingerprint": "bad1cf0b4f206bbb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4fef83132942cf14", "level": "error", "message": {"text": "Dangling fetch: POST /api/communities/${communityId}/posts (apps/quantsync/src/hooks/useCommunity.ts:133)"}, "properties": {"repobilityId": "14b2ec4cb3edbf5c", "scanner": "scanner-primary", "fingerprint": "4fef83132942cf14", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6dd65a9b3bb97731", "level": "error", "message": {"text": "Dangling fetch: POST /api/posts/${postId}/like (apps/quantsync/src/hooks/useCommunity.ts:144)"}, "properties": {"repobilityId": "3106879acf0a591d", "scanner": "scanner-primary", "fingerprint": "6dd65a9b3bb97731", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-157d0e1978a31722", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/communities/${communityId}/posts/${postId} (apps/quantsync/src/hooks/useCommunity.ts:148)"}, "properties": {"repobilityId": "2baa02bcc84e8f66", "scanner": "scanner-primary", "fingerprint": "157d0e1978a31722", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f6b254c7f8f1c7e9", "level": "error", "message": {"text": "Dangling fetch: POST /api/communities/${communityId}/ban (apps/quantsync/src/hooks/useCommunity.ts:157)"}, "properties": {"repobilityId": "8c5ee6ece15f3e45", "scanner": "scanner-primary", "fingerprint": "f6b254c7f8f1c7e9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b63402d40770546d", "level": "error", "message": {"text": "Dangling fetch: PUT /api/communities/${communityId}/rules (apps/quantsync/src/hooks/useCommunity.ts:165)"}, "properties": {"repobilityId": "526f59504acf718d", "scanner": "scanner-primary", "fingerprint": "b63402d40770546d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1090aa0b66041ae4", "level": "error", "message": {"text": "Dangling fetch: POST /api/communities/${communityId}/moderators (apps/quantsync/src/hooks/useCommunity.ts:176)"}, "properties": {"repobilityId": "a123f44f991ad20f", "scanner": "scanner-primary", "fingerprint": "1090aa0b66041ae4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-fcb5108a79fe64cc", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/communities/${communityId}/moderators/${userId} (apps/quantsync/src/hooks/useCommunity.ts:185)"}, "properties": {"repobilityId": "643e565796f2f864", "scanner": "scanner-primary", "fingerprint": "fcb5108a79fe64cc", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c5845066cf2febb4", "level": "error", "message": {"text": "Dangling fetch: PUT /api/communities/${communityId} (apps/quantsync/src/hooks/useCommunity.ts:190)"}, "properties": {"repobilityId": "81979943be769545", "scanner": "scanner-primary", "fingerprint": "c5845066cf2febb4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-07e732a884784b5a", "level": "error", "message": {"text": "Dangling fetch: POST /api/posts/${postId}/like (apps/quantsync/src/hooks/useFeed.ts:195)"}, "properties": {"repobilityId": "ecfdb8fff70547cb", "scanner": "scanner-primary", "fingerprint": "07e732a884784b5a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-de4c21afa1ca1e6b", "level": "error", "message": {"text": "Dangling fetch: POST /api/posts/${postId}/repost (apps/quantsync/src/hooks/useFeed.ts:210)"}, "properties": {"repobilityId": "ec39bc6e4f6c204d", "scanner": "scanner-primary", "fingerprint": "de4c21afa1ca1e6b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8ed859c0dff527fb", "level": "error", "message": {"text": "Dangling fetch: POST /api/posts/${postId}/bookmark (apps/quantsync/src/hooks/useFeed.ts:224)"}, "properties": {"repobilityId": "eebf0a9cdd9d7639", "scanner": "scanner-primary", "fingerprint": "8ed859c0dff527fb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e3a4fc97a928a68f", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/posts/${postId} (apps/quantsync/src/hooks/useFeed.ts:229)"}, "properties": {"repobilityId": "6846aa1785f69a83", "scanner": "scanner-primary", "fingerprint": "e3a4fc97a928a68f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7742804696913a36", "level": "error", "message": {"text": "Dangling fetch: GET /api/analytics/agents/top (apps/quantai/src/components/AgentPerformance.tsx:20)"}, "properties": {"repobilityId": "cf046028261cd76e", "scanner": "scanner-primary", "fingerprint": "7742804696913a36", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ee5ee1fc687f3b0b", "level": "error", "message": {"text": "Dangling fetch: POST /api/marketplace/${agentId}/install (apps/quantai/src/components/Marketplace.tsx:44)"}, "properties": {"repobilityId": "7aff2a804aad3f95", "scanner": "scanner-primary", "fingerprint": "ee5ee1fc687f3b0b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-abff0063ec9148f8", "level": "error", "message": {"text": "Dangling fetch: POST /api/agentic/agents/run (apps/quantai/src/components/AgentDashboard.tsx:42)"}, "properties": {"repobilityId": "39112b1debca3b09", "scanner": "scanner-primary", "fingerprint": "abff0063ec9148f8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2278060231c0923f", "level": "error", "message": {"text": "Dangling fetch: POST /api/agentic/workflows (apps/quantai/src/components/WorkflowDashboard.tsx:13)"}, "properties": {"repobilityId": "ecf82cc626282b19", "scanner": "scanner-primary", "fingerprint": "2278060231c0923f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-aa85206b615ad162", "level": "error", "message": {"text": "Dangling fetch: POST /api/assistant/chat (apps/quantai/src/app/ask/page.tsx:40)"}, "properties": {"repobilityId": "236ad2a5148cf150", "scanner": "scanner-primary", "fingerprint": "aa85206b615ad162", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c6f00a834d265379", "level": "error", "message": {"text": "Dangling fetch: GET /data (packages/agent-runtime/src/__tests__/device/tier1-api.test.ts:29)"}, "properties": {"repobilityId": "36a68d7a5a92b6d4", "scanner": "scanner-primary", "fingerprint": "c6f00a834d265379", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:callApi"]}}, {"ruleId": "scanner-dd2e6f615ba6f584", "level": "error", "message": {"text": "Dangling fetch: GET /unknown (packages/agent-runtime/src/__tests__/device/tier1-api.test.ts:37)"}, "properties": {"repobilityId": "470be5976e578d04", "scanner": "scanner-primary", "fingerprint": "dd2e6f615ba6f584", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:callApi"]}}, {"ruleId": "scanner-1b7d5300057fdc92", "level": "error", "message": {"text": "Dangling fetch: POST https://api.openai.com/v1/moderations (services/moderation-worker/src/main.ts:104)"}, "properties": {"repobilityId": "4afdcb78a2658898", "scanner": "scanner-primary", "fingerprint": "1b7d5300057fdc92", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-71bbbcde54147323", "level": "note", "message": {"text": "Unused endpoint: POST /suggest-titles"}, "properties": {"repobilityId": "d5ab87252a812ee7", "scanner": "scanner-primary", "fingerprint": "71bbbcde54147323", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-88623a7fde233a62", "level": "note", "message": {"text": "Unused endpoint: POST /captions"}, "properties": {"repobilityId": "44ac9952b4a9f489", "scanner": "scanner-primary", "fingerprint": "88623a7fde233a62", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7a009b1a56794f45", "level": "note", "message": {"text": "Unused endpoint: POST /"}, "properties": {"repobilityId": "835da97d94c5f71a", "scanner": "scanner-primary", "fingerprint": "7a009b1a56794f45", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-176b92c16d18d938", "level": "note", "message": {"text": "Unused endpoint: GET /project/:projectId"}, "properties": {"repobilityId": "7598d9f3c2ebd637", "scanner": "scanner-primary", "fingerprint": "176b92c16d18d938", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-fbf37139aa25d03c", "level": "note", "message": {"text": "Unused endpoint: POST /upload-url"}, "properties": {"repobilityId": "70100619313ca2c3", "scanner": "scanner-primary", "fingerprint": "fbf37139aa25d03c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5baa8971ebe192a1", "level": "note", "message": {"text": "Unused endpoint: GET /"}, "properties": {"repobilityId": "e2f55cbab17d4111", "scanner": "scanner-primary", "fingerprint": "5baa8971ebe192a1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-94b275825d72ce35", "level": "note", "message": {"text": "Unused endpoint: POST /smart-replies"}, "properties": {"repobilityId": "77020f03c647b62c", "scanner": "scanner-primary", "fingerprint": "94b275825d72ce35", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d878fa5259ab02d4", "level": "note", "message": {"text": "Unused endpoint: POST /initiate"}, "properties": {"repobilityId": "b55aaffb28c14202", "scanner": "scanner-primary", "fingerprint": "d878fa5259ab02d4", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5e798566755a8932", "level": "note", "message": {"text": "Unused endpoint: POST /group"}, "properties": {"repobilityId": "a5f5ef52f4222304", "scanner": "scanner-primary", "fingerprint": "5e798566755a8932", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-0d3a434fedb1fa40", "level": "note", "message": {"text": "Unused endpoint: GET /chat"}, "properties": {"repobilityId": "cab9a5d5be145a81", "scanner": "scanner-primary", "fingerprint": "0d3a434fedb1fa40", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ce07d245de360d7d", "level": "note", "message": {"text": "Unused endpoint: GET /presence"}, "properties": {"repobilityId": "f4bdeb7e3899f195", "scanner": "scanner-primary", "fingerprint": "ce07d245de360d7d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-0f53365bbb1c16b8", "level": "note", "message": {"text": "Unused endpoint: POST /keys"}, "properties": {"repobilityId": "2982053394abe96e", "scanner": "scanner-primary", "fingerprint": "0f53365bbb1c16b8", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-92efb2dc9205e7a4", "level": "note", "message": {"text": "Unused endpoint: POST /sessions"}, "properties": {"repobilityId": "3c34e6d34b9d2855", "scanner": "scanner-primary", "fingerprint": "92efb2dc9205e7a4", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2a77854ef714f665", "level": "note", "message": {"text": "Unused endpoint: POST /auth/otp/request"}, "properties": {"repobilityId": "8f34827baaaccb1f", "scanner": "scanner-primary", "fingerprint": "2a77854ef714f665", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-9640328f1b3a2f00", "level": "note", "message": {"text": "Unused endpoint: POST /auth/link-quantmail"}, "properties": {"repobilityId": "0b68adab7e2a9b3c", "scanner": "scanner-primary", "fingerprint": "9640328f1b3a2f00", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b119bb52041e0c8d", "level": "note", "message": {"text": "Unused endpoint: GET /auth/profile"}, "properties": {"repobilityId": "bc6da6b8cefc9d34", "scanner": "scanner-primary", "fingerprint": "b119bb52041e0c8d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-9143464946a01de5", "level": "note", "message": {"text": "Unused endpoint: PUT /auth/profile"}, "properties": {"repobilityId": "be8cb3fcc7f7760c", "scanner": "scanner-primary", "fingerprint": "9143464946a01de5", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c059f57186114027", "level": "note", "message": {"text": "Unused endpoint: POST /auth/logout"}, "properties": {"repobilityId": "06464622136d8c5c", "scanner": "scanner-primary", "fingerprint": "c059f57186114027", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6f0fc82742855439", "level": "note", "message": {"text": "Unused endpoint: GET /conversations"}, "properties": {"repobilityId": "9665907f14905e8f", "scanner": "scanner-primary", "fingerprint": "6f0fc82742855439", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8ee7ac4b5c5364e8", "level": "note", "message": {"text": "Unused endpoint: POST /conversations"}, "properties": {"repobilityId": "73107045dd7176f8", "scanner": "scanner-primary", "fingerprint": "8ee7ac4b5c5364e8", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-02c674b3fe3d15e7", "level": "note", "message": {"text": "Unused endpoint: GET /stories/me"}, "properties": {"repobilityId": "f01c57467dec316d", "scanner": "scanner-primary", "fingerprint": "02c674b3fe3d15e7", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a770f2c42555b943", "level": "note", "message": {"text": "Unused endpoint: POST /highlights"}, "properties": {"repobilityId": "8616d54f416c5a58", "scanner": "scanner-primary", "fingerprint": "a770f2c42555b943", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1c4ffc6656593a98", "level": "note", "message": {"text": "Unused endpoint: GET /close-friends"}, "properties": {"repobilityId": "298580476cf434e3", "scanner": "scanner-primary", "fingerprint": "1c4ffc6656593a98", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b89468a42b666f81", "level": "note", "message": {"text": "Unused endpoint: PUT /close-friends"}, "properties": {"repobilityId": "de6689700e03f1dd", "scanner": "scanner-primary", "fingerprint": "b89468a42b666f81", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-94abdc3e6eb8f544", "level": "note", "message": {"text": "Unused endpoint: POST /snaps"}, "properties": {"repobilityId": "7e39dc56ec5bc4f7", "scanner": "scanner-primary", "fingerprint": "94abdc3e6eb8f544", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-bdeedf7d9def86e5", "level": "note", "message": {"text": "Unused endpoint: GET /streaks"}, "properties": {"repobilityId": "08d830ecd78ce9a3", "scanner": "scanner-primary", "fingerprint": "bdeedf7d9def86e5", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b253facae3c4682f", "level": "note", "message": {"text": "Unused endpoint: POST /calls"}, "properties": {"repobilityId": "11c42516d2fc60f8", "scanner": "scanner-primary", "fingerprint": "b253facae3c4682f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2c32862bde9a5360", "level": "note", "message": {"text": "Unused endpoint: GET /calls/history"}, "properties": {"repobilityId": "7963ac54166f8fb8", "scanner": "scanner-primary", "fingerprint": "2c32862bde9a5360", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-651cd7d3c2c3dfca", "level": "note", "message": {"text": "Unused endpoint: GET /calls/ice-servers"}, "properties": {"repobilityId": "e71c17ad5fcdf1f6", "scanner": "scanner-primary", "fingerprint": "651cd7d3c2c3dfca", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3dfaaa08dd3fb680", "level": "note", "message": {"text": "Unused endpoint: POST /groups"}, "properties": {"repobilityId": "eb689f158771a7aa", "scanner": "scanner-primary", "fingerprint": "3dfaaa08dd3fb680", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e3e7e5fea4199d0c", "level": "note", "message": {"text": "Unused endpoint: GET /groups"}, "properties": {"repobilityId": "90b64ff9a630c6eb", "scanner": "scanner-primary", "fingerprint": "e3e7e5fea4199d0c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-59fc96a44decafe2", "level": "note", "message": {"text": "Unused endpoint: POST /groups/join"}, "properties": {"repobilityId": "5e2ed5d547a4d2e4", "scanner": "scanner-primary", "fingerprint": "59fc96a44decafe2", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b90c0f149d3e6a3c", "level": "note", "message": {"text": "Unused endpoint: GET /discover"}, "properties": {"repobilityId": "5ed762cb224d1294", "scanner": "scanner-primary", "fingerprint": "b90c0f149d3e6a3c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-30562755f5bc0073", "level": "note", "message": {"text": "Unused endpoint: GET /discover/trending"}, "properties": {"repobilityId": "57ef09f5b2265da1", "scanner": "scanner-primary", "fingerprint": "30562755f5bc0073", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-dd8c0936ea872340", "level": "note", "message": {"text": "Unused endpoint: GET /discover/publishers"}, "properties": {"repobilityId": "54d27a8ef5e72f33", "scanner": "scanner-primary", "fingerprint": "dd8c0936ea872340", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5719b2fbd9a411a2", "level": "note", "message": {"text": "Unused endpoint: GET /filters"}, "properties": {"repobilityId": "23665591af458409", "scanner": "scanner-primary", "fingerprint": "5719b2fbd9a411a2", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b482f1edbe179202", "level": "note", "message": {"text": "Unused endpoint: GET /filters/trending"}, "properties": {"repobilityId": "f618fafdc4dabdf3", "scanner": "scanner-primary", "fingerprint": "b482f1edbe179202", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-31ec2d524d679686", "level": "note", "message": {"text": "Unused endpoint: POST /ai/smart-replies"}, "properties": {"repobilityId": "a683c7e0602edce1", "scanner": "scanner-primary", "fingerprint": "31ec2d524d679686", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-9a33d191aef15085", "level": "note", "message": {"text": "Unused endpoint: POST /ai/translate"}, "properties": {"repobilityId": "da3e5401f9f673ea", "scanner": "scanner-primary", "fingerprint": "9a33d191aef15085", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f85a32feeafd78c9", "level": "note", "message": {"text": "Unused endpoint: POST /ai/chat"}, "properties": {"repobilityId": "fd767a3a3e0dc53d", "scanner": "scanner-primary", "fingerprint": "f85a32feeafd78c9", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-256131983c7f4cd8", "level": "note", "message": {"text": "Unused endpoint: GET /bitmoji/me"}, "properties": {"repobilityId": "6f60624cea4c7263", "scanner": "scanner-primary", "fingerprint": "256131983c7f4cd8", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ba074cbc68e23fea", "level": "note", "message": {"text": "Unused endpoint: POST /bitmoji"}, "properties": {"repobilityId": "50fe751654edd0fa", "scanner": "scanner-primary", "fingerprint": "ba074cbc68e23fea", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-4fb8cccb55073f5c", "level": "note", "message": {"text": "Unused endpoint: PUT /bitmoji"}, "properties": {"repobilityId": "b56c405ec9858290", "scanner": "scanner-primary", "fingerprint": "4fb8cccb55073f5c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1bfaef6611039633", "level": "note", "message": {"text": "Unused endpoint: POST /map/location"}, "properties": {"repobilityId": "7c4e13bd0ce8c978", "scanner": "scanner-primary", "fingerprint": "1bfaef6611039633", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7decfc593c6891e5", "level": "note", "message": {"text": "Unused endpoint: GET /map/places"}, "properties": {"repobilityId": "9d566fb6cf700002", "scanner": "scanner-primary", "fingerprint": "7decfc593c6891e5", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e51647bb43596a84", "level": "note", "message": {"text": "Unused endpoint: POST /map/ghost-mode"}, "properties": {"repobilityId": "f0535a54d17c376c", "scanner": "scanner-primary", "fingerprint": "e51647bb43596a84", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-eeefd9c38a969305", "level": "note", "message": {"text": "Unused endpoint: POST /filters"}, "properties": {"repobilityId": "d756226456f8d436", "scanner": "scanner-primary", "fingerprint": "eeefd9c38a969305", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-9a88e32ba95dda7c", "level": "note", "message": {"text": "Unused endpoint: POST /apply"}, "properties": {"repobilityId": "21a7bc760b5ba0dc", "scanner": "scanner-primary", "fingerprint": "9a88e32ba95dda7c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c54d68079daf388d", "level": "note", "message": {"text": "Unused endpoint: GET /user/:userId"}, "properties": {"repobilityId": "163f46fc4245492c", "scanner": "scanner-primary", "fingerprint": "c54d68079daf388d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-791cca043ca5e0b3", "level": "note", "message": {"text": "Unused endpoint: POST /expire"}, "properties": {"repobilityId": "401a439c9be5e14b", "scanner": "scanner-primary", "fingerprint": "791cca043ca5e0b3", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}