{"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-ca890a3e43ad007a", "name": "Possibly dead Python function: inlet", "shortDescription": {"text": "Possibly dead Python function: inlet"}, "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-95e1007ddc8742e3", "name": "Possibly dead Python function: outlet", "shortDescription": {"text": "Possibly dead Python function: outlet"}, "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-03efc42bb19e77c5", "name": "Stray `console.log` in TS/JS \u2014 apps/web-console/tests/e2e/rbac-unverified.spec.ts:65", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/web-console/tests/e2e/rbac-unverified.spec.ts:65"}, "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-eac9f8fd41d60f04", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web-console/components/app-shell/console-shell.tsx:90", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web-console/components/app-shell/console-shell.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-5efd6139d05ffc2b", "name": "Stray `console.log` in TS/JS \u2014 apps/web-console/e2e/phase-19/owui/performance/embed-latency.spec.ts:38", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/web-console/e2e/phase-19/owui/performance/embed-latency.spec.ts:38"}, "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-ac16fee80c16eea8", "name": "Stray `console.log` in TS/JS \u2014 apps/web-console/e2e/phase-19/owui/performance/ttfb.spec.ts:35", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/web-console/e2e/phase-19/owui/performance/ttfb.spec.ts:35"}, "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-d9ffd871ba44e80c", "name": "Stray `console.log` in TS/JS \u2014 apps/chat-app/client/src/utils/resetConvo.ts:10", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/client/src/utils/resetConvo.ts:10"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-67aafbfa28cd11a8", "name": "Stray `console.log` in TS/JS \u2014 apps/chat-app/client/src/utils/heicConverter.ts:74", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/client/src/utils/heicConverter.ts:74"}, "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-500948bfab57ca79", "name": "TODO/FIXME marker in shipping code \u2014 apps/chat-app/client/src/utils/files.ts:33", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 apps/chat-app/client/src/utils/files.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-12269828d209c499", "name": "Stray `console.log` in TS/JS \u2014 apps/chat-app/client/src/utils/files.ts:254", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/client/src/utils/files.ts:254"}, "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-3ecd990a16bf2446", "name": "Stray `console.log` in TS/JS \u2014 apps/chat-app/client/src/components/Auth/Login.tsx:43", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/client/src/components/Auth/Login.tsx:43"}, "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-fce7978bbef77155", "name": "Stray `console.log` in TS/JS \u2014 apps/chat-app/client/src/components/Auth/__tests__/Registration.spec.tsx:179", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/client/src/components/Auth/__tests__/Registration.spec.tsx:179"}, "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-356df869516b7009", "name": "Stray `console.log` in TS/JS \u2014 apps/chat-app/client/src/components/Chat/Presentation.tsx:21", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/client/src/components/Chat/Presentation.tsx: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-853e283064cb21c5", "name": "Stray `console.log` in TS/JS \u2014 apps/chat-app/client/src/components/Chat/Menus/BookmarkMenu.tsx:41", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/client/src/components/Chat/Menus/BookmarkMenu.tsx:41"}, "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-a43ead7069428129", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/chat-app/client/src/components/Chat/Menus/Endpoints/ModelSelec", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/chat-app/client/src/components/Chat/Menus/Endpoints/ModelSelector.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-0bded8d1a055d5a4", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/chat-app/client/src/components/Chat/Menus/Endpoints/components", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/chat-app/client/src/components/Chat/Menus/Endpoints/components/ModelSpecItem.tsx:36"}, "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-fe7d7f71f840ba68", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/chat-app/client/src/components/Chat/Menus/Endpoints/components", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/chat-app/client/src/components/Chat/Menus/Endpoints/components/SearchResults.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-40779f51eadcfb21", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/chat-app/client/src/components/Chat/Menus/Presets/PresetItems.", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/chat-app/client/src/components/Chat/Menus/Presets/PresetItems.tsx:48"}, "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-7c9222d432a639fc", "name": "Stray `console.log` in TS/JS \u2014 apps/chat-app/client/src/components/Chat/Menus/Presets/EditPresetDialog.tsx:87", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/client/src/components/Chat/Menus/Presets/EditPresetDialog.tsx:87"}, "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-9d01971ac115a912", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/chat-app/client/src/components/Chat/Input/MentionItem.tsx:42", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/chat-app/client/src/components/Chat/Input/MentionItem.tsx:42"}, "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-afbf59d7c0688754", "name": "Stray `console.log` in TS/JS \u2014 apps/chat-app/client/src/components/Chat/Input/AudioRecorder.tsx:38", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/client/src/components/Chat/Input/AudioRecorder.tsx:38"}, "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-d6e57b9515384440", "name": "Stray `console.log` in TS/JS \u2014 apps/chat-app/client/src/components/Chat/Input/MCPSelect.tsx:125", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/client/src/components/Chat/Input/MCPSelect.tsx:125"}, "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-ece53a83a4f65f73", "name": "Stray `console.log` in TS/JS \u2014 apps/chat-app/client/src/components/Chat/Input/Files/FileRow.tsx:51", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/client/src/components/Chat/Input/Files/FileRow.tsx:51"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-28ab748d768bc8c6", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/chat-app/client/src/components/Chat/Input/Files/Table/Columns.", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/chat-app/client/src/components/Chat/Input/Files/Table/Columns.tsx:80"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-46eba16626091ab2", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/chat-app/client/src/components/Chat/Input/Files/Table/DataTabl", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/chat-app/client/src/components/Chat/Input/Files/Table/DataTable.tsx:223"}, "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-9eecf266c1fabc23", "name": "Stray `console.log` in TS/JS \u2014 apps/chat-app/client/src/components/Chat/Messages/Content/MessageContent.tsx:26", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/client/src/components/Chat/Messages/Content/MessageContent.tsx:26"}, "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-e3872d5c3ed1355a", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/chat-app/client/src/components/ui/MultiSelectDropDown.tsx:103", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/chat-app/client/src/components/ui/MultiSelectDropDown.tsx:103"}, "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-e3b240d312d373a6", "name": "TODO/FIXME marker in shipping code \u2014 apps/chat-app/client/src/components/ui/InputNumber.tsx:9", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 apps/chat-app/client/src/components/ui/InputNumber.tsx:9"}, "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-0300e6b2e3c38c10", "name": "Stray `console.log` in TS/JS \u2014 apps/chat-app/client/src/components/ui/InputNumber.tsx:30", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/client/src/components/ui/InputNumber.tsx:30"}, "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-4259d59ca8718748", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/chat-app/client/src/components/ui/Dropdown.tsx:83", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/chat-app/client/src/components/ui/Dropdown.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-42975c513b05bd93", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/chat-app/client/src/components/ui/SelectDropDown.tsx:137", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/chat-app/client/src/components/ui/SelectDropDown.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-54effa156f60722d", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/chat-app/client/src/components/ui/MultiSelect.tsx:93", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/chat-app/client/src/components/ui/MultiSelect.tsx:93"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-34ff040a488de599", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/chat-app/client/src/components/ui/ControlCombobox.tsx:119", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/chat-app/client/src/components/ui/ControlCombobox.tsx:119"}, "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-5011bad5004c9651", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/chat-app/client/src/components/ui/CheckboxButton.tsx:69", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/chat-app/client/src/components/ui/CheckboxButton.tsx:69"}, "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-eb8bbc33f535ab18", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/chat-app/client/src/components/ui/DropdownNoState.tsx:65", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/chat-app/client/src/components/ui/DropdownNoState.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-aa011ad95ccfa460", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/chat-app/client/src/components/ui/MCP/CustomUserVarsSection.t", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/chat-app/client/src/components/ui/MCP/CustomUserVarsSection.tsx:70"}, "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-b3e41d129f2e53f4", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/chat-app/client/src/components/Plugins/Store/PluginTooltip.ts", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/chat-app/client/src/components/Plugins/Store/PluginTooltip.tsx:15"}, "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-31aea3c91bae7ba1", "name": "TODO/FIXME marker in shipping code \u2014 apps/chat-app/client/src/components/Input/SetKeyDialog/SetKeyDialog.tsx:66", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 apps/chat-app/client/src/components/Input/SetKeyDialog/SetKeyDialog.tsx:66"}, "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-b0d3aca99fd927c4", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/chat-app/client/src/components/Web/Sources.tsx:38", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/chat-app/client/src/components/Web/Sources.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-fc9dad34e7c01f50", "name": "Icon-only button without accessible name \u2014 apps/chat-app/client/src/components/Web/Citation.tsx:66", "shortDescription": {"text": "Icon-only button without accessible name \u2014 apps/chat-app/client/src/components/Web/Citation.tsx:66"}, "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-ddc3987f78ae7d53", "name": "TODO/FIXME marker in shipping code \u2014 apps/chat-app/client/src/components/SidePanel/Agents/MCPInput.tsx:30", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 apps/chat-app/client/src/components/SidePanel/Agents/MCPInput.tsx:30"}, "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-2b13a1c73c5c5190", "name": "TODO/FIXME marker in shipping code \u2014 apps/chat-app/client/src/components/SidePanel/Agents/Retrieval.tsx:74", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 apps/chat-app/client/src/components/SidePanel/Agents/Retrieval.tsx:74"}, "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-c7ae1b28e7d53665", "name": "TODO/FIXME marker in shipping code \u2014 apps/chat-app/client/src/components/SidePanel/Agents/MCPPanel.tsx:19", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 apps/chat-app/client/src/components/SidePanel/Agents/MCPPanel.tsx:19"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f7e81aab4dbe99c2", "name": "Stray `console.log` in TS/JS \u2014 apps/chat-app/client/src/components/SidePanel/Agents/MCPPanel.tsx:32", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/client/src/components/SidePanel/Agents/MCPPanel.tsx: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-f5b25bbba4827c92", "name": "TODO/FIXME marker in shipping code \u2014 apps/chat-app/client/src/components/SidePanel/Parameters/DynamicDropdown.tsx:36", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 apps/chat-app/client/src/components/SidePanel/Parameters/DynamicDropdown.tsx:36"}, "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-e66b297f19503c87", "name": "TODO/FIXME marker in shipping code \u2014 apps/chat-app/client/src/components/SidePanel/Parameters/DynamicTextarea.tsx:80", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 apps/chat-app/client/src/components/SidePanel/Parameters/DynamicTextarea.tsx:80"}, "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-6f16b852b36fae84", "name": "TODO/FIXME marker in shipping code \u2014 apps/chat-app/client/src/components/SidePanel/Parameters/DynamicSlider.tsx:57", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 apps/chat-app/client/src/components/SidePanel/Parameters/DynamicSlider.tsx: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-4452df40adb01926", "name": "Stray `console.log` in TS/JS \u2014 apps/chat-app/client/src/components/SidePanel/Builder/ActionsInput.tsx:112", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/client/src/components/SidePanel/Builder/ActionsInput.tsx:112"}, "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-6ba023d3fbab0a9a", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/chat-app/client/src/components/SidePanel/Builder/AssistantSele", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/chat-app/client/src/components/SidePanel/Builder/AssistantSelect.tsx:297"}, "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-caba598956e63d02", "name": "Stray `console.log` in TS/JS \u2014 apps/chat-app/client/src/components/SidePanel/Builder/AssistantAvatar.tsx:38", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/client/src/components/SidePanel/Builder/AssistantAvatar.tsx:38"}, "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-f22e7f232fc8c22f", "name": "Stray `console.log` in TS/JS \u2014 apps/chat-app/client/src/components/SidePanel/Builder/ContextButton.tsx:42", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/client/src/components/SidePanel/Builder/ContextButton.tsx:42"}, "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-b000d3f80c9e7825", "name": "Stray `console.log` in TS/JS \u2014 apps/chat-app/client/src/components/SidePanel/MCP/MCPPanel.tsx:74", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/client/src/components/SidePanel/MCP/MCPPanel.tsx:74"}, "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-c6e0a6386a566660", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/chat-app/client/src/components/SidePanel/Files/PanelFileCell.t", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/chat-app/client/src/components/SidePanel/Files/PanelFileCell.tsx:22"}, "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-61ae5ecb07b0b0c6", "name": "Stray `console.log` in TS/JS \u2014 apps/chat-app/client/src/components/Bookmarks/BookmarkEditDialog.tsx:65", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/client/src/components/Bookmarks/BookmarkEditDialog.tsx:65"}, "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-b6776ed000cedb24", "name": "TODO/FIXME marker in shipping code \u2014 apps/chat-app/client/src/components/Nav/SettingsTabs/Speech/Speech.tsx:140", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 apps/chat-app/client/src/components/Nav/SettingsTabs/Speech/Speech.tsx:140"}, "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-90de75751967b488", "name": "Stray `console.log` in TS/JS \u2014 apps/chat-app/client/src/components/Nav/SettingsTabs/Data/ImportConversations.tsx:55", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/client/src/components/Nav/SettingsTabs/Data/ImportConversations.tsx:55"}, "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-5f29fc491eda4dcf", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/chat-app/client/src/components/Nav/SettingsTabs/General/Archiv", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/chat-app/client/src/components/Nav/SettingsTabs/General/ArchivedChatsTable.tsx:152"}, "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-d5efdc0cc1f65b32", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/chat-app/client/src/components/Artifacts/Artifacts.tsx:72", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/chat-app/client/src/components/Artifacts/Artifacts.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-a95df47fb288b63a", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/chat-app/client/src/components/Artifacts/ArtifactButton.tsx:78", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/chat-app/client/src/components/Artifacts/ArtifactButton.tsx:78"}, "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-36e3874312cf01ff", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/chat-app/client/src/components/Prompts/PromptEditor.tsx:60", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/chat-app/client/src/components/Prompts/PromptEditor.tsx:60"}, "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-b888fef7ab69b233", "name": "TODO/FIXME marker in shipping code \u2014 apps/chat-app/client/src/components/Prompts/PromptForm.tsx:124", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 apps/chat-app/client/src/components/Prompts/PromptForm.tsx:124"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-68f8ff7c2ee68035", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/chat-app/client/src/components/Prompts/Groups/DashGroupItem.ts", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/chat-app/client/src/components/Prompts/Groups/DashGroupItem.tsx:87"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d5a3ceff952251c7", "name": "Stray `console.log` in TS/JS \u2014 apps/chat-app/client/src/components/Prompts/Groups/DashGroupItem.tsx:52", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/client/src/components/Prompts/Groups/DashGroupItem.tsx:52"}, "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-e5f3c4b406771884", "name": "Stray `console.log` in TS/JS \u2014 apps/chat-app/client/src/components/Share/MessageIcon.tsx:44", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/client/src/components/Share/MessageIcon.tsx:44"}, "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-5fbf39392ef3e902", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/chat-app/client/src/components/Banners/Banner.tsx:35", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/chat-app/client/src/components/Banners/Banner.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-770decc437c15e70", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/chat-app/client/src/components/Banners/Banner.tsx:36", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/chat-app/client/src/components/Banners/Banner.tsx:36"}, "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-5200f55e447fa903", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/chat-app/client/src/components/Files/FileList/FileTableColumns", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/chat-app/client/src/components/Files/FileList/FileTableColumns.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-064ede28780d9b50", "name": "Stray `console.log` in TS/JS \u2014 apps/chat-app/client/src/components/Files/FileList/FilePreview.tsx:60", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/client/src/components/Files/FileList/FilePreview.tsx:60"}, "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-57b8abdbaef12804", "name": "Stray `console.log` in TS/JS \u2014 apps/chat-app/client/src/components/Files/FileList/FileSidePanel.tsx:148", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/client/src/components/Files/FileList/FileSidePanel.tsx:148"}, "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-76043a129aaef9ae", "name": "Stray `console.log` in TS/JS \u2014 apps/chat-app/client/src/components/Files/FileList/UploadFileModal.tsx:75", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/client/src/components/Files/FileList/UploadFileModal.tsx:75"}, "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-20cc7d1bb0af8eb2", "name": "Stray `console.log` in TS/JS \u2014 apps/chat-app/client/src/components/Files/FileList/DataTableFile.tsx:100", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/client/src/components/Files/FileList/DataTableFile.tsx:100"}, "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-ba97f5f796ad9359", "name": "Stray `console.log` in TS/JS \u2014 apps/chat-app/client/src/components/Files/VectorStore/VectorStorePreview.tsx:114", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/client/src/components/Files/VectorStore/VectorStorePreview.tsx:114"}, "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-344afec81f4932b5", "name": "Stray `console.log` in TS/JS \u2014 apps/chat-app/client/src/components/Files/VectorStore/VectorStoreSidePanel.tsx:215", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/client/src/components/Files/VectorStore/VectorStoreSidePanel.tsx:215"}, "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-8a9705d52988c97d", "name": "TODO/FIXME marker in shipping code \u2014 apps/chat-app/client/src/data-provider/mutations.ts:477", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 apps/chat-app/client/src/data-provider/mutations.ts:477"}, "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-1ff96b22d4d1661c", "name": "Stray `console.log` in TS/JS \u2014 apps/chat-app/client/src/hooks/useTimeout.tsx:20", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/client/src/hooks/useTimeout.tsx: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-2e2236283f9c103b", "name": "Stray `console.log` in TS/JS \u2014 apps/chat-app/client/src/hooks/AuthContext.tsx:136", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/client/src/hooks/AuthContext.tsx:136"}, "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-25554c2cbd56b8ae", "name": "Stray `console.log` in TS/JS \u2014 apps/chat-app/client/src/hooks/ThemeContext.tsx:67", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/client/src/hooks/ThemeContext.tsx:67"}, "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-eeae7485e9434d61", "name": "Stray `console.log` in TS/JS \u2014 apps/chat-app/client/src/hooks/useScrollToRef.ts:27", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/client/src/hooks/useScrollToRef.ts:27"}, "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-b873092dd5e71ca1", "name": "TODO/FIXME marker in shipping code \u2014 apps/chat-app/client/src/hooks/useChatBadges.ts:23", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 apps/chat-app/client/src/hooks/useChatBadges.ts:23"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c03724144cbdf8a8", "name": "Stray `console.log` in TS/JS \u2014 apps/chat-app/client/src/hooks/useNewConvo.ts:57", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/client/src/hooks/useNewConvo.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-af8a8bc25f175f41", "name": "Stray `console.log` in TS/JS \u2014 apps/chat-app/client/src/hooks/Audio/usePauseGlobalAudio.ts:18", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/client/src/hooks/Audio/usePauseGlobalAudio.ts:18"}, "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-52d55c1ab9fd68d4", "name": "Stray `console.log` in TS/JS \u2014 apps/chat-app/client/src/hooks/Audio/useCustomAudioRef.ts:28", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/client/src/hooks/Audio/useCustomAudioRef.ts:28"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-fc14350e741ca653", "name": "Stray `console.log` in TS/JS \u2014 apps/chat-app/client/src/hooks/Audio/useAudioRef.ts:12", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/client/src/hooks/Audio/useAudioRef.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-04c63e19f18c51ba", "name": "Stray `console.log` in TS/JS \u2014 apps/chat-app/client/src/hooks/Input/useQueryParams.ts:256", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/client/src/hooks/Input/useQueryParams.ts:256"}, "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-11313391cd32db35", "name": "Stray `console.log` in TS/JS \u2014 apps/chat-app/client/src/hooks/Input/useTextarea.ts:185", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/client/src/hooks/Input/useTextarea.ts:185"}, "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-8b3170525787e7aa", "name": "Stray `console.log` in TS/JS \u2014 apps/chat-app/client/src/hooks/Input/useTextToSpeechExternal.ts:65", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/client/src/hooks/Input/useTextToSpeechExternal.ts:65"}, "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-28fca25822d14280", "name": "TODO/FIXME marker in shipping code \u2014 apps/chat-app/client/src/hooks/SSE/useContentHandler.ts:55", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 apps/chat-app/client/src/hooks/SSE/useContentHandler.ts:55"}, "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-d12ecdf311fdc0db", "name": "Stray `console.log` in TS/JS \u2014 apps/chat-app/client/src/hooks/SSE/useSSE.ts:127", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/client/src/hooks/SSE/useSSE.ts:127"}, "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-31c0b231c8bfa58b", "name": "Stray `console.log` in TS/JS \u2014 apps/chat-app/client/src/hooks/Files/useDeleteFilesFromTable.tsx:24", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/client/src/hooks/Files/useDeleteFilesFromTable.tsx: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-6ba0f4d9b834c61a", "name": "TODO/FIXME marker in shipping code \u2014 apps/chat-app/client/src/hooks/Files/useFileHandling.ts:63", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 apps/chat-app/client/src/hooks/Files/useFileHandling.ts:63"}, "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-8cb01a7596c05f6f", "name": "Stray `console.log` in TS/JS \u2014 apps/chat-app/client/src/hooks/Files/useFileHandling.ts:99", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/client/src/hooks/Files/useFileHandling.ts:99"}, "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-3d1ff9855c0cb161", "name": "Stray `console.log` in TS/JS \u2014 apps/chat-app/client/src/hooks/Files/useFileDeletion.ts:42", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/client/src/hooks/Files/useFileDeletion.ts:42"}, "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-e10c5b54a406ebf5", "name": "Stray `console.log` in TS/JS \u2014 apps/chat-app/client/src/hooks/Files/useDragHelpers.ts:55", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/client/src/hooks/Files/useDragHelpers.ts:55"}, "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-55b444dd320e6490", "name": "Stray `console.log` in TS/JS \u2014 apps/chat-app/config/helpers.js:68", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/config/helpers.js:68"}, "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-b73fa297cc490339", "name": "Stray `console.log` in TS/JS \u2014 apps/chat-app/config/prepare.js:9", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/config/prepare.js:9"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-55df6b6a3cca65ea", "name": "Stray `console.log` in TS/JS \u2014 apps/chat-app/config/list-users.js:12", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/config/list-users.js: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-10a02190a8691a0f", "name": "Stray `console.log` in TS/JS \u2014 apps/chat-app/config/delete-banner.js:29", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/config/delete-banner.js: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-eec3c07d0ced0083", "name": "Stray `console.log` in TS/JS \u2014 apps/chat-app/config/reset-password.js:34", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/config/reset-password.js:34"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f9c0ab8168484cc3", "name": "Stray `console.log` in TS/JS \u2014 apps/chat-app/config/translations/comparisons.ts:27", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/config/translations/comparisons.ts:27"}, "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-ed715fe76fc7811a", "name": "Stray `console.log` in TS/JS \u2014 apps/chat-app/config/translations/embeddings.ts:21", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/config/translations/embeddings.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-9f2d58414b1f0ff7", "name": "Stray `console.log` in TS/JS \u2014 apps/chat-app/config/translations/file.ts:11", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/config/translations/file.ts:11"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3c47532c940e788e", "name": "Stray `console.log` in TS/JS \u2014 apps/chat-app/config/translations/process.ts:12", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/config/translations/process.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-34ff8171581f9b61", "name": "Stray `console.log` in TS/JS \u2014 apps/chat-app/config/translations/keys.ts:34", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/config/translations/keys.ts:34"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c77a9d9d02229aad", "name": "Stray `console.log` in TS/JS \u2014 apps/chat-app/config/translations/instructions.ts:73", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/config/translations/instructions.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-c789e8df3c7ef33d", "name": "Stray `console.log` in TS/JS \u2014 apps/chat-app/api/models/spendTokens.spec.js:276", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/api/models/spendTokens.spec.js:276"}, "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-156871caddf216bf", "name": "Stray `console.log` in TS/JS \u2014 apps/chat-app/api/models/convoStructure.spec.js:272", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/api/models/convoStructure.spec.js:272"}, "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-5131cd34d85a4296", "name": "TODO/FIXME marker in shipping code \u2014 apps/chat-app/api/models/Prompt.js:180", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 apps/chat-app/api/models/Prompt.js:180"}, "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-8a61e174f188adec", "name": "Stray `console.log` in TS/JS \u2014 apps/chat-app/api/cache/getLogStores.js:105", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/api/cache/getLogStores.js:105"}, "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-cef60fe1f8f2e0f6", "name": "TODO/FIXME marker in shipping code \u2014 apps/chat-app/api/app/clients/OpenAIClient.js:69", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 apps/chat-app/api/app/clients/OpenAIClient.js:69"}, "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-c45357e9f00da72e", "name": "TODO/FIXME marker in shipping code \u2014 apps/chat-app/api/app/clients/OllamaClient.js:149", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 apps/chat-app/api/app/clients/OllamaClient.js:149"}, "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-edaad2bbd2eb5e5a", "name": "Stray `console.log` in TS/JS \u2014 apps/chat-app/api/app/clients/memory/summaryBuffer.demo.js:21", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/api/app/clients/memory/summaryBuffer.demo.js: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-09a1a2613abb22a1", "name": "TODO/FIXME marker in shipping code \u2014 apps/chat-app/api/app/clients/tools/util/fileSearch.js:124", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 apps/chat-app/api/app/clients/tools/util/fileSearch.js:124"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7723437804266906", "name": "TODO/FIXME marker in shipping code \u2014 apps/chat-app/api/app/clients/tools/structured/OpenAIImageTools.js:258", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 apps/chat-app/api/app/clients/tools/structured/OpenAIImageTools.js:258"}, "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-597466dd796f8022", "name": "Stray `console.log` in TS/JS \u2014 apps/chat-app/api/app/clients/tools/structured/specs/openWeather.integration.test.js:9", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/api/app/clients/tools/structured/specs/openWeather.integration.test.js:9"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4247dbf9a9b5ad9e", "name": "TODO/FIXME marker in shipping code \u2014 apps/chat-app/api/app/clients/prompts/formatMessages.js:190", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 apps/chat-app/api/app/clients/prompts/formatMessages.js:190"}, "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-55b91f206f44d843", "name": "Stray `console.log` in TS/JS \u2014 apps/chat-app/api/app/clients/specs/OpenAIClient.tokens.js:74", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/api/app/clients/specs/OpenAIClient.tokens.js:74"}, "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-e2419565687ac03b", "name": "TODO/FIXME marker in shipping code \u2014 apps/chat-app/api/server/middleware/buildEndpointOption.js:84", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 apps/chat-app/api/server/middleware/buildEndpointOption.js:84"}, "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-a983ae8f8e45e9a4", "name": "Stray `console.log` in TS/JS \u2014 apps/chat-app/api/server/middleware/requireLdapAuth.js:6", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/api/server/middleware/requireLdapAuth.js: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-2c918069c52764c2", "name": "Stray `console.log` in TS/JS \u2014 apps/chat-app/api/server/utils/sendEmail.js:90", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/api/server/utils/sendEmail.js:90"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-803f3bd216234643", "name": "Stray `console.log` in TS/JS \u2014 apps/chat-app/api/server/utils/__tests__/staticCache.spec.js:29", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/api/server/utils/__tests__/staticCache.spec.js: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-1a385f92c43fceed", "name": "Stray `console.log` in TS/JS \u2014 apps/chat-app/api/server/utils/import/importers.spec.js:631", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/api/server/utils/import/importers.spec.js:631"}, "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-d7155762cf1917ca", "name": "TODO/FIXME marker in shipping code \u2014 apps/chat-app/api/server/routes/roles.js:22", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 apps/chat-app/api/server/routes/roles.js:22"}, "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-c8d159ca7527d4c3", "name": "TODO/FIXME marker in shipping code \u2014 apps/chat-app/api/server/routes/__tests__/config.spec.js:44", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 apps/chat-app/api/server/routes/__tests__/config.spec.js: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-942afeacf5a26496", "name": "TODO/FIXME marker in shipping code \u2014 apps/chat-app/api/server/routes/files/files.js:408", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 apps/chat-app/api/server/routes/files/files.js:408"}, "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-f018eea938885fe1", "name": "TODO/FIXME marker in shipping code \u2014 apps/chat-app/api/server/routes/files/images.js:29", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 apps/chat-app/api/server/routes/files/images.js: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-bc7e30b0e36a2783", "name": "TODO/FIXME marker in shipping code \u2014 apps/chat-app/api/server/routes/files/speech/tts.js:18", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 apps/chat-app/api/server/routes/files/speech/tts.js:18"}, "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-17267b171ec1f62e", "name": "TODO/FIXME marker in shipping code \u2014 apps/chat-app/api/server/routes/agents/actions.js:87", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 apps/chat-app/api/server/routes/agents/actions.js:87"}, "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-f44c21d838962581", "name": "TODO/FIXME marker in shipping code \u2014 apps/chat-app/api/server/controllers/assistants/chatV2.js:144", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 apps/chat-app/api/server/controllers/assistants/chatV2.js:144"}, "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-3ffdbb600d6579ed", "name": "TODO/FIXME marker in shipping code \u2014 apps/chat-app/api/server/controllers/assistants/chatV1.js:269", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 apps/chat-app/api/server/controllers/assistants/chatV1.js:269"}, "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-3aa274b5a01ff45c", "name": "TODO/FIXME marker in shipping code \u2014 apps/chat-app/api/server/controllers/agents/client.js:169", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 apps/chat-app/api/server/controllers/agents/client.js:169"}, "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-d13da30cbb6648a0", "name": "Stray `console.log` in TS/JS \u2014 apps/chat-app/api/server/services/PluginService.js:19", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/api/server/services/PluginService.js:19"}, "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-1cd6b2e009ff7da9", "name": "TODO/FIXME marker in shipping code \u2014 apps/chat-app/api/server/services/AssistantService.js:307", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 apps/chat-app/api/server/services/AssistantService.js:307"}, "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-2d1edd3d0b382591", "name": "TODO/FIXME marker in shipping code \u2014 apps/chat-app/api/server/services/ToolService.js:346", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 apps/chat-app/api/server/services/ToolService.js:346"}, "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-e556f4ab1fbe0acd", "name": "TODO/FIXME marker in shipping code \u2014 apps/chat-app/api/server/services/Endpoints/bedrock/initialize.js:37", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 apps/chat-app/api/server/services/Endpoints/bedrock/initialize.js:37"}, "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-ca6b33e7439155d0", "name": "TODO/FIXME marker in shipping code \u2014 apps/chat-app/api/server/services/Endpoints/agents/initialize.js:51", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 apps/chat-app/api/server/services/Endpoints/agents/initialize.js:51"}, "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-f8d3d7b8b382eda8", "name": "Stray `console.log` in TS/JS \u2014 apps/chat-app/api/server/services/Runs/handle.js:207", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/api/server/services/Runs/handle.js:207"}, "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-2c5da507ab5da34f", "name": "TODO/FIXME marker in shipping code \u2014 apps/chat-app/api/server/services/Config/getCachedTools.js:155", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 apps/chat-app/api/server/services/Config/getCachedTools.js:155"}, "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-aa80376469b6ae74", "name": "TODO/FIXME marker in shipping code \u2014 apps/chat-app/api/server/services/Config/loadCustomConfig.js:157", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 apps/chat-app/api/server/services/Config/loadCustomConfig.js:157"}, "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-d21f51209727b2ad", "name": "TODO/FIXME marker in shipping code \u2014 apps/chat-app/api/server/services/Threads/manage.js:65", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 apps/chat-app/api/server/services/Threads/manage.js:65"}, "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-9014e1a938d3d370", "name": "Stray `console.log` in TS/JS \u2014 apps/chat-app/api/server/services/Artifacts/update.spec.js:92", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/api/server/services/Artifacts/update.spec.js:92"}, "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-792affcb3ac99167", "name": "TODO/FIXME marker in shipping code \u2014 apps/chat-app/api/server/services/Files/process.js:71", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 apps/chat-app/api/server/services/Files/process.js:71"}, "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-deb9fd299eb3e287", "name": "Stray `console.log` in TS/JS \u2014 apps/chat-app/api/strategies/appleStrategy.test.js:81", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/api/strategies/appleStrategy.test.js:81"}, "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-166cbb0119b2789f", "name": "Stray `console.log` in TS/JS \u2014 apps/chat-app/api/strategies/validators.spec.js:400", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/api/strategies/validators.spec.js:400"}, "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-9b15fcfb2e5b3425", "name": "Stray `console.log` in TS/JS \u2014 apps/chat-app/packages/data-provider/server-rollup.config.js:11", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/packages/data-provider/server-rollup.config.js:11"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1f88250386aa8a49", "name": "TODO/FIXME marker in shipping code \u2014 apps/chat-app/packages/data-provider/src/config.ts:949", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 apps/chat-app/packages/data-provider/src/config.ts:949"}, "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-57b29b356c4e1943", "name": "TODO/FIXME marker in shipping code \u2014 apps/chat-app/packages/data-provider/src/parsers.ts:160", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 apps/chat-app/packages/data-provider/src/parsers.ts:160"}, "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-b48e5b8620e05331", "name": "TODO/FIXME marker in shipping code \u2014 apps/chat-app/packages/data-provider/src/actions.ts:264", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 apps/chat-app/packages/data-provider/src/actions.ts:264"}, "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-95c674ca7fef5ffa", "name": "Stray `console.log` in TS/JS \u2014 apps/chat-app/packages/data-provider/src/request.ts:133", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/packages/data-provider/src/request.ts:133"}, "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-3fe8a75ab1677067", "name": "TODO/FIXME marker in shipping code \u2014 apps/chat-app/packages/data-provider/src/types.ts:156", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 apps/chat-app/packages/data-provider/src/types.ts:156"}, "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-31e218ec563a7fd2", "name": "Stray `console.log` in TS/JS \u2014 apps/chat-app/e2e/setup/cleanupUser.ts:14", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/e2e/setup/cleanupUser.ts:14"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1ee6cfdc2c3d55fc", "name": "Stray `console.log` in TS/JS \u2014 apps/chat-app/e2e/setup/authenticate.ts:37", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/e2e/setup/authenticate.ts:37"}, "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-6abc376ddf1bc32d", "name": "Stray `console.log` in TS/JS \u2014 apps/chat-app/e2e/specs/settings.spec.ts:38", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/e2e/specs/settings.spec.ts:38"}, "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-88936143975efc39", "name": "Stray `console.log` in TS/JS \u2014 apps/chat-app/e2e/specs/messages.spec.ts:32", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/e2e/specs/messages.spec.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-7dec8ecbaa616bdb", "name": "Stray `console.log` in TS/JS \u2014 .claude/hooks/secrets-scanner.js:57", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 .claude/hooks/secrets-scanner.js: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-6595f400766de3e6", "name": "Stray `console.log` in TS/JS \u2014 .claude/hooks/commit-guard.js:36", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 .claude/hooks/commit-guard.js: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-8db5fe183cdcc5a5", "name": "Stray `console.log` in TS/JS \u2014 .claude/hooks/bash-safety.js:19", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 .claude/hooks/bash-safety.js:19"}, "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-e49177e2103dbbc5", "name": "Privileged port 256 in use", "shortDescription": {"text": "Privileged port 256 in use"}, "fullDescription": {"text": "Port 256 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-08d718f4706c9580", "name": "Privileged port 86 in use", "shortDescription": {"text": "Privileged port 86 in use"}, "fullDescription": {"text": "Port 86 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-a19c134bf044d7e0", "name": "Docker base image is tag-pinned but not digest-pinned: node:20-alpine", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: node:20-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-7b36cd4b638201fa", "name": "Dockerfile runs as root: apps/chat-app/.devcontainer/Dockerfile", "shortDescription": {"text": "Dockerfile runs as root: apps/chat-app/.devcontainer/Dockerfile"}, "fullDescription": {"text": "No non-root USER set. Containers running as root expand the blast radius of any vulnerability inside the image."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b0e330008d290485", "name": "Docker base image is tag-pinned but not digest-pinned: node:18-bullseye", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: node:18-bullseye"}, "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-6d6e48b48b820f85", "name": "Insecure pattern 'weak_hash' in apps/control-plane/internal/payments/sslcommerz/rail.go:6", "shortDescription": {"text": "Insecure pattern 'weak_hash' in apps/control-plane/internal/payments/sslcommerz/rail.go:6"}, "fullDescription": {"text": "Found a known-risky pattern (weak_hash). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-5762d76a31d74e62", "name": "Insecure pattern 'direct_innerhtml_assignment' in apps/chat-app/client/index.html:40", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in apps/chat-app/client/index.html:40"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-16dc1433a6dc91ab", "name": "Insecure pattern 'direct_innerhtml_assignment' in apps/chat-app/client/src/utils/mermaid.ts:62", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in apps/chat-app/client/src/utils/mermaid.ts:62"}, "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-09ea2affb2e581b7", "name": "Possible secret in apps/chat-app/client/src/components/Auth/__tests__/LoginForm.spec.tsx", "shortDescription": {"text": "Possible secret in apps/chat-app/client/src/components/Auth/__tests__/LoginForm.spec.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-f89ca97f4a309b43", "name": "Insecure pattern 'dangerous_innerhtml' in apps/chat-app/client/src/components/ui/MCP/CustomUserVarsSection.tsx:70", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in apps/chat-app/client/src/components/ui/MCP/CustomUserVarsSection.tsx:70"}, "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-27aa03f077e4ab9d", "name": "Insecure pattern 'dangerous_innerhtml' in apps/chat-app/client/src/components/Plugins/Store/PluginTooltip.tsx:15", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in apps/chat-app/client/src/components/Plugins/Store/PluginTooltip.tsx:15"}, "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-2193ae92ef41bfde", "name": "Insecure pattern 'direct_innerhtml_assignment' in apps/chat-app/client/src/components/Artifacts/Mermaid.tsx:59", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in apps/chat-app/client/src/components/Artifacts/Mermaid.tsx:59"}, "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-554e589aafa44cb8", "name": "Insecure pattern 'dangerous_innerhtml' in apps/chat-app/client/src/components/Banners/Banner.tsx:36", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in apps/chat-app/client/src/components/Banners/Banner.tsx:36"}, "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-302cf8f32f31a50c", "name": "Insecure pattern 'node_child_process' in apps/chat-app/config/helpers.js:8", "shortDescription": {"text": "Insecure pattern 'node_child_process' in apps/chat-app/config/helpers.js:8"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-1e4d0181bb904941", "name": "Insecure pattern 'exec_used' in apps/chat-app/config/prepare.js:4", "shortDescription": {"text": "Insecure pattern 'exec_used' in apps/chat-app/config/prepare.js:4"}, "fullDescription": {"text": "Found a known-risky pattern (exec_used). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-edfee8f2a99d7edf", "name": "Insecure pattern 'node_child_process' in apps/chat-app/config/prepare.js:1", "shortDescription": {"text": "Insecure pattern 'node_child_process' in apps/chat-app/config/prepare.js: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-3840c32d46dd0fec", "name": "Insecure pattern 'node_child_process' in apps/chat-app/config/deployed-update.js:1", "shortDescription": {"text": "Insecure pattern 'node_child_process' in apps/chat-app/config/deployed-update.js: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-e459d8565b45d3dc", "name": "Insecure pattern 'node_child_process' in apps/chat-app/config/packages.js:5", "shortDescription": {"text": "Insecure pattern 'node_child_process' in apps/chat-app/config/packages.js: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-8dc66c5265932c7a", "name": "Insecure pattern 'node_child_process' in apps/chat-app/config/update.js:4", "shortDescription": {"text": "Insecure pattern 'node_child_process' in apps/chat-app/config/update.js:4"}, "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-b982a58b871dd25c", "name": "Insecure pattern 'node_child_process' in apps/chat-app/config/stop-backend.js:2", "shortDescription": {"text": "Insecure pattern 'node_child_process' in apps/chat-app/config/stop-backend.js:2"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3d1cf442981fac4f", "name": "Insecure pattern 'exec_used' in apps/chat-app/config/translations/comparisons.ts:34", "shortDescription": {"text": "Insecure pattern 'exec_used' in apps/chat-app/config/translations/comparisons.ts:34"}, "fullDescription": {"text": "Found a known-risky pattern (exec_used). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-68788838b4e7763c", "name": "Insecure pattern 'node_child_process' in apps/chat-app/config/translations/comparisons.ts:3", "shortDescription": {"text": "Insecure pattern 'node_child_process' in apps/chat-app/config/translations/comparisons.ts:3"}, "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-04fcf53f5488ac33", "name": "Possible secret in apps/chat-app/api/server/index.spec.js", "shortDescription": {"text": "Possible secret in apps/chat-app/api/server/index.spec.js"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-0b7ebca83c9ba499", "name": "Insecure pattern 'cors_wildcard' in apps/chat-app/api/server/index.js:61", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in apps/chat-app/api/server/index.js:61"}, "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-00026b8ca905daae", "name": "Insecure pattern 'cors_wildcard' in apps/chat-app/api/server/middleware/setHeaders.js:6", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in apps/chat-app/api/server/middleware/setHeaders.js:6"}, "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-0dd6a44948714cfe", "name": "Insecure pattern 'eval_used' in apps/chat-app/api/server/services/AuthService.js:415", "shortDescription": {"text": "Insecure pattern 'eval_used' in apps/chat-app/api/server/services/AuthService.js:415"}, "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-0518b6ba77ce2943", "name": "Possible secret in apps/chat-app/api/server/services/Config/loadConfigModels.spec.js", "shortDescription": {"text": "Possible secret in apps/chat-app/api/server/services/Config/loadConfigModels.spec.js"}, "fullDescription": {"text": "Detected pattern matching generic_api_key. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-d92f9f885e683a77", "name": "Possible secret in apps/chat-app/api/server/services/start/checks.spec.js", "shortDescription": {"text": "Possible secret in apps/chat-app/api/server/services/start/checks.spec.js"}, "fullDescription": {"text": "Detected pattern matching generic_api_key. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-7e88797aba36b133", "name": "Possible secret in apps/chat-app/api/strategies/validators.spec.js", "shortDescription": {"text": "Possible secret in apps/chat-app/api/strategies/validators.spec.js"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-fc208dea8d4c3f79", "name": "Insecure pattern 'eval_used' in apps/chat-app/api/strategies/openIdJwtStrategy.js:21", "shortDescription": {"text": "Insecure pattern 'eval_used' in apps/chat-app/api/strategies/openIdJwtStrategy.js:21"}, "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-993c86ee48d89a66", "name": "Possible secret in apps/chat-app/packages/api/src/mcp/mcp.spec.ts", "shortDescription": {"text": "Possible secret in apps/chat-app/packages/api/src/mcp/mcp.spec.ts"}, "fullDescription": {"text": "Detected pattern matching github_token. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-f899bdcf82da0e21", "name": "Insecure pattern 'eval_used' in apps/chat-app/packages/api/src/utils/math.ts:35", "shortDescription": {"text": "Insecure pattern 'eval_used' in apps/chat-app/packages/api/src/utils/math.ts:35"}, "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-48faf7c1a58ab57c", "name": "Insecure pattern 'private_key_in_repo' in apps/chat-app/packages/api/src/utils/key.test.ts:19", "shortDescription": {"text": "Insecure pattern 'private_key_in_repo' in apps/chat-app/packages/api/src/utils/key.test.ts:19"}, "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-2354b6a9cfe27950", "name": "Possible secret in apps/chat-app/packages/api/src/files/mistral/crud.spec.ts", "shortDescription": {"text": "Possible secret in apps/chat-app/packages/api/src/files/mistral/crud.spec.ts"}, "fullDescription": {"text": "Detected pattern matching generic_api_key. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-12ce04aea6d1c782", "name": "Possible secret in apps/chat-app/packages/api/src/web/web.spec.ts", "shortDescription": {"text": "Possible secret in apps/chat-app/packages/api/src/web/web.spec.ts"}, "fullDescription": {"text": "Detected pattern matching generic_api_key. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-049410a02c958023", "name": "Insecure pattern 'eval_used' in apps/chat-app/packages/data-schemas/src/methods/user.ts:152", "shortDescription": {"text": "Insecure pattern 'eval_used' in apps/chat-app/packages/data-schemas/src/methods/user.ts:152"}, "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-b98e763d8275ddc8", "name": "Insecure pattern 'eval_used' in apps/chat-app/packages/data-schemas/src/methods/session.ts:16", "shortDescription": {"text": "Insecure pattern 'eval_used' in apps/chat-app/packages/data-schemas/src/methods/session.ts:16"}, "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-e5d45653f10919fa", "name": "Insecure pattern 'exec_used' in scripts/seed-demo/main.go:150", "shortDescription": {"text": "Insecure pattern 'exec_used' in scripts/seed-demo/main.go:150"}, "fullDescription": {"text": "Found a known-risky pattern (exec_used). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-151526e8307fe6e4", "name": "Insecure pattern 'node_child_process' in packages/openai-contract/scripts/lint-no-customer-usd.test.mjs:7", "shortDescription": {"text": "Insecure pattern 'node_child_process' in packages/openai-contract/scripts/lint-no-customer-usd.test.mjs:7"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4d56323ae3bfe117", "name": "Possible secret in supabase/functions/e2e-fixtures/index.ts", "shortDescription": {"text": "Possible secret in supabase/functions/e2e-fixtures/index.ts"}, "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-78e9b2844c27deeb", "name": "Insecure pattern 'node_child_process' in tools/lint-no-direct-tenant-setting.mjs:7", "shortDescription": {"text": "Insecure pattern 'node_child_process' in tools/lint-no-direct-tenant-setting.mjs:7"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e2286d7e698b2396", "name": "Insecure pattern 'node_child_process' in tools/lint-no-direct-audit-write.mjs:6", "shortDescription": {"text": "Insecure pattern 'node_child_process' in tools/lint-no-direct-audit-write.mjs:6"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b5522a1aa3e17fe4", "name": "Insecure pattern 'node_child_process' in tools/lint-no-direct-tenant-id.mjs:7", "shortDescription": {"text": "Insecure pattern 'node_child_process' in tools/lint-no-direct-tenant-id.mjs:7"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2409b4ec264ffa72", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a33ba7e025cc67bc", "name": "GitHub Actions workflow grants broad write permissions", "shortDescription": {"text": "GitHub Actions workflow grants broad write permissions"}, "fullDescription": {"text": "CI tokens with write permissions increase blast radius when an action, dependency, or PR workflow is compromised. Prefer job-level least-privilege permissions."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2ef76ee3691c0fbd", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@v3 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-bbd38b7b8281fe81", "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-5297ebc2162660b1", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9761170cd7912894", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0ea920247bb94c78", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-fb326d819e23a985", "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-106bbf1e699e8390", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-eddfed6e65b447f7", "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-d8ef459ea9a61554", "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-dc4a7d94b52dd1ea", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e80a34f9c3185ce5", "name": "GitHub Actions workflow grants broad write permissions", "shortDescription": {"text": "GitHub Actions workflow grants broad write permissions"}, "fullDescription": {"text": "CI tokens with write permissions increase blast radius when an action, dependency, or PR workflow is compromised. Prefer job-level least-privilege permissions."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-537649d62b96a481", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b250f851cdfddfb9", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-fa75f9efb3bc2c7c", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4b65e7b558f055ed", "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-54e85c2b63e3ed76", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6186bcf3bb32b5cc", "name": "GitHub Actions workflow grants broad write permissions", "shortDescription": {"text": "GitHub Actions workflow grants broad write permissions"}, "fullDescription": {"text": "CI tokens with write permissions increase blast radius when an action, dependency, or PR workflow is compromised. Prefer job-level least-privilege permissions."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4e540d481ba6d6b3", "name": "GitHub Action tracks a moving branch", "shortDescription": {"text": "GitHub Action tracks a moving branch"}, "fullDescription": {"text": "actions/checkout@main can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1145d16416bb3758", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "azure/login@v1 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-bf1a07b4fb979881", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1a75d9cc3c0c4cc1", "name": "GitHub Actions workflow grants broad write permissions", "shortDescription": {"text": "GitHub Actions workflow grants broad write permissions"}, "fullDescription": {"text": "CI tokens with write permissions increase blast radius when an action, dependency, or PR workflow is compromised. Prefer job-level least-privilege permissions."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3b088b0a371a90d6", "name": "GitHub Actions workflow grants broad write permissions", "shortDescription": {"text": "GitHub Actions workflow grants broad write permissions"}, "fullDescription": {"text": "CI tokens with write permissions increase blast radius when an action, dependency, or PR workflow is compromised. Prefer job-level least-privilege permissions."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-36fd3c86ff87e5ff", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "docker/login-action@v3 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a629b120390fd551", "name": "GitHub Actions workflow grants broad write permissions", "shortDescription": {"text": "GitHub Actions workflow grants broad write permissions"}, "fullDescription": {"text": "CI tokens with write permissions increase blast radius when an action, dependency, or PR workflow is compromised. Prefer job-level least-privilege permissions."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-27924aa79fa4a517", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "docker/bake-action@v6 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-48090f6675fa2e68", "name": "Very large file: apps/web-console/lib/control-plane/client.ts (2069 lines)", "shortDescription": {"text": "Very large file: apps/web-console/lib/control-plane/client.ts (2069 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-15d4c3481bfbe57f", "name": "Very large file: apps/chat-app/api/typedefs.js (1983 lines)", "shortDescription": {"text": "Very large file: apps/chat-app/api/typedefs.js (1983 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d54615e9d60de1eb", "name": "Very large file: apps/chat-app/api/models/Agent.spec.js (2660 lines)", "shortDescription": {"text": "Very large file: apps/chat-app/api/models/Agent.spec.js (2660 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3a2bafdf1961fd1a", "name": "Very large file: apps/chat-app/api/app/clients/OpenAIClient.js (1565 lines)", "shortDescription": {"text": "Very large file: apps/chat-app/api/app/clients/OpenAIClient.js (1565 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d53540c7c38ef352", "name": "Very large file: apps/chat-app/packages/api/src/mcp/zod.spec.ts (1818 lines)", "shortDescription": {"text": "Very large file: apps/chat-app/packages/api/src/mcp/zod.spec.ts (1818 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7b66beec156931fa", "name": "Very large file: apps/chat-app/packages/data-provider/src/artifacts.ts (3104 lines)", "shortDescription": {"text": "Very large file: apps/chat-app/packages/data-provider/src/artifacts.ts (3104 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ea3b5e389d8c9c0f", "name": "Low test-to-source ratio", "shortDescription": {"text": "Low test-to-source ratio"}, "fullDescription": {"text": "257 tests / 1999 src (ratio 0.13)."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4fc6e967d4418d48", "name": "98 TODO/FIXME markers", "shortDescription": {"text": "98 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-b3ed68815bca2f8c", "name": "Node manifest has dependencies but no lockfile: package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: 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-6113d41f93c2bcd7", "name": "Node manifest has dependencies but no lockfile: apps/chat-app/client/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: apps/chat-app/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-e26a24633365fd74", "name": "Node manifest has dependencies but no lockfile: apps/chat-app/api/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: apps/chat-app/api/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-649e6366e41281d2", "name": "Node manifest has dependencies but no lockfile: apps/chat-app/packages/api/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: apps/chat-app/packages/api/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-fb2fe7a242ad9d87", "name": "Node manifest has dependencies but no lockfile: apps/chat-app/packages/data-provider/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: apps/chat-app/packages/data-provider/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-eb92484a26ebc358", "name": "Node manifest has dependencies but no lockfile: apps/chat-app/packages/data-provider/react-query/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: apps/chat-app/packages/data-provider/react-query/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-711a9e3b69417836", "name": "Node manifest has dependencies but no lockfile: apps/chat-app/packages/data-schemas/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: apps/chat-app/packages/data-schemas/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-51c8fc43b8e5d29e", "name": "Node manifest has dependencies but no lockfile: website/sovereign/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: website/sovereign/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-4e47ca3c3b6ff22d", "name": "Node manifest has dependencies but no lockfile: packages/sdk-tests/js/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/sdk-tests/js/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 198 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 416 placeholder/mock markers across 139 source files. This often means the repo looks complete while core flows still use generated scaffolding or fake data."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9d79c4077342a7d0", "name": "Runtime service client appears to use placeholder configuration", "shortDescription": {"text": "Runtime service client appears to use placeholder configuration"}, "fullDescription": {"text": "A runtime source file appears to wire Supabase/Firebase/AI/payment-style clients to placeholder URLs, keys, or fallback values. In the Fable corpus this often means the UI/API shape is present while the backend service is not actually configured."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2d0c7b7ab8f8aacf", "name": "Critical user flow still appears backed by mock or placeholder data", "shortDescription": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "fullDescription": {"text": "A payment/auth/admin/order/billing-style flow contains mock, fake, TODO, dummy, or placeholder markers in runtime source. In the Fable corpus this is a high-leverage completeness smell: the app can look finished while the money, identity, or tenant flow is still scaffolded."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-749d4bc1bd66df5f", "name": "Agent instructions exist but release-hardening basics are missing", "shortDescription": {"text": "Agent instructions exist but release-hardening basics are missing"}, "fullDescription": {"text": "AI-coder instruction files were found, but the repo is missing lockfile. Treat this as a contract gap: the agent is guided, but the generated output is not yet guarded by the controls that make it repeatable."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ea8f3013f588db25", "name": "Shallow git history limits provenance confidence", "shortDescription": {"text": "Shallow git history limits provenance confidence"}, "fullDescription": {"text": "The repository is a shallow clone. Origin/evolution analysis cannot distinguish fresh generation, imported legacy code, or long-lived human code with high confidence."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8424db9c75e04ba4", "name": "Very short observed git history", "shortDescription": {"text": "Very short observed git history"}, "fullDescription": {"text": "The repo has multiple source files but two or fewer visible commits. This is not a failure by itself, but it lowers confidence in evolution-based diagnosis."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ef9c1b1c3284b4a1", "name": "Agent authority lacks a verifier contract: .claude/skills/memory-tools.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/skills/memory-tools.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3443af2a9beda06a", "name": "Agent authority lacks a verifier contract: .claude/skills/explore-codebase.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/skills/explore-codebase.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-081889b478a0b8ac", "name": "Commented-code block (5 lines) in apps/web-console/middleware.ts:52", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web-console/middleware.ts:52"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-145f85cd539426c6", "name": "Commented-code block (6 lines) in apps/web-console/tests/unit/invoice-decode.test.ts:7", "shortDescription": {"text": "Commented-code block (6 lines) in apps/web-console/tests/unit/invoice-decode.test.ts:7"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1f5cdd9b2f5062ab", "name": "Commented-code block (5 lines) in apps/web-console/tests/unit/viewer-gates.test.ts:5", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web-console/tests/unit/viewer-gates.test.ts:5"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a972ac12491ee8d1", "name": "Commented-code block (12 lines) in apps/web-console/tests/unit/permissions.parity.test.ts:35", "shortDescription": {"text": "Commented-code block (12 lines) in apps/web-console/tests/unit/permissions.parity.test.ts:35"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0196640d6c206fe6", "name": "Commented-code block (6 lines) in apps/web-console/tests/e2e/billing-fx-zero-leak.spec.ts:9", "shortDescription": {"text": "Commented-code block (6 lines) in apps/web-console/tests/e2e/billing-fx-zero-leak.spec.ts:9"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c693043ab77a306c", "name": "Commented-code block (6 lines) in apps/web-console/tests/e2e/console-billing.spec.ts:10", "shortDescription": {"text": "Commented-code block (6 lines) in apps/web-console/tests/e2e/console-billing.spec.ts:10"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8bcba51095f86769", "name": "Commented-code block (11 lines) in apps/web-console/tests/e2e/console-fx-guard.spec.ts:15", "shortDescription": {"text": "Commented-code block (11 lines) in apps/web-console/tests/e2e/console-fx-guard.spec.ts:15"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5f633a5c0ac0102b", "name": "Commented-code block (7 lines) in apps/web-console/tests/e2e/support/e2e-auth-fixtures.mjs:110", "shortDescription": {"text": "Commented-code block (7 lines) in apps/web-console/tests/e2e/support/e2e-auth-fixtures.mjs:110"}, "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-2a4139e794b36894", "name": "Commented-code block (5 lines) in apps/web-console/tests/e2e/support/reset-profile.ts:3", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web-console/tests/e2e/support/reset-profile.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-8e6b09b450a472bb", "name": "Commented-code block (6 lines) in apps/web-console/components/app-shell/console-shell.tsx:105", "shortDescription": {"text": "Commented-code block (6 lines) in apps/web-console/components/app-shell/console-shell.tsx:105"}, "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-31629889acbc57af", "name": "Commented-code block (6 lines) in apps/web-console/components/billing/checkout-modal.tsx:94", "shortDescription": {"text": "Commented-code block (6 lines) in apps/web-console/components/billing/checkout-modal.tsx:94"}, "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-10103f1c32a15175", "name": "Commented-code block (6 lines) in apps/web-console/components/billing/checkout-modal.test.tsx:103", "shortDescription": {"text": "Commented-code block (6 lines) in apps/web-console/components/billing/checkout-modal.test.tsx:103"}, "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-3fbf23c9f1781ac2", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web-console/components/api-keys/api-key-create-form.tsx:69", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web-console/components/api-keys/api-key-create-form.tsx:69"}, "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-a629a4838f1a7b39", "name": "Commented-code block (5 lines) in apps/web-console/app/layout.tsx:23", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web-console/app/layout.tsx:23"}, "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-06694707f156845d", "name": "Commented-code block (8 lines) in apps/web-console/app/auth/callback/route.ts:53", "shortDescription": {"text": "Commented-code block (8 lines) in apps/web-console/app/auth/callback/route.ts:53"}, "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-4509262ea6ede160", "name": "Commented-code block (5 lines) in apps/web-console/app/auth/sign-out/route.ts:15", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web-console/app/auth/sign-out/route.ts:15"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a862b09cedbbeb21", "name": "Commented-code block (7 lines) in apps/web-console/app/api/auth/signup-precheck/route.ts:3", "shortDescription": {"text": "Commented-code block (7 lines) in apps/web-console/app/api/auth/signup-precheck/route.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-91ef29b7e01c3086", "name": "Commented-code block (5 lines) in apps/web-console/app/api/console/members/route.ts:10", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web-console/app/api/console/members/route.ts:10"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d04e9b08f828383e", "name": "Commented-code block (7 lines) in apps/web-console/app/console/layout.tsx:16", "shortDescription": {"text": "Commented-code block (7 lines) in apps/web-console/app/console/layout.tsx:16"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-970cb903d3d8b396", "name": "Commented-code block (5 lines) in apps/web-console/app/console/api-keys/[id]/limits/page.tsx:28", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web-console/app/console/api-keys/[id]/limits/page.tsx:28"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4f62222a3217f54f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web-console/app/console/api-keys/[id]/limits/page.tsx:21", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web-console/app/console/api-keys/[id]/limits/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-4f10e18963068548", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web-console/lib/api-keys.ts:104", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web-console/lib/api-keys.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-01433494fcd18162", "name": "Commented-code block (5 lines) in apps/web-console/lib/http/origin.ts:3", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web-console/lib/http/origin.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-9599c09ae1efd7e6", "name": "Commented-code block (5 lines) in apps/web-console/lib/control-plane/client.ts:538", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web-console/lib/control-plane/client.ts:538"}, "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-2ac1a28a3f6fa2e7", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web-console/lib/control-plane/client.ts:423", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web-console/lib/control-plane/client.ts:423"}, "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-e72954cb53766a69", "name": "Commented-code block (5 lines) in apps/web-console/lib/control-plane/types.ts:3", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web-console/lib/control-plane/types.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-44fcb8b954a1a984", "name": "Commented-code block (23 lines) in apps/chat-app/eslint.config.mjs:146", "shortDescription": {"text": "Commented-code block (23 lines) in apps/chat-app/eslint.config.mjs:146"}, "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-77777a1c5fc070f1", "name": "Commented-code block (10 lines) in apps/chat-app/client/jest.config.cjs:15", "shortDescription": {"text": "Commented-code block (10 lines) in apps/chat-app/client/jest.config.cjs:15"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-211d22f20ebeffb5", "name": "Commented-code block (5 lines) in apps/chat-app/client/src/utils/files.ts:68", "shortDescription": {"text": "Commented-code block (5 lines) in apps/chat-app/client/src/utils/files.ts:68"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b98ae2840ce72c45", "name": "Commented-code block (8 lines) in apps/chat-app/client/src/utils/artifacts.ts:45", "shortDescription": {"text": "Commented-code block (8 lines) in apps/chat-app/client/src/utils/artifacts.ts:45"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a3707bb3a3bea3cc", "name": "Commented-code block (12 lines) in apps/chat-app/client/src/components/Auth/__tests__/Registration.spec.tsx:159", "shortDescription": {"text": "Commented-code block (12 lines) in apps/chat-app/client/src/components/Auth/__tests__/Registration.spec.tsx:159"}, "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-836d55fbb98d5825", "name": "Commented-code block (8 lines) in apps/chat-app/client/src/components/Chat/Menus/Endpoints/CustomMenu.tsx:191", "shortDescription": {"text": "Commented-code block (8 lines) in apps/chat-app/client/src/components/Chat/Menus/Endpoints/CustomMenu.tsx:191"}, "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-90b3b9f1a6f4a73d", "name": "Legacy-named symbol `com_endpoint_deprecated` in apps/chat-app/client/src/components/Chat/Menus/Endpoints/components/End", "shortDescription": {"text": "Legacy-named symbol `com_endpoint_deprecated` in apps/chat-app/client/src/components/Chat/Menus/Endpoints/components/EndpointItem.tsx:94"}, "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-11f438c77961fcac", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/chat-app/client/src/components/Chat/Input/StreamAudio.tsx:96", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/chat-app/client/src/components/Chat/Input/StreamAudio.tsx:96"}, "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-a9f1e12f699bce32", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/chat-app/client/src/components/Chat/Messages/Content/DialogImage.tsx:", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/chat-app/client/src/components/Chat/Messages/Content/DialogImage.tsx:40"}, "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-51f89fcd6e0b0e20", "name": "Commented-code block (9 lines) in apps/chat-app/client/src/components/Chat/Messages/Content/ImageGen.tsx:20", "shortDescription": {"text": "Commented-code block (9 lines) in apps/chat-app/client/src/components/Chat/Messages/Content/ImageGen.tsx:20"}, "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-506b1a4015514539", "name": "Commented-code block (12 lines) in apps/chat-app/client/src/components/ui/InputNumber.tsx:32", "shortDescription": {"text": "Commented-code block (12 lines) in apps/chat-app/client/src/components/ui/InputNumber.tsx:32"}, "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-a38f093245daf28a", "name": "Commented-code block (9 lines) in apps/chat-app/client/src/components/SidePanel/Agents/ActionsTable/Columns.tsx:45", "shortDescription": {"text": "Commented-code block (9 lines) in apps/chat-app/client/src/components/SidePanel/Agents/ActionsTable/Columns.tsx:45"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d6f7134071aaf558", "name": "Commented-code block (5 lines) in apps/chat-app/client/src/components/SidePanel/Parameters/Panel.tsx:57", "shortDescription": {"text": "Commented-code block (5 lines) in apps/chat-app/client/src/components/SidePanel/Parameters/Panel.tsx:57"}, "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-97dc703c096d1b4a", "name": "Commented-code block (9 lines) in apps/chat-app/client/src/components/SidePanel/Builder/ActionsTable/Columns.tsx:45", "shortDescription": {"text": "Commented-code block (9 lines) in apps/chat-app/client/src/components/SidePanel/Builder/ActionsTable/Columns.tsx:45"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ce648543b042b9c5", "name": "Legacy-named symbol `hive_locale_v1` in apps/chat-app/client/src/components/Nav/LanguagePicker/FirstRunLanguageModal.tsx", "shortDescription": {"text": "Legacy-named symbol `hive_locale_v1` in apps/chat-app/client/src/components/Nav/LanguagePicker/FirstRunLanguageModal.tsx: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-9af50e3d44dc2757", "name": "Legacy-named symbol `com_ui_regenerate_backup` in apps/chat-app/client/src/components/Nav/SettingsTabs/Account/BackupCod", "shortDescription": {"text": "Legacy-named symbol `com_ui_regenerate_backup` in apps/chat-app/client/src/components/Nav/SettingsTabs/Account/BackupCodesItem.tsx:168"}, "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-11e3e7ab4fbf9833", "name": "Legacy-named symbol `com_ui_download_backup` in apps/chat-app/client/src/components/Nav/SettingsTabs/Account/TwoFactorPh", "shortDescription": {"text": "Legacy-named symbol `com_ui_download_backup` in apps/chat-app/client/src/components/Nav/SettingsTabs/Account/TwoFactorPhases/BackupPhase.tsx:52"}, "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-994dda9aca3ea121", "name": "Legacy-named symbol `hive_locale_v1` in apps/chat-app/client/src/hooks/useFirstRunLocale.ts:11", "shortDescription": {"text": "Legacy-named symbol `hive_locale_v1` in apps/chat-app/client/src/hooks/useFirstRunLocale.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-6575f439a867b6e3", "name": "Commented-code block (6 lines) in apps/chat-app/client/src/hooks/useChatBadges.ts:18", "shortDescription": {"text": "Commented-code block (6 lines) in apps/chat-app/client/src/hooks/useChatBadges.ts:18"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0a1840774c2af3d9", "name": "Commented-code block (9 lines) in apps/chat-app/client/src/hooks/Chat/useChatHelpers.ts:58", "shortDescription": {"text": "Commented-code block (9 lines) in apps/chat-app/client/src/hooks/Chat/useChatHelpers.ts:58"}, "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-9836a28a4b6a7b75", "name": "Commented-code block (5 lines) in apps/chat-app/client/src/store/submission.ts:8", "shortDescription": {"text": "Commented-code block (5 lines) in apps/chat-app/client/src/store/submission.ts:8"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7817683515e299c3", "name": "Commented-code block (15 lines) in apps/chat-app/api/typedefs.js:1641", "shortDescription": {"text": "Commented-code block (15 lines) in apps/chat-app/api/typedefs.js:1641"}, "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-48696985006857da", "name": "Commented-code block (5 lines) in apps/chat-app/api/models/Transaction.js:77", "shortDescription": {"text": "Commented-code block (5 lines) in apps/chat-app/api/models/Transaction.js:77"}, "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-6224c966f4340671", "name": "Commented-code block (8 lines) in apps/chat-app/api/test/__mocks__/openid-client.js:29", "shortDescription": {"text": "Commented-code block (8 lines) in apps/chat-app/api/test/__mocks__/openid-client.js:29"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b857ba50cc0aeb06", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/chat-app/api/app/clients/BaseClient.js:132", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/chat-app/api/app/clients/BaseClient.js: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-1bdd6de402a933e2", "name": "Commented-code block (7 lines) in apps/chat-app/api/app/clients/agents/CustomAgent/outputParser.js:48", "shortDescription": {"text": "Commented-code block (7 lines) in apps/chat-app/api/app/clients/agents/CustomAgent/outputParser.js:48"}, "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-67e782e55b59698e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/chat-app/api/app/clients/tools/structured/GoogleSearch.js:51", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/chat-app/api/app/clients/tools/structured/GoogleSearch.js: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-de954ae937e0b5b8", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/chat-app/api/app/clients/tools/structured/TavilySearch.js:22", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/chat-app/api/app/clients/tools/structured/TavilySearch.js: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-3994f179dcd96309", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/chat-app/api/app/clients/tools/structured/TavilySearchResults.js:105", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/chat-app/api/app/clients/tools/structured/TavilySearchResults.js:105"}, "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-c61764a636bdf16a", "name": "Commented-code block (26 lines) in apps/chat-app/api/app/clients/tools/structured/Wolfram.js:16", "shortDescription": {"text": "Commented-code block (26 lines) in apps/chat-app/api/app/clients/tools/structured/Wolfram.js:16"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-08ca5bf9353e3502", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/chat-app/api/app/clients/tools/structured/OpenWeather.js:100", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/chat-app/api/app/clients/tools/structured/OpenWeather.js:100"}, "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-da0169a9f581f20e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/chat-app/api/app/clients/tools/structured/FluxAPI.js:300", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/chat-app/api/app/clients/tools/structured/FluxAPI.js: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-455db9b92a321fb0", "name": "Commented-code block (12 lines) in apps/chat-app/api/app/clients/tools/structured/DALLE3.js:62", "shortDescription": {"text": "Commented-code block (12 lines) in apps/chat-app/api/app/clients/tools/structured/DALLE3.js:62"}, "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-eadb35b33a3a3188", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/chat-app/api/app/clients/tools/structured/DALLE3.js:168", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/chat-app/api/app/clients/tools/structured/DALLE3.js: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-d8b4ab6c7f056fa4", "name": "Commented-code block (9 lines) in apps/chat-app/api/app/clients/tools/structured/StableDiffusion.js:37", "shortDescription": {"text": "Commented-code block (9 lines) in apps/chat-app/api/app/clients/tools/structured/StableDiffusion.js:37"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ea0fbfb0abeeb7e5", "name": "Commented-code block (5 lines) in apps/chat-app/api/server/controllers/UserController.js:106", "shortDescription": {"text": "Commented-code block (5 lines) in apps/chat-app/api/server/controllers/UserController.js:106"}, "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-36cee926634a2c72", "name": "Commented-code block (5 lines) in apps/chat-app/api/server/controllers/agents/client.js:169", "shortDescription": {"text": "Commented-code block (5 lines) in apps/chat-app/api/server/controllers/agents/client.js:169"}, "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-a1215f036771cee3", "name": "Commented-code block (7 lines) in apps/chat-app/api/server/controllers/agents/errors.js:131", "shortDescription": {"text": "Commented-code block (7 lines) in apps/chat-app/api/server/controllers/agents/errors.js:131"}, "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-9f054e423f74de06", "name": "Commented-code block (5 lines) in apps/chat-app/api/server/services/ModelService.js:137", "shortDescription": {"text": "Commented-code block (5 lines) in apps/chat-app/api/server/services/ModelService.js:137"}, "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-34ae217d3282007c", "name": "Commented-code block (6 lines) in apps/chat-app/api/server/services/Runs/handle.js:200", "shortDescription": {"text": "Commented-code block (6 lines) in apps/chat-app/api/server/services/Runs/handle.js:200"}, "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-7355bb3bb58a4ae1", "name": "Commented-code block (5 lines) in apps/chat-app/api/server/services/Config/getCachedTools.js:203", "shortDescription": {"text": "Commented-code block (5 lines) in apps/chat-app/api/server/services/Config/getCachedTools.js:203"}, "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-c018017f0a5a7809", "name": "Commented-code block (5 lines) in apps/chat-app/api/server/services/Threads/manage.js:65", "shortDescription": {"text": "Commented-code block (5 lines) in apps/chat-app/api/server/services/Threads/manage.js:65"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7dc7b4e7287d845f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/chat-app/api/strategies/openidStrategy.js:56", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/chat-app/api/strategies/openidStrategy.js:56"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0d0c6d4c0c1e906f", "name": "Commented-code block (8 lines) in apps/chat-app/packages/api/jest.config.mjs:11", "shortDescription": {"text": "Commented-code block (8 lines) in apps/chat-app/packages/api/jest.config.mjs:11"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f8a8dcd04d925c49", "name": "Commented-code block (15 lines) in apps/chat-app/packages/api/src/mcp/parsers.ts:15", "shortDescription": {"text": "Commented-code block (15 lines) in apps/chat-app/packages/api/src/mcp/parsers.ts:15"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-79b173028e10ed01", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/chat-app/packages/api/src/mcp/connection.ts:201", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/chat-app/packages/api/src/mcp/connection.ts:201"}, "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-8043c73c45df9c98", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/chat-app/packages/api/src/mcp/oauth/handler.ts:507", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/chat-app/packages/api/src/mcp/oauth/handler.ts:507"}, "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-215ecbe36fa8a534", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/chat-app/packages/api/src/utils/generators.ts:38", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/chat-app/packages/api/src/utils/generators.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-da21690cfac67fcd", "name": "Commented-code block (8 lines) in apps/chat-app/packages/data-provider/jest.config.js:9", "shortDescription": {"text": "Commented-code block (8 lines) in apps/chat-app/packages/data-provider/jest.config.js:9"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3561e61bead963eb", "name": "Legacy-named symbol `_host_copy` in apps/chat-app/packages/data-provider/src/types/assistants.ts:487", "shortDescription": {"text": "Legacy-named symbol `_host_copy` in apps/chat-app/packages/data-provider/src/types/assistants.ts:487"}, "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-fc0a118332c09c49", "name": "Commented-code block (8 lines) in apps/chat-app/packages/data-schemas/jest.config.mjs:10", "shortDescription": {"text": "Commented-code block (8 lines) in apps/chat-app/packages/data-schemas/jest.config.mjs:10"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-37f1c65b4446a0f4", "name": "Commented-code block (7 lines) in website/sovereign/tailwind.config.ts:3", "shortDescription": {"text": "Commented-code block (7 lines) in website/sovereign/tailwind.config.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-20e03a497d54a671", "name": "Commented-code block (6 lines) in website/sovereign/astro.config.mjs:11", "shortDescription": {"text": "Commented-code block (6 lines) in website/sovereign/astro.config.mjs:11"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d6e055c0fce7a806", "name": "Commented-code block (7 lines) in website/sovereign/src/content.config.ts:3", "shortDescription": {"text": "Commented-code block (7 lines) in website/sovereign/src/content.config.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-fc6aca8f2826a92a", "name": "Commented-code block (5 lines) in website/sovereign/src/integrations/content-lint.ts:8", "shortDescription": {"text": "Commented-code block (5 lines) in website/sovereign/src/integrations/content-lint.ts:8"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0b439c2e51efd5da", "name": "Commented-code block (5 lines) in website/sovereign/src/components/charts/TcoCrossover.tsx:4", "shortDescription": {"text": "Commented-code block (5 lines) in website/sovereign/src/components/charts/TcoCrossover.tsx:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f5838160eec0a078", "name": "Commented-code block (9 lines) in deploy/docker/pipelines/hive_jwt_forward.py:34", "shortDescription": {"text": "Commented-code block (9 lines) in deploy/docker/pipelines/hive_jwt_forward.py:34"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9bcc4ac8df4a8823", "name": "Stub function `on_startup` (body is just `pass`/`return`) \u2014 deploy/docker/pipelines/hive_jwt_forward.py:24", "shortDescription": {"text": "Stub function `on_startup` (body is just `pass`/`return`) \u2014 deploy/docker/pipelines/hive_jwt_forward.py:24"}, "fullDescription": {"text": "Likely an AI scaffold that was never filled in. Remove or implement."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-05c405a6b3dc6783", "name": "Commented-code block (12 lines) in deploy/geo-router/src/index.js:7", "shortDescription": {"text": "Commented-code block (12 lines) in deploy/geo-router/src/index.js:7"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-372078c664033cf2", "name": "`fetch()` without try/.catch or AbortSignal \u2014 deploy/geo-router/src/index.js:51", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 deploy/geo-router/src/index.js: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-a17404cad8386dce", "name": "Commented-code block (10 lines) in packages/openai-contract/scripts/lint-no-customer-usd.mjs:53", "shortDescription": {"text": "Commented-code block (10 lines) in packages/openai-contract/scripts/lint-no-customer-usd.mjs:53"}, "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-7482ca0bab9b0def", "name": "Commented-code block (5 lines) in packages/openai-contract/scripts/lint-no-customer-usd.test.mjs:323", "shortDescription": {"text": "Commented-code block (5 lines) in packages/openai-contract/scripts/lint-no-customer-usd.test.mjs:323"}, "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-90e689576c92c750", "name": "Commented-code block (6 lines) in packages/openai-contract/scripts/lint-no-bare-role-check.mjs:7", "shortDescription": {"text": "Commented-code block (6 lines) in packages/openai-contract/scripts/lint-no-bare-role-check.mjs:7"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-106b9480fc61647e", "name": "Commented-code block (10 lines) in .claude/hooks/secrets-scanner.js:2", "shortDescription": {"text": "Commented-code block (10 lines) in .claude/hooks/secrets-scanner.js:2"}, "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-03c06d8ea089cc74", "name": "Commented-code block (9 lines) in supabase/functions/e2e-fixtures/index.ts:15", "shortDescription": {"text": "Commented-code block (9 lines) in supabase/functions/e2e-fixtures/index.ts:15"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f52546362a1a885d", "name": "283 env vars used in code but missing from .env.example", "shortDescription": {"text": "283 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `ALLOW_PASSWORD_RESET`, `ALLOW_SHARED_LINKS`, `ALLOW_SHARED_LINKS_PUBLIC`, `ALLOW_SOCIAL_REGISTRATION`, `ALLOW_UNVERIFIED`, `ALLOW_UNVERIFIED_EMAIL_LOGIN`, `ANALYTICS_GTM_ID`, `ANOTHER_SECRET` + 275 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-98c504e5759d02b0", "name": "Dangling fetch: POST /images/edits (apps/chat-app/api/app/clients/tools/structured/OpenAIImageTools.js:456)", "shortDescription": {"text": "Dangling fetch: POST /images/edits (apps/chat-app/api/app/clients/tools/structured/OpenAIImageTools.js:456)"}, "fullDescription": {"text": "`apps/chat-app/api/app/clients/tools/structured/OpenAIImageTools.js:456` calls `POST /images/edits` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/images/edits`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d0716547083ab957", "name": "Dangling fetch: POST https://api.tavily.com/search (apps/chat-app/api/app/clients/tools/structured/TavilySearch.js:22)", "shortDescription": {"text": "Dangling fetch: POST https://api.tavily.com/search (apps/chat-app/api/app/clients/tools/structured/TavilySearch.js:22)"}, "fullDescription": {"text": "`apps/chat-app/api/app/clients/tools/structured/TavilySearch.js:22` calls `POST https://api.tavily.com/search` 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.tavily.com/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-f48df99179f3e636", "name": "Dangling fetch: POST https://api.tavily.com/search (apps/chat-app/api/app/clients/tools/structured/TavilySearchResults.j", "shortDescription": {"text": "Dangling fetch: POST https://api.tavily.com/search (apps/chat-app/api/app/clients/tools/structured/TavilySearchResults.js:105)"}, "fullDescription": {"text": "`apps/chat-app/api/app/clients/tools/structured/TavilySearchResults.js:105` calls `POST https://api.tavily.com/search` 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.tavily.com/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-c99eedd75bcdcd89", "name": "Dangling fetch: POST https://api-ares.traversaal.ai/live/predict (apps/chat-app/api/app/clients/tools/structured/Travers", "shortDescription": {"text": "Dangling fetch: POST https://api-ares.traversaal.ai/live/predict (apps/chat-app/api/app/clients/tools/structured/TraversaalSearch.js:47)"}, "fullDescription": {"text": "`apps/chat-app/api/app/clients/tools/structured/TraversaalSearch.js:47` calls `POST https://api-ares.traversaal.ai/live/predict` 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-ares.traversaal.ai/live/predict`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d6de7068b0c3b301", "name": "Dangling fetch: GET /api/v1/accounts/current/checkout/rails (apps/web-console/tests/e2e/billing-fx-zero-leak.spec.ts:71)", "shortDescription": {"text": "Dangling fetch: GET /api/v1/accounts/current/checkout/rails (apps/web-console/tests/e2e/billing-fx-zero-leak.spec.ts:71)"}, "fullDescription": {"text": "`apps/web-console/tests/e2e/billing-fx-zero-leak.spec.ts:71` calls `GET /api/v1/accounts/current/checkout/rails` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/accounts/current/checkout/rails`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2a8fa14ef2199819", "name": "Dangling fetch: PUT /api/budget (apps/web-console/components/billing/budget-alert-form.tsx:51)", "shortDescription": {"text": "Dangling fetch: PUT /api/budget (apps/web-console/components/billing/budget-alert-form.tsx:51)"}, "fullDescription": {"text": "`apps/web-console/components/billing/budget-alert-form.tsx:51` calls `PUT /api/budget` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/budget`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b9b50cb1ebcd0907", "name": "Dangling fetch: POST /api/v1/accounts/current/checkout/rails (apps/web-console/components/billing/checkout-modal.tsx:59)", "shortDescription": {"text": "Dangling fetch: POST /api/v1/accounts/current/checkout/rails (apps/web-console/components/billing/checkout-modal.tsx:59)"}, "fullDescription": {"text": "`apps/web-console/components/billing/checkout-modal.tsx:59` calls `POST /api/v1/accounts/current/checkout/rails` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/accounts/current/checkout/rails`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9607c2b1bf3cda31", "name": "Dangling fetch: PUT /api/budget/${workspaceId} (apps/web-console/components/billing/budget-form.tsx:98)", "shortDescription": {"text": "Dangling fetch: PUT /api/budget/${workspaceId} (apps/web-console/components/billing/budget-form.tsx:98)"}, "fullDescription": {"text": "`apps/web-console/components/billing/budget-form.tsx:98` calls `PUT /api/budget/${workspaceId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/budget/<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-feafdac90f7026c9", "name": "Dangling fetch: DELETE /api/budget (apps/web-console/components/billing/budget-alert-banner.tsx:40)", "shortDescription": {"text": "Dangling fetch: DELETE /api/budget (apps/web-console/components/billing/budget-alert-banner.tsx:40)"}, "fullDescription": {"text": "`apps/web-console/components/billing/budget-alert-banner.tsx:40` calls `DELETE /api/budget` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/budget`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-91c62004f328e194", "name": "Dangling fetch: POST /api/spend-alerts/${workspaceId} (apps/web-console/components/billing/spend-alert-form.tsx:75)", "shortDescription": {"text": "Dangling fetch: POST /api/spend-alerts/${workspaceId} (apps/web-console/components/billing/spend-alert-form.tsx:75)"}, "fullDescription": {"text": "`apps/web-console/components/billing/spend-alert-form.tsx:75` calls `POST /api/spend-alerts/${workspaceId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/spend-alerts/<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-48254167f5afef58", "name": "Dangling fetch: POST /api/v1/accounts/current/api-keys (apps/web-console/components/api-keys/api-key-create-form.tsx:69)", "shortDescription": {"text": "Dangling fetch: POST /api/v1/accounts/current/api-keys (apps/web-console/components/api-keys/api-key-create-form.tsx:69)"}, "fullDescription": {"text": "`apps/web-console/components/api-keys/api-key-create-form.tsx:69` calls `POST /api/v1/accounts/current/api-keys` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/accounts/current/api-keys`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9d4f7c0b3c135153", "name": "Dangling fetch: POST /api/auth/signup-precheck (apps/web-console/app/auth/sign-up/page.tsx:101)", "shortDescription": {"text": "Dangling fetch: POST /api/auth/signup-precheck (apps/web-console/app/auth/sign-up/page.tsx:101)"}, "fullDescription": {"text": "`apps/web-console/app/auth/sign-up/page.tsx:101` calls `POST /api/auth/signup-precheck` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/auth/signup-precheck`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e8068773249757fe", "name": "Dangling fetch: POST /api/files/speech/tts (apps/chat-app/client/src/components/Chat/Input/StreamAudio.tsx:96)", "shortDescription": {"text": "Dangling fetch: POST /api/files/speech/tts (apps/chat-app/client/src/components/Chat/Input/StreamAudio.tsx:96)"}, "fullDescription": {"text": "`apps/chat-app/client/src/components/Chat/Input/StreamAudio.tsx:96` calls `POST /api/files/speech/tts` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/files/speech/tts`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-869b054882361eca", "name": "Dangling fetch: POST https://oauth2.googleapis.com/token (apps/chat-app/packages/api/src/files/mistral/crud.ts:507)", "shortDescription": {"text": "Dangling fetch: POST https://oauth2.googleapis.com/token (apps/chat-app/packages/api/src/files/mistral/crud.ts:507)"}, "fullDescription": {"text": "`apps/chat-app/packages/api/src/files/mistral/crud.ts:507` calls `POST https://oauth2.googleapis.com/token` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/oauth2.googleapis.com/token`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-da7393715f553c94", "name": "Unused endpoint: USE /oauth", "shortDescription": {"text": "Unused endpoint: USE /oauth"}, "fullDescription": {"text": "`apps/chat-app/api/server/index.js` declares `USE /oauth` 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-6eb452fbfb454d20", "name": "Unused endpoint: USE /api/auth", "shortDescription": {"text": "Unused endpoint: USE /api/auth"}, "fullDescription": {"text": "`apps/chat-app/api/server/index.js` declares `USE /api/auth` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f32d96e32516c173", "name": "Unused endpoint: USE /api/actions", "shortDescription": {"text": "Unused endpoint: USE /api/actions"}, "fullDescription": {"text": "`apps/chat-app/api/server/index.js` declares `USE /api/actions` 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-12c925b320bb2d17", "name": "Unused endpoint: USE /api/keys", "shortDescription": {"text": "Unused endpoint: USE /api/keys"}, "fullDescription": {"text": "`apps/chat-app/api/server/index.js` declares `USE /api/keys` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8d0e596b29c46b1e", "name": "Unused endpoint: USE /api/user", "shortDescription": {"text": "Unused endpoint: USE /api/user"}, "fullDescription": {"text": "`apps/chat-app/api/server/index.js` declares `USE /api/user` 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-a74449cc5d561bad", "name": "Unused endpoint: USE /api/search", "shortDescription": {"text": "Unused endpoint: USE /api/search"}, "fullDescription": {"text": "`apps/chat-app/api/server/index.js` declares `USE /api/search` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5954dacfec384f29", "name": "Unused endpoint: USE /api/edit", "shortDescription": {"text": "Unused endpoint: USE /api/edit"}, "fullDescription": {"text": "`apps/chat-app/api/server/index.js` declares `USE /api/edit` 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-9a300508c4edb651", "name": "Unused endpoint: USE /api/messages", "shortDescription": {"text": "Unused endpoint: USE /api/messages"}, "fullDescription": {"text": "`apps/chat-app/api/server/index.js` declares `USE /api/messages` 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-379886dec0bb8cd6", "name": "Unused endpoint: USE /api/convos", "shortDescription": {"text": "Unused endpoint: USE /api/convos"}, "fullDescription": {"text": "`apps/chat-app/api/server/index.js` declares `USE /api/convos` 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-95c8b4f24f58096d", "name": "Unused endpoint: USE /api/presets", "shortDescription": {"text": "Unused endpoint: USE /api/presets"}, "fullDescription": {"text": "`apps/chat-app/api/server/index.js` declares `USE /api/presets` 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-c27f21f0c4bc3269", "name": "Unused endpoint: USE /api/prompts", "shortDescription": {"text": "Unused endpoint: USE /api/prompts"}, "fullDescription": {"text": "`apps/chat-app/api/server/index.js` declares `USE /api/prompts` 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-c10a85b9ad227a45", "name": "Unused endpoint: USE /api/categories", "shortDescription": {"text": "Unused endpoint: USE /api/categories"}, "fullDescription": {"text": "`apps/chat-app/api/server/index.js` declares `USE /api/categories` 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-6460e3124d527475", "name": "Unused endpoint: USE /api/tokenizer", "shortDescription": {"text": "Unused endpoint: USE /api/tokenizer"}, "fullDescription": {"text": "`apps/chat-app/api/server/index.js` declares `USE /api/tokenizer` 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-db2445af6bf3e266", "name": "Unused endpoint: USE /api/endpoints", "shortDescription": {"text": "Unused endpoint: USE /api/endpoints"}, "fullDescription": {"text": "`apps/chat-app/api/server/index.js` declares `USE /api/endpoints` 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-b74acf3521abf598", "name": "Unused endpoint: USE /api/balance", "shortDescription": {"text": "Unused endpoint: USE /api/balance"}, "fullDescription": {"text": "`apps/chat-app/api/server/index.js` declares `USE /api/balance` 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-5b66c53e8f32d566", "name": "Unused endpoint: USE /api/models", "shortDescription": {"text": "Unused endpoint: USE /api/models"}, "fullDescription": {"text": "`apps/chat-app/api/server/index.js` declares `USE /api/models` 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-56eb4b3a1a35b4d0", "name": "Unused endpoint: USE /api/plugins", "shortDescription": {"text": "Unused endpoint: USE /api/plugins"}, "fullDescription": {"text": "`apps/chat-app/api/server/index.js` declares `USE /api/plugins` 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-6f63dbe78bf2280a", "name": "Unused endpoint: USE /api/config", "shortDescription": {"text": "Unused endpoint: USE /api/config"}, "fullDescription": {"text": "`apps/chat-app/api/server/index.js` declares `USE /api/config` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-80afa19d01c8aea8", "name": "Unused endpoint: USE /api/assistants", "shortDescription": {"text": "Unused endpoint: USE /api/assistants"}, "fullDescription": {"text": "`apps/chat-app/api/server/index.js` declares `USE /api/assistants` 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-15662ab348abba6b", "name": "Unused endpoint: USE /api/files", "shortDescription": {"text": "Unused endpoint: USE /api/files"}, "fullDescription": {"text": "`apps/chat-app/api/server/index.js` declares `USE /api/files` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6b70b66bb7a15f31", "name": "Unused endpoint: USE /images/", "shortDescription": {"text": "Unused endpoint: USE /images/"}, "fullDescription": {"text": "`apps/chat-app/api/server/index.js` declares `USE /images/` 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-cf0597ae7cca5b59", "name": "Unused endpoint: USE /api/share", "shortDescription": {"text": "Unused endpoint: USE /api/share"}, "fullDescription": {"text": "`apps/chat-app/api/server/index.js` declares `USE /api/share` 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-05bc0a4537549b92", "name": "Unused endpoint: USE /api/roles", "shortDescription": {"text": "Unused endpoint: USE /api/roles"}, "fullDescription": {"text": "`apps/chat-app/api/server/index.js` declares `USE /api/roles` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-094608bf688f5d04", "name": "Unused endpoint: USE /api/agents", "shortDescription": {"text": "Unused endpoint: USE /api/agents"}, "fullDescription": {"text": "`apps/chat-app/api/server/index.js` declares `USE /api/agents` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5e2fb29f13cb0293", "name": "Unused endpoint: USE /api/banner", "shortDescription": {"text": "Unused endpoint: USE /api/banner"}, "fullDescription": {"text": "`apps/chat-app/api/server/index.js` declares `USE /api/banner` 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-4dc6237d07348713", "name": "Unused endpoint: USE /api/memories", "shortDescription": {"text": "Unused endpoint: USE /api/memories"}, "fullDescription": {"text": "`apps/chat-app/api/server/index.js` declares `USE /api/memories` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-53cfbec65b30b169", "name": "Unused endpoint: USE /api/tags", "shortDescription": {"text": "Unused endpoint: USE /api/tags"}, "fullDescription": {"text": "`apps/chat-app/api/server/index.js` declares `USE /api/tags` 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-4df67aa27a99eee8", "name": "Unused endpoint: USE /api/mcp", "shortDescription": {"text": "Unused endpoint: USE /api/mcp"}, "fullDescription": {"text": "`apps/chat-app/api/server/index.js` declares `USE /api/mcp` 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/chat-app/api/server/routes/models.js` declares `GET /` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7a009b1a56794f45", "name": "Unused endpoint: POST /", "shortDescription": {"text": "Unused endpoint: POST /"}, "fullDescription": {"text": "`apps/chat-app/api/server/routes/presets.js` 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-5ad17de6517d58f2", "name": "Unused endpoint: POST /delete", "shortDescription": {"text": "Unused endpoint: POST /delete"}, "fullDescription": {"text": "`apps/chat-app/api/server/routes/presets.js` declares `POST /delete` 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-23158d18f6382551", "name": "Unused endpoint: GET /:conversationId", "shortDescription": {"text": "Unused endpoint: GET /:conversationId"}, "fullDescription": {"text": "`apps/chat-app/api/server/routes/convos.js` declares `GET /:conversationId` 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-a9eca83cacbf7d57", "name": "Unused endpoint: POST /gen_title", "shortDescription": {"text": "Unused endpoint: POST /gen_title"}, "fullDescription": {"text": "`apps/chat-app/api/server/routes/convos.js` declares `POST /gen_title` 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-3b30f4c0994a30b4", "name": "Unused endpoint: DELETE /", "shortDescription": {"text": "Unused endpoint: DELETE /"}, "fullDescription": {"text": "`apps/chat-app/api/server/routes/convos.js` declares `DELETE /` 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-d0e963cf059012cb", "name": "Unused endpoint: DELETE /all", "shortDescription": {"text": "Unused endpoint: DELETE /all"}, "fullDescription": {"text": "`apps/chat-app/api/server/routes/convos.js` declares `DELETE /all` 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-69d327318617f514", "name": "Unused endpoint: POST /update", "shortDescription": {"text": "Unused endpoint: POST /update"}, "fullDescription": {"text": "`apps/chat-app/api/server/routes/convos.js` declares `POST /update` 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-be4cb5e3cabcce80", "name": "Unused endpoint: POST /import", "shortDescription": {"text": "Unused endpoint: POST /import"}, "fullDescription": {"text": "`apps/chat-app/api/server/routes/convos.js` declares `POST /import` 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-3ebc6ff3f5657fbb", "name": "Unused endpoint: POST /fork", "shortDescription": {"text": "Unused endpoint: POST /fork"}, "fullDescription": {"text": "`apps/chat-app/api/server/routes/convos.js` declares `POST /fork` 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-f5566c93e4e0f6f7", "name": "Unused endpoint: POST /duplicate", "shortDescription": {"text": "Unused endpoint: POST /duplicate"}, "fullDescription": {"text": "`apps/chat-app/api/server/routes/convos.js` declares `POST /duplicate` 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-d1abe18556aa5380", "name": "Unused endpoint: GET /:roleName", "shortDescription": {"text": "Unused endpoint: GET /:roleName"}, "fullDescription": {"text": "`apps/chat-app/api/server/routes/roles.js` declares `GET /:roleName` 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-4e6eb2f88493e391", "name": "Unused endpoint: PUT /:roleName/prompts", "shortDescription": {"text": "Unused endpoint: PUT /:roleName/prompts"}, "fullDescription": {"text": "`apps/chat-app/api/server/routes/roles.js` declares `PUT /:roleName/prompts` 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-0ce585ad197901d1", "name": "Unused endpoint: PUT /:roleName/agents", "shortDescription": {"text": "Unused endpoint: PUT /:roleName/agents"}, "fullDescription": {"text": "`apps/chat-app/api/server/routes/roles.js` declares `PUT /:roleName/agents` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-904df3130885e910", "name": "Unused endpoint: PUT /:roleName/memories", "shortDescription": {"text": "Unused endpoint: PUT /:roleName/memories"}, "fullDescription": {"text": "`apps/chat-app/api/server/routes/roles.js` declares `PUT /:roleName/memories` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-207fb5eab13685c5", "name": "Unused endpoint: GET /groups/:groupId", "shortDescription": {"text": "Unused endpoint: GET /groups/:groupId"}, "fullDescription": {"text": "`apps/chat-app/api/server/routes/prompts.js` declares `GET /groups/:groupId` 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-2c3d1d103b19a7f6", "name": "Unused endpoint: GET /all", "shortDescription": {"text": "Unused endpoint: GET /all"}, "fullDescription": {"text": "`apps/chat-app/api/server/routes/prompts.js` declares `GET /all` 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/chat-app/api/server/routes/prompts.js` 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-78dac01f53833912", "name": "Unused endpoint: PATCH /groups/:groupId", "shortDescription": {"text": "Unused endpoint: PATCH /groups/:groupId"}, "fullDescription": {"text": "`apps/chat-app/api/server/routes/prompts.js` declares `PATCH /groups/:groupId` 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-f3fb0ad8cd8b8a65", "name": "Unused endpoint: PATCH /:promptId/tags/production", "shortDescription": {"text": "Unused endpoint: PATCH /:promptId/tags/production"}, "fullDescription": {"text": "`apps/chat-app/api/server/routes/prompts.js` declares `PATCH /:promptId/tags/production` 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-3cb84a75c360e4e5", "name": "Unused endpoint: GET /:promptId", "shortDescription": {"text": "Unused endpoint: GET /:promptId"}, "fullDescription": {"text": "`apps/chat-app/api/server/routes/prompts.js` declares `GET /:promptId` 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-f740c85695a9344d", "name": "Unused endpoint: DELETE /:promptId", "shortDescription": {"text": "Unused endpoint: DELETE /:promptId"}, "fullDescription": {"text": "`apps/chat-app/api/server/routes/prompts.js` declares `DELETE /:promptId` 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/18823"}, "properties": {"repository": "sakibsadmanshajib/hive", "repoUrl": "https://github.com/sakibsadmanshajib/hive", "branch": "main"}, "results": [{"ruleId": "scanner-ca890a3e43ad007a", "level": "note", "message": {"text": "Possibly dead Python function: inlet"}, "properties": {"repobilityId": "6ce09228ac1ebb4f", "scanner": "scanner-primary", "fingerprint": "ca890a3e43ad007a", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "deploy/docker/pipelines/hive_jwt_forward.py:30"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-95e1007ddc8742e3", "level": "note", "message": {"text": "Possibly dead Python function: outlet"}, "properties": {"repobilityId": "481cba04fa1ccab6", "scanner": "scanner-primary", "fingerprint": "95e1007ddc8742e3", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "deploy/docker/pipelines/hive_jwt_forward.py:60"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-03efc42bb19e77c5", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/web-console/tests/e2e/rbac-unverified.spec.ts:65"}, "properties": {"repobilityId": "7a56f55975f25b31", "scanner": "scanner-primary", "fingerprint": "03efc42bb19e77c5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-eac9f8fd41d60f04", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web-console/components/app-shell/console-shell.tsx:90"}, "properties": {"repobilityId": "d80670f50b3d03db", "scanner": "scanner-primary", "fingerprint": "eac9f8fd41d60f04", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-5efd6139d05ffc2b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/web-console/e2e/phase-19/owui/performance/embed-latency.spec.ts:38"}, "properties": {"repobilityId": "091b35030900bb01", "scanner": "scanner-primary", "fingerprint": "5efd6139d05ffc2b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ac16fee80c16eea8", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/web-console/e2e/phase-19/owui/performance/ttfb.spec.ts:35"}, "properties": {"repobilityId": "0126420833aae961", "scanner": "scanner-primary", "fingerprint": "ac16fee80c16eea8", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d9ffd871ba44e80c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/client/src/utils/resetConvo.ts:10"}, "properties": {"repobilityId": "b27516cbf0e5ed8a", "scanner": "scanner-primary", "fingerprint": "d9ffd871ba44e80c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-67aafbfa28cd11a8", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/client/src/utils/heicConverter.ts:74"}, "properties": {"repobilityId": "4ecf7a8675df912d", "scanner": "scanner-primary", "fingerprint": "67aafbfa28cd11a8", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-500948bfab57ca79", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 apps/chat-app/client/src/utils/files.ts:33"}, "properties": {"repobilityId": "850828e87304c4ff", "scanner": "scanner-primary", "fingerprint": "500948bfab57ca79", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-12269828d209c499", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/client/src/utils/files.ts:254"}, "properties": {"repobilityId": "5d8178b02d7932ec", "scanner": "scanner-primary", "fingerprint": "12269828d209c499", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3ecd990a16bf2446", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/client/src/components/Auth/Login.tsx:43"}, "properties": {"repobilityId": "6e05d6a9fcc9d099", "scanner": "scanner-primary", "fingerprint": "3ecd990a16bf2446", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-fce7978bbef77155", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/client/src/components/Auth/__tests__/Registration.spec.tsx:179"}, "properties": {"repobilityId": "7f8c6c5eb85cf9b5", "scanner": "scanner-primary", "fingerprint": "fce7978bbef77155", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-356df869516b7009", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/client/src/components/Chat/Presentation.tsx:21"}, "properties": {"repobilityId": "e623517ce94209e8", "scanner": "scanner-primary", "fingerprint": "356df869516b7009", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-853e283064cb21c5", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/client/src/components/Chat/Menus/BookmarkMenu.tsx:41"}, "properties": {"repobilityId": "0e6cbc19dd73c528", "scanner": "scanner-primary", "fingerprint": "853e283064cb21c5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a43ead7069428129", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/chat-app/client/src/components/Chat/Menus/Endpoints/ModelSelector.tsx:63"}, "properties": {"repobilityId": "0ac9cfe4584eb0f0", "scanner": "scanner-primary", "fingerprint": "a43ead7069428129", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0bded8d1a055d5a4", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/chat-app/client/src/components/Chat/Menus/Endpoints/components/ModelSpecItem.tsx:36"}, "properties": {"repobilityId": "ed4cd2d99087ea3f", "scanner": "scanner-primary", "fingerprint": "0bded8d1a055d5a4", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-fe7d7f71f840ba68", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/chat-app/client/src/components/Chat/Menus/Endpoints/components/SearchResults.tsx:70"}, "properties": {"repobilityId": "f59e9be618328937", "scanner": "scanner-primary", "fingerprint": "fe7d7f71f840ba68", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-40779f51eadcfb21", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/chat-app/client/src/components/Chat/Menus/Presets/PresetItems.tsx:48"}, "properties": {"repobilityId": "7eddd845f9b96a87", "scanner": "scanner-primary", "fingerprint": "40779f51eadcfb21", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-7c9222d432a639fc", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/client/src/components/Chat/Menus/Presets/EditPresetDialog.tsx:87"}, "properties": {"repobilityId": "54232acfe5930077", "scanner": "scanner-primary", "fingerprint": "7c9222d432a639fc", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9d01971ac115a912", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/chat-app/client/src/components/Chat/Input/MentionItem.tsx:42"}, "properties": {"repobilityId": "2e01b43a15c493ad", "scanner": "scanner-primary", "fingerprint": "9d01971ac115a912", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-afbf59d7c0688754", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/client/src/components/Chat/Input/AudioRecorder.tsx:38"}, "properties": {"repobilityId": "e96978d6c0b30a2d", "scanner": "scanner-primary", "fingerprint": "afbf59d7c0688754", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d6e57b9515384440", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/client/src/components/Chat/Input/MCPSelect.tsx:125"}, "properties": {"repobilityId": "2d32f386e8c4b8b7", "scanner": "scanner-primary", "fingerprint": "d6e57b9515384440", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ece53a83a4f65f73", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/client/src/components/Chat/Input/Files/FileRow.tsx:51"}, "properties": {"repobilityId": "f629b9e923120253", "scanner": "scanner-primary", "fingerprint": "ece53a83a4f65f73", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-28ab748d768bc8c6", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/chat-app/client/src/components/Chat/Input/Files/Table/Columns.tsx:80"}, "properties": {"repobilityId": "0281a45b442508ba", "scanner": "scanner-primary", "fingerprint": "28ab748d768bc8c6", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-46eba16626091ab2", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/chat-app/client/src/components/Chat/Input/Files/Table/DataTable.tsx:223"}, "properties": {"repobilityId": "bef370ba7a679a7d", "scanner": "scanner-primary", "fingerprint": "46eba16626091ab2", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-9eecf266c1fabc23", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/client/src/components/Chat/Messages/Content/MessageContent.tsx:26"}, "properties": {"repobilityId": "5752030819118edf", "scanner": "scanner-primary", "fingerprint": "9eecf266c1fabc23", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e3872d5c3ed1355a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/chat-app/client/src/components/ui/MultiSelectDropDown.tsx:103"}, "properties": {"repobilityId": "ca075c09af5debd5", "scanner": "scanner-primary", "fingerprint": "e3872d5c3ed1355a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e3b240d312d373a6", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 apps/chat-app/client/src/components/ui/InputNumber.tsx:9"}, "properties": {"repobilityId": "9624e105dcb29ee9", "scanner": "scanner-primary", "fingerprint": "e3b240d312d373a6", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-0300e6b2e3c38c10", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/client/src/components/ui/InputNumber.tsx:30"}, "properties": {"repobilityId": "163abd7f75ff5736", "scanner": "scanner-primary", "fingerprint": "0300e6b2e3c38c10", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4259d59ca8718748", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/chat-app/client/src/components/ui/Dropdown.tsx:83"}, "properties": {"repobilityId": "8e08e04af533b6ff", "scanner": "scanner-primary", "fingerprint": "4259d59ca8718748", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-42975c513b05bd93", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/chat-app/client/src/components/ui/SelectDropDown.tsx:137"}, "properties": {"repobilityId": "7a8eae7915035865", "scanner": "scanner-primary", "fingerprint": "42975c513b05bd93", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-54effa156f60722d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/chat-app/client/src/components/ui/MultiSelect.tsx:93"}, "properties": {"repobilityId": "a57c449c40957ebd", "scanner": "scanner-primary", "fingerprint": "54effa156f60722d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-34ff040a488de599", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/chat-app/client/src/components/ui/ControlCombobox.tsx:119"}, "properties": {"repobilityId": "2cd788d6270fac7b", "scanner": "scanner-primary", "fingerprint": "34ff040a488de599", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-5011bad5004c9651", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/chat-app/client/src/components/ui/CheckboxButton.tsx:69"}, "properties": {"repobilityId": "f545405869dc54fb", "scanner": "scanner-primary", "fingerprint": "5011bad5004c9651", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-eb8bbc33f535ab18", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/chat-app/client/src/components/ui/DropdownNoState.tsx:65"}, "properties": {"repobilityId": "0fe0d9574259fad0", "scanner": "scanner-primary", "fingerprint": "eb8bbc33f535ab18", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-aa011ad95ccfa460", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/chat-app/client/src/components/ui/MCP/CustomUserVarsSection.tsx:70"}, "properties": {"repobilityId": "8e637c78cc334320", "scanner": "scanner-primary", "fingerprint": "aa011ad95ccfa460", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-b3e41d129f2e53f4", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/chat-app/client/src/components/Plugins/Store/PluginTooltip.tsx:15"}, "properties": {"repobilityId": "262e4a5bd8e09146", "scanner": "scanner-primary", "fingerprint": "b3e41d129f2e53f4", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-31aea3c91bae7ba1", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 apps/chat-app/client/src/components/Input/SetKeyDialog/SetKeyDialog.tsx:66"}, "properties": {"repobilityId": "8190912e9154757b", "scanner": "scanner-primary", "fingerprint": "31aea3c91bae7ba1", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-b0d3aca99fd927c4", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/chat-app/client/src/components/Web/Sources.tsx:38"}, "properties": {"repobilityId": "c3750d528e8746f8", "scanner": "scanner-primary", "fingerprint": "b0d3aca99fd927c4", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-fc9dad34e7c01f50", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 apps/chat-app/client/src/components/Web/Citation.tsx:66"}, "properties": {"repobilityId": "a629f3feea6a4fa3", "scanner": "scanner-primary", "fingerprint": "fc9dad34e7c01f50", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-ddc3987f78ae7d53", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 apps/chat-app/client/src/components/SidePanel/Agents/MCPInput.tsx:30"}, "properties": {"repobilityId": "44445778befb2300", "scanner": "scanner-primary", "fingerprint": "ddc3987f78ae7d53", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-2b13a1c73c5c5190", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 apps/chat-app/client/src/components/SidePanel/Agents/Retrieval.tsx:74"}, "properties": {"repobilityId": "c83c542e9178b60e", "scanner": "scanner-primary", "fingerprint": "2b13a1c73c5c5190", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-c7ae1b28e7d53665", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 apps/chat-app/client/src/components/SidePanel/Agents/MCPPanel.tsx:19"}, "properties": {"repobilityId": "a5ea9a088dcb5b50", "scanner": "scanner-primary", "fingerprint": "c7ae1b28e7d53665", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-f7e81aab4dbe99c2", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/client/src/components/SidePanel/Agents/MCPPanel.tsx:32"}, "properties": {"repobilityId": "51fcea0bf8291892", "scanner": "scanner-primary", "fingerprint": "f7e81aab4dbe99c2", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f5b25bbba4827c92", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 apps/chat-app/client/src/components/SidePanel/Parameters/DynamicDropdown.tsx:36"}, "properties": {"repobilityId": "7139fbdbd9739132", "scanner": "scanner-primary", "fingerprint": "f5b25bbba4827c92", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-e66b297f19503c87", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 apps/chat-app/client/src/components/SidePanel/Parameters/DynamicTextarea.tsx:80"}, "properties": {"repobilityId": "6e643752f4397ddd", "scanner": "scanner-primary", "fingerprint": "e66b297f19503c87", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-6f16b852b36fae84", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 apps/chat-app/client/src/components/SidePanel/Parameters/DynamicSlider.tsx:57"}, "properties": {"repobilityId": "dfffbe1d48ac9749", "scanner": "scanner-primary", "fingerprint": "6f16b852b36fae84", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-4452df40adb01926", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/client/src/components/SidePanel/Builder/ActionsInput.tsx:112"}, "properties": {"repobilityId": "ac874d7063449b80", "scanner": "scanner-primary", "fingerprint": "4452df40adb01926", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6ba023d3fbab0a9a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/chat-app/client/src/components/SidePanel/Builder/AssistantSelect.tsx:297"}, "properties": {"repobilityId": "b622262d04a8da2f", "scanner": "scanner-primary", "fingerprint": "6ba023d3fbab0a9a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-caba598956e63d02", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/client/src/components/SidePanel/Builder/AssistantAvatar.tsx:38"}, "properties": {"repobilityId": "62d883db23be9828", "scanner": "scanner-primary", "fingerprint": "caba598956e63d02", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f22e7f232fc8c22f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/client/src/components/SidePanel/Builder/ContextButton.tsx:42"}, "properties": {"repobilityId": "fd2bde9dec0fa319", "scanner": "scanner-primary", "fingerprint": "f22e7f232fc8c22f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b000d3f80c9e7825", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/client/src/components/SidePanel/MCP/MCPPanel.tsx:74"}, "properties": {"repobilityId": "edf96a185b2bada2", "scanner": "scanner-primary", "fingerprint": "b000d3f80c9e7825", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c6e0a6386a566660", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/chat-app/client/src/components/SidePanel/Files/PanelFileCell.tsx:22"}, "properties": {"repobilityId": "dd0559aff11d7f97", "scanner": "scanner-primary", "fingerprint": "c6e0a6386a566660", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-61ae5ecb07b0b0c6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/client/src/components/Bookmarks/BookmarkEditDialog.tsx:65"}, "properties": {"repobilityId": "a051282ccd071eb7", "scanner": "scanner-primary", "fingerprint": "61ae5ecb07b0b0c6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b6776ed000cedb24", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 apps/chat-app/client/src/components/Nav/SettingsTabs/Speech/Speech.tsx:140"}, "properties": {"repobilityId": "30ee0a0d5ca46831", "scanner": "scanner-primary", "fingerprint": "b6776ed000cedb24", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-90de75751967b488", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/client/src/components/Nav/SettingsTabs/Data/ImportConversations.tsx:55"}, "properties": {"repobilityId": "d96d1bb730983c10", "scanner": "scanner-primary", "fingerprint": "90de75751967b488", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5f29fc491eda4dcf", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/chat-app/client/src/components/Nav/SettingsTabs/General/ArchivedChatsTable.tsx:152"}, "properties": {"repobilityId": "e9ed58c119d5e5e4", "scanner": "scanner-primary", "fingerprint": "5f29fc491eda4dcf", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d5efdc0cc1f65b32", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/chat-app/client/src/components/Artifacts/Artifacts.tsx:72"}, "properties": {"repobilityId": "de9eda0f82f540fe", "scanner": "scanner-primary", "fingerprint": "d5efdc0cc1f65b32", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a95df47fb288b63a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/chat-app/client/src/components/Artifacts/ArtifactButton.tsx:78"}, "properties": {"repobilityId": "10ad6df3823e4538", "scanner": "scanner-primary", "fingerprint": "a95df47fb288b63a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-36e3874312cf01ff", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/chat-app/client/src/components/Prompts/PromptEditor.tsx:60"}, "properties": {"repobilityId": "1700c20ff79de3cd", "scanner": "scanner-primary", "fingerprint": "36e3874312cf01ff", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b888fef7ab69b233", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 apps/chat-app/client/src/components/Prompts/PromptForm.tsx:124"}, "properties": {"repobilityId": "d5a7cad0b16ac728", "scanner": "scanner-primary", "fingerprint": "b888fef7ab69b233", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-68f8ff7c2ee68035", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/chat-app/client/src/components/Prompts/Groups/DashGroupItem.tsx:87"}, "properties": {"repobilityId": "e39017a6450a3aab", "scanner": "scanner-primary", "fingerprint": "68f8ff7c2ee68035", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d5a3ceff952251c7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/client/src/components/Prompts/Groups/DashGroupItem.tsx:52"}, "properties": {"repobilityId": "2e5718756d7e50ae", "scanner": "scanner-primary", "fingerprint": "d5a3ceff952251c7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e5f3c4b406771884", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/client/src/components/Share/MessageIcon.tsx:44"}, "properties": {"repobilityId": "9ce55ed8d34a5e6c", "scanner": "scanner-primary", "fingerprint": "e5f3c4b406771884", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5fbf39392ef3e902", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/chat-app/client/src/components/Banners/Banner.tsx:35"}, "properties": {"repobilityId": "5a46346601d2df11", "scanner": "scanner-primary", "fingerprint": "5fbf39392ef3e902", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-770decc437c15e70", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/chat-app/client/src/components/Banners/Banner.tsx:36"}, "properties": {"repobilityId": "81fce76bb5269bee", "scanner": "scanner-primary", "fingerprint": "770decc437c15e70", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-5200f55e447fa903", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/chat-app/client/src/components/Files/FileList/FileTableColumns.tsx:65"}, "properties": {"repobilityId": "2361a730f6749b0d", "scanner": "scanner-primary", "fingerprint": "5200f55e447fa903", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-064ede28780d9b50", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/client/src/components/Files/FileList/FilePreview.tsx:60"}, "properties": {"repobilityId": "177a46ea8752a7f0", "scanner": "scanner-primary", "fingerprint": "064ede28780d9b50", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-57b8abdbaef12804", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/client/src/components/Files/FileList/FileSidePanel.tsx:148"}, "properties": {"repobilityId": "e9325fb7fe8fd94e", "scanner": "scanner-primary", "fingerprint": "57b8abdbaef12804", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-76043a129aaef9ae", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/client/src/components/Files/FileList/UploadFileModal.tsx:75"}, "properties": {"repobilityId": "80f7ff9c60866cef", "scanner": "scanner-primary", "fingerprint": "76043a129aaef9ae", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-20cc7d1bb0af8eb2", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/client/src/components/Files/FileList/DataTableFile.tsx:100"}, "properties": {"repobilityId": "bc080ab6bf7dffc2", "scanner": "scanner-primary", "fingerprint": "20cc7d1bb0af8eb2", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ba97f5f796ad9359", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/client/src/components/Files/VectorStore/VectorStorePreview.tsx:114"}, "properties": {"repobilityId": "fc4ed4b0db9d9699", "scanner": "scanner-primary", "fingerprint": "ba97f5f796ad9359", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-344afec81f4932b5", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/client/src/components/Files/VectorStore/VectorStoreSidePanel.tsx:215"}, "properties": {"repobilityId": "f7560c3461671212", "scanner": "scanner-primary", "fingerprint": "344afec81f4932b5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8a9705d52988c97d", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 apps/chat-app/client/src/data-provider/mutations.ts:477"}, "properties": {"repobilityId": "4e4d0779b64afef0", "scanner": "scanner-primary", "fingerprint": "8a9705d52988c97d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-1ff96b22d4d1661c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/client/src/hooks/useTimeout.tsx:20"}, "properties": {"repobilityId": "91692fcf6e2f917d", "scanner": "scanner-primary", "fingerprint": "1ff96b22d4d1661c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2e2236283f9c103b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/client/src/hooks/AuthContext.tsx:136"}, "properties": {"repobilityId": "83dfb3cbee0ce8e4", "scanner": "scanner-primary", "fingerprint": "2e2236283f9c103b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-25554c2cbd56b8ae", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/client/src/hooks/ThemeContext.tsx:67"}, "properties": {"repobilityId": "f26c36ed2b483eaa", "scanner": "scanner-primary", "fingerprint": "25554c2cbd56b8ae", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-eeae7485e9434d61", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/client/src/hooks/useScrollToRef.ts:27"}, "properties": {"repobilityId": "970df7eacff6b8a3", "scanner": "scanner-primary", "fingerprint": "eeae7485e9434d61", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b873092dd5e71ca1", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 apps/chat-app/client/src/hooks/useChatBadges.ts:23"}, "properties": {"repobilityId": "65a9562aee83db8d", "scanner": "scanner-primary", "fingerprint": "b873092dd5e71ca1", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-c03724144cbdf8a8", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/client/src/hooks/useNewConvo.ts:57"}, "properties": {"repobilityId": "cb00272d6e1623d2", "scanner": "scanner-primary", "fingerprint": "c03724144cbdf8a8", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-af8a8bc25f175f41", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/client/src/hooks/Audio/usePauseGlobalAudio.ts:18"}, "properties": {"repobilityId": "e144a7c49fac1015", "scanner": "scanner-primary", "fingerprint": "af8a8bc25f175f41", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-52d55c1ab9fd68d4", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/client/src/hooks/Audio/useCustomAudioRef.ts:28"}, "properties": {"repobilityId": "019815996592432b", "scanner": "scanner-primary", "fingerprint": "52d55c1ab9fd68d4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-fc14350e741ca653", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/client/src/hooks/Audio/useAudioRef.ts:12"}, "properties": {"repobilityId": "85bd1d5686588e01", "scanner": "scanner-primary", "fingerprint": "fc14350e741ca653", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-04c63e19f18c51ba", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/client/src/hooks/Input/useQueryParams.ts:256"}, "properties": {"repobilityId": "004b6edd5ab453af", "scanner": "scanner-primary", "fingerprint": "04c63e19f18c51ba", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-11313391cd32db35", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/client/src/hooks/Input/useTextarea.ts:185"}, "properties": {"repobilityId": "289e4b08f5b27589", "scanner": "scanner-primary", "fingerprint": "11313391cd32db35", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8b3170525787e7aa", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/client/src/hooks/Input/useTextToSpeechExternal.ts:65"}, "properties": {"repobilityId": "a02e70a8cf22f498", "scanner": "scanner-primary", "fingerprint": "8b3170525787e7aa", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-28fca25822d14280", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 apps/chat-app/client/src/hooks/SSE/useContentHandler.ts:55"}, "properties": {"repobilityId": "cea54fc950d26e91", "scanner": "scanner-primary", "fingerprint": "28fca25822d14280", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-d12ecdf311fdc0db", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/client/src/hooks/SSE/useSSE.ts:127"}, "properties": {"repobilityId": "13f7a0805c59052f", "scanner": "scanner-primary", "fingerprint": "d12ecdf311fdc0db", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-31c0b231c8bfa58b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/client/src/hooks/Files/useDeleteFilesFromTable.tsx:24"}, "properties": {"repobilityId": "968f2aa040bc819a", "scanner": "scanner-primary", "fingerprint": "31c0b231c8bfa58b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6ba0f4d9b834c61a", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 apps/chat-app/client/src/hooks/Files/useFileHandling.ts:63"}, "properties": {"repobilityId": "044baf8b987a376d", "scanner": "scanner-primary", "fingerprint": "6ba0f4d9b834c61a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-8cb01a7596c05f6f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/client/src/hooks/Files/useFileHandling.ts:99"}, "properties": {"repobilityId": "5215f3d34576c863", "scanner": "scanner-primary", "fingerprint": "8cb01a7596c05f6f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3d1ff9855c0cb161", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/client/src/hooks/Files/useFileDeletion.ts:42"}, "properties": {"repobilityId": "5552642b71f6de0f", "scanner": "scanner-primary", "fingerprint": "3d1ff9855c0cb161", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e10c5b54a406ebf5", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/client/src/hooks/Files/useDragHelpers.ts:55"}, "properties": {"repobilityId": "e3f11f21e4dffb27", "scanner": "scanner-primary", "fingerprint": "e10c5b54a406ebf5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-55b444dd320e6490", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/config/helpers.js:68"}, "properties": {"repobilityId": "7bb108fb003e832f", "scanner": "scanner-primary", "fingerprint": "55b444dd320e6490", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b73fa297cc490339", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/config/prepare.js:9"}, "properties": {"repobilityId": "c678c39759953fb6", "scanner": "scanner-primary", "fingerprint": "b73fa297cc490339", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-55df6b6a3cca65ea", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/config/list-users.js:12"}, "properties": {"repobilityId": "d86a847e8c0c8161", "scanner": "scanner-primary", "fingerprint": "55df6b6a3cca65ea", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-10a02190a8691a0f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/config/delete-banner.js:29"}, "properties": {"repobilityId": "69e8b63837ab23fd", "scanner": "scanner-primary", "fingerprint": "10a02190a8691a0f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-eec3c07d0ced0083", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/config/reset-password.js:34"}, "properties": {"repobilityId": "bf5252d20d57c937", "scanner": "scanner-primary", "fingerprint": "eec3c07d0ced0083", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f9c0ab8168484cc3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/config/translations/comparisons.ts:27"}, "properties": {"repobilityId": "43bc0ba577487d2b", "scanner": "scanner-primary", "fingerprint": "f9c0ab8168484cc3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ed715fe76fc7811a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/config/translations/embeddings.ts:21"}, "properties": {"repobilityId": "aed4d9f29490250c", "scanner": "scanner-primary", "fingerprint": "ed715fe76fc7811a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9f2d58414b1f0ff7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/config/translations/file.ts:11"}, "properties": {"repobilityId": "e0063656b445136c", "scanner": "scanner-primary", "fingerprint": "9f2d58414b1f0ff7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3c47532c940e788e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/config/translations/process.ts:12"}, "properties": {"repobilityId": "40d2bca02115da82", "scanner": "scanner-primary", "fingerprint": "3c47532c940e788e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-34ff8171581f9b61", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/config/translations/keys.ts:34"}, "properties": {"repobilityId": "564f2c43b0a20ed3", "scanner": "scanner-primary", "fingerprint": "34ff8171581f9b61", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c77a9d9d02229aad", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/config/translations/instructions.ts:73"}, "properties": {"repobilityId": "3183b3b252f5043b", "scanner": "scanner-primary", "fingerprint": "c77a9d9d02229aad", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c789e8df3c7ef33d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/api/models/spendTokens.spec.js:276"}, "properties": {"repobilityId": "9cc298de0a7ccaf2", "scanner": "scanner-primary", "fingerprint": "c789e8df3c7ef33d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-156871caddf216bf", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/api/models/convoStructure.spec.js:272"}, "properties": {"repobilityId": "307b6e3cd0afb7bc", "scanner": "scanner-primary", "fingerprint": "156871caddf216bf", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5131cd34d85a4296", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 apps/chat-app/api/models/Prompt.js:180"}, "properties": {"repobilityId": "f5b236eb8dc93c4f", "scanner": "scanner-primary", "fingerprint": "5131cd34d85a4296", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-8a61e174f188adec", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/api/cache/getLogStores.js:105"}, "properties": {"repobilityId": "e1f648821eaaa8b0", "scanner": "scanner-primary", "fingerprint": "8a61e174f188adec", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-cef60fe1f8f2e0f6", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 apps/chat-app/api/app/clients/OpenAIClient.js:69"}, "properties": {"repobilityId": "ec32bd78a0a402fa", "scanner": "scanner-primary", "fingerprint": "cef60fe1f8f2e0f6", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-c45357e9f00da72e", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 apps/chat-app/api/app/clients/OllamaClient.js:149"}, "properties": {"repobilityId": "f2c21d793e404fea", "scanner": "scanner-primary", "fingerprint": "c45357e9f00da72e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-edaad2bbd2eb5e5a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/api/app/clients/memory/summaryBuffer.demo.js:21"}, "properties": {"repobilityId": "1795867e2a7cbdfd", "scanner": "scanner-primary", "fingerprint": "edaad2bbd2eb5e5a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-09a1a2613abb22a1", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 apps/chat-app/api/app/clients/tools/util/fileSearch.js:124"}, "properties": {"repobilityId": "9714b6a356f40f6c", "scanner": "scanner-primary", "fingerprint": "09a1a2613abb22a1", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-7723437804266906", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 apps/chat-app/api/app/clients/tools/structured/OpenAIImageTools.js:258"}, "properties": {"repobilityId": "9ff2492dd4d72fdf", "scanner": "scanner-primary", "fingerprint": "7723437804266906", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-597466dd796f8022", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/api/app/clients/tools/structured/specs/openWeather.integration.test.js:9"}, "properties": {"repobilityId": "8c3c72688b645542", "scanner": "scanner-primary", "fingerprint": "597466dd796f8022", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4247dbf9a9b5ad9e", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 apps/chat-app/api/app/clients/prompts/formatMessages.js:190"}, "properties": {"repobilityId": "64ca3609737feb45", "scanner": "scanner-primary", "fingerprint": "4247dbf9a9b5ad9e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-55b91f206f44d843", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/api/app/clients/specs/OpenAIClient.tokens.js:74"}, "properties": {"repobilityId": "57b1633f9474620e", "scanner": "scanner-primary", "fingerprint": "55b91f206f44d843", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e2419565687ac03b", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 apps/chat-app/api/server/middleware/buildEndpointOption.js:84"}, "properties": {"repobilityId": "ed00c95f9d334d87", "scanner": "scanner-primary", "fingerprint": "e2419565687ac03b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-a983ae8f8e45e9a4", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/api/server/middleware/requireLdapAuth.js:6"}, "properties": {"repobilityId": "d025d1bdcb9a7601", "scanner": "scanner-primary", "fingerprint": "a983ae8f8e45e9a4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2c918069c52764c2", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/api/server/utils/sendEmail.js:90"}, "properties": {"repobilityId": "1daa0865f59c6432", "scanner": "scanner-primary", "fingerprint": "2c918069c52764c2", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-803f3bd216234643", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/api/server/utils/__tests__/staticCache.spec.js:29"}, "properties": {"repobilityId": "f31ab98e7f9c98c8", "scanner": "scanner-primary", "fingerprint": "803f3bd216234643", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1a385f92c43fceed", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/api/server/utils/import/importers.spec.js:631"}, "properties": {"repobilityId": "cb9675e97d17d9a8", "scanner": "scanner-primary", "fingerprint": "1a385f92c43fceed", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d7155762cf1917ca", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 apps/chat-app/api/server/routes/roles.js:22"}, "properties": {"repobilityId": "f6f083d160c8499b", "scanner": "scanner-primary", "fingerprint": "d7155762cf1917ca", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-c8d159ca7527d4c3", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 apps/chat-app/api/server/routes/__tests__/config.spec.js:44"}, "properties": {"repobilityId": "ce62efacd1a97875", "scanner": "scanner-primary", "fingerprint": "c8d159ca7527d4c3", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-942afeacf5a26496", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 apps/chat-app/api/server/routes/files/files.js:408"}, "properties": {"repobilityId": "312892f69dc49ea4", "scanner": "scanner-primary", "fingerprint": "942afeacf5a26496", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-f018eea938885fe1", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 apps/chat-app/api/server/routes/files/images.js:29"}, "properties": {"repobilityId": "158ef98014283f95", "scanner": "scanner-primary", "fingerprint": "f018eea938885fe1", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-bc7e30b0e36a2783", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 apps/chat-app/api/server/routes/files/speech/tts.js:18"}, "properties": {"repobilityId": "f6f275e256976fbf", "scanner": "scanner-primary", "fingerprint": "bc7e30b0e36a2783", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-17267b171ec1f62e", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 apps/chat-app/api/server/routes/agents/actions.js:87"}, "properties": {"repobilityId": "763cfd0924be39a2", "scanner": "scanner-primary", "fingerprint": "17267b171ec1f62e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-f44c21d838962581", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 apps/chat-app/api/server/controllers/assistants/chatV2.js:144"}, "properties": {"repobilityId": "b3f01b63e37fc1a3", "scanner": "scanner-primary", "fingerprint": "f44c21d838962581", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-3ffdbb600d6579ed", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 apps/chat-app/api/server/controllers/assistants/chatV1.js:269"}, "properties": {"repobilityId": "7ae6f5b03e4fca76", "scanner": "scanner-primary", "fingerprint": "3ffdbb600d6579ed", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-3aa274b5a01ff45c", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 apps/chat-app/api/server/controllers/agents/client.js:169"}, "properties": {"repobilityId": "56a646987c29e3e6", "scanner": "scanner-primary", "fingerprint": "3aa274b5a01ff45c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-d13da30cbb6648a0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/api/server/services/PluginService.js:19"}, "properties": {"repobilityId": "e051a57c5ea35d16", "scanner": "scanner-primary", "fingerprint": "d13da30cbb6648a0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1cd6b2e009ff7da9", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 apps/chat-app/api/server/services/AssistantService.js:307"}, "properties": {"repobilityId": "18f589ccc543268b", "scanner": "scanner-primary", "fingerprint": "1cd6b2e009ff7da9", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-2d1edd3d0b382591", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 apps/chat-app/api/server/services/ToolService.js:346"}, "properties": {"repobilityId": "2161805f2a326803", "scanner": "scanner-primary", "fingerprint": "2d1edd3d0b382591", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-e556f4ab1fbe0acd", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 apps/chat-app/api/server/services/Endpoints/bedrock/initialize.js:37"}, "properties": {"repobilityId": "3e0abd64ab238c4e", "scanner": "scanner-primary", "fingerprint": "e556f4ab1fbe0acd", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-ca6b33e7439155d0", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 apps/chat-app/api/server/services/Endpoints/agents/initialize.js:51"}, "properties": {"repobilityId": "f7adee725d5b6804", "scanner": "scanner-primary", "fingerprint": "ca6b33e7439155d0", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-f8d3d7b8b382eda8", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/api/server/services/Runs/handle.js:207"}, "properties": {"repobilityId": "e873366257aceea1", "scanner": "scanner-primary", "fingerprint": "f8d3d7b8b382eda8", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2c5da507ab5da34f", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 apps/chat-app/api/server/services/Config/getCachedTools.js:155"}, "properties": {"repobilityId": "1210a5e08ad20dca", "scanner": "scanner-primary", "fingerprint": "2c5da507ab5da34f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-aa80376469b6ae74", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 apps/chat-app/api/server/services/Config/loadCustomConfig.js:157"}, "properties": {"repobilityId": "7d78dce777a68097", "scanner": "scanner-primary", "fingerprint": "aa80376469b6ae74", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-d21f51209727b2ad", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 apps/chat-app/api/server/services/Threads/manage.js:65"}, "properties": {"repobilityId": "485186c83e293ca2", "scanner": "scanner-primary", "fingerprint": "d21f51209727b2ad", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-9014e1a938d3d370", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/api/server/services/Artifacts/update.spec.js:92"}, "properties": {"repobilityId": "ba1612276488b5c5", "scanner": "scanner-primary", "fingerprint": "9014e1a938d3d370", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-792affcb3ac99167", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 apps/chat-app/api/server/services/Files/process.js:71"}, "properties": {"repobilityId": "ec895aef381a6a88", "scanner": "scanner-primary", "fingerprint": "792affcb3ac99167", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-deb9fd299eb3e287", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/api/strategies/appleStrategy.test.js:81"}, "properties": {"repobilityId": "3594b68d2dd2350c", "scanner": "scanner-primary", "fingerprint": "deb9fd299eb3e287", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-166cbb0119b2789f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/api/strategies/validators.spec.js:400"}, "properties": {"repobilityId": "1364ca70bb062728", "scanner": "scanner-primary", "fingerprint": "166cbb0119b2789f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9b15fcfb2e5b3425", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/packages/data-provider/server-rollup.config.js:11"}, "properties": {"repobilityId": "52f79767da3ecc39", "scanner": "scanner-primary", "fingerprint": "9b15fcfb2e5b3425", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1f88250386aa8a49", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 apps/chat-app/packages/data-provider/src/config.ts:949"}, "properties": {"repobilityId": "5d2b7e19aae3e5bb", "scanner": "scanner-primary", "fingerprint": "1f88250386aa8a49", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-57b29b356c4e1943", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 apps/chat-app/packages/data-provider/src/parsers.ts:160"}, "properties": {"repobilityId": "6413aecb2491d124", "scanner": "scanner-primary", "fingerprint": "57b29b356c4e1943", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-b48e5b8620e05331", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 apps/chat-app/packages/data-provider/src/actions.ts:264"}, "properties": {"repobilityId": "11e64526ecd756af", "scanner": "scanner-primary", "fingerprint": "b48e5b8620e05331", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-95c674ca7fef5ffa", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/packages/data-provider/src/request.ts:133"}, "properties": {"repobilityId": "11b6d83af027ae9d", "scanner": "scanner-primary", "fingerprint": "95c674ca7fef5ffa", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3fe8a75ab1677067", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 apps/chat-app/packages/data-provider/src/types.ts:156"}, "properties": {"repobilityId": "997ed225ce5a8012", "scanner": "scanner-primary", "fingerprint": "3fe8a75ab1677067", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-31e218ec563a7fd2", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/e2e/setup/cleanupUser.ts:14"}, "properties": {"repobilityId": "87b53f89d217f95f", "scanner": "scanner-primary", "fingerprint": "31e218ec563a7fd2", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1ee6cfdc2c3d55fc", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/e2e/setup/authenticate.ts:37"}, "properties": {"repobilityId": "32bbfe333eb1921a", "scanner": "scanner-primary", "fingerprint": "1ee6cfdc2c3d55fc", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6abc376ddf1bc32d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/e2e/specs/settings.spec.ts:38"}, "properties": {"repobilityId": "5ddfd42ae178254d", "scanner": "scanner-primary", "fingerprint": "6abc376ddf1bc32d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-88936143975efc39", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/chat-app/e2e/specs/messages.spec.ts:32"}, "properties": {"repobilityId": "1f786371bc287a30", "scanner": "scanner-primary", "fingerprint": "88936143975efc39", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7dec8ecbaa616bdb", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 .claude/hooks/secrets-scanner.js:57"}, "properties": {"repobilityId": "8f0da8fde33d825e", "scanner": "scanner-primary", "fingerprint": "7dec8ecbaa616bdb", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6595f400766de3e6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 .claude/hooks/commit-guard.js:36"}, "properties": {"repobilityId": "1de97d10046efc51", "scanner": "scanner-primary", "fingerprint": "6595f400766de3e6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8db5fe183cdcc5a5", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 .claude/hooks/bash-safety.js:19"}, "properties": {"repobilityId": "22b7a7b1ae562b8e", "scanner": "scanner-primary", "fingerprint": "8db5fe183cdcc5a5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e49177e2103dbbc5", "level": "warning", "message": {"text": "Privileged port 256 in use"}, "properties": {"repobilityId": "0ec1f2d0c9e6da94", "scanner": "scanner-primary", "fingerprint": "e49177e2103dbbc5", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "deploy/docker/.image-locks.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-08d718f4706c9580", "level": "warning", "message": {"text": "Privileged port 86 in use"}, "properties": {"repobilityId": "3505bf8ab5ea0a84", "scanner": "scanner-primary", "fingerprint": "08d718f4706c9580", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "deploy/docker/.image-locks.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-a19c134bf044d7e0", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: node:20-alpine"}, "properties": {"repobilityId": "b7175162beab7c59", "scanner": "scanner-primary", "fingerprint": "a19c134bf044d7e0", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/Dockerfile"}, "region": {"startLine": 4}}}]}, {"ruleId": "scanner-7b36cd4b638201fa", "level": "warning", "message": {"text": "Dockerfile runs as root: apps/chat-app/.devcontainer/Dockerfile"}, "properties": {"repobilityId": "fb2acb14f8aebcad", "scanner": "scanner-primary", "fingerprint": "7b36cd4b638201fa", "layer": "hardware", "severity": "medium", "confidence": 1.0, "tags": ["security", "container"]}}, {"ruleId": "scanner-b0e330008d290485", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: node:18-bullseye"}, "properties": {"repobilityId": "8dd51a0a68269403", "scanner": "scanner-primary", "fingerprint": "b0e330008d290485", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/.devcontainer/Dockerfile"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-6d6e48b48b820f85", "level": "warning", "message": {"text": "Insecure pattern 'weak_hash' in apps/control-plane/internal/payments/sslcommerz/rail.go:6"}, "properties": {"repobilityId": "a5d7edc9d1d6bcf2", "scanner": "scanner-primary", "fingerprint": "6d6e48b48b820f85", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "weak_hash"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/control-plane/internal/payments/sslcommerz/rail.go"}, "region": {"startLine": 6}}}]}, {"ruleId": "scanner-5762d76a31d74e62", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in apps/chat-app/client/index.html:40"}, "properties": {"repobilityId": "96bf42208af1f259", "scanner": "scanner-primary", "fingerprint": "5762d76a31d74e62", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/client/index.html"}, "region": {"startLine": 40}}}]}, {"ruleId": "scanner-16dc1433a6dc91ab", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in apps/chat-app/client/src/utils/mermaid.ts:62"}, "properties": {"repobilityId": "8d4f2e0972f9fe12", "scanner": "scanner-primary", "fingerprint": "16dc1433a6dc91ab", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/client/src/utils/mermaid.ts"}, "region": {"startLine": 62}}}]}, {"ruleId": "scanner-09ea2affb2e581b7", "level": "error", "message": {"text": "Possible secret in apps/chat-app/client/src/components/Auth/__tests__/LoginForm.spec.tsx"}, "properties": {"repobilityId": "24addc2302c2d67d", "scanner": "scanner-primary", "fingerprint": "09ea2affb2e581b7", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/client/src/components/Auth/__tests__/LoginForm.spec.tsx"}, "region": {"startLine": 127}}}]}, {"ruleId": "scanner-f89ca97f4a309b43", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in apps/chat-app/client/src/components/ui/MCP/CustomUserVarsSection.tsx:70"}, "properties": {"repobilityId": "c3c9726ef738a596", "scanner": "scanner-primary", "fingerprint": "f89ca97f4a309b43", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/client/src/components/ui/MCP/CustomUserVarsSection.tsx"}, "region": {"startLine": 70}}}]}, {"ruleId": "scanner-27aa03f077e4ab9d", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in apps/chat-app/client/src/components/Plugins/Store/PluginTooltip.tsx:15"}, "properties": {"repobilityId": "2d7cc9851e3ca6a1", "scanner": "scanner-primary", "fingerprint": "27aa03f077e4ab9d", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/client/src/components/Plugins/Store/PluginTooltip.tsx"}, "region": {"startLine": 15}}}]}, {"ruleId": "scanner-2193ae92ef41bfde", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in apps/chat-app/client/src/components/Artifacts/Mermaid.tsx:59"}, "properties": {"repobilityId": "2120a683fbfde2a9", "scanner": "scanner-primary", "fingerprint": "2193ae92ef41bfde", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/client/src/components/Artifacts/Mermaid.tsx"}, "region": {"startLine": 59}}}]}, {"ruleId": "scanner-554e589aafa44cb8", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in apps/chat-app/client/src/components/Banners/Banner.tsx:36"}, "properties": {"repobilityId": "ed0117975acfd3a4", "scanner": "scanner-primary", "fingerprint": "554e589aafa44cb8", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/client/src/components/Banners/Banner.tsx"}, "region": {"startLine": 36}}}]}, {"ruleId": "scanner-302cf8f32f31a50c", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in apps/chat-app/config/helpers.js:8"}, "properties": {"repobilityId": "614fc9300cb27c0c", "scanner": "scanner-primary", "fingerprint": "302cf8f32f31a50c", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/config/helpers.js"}, "region": {"startLine": 8}}}]}, {"ruleId": "scanner-1e4d0181bb904941", "level": "error", "message": {"text": "Insecure pattern 'exec_used' in apps/chat-app/config/prepare.js:4"}, "properties": {"repobilityId": "81aec0a6f7f3dd87", "scanner": "scanner-primary", "fingerprint": "1e4d0181bb904941", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["owasp", "exec_used"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/config/prepare.js"}, "region": {"startLine": 4}}}]}, {"ruleId": "scanner-edfee8f2a99d7edf", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in apps/chat-app/config/prepare.js:1"}, "properties": {"repobilityId": "66325353d308736e", "scanner": "scanner-primary", "fingerprint": "edfee8f2a99d7edf", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/config/prepare.js"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3840c32d46dd0fec", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in apps/chat-app/config/deployed-update.js:1"}, "properties": {"repobilityId": "76bc94f1c2f31529", "scanner": "scanner-primary", "fingerprint": "3840c32d46dd0fec", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/config/deployed-update.js"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-e459d8565b45d3dc", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in apps/chat-app/config/packages.js:5"}, "properties": {"repobilityId": "ef2a6cde5d172021", "scanner": "scanner-primary", "fingerprint": "e459d8565b45d3dc", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/config/packages.js"}, "region": {"startLine": 5}}}]}, {"ruleId": "scanner-8dc66c5265932c7a", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in apps/chat-app/config/update.js:4"}, "properties": {"repobilityId": "a591df34614e5738", "scanner": "scanner-primary", "fingerprint": "8dc66c5265932c7a", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/config/update.js"}, "region": {"startLine": 4}}}]}, {"ruleId": "scanner-b982a58b871dd25c", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in apps/chat-app/config/stop-backend.js:2"}, "properties": {"repobilityId": "4535979da319ea01", "scanner": "scanner-primary", "fingerprint": "b982a58b871dd25c", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/config/stop-backend.js"}, "region": {"startLine": 2}}}]}, {"ruleId": "scanner-3d1cf442981fac4f", "level": "error", "message": {"text": "Insecure pattern 'exec_used' in apps/chat-app/config/translations/comparisons.ts:34"}, "properties": {"repobilityId": "f341187be8154cc6", "scanner": "scanner-primary", "fingerprint": "3d1cf442981fac4f", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["owasp", "exec_used"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/config/translations/comparisons.ts"}, "region": {"startLine": 34}}}]}, {"ruleId": "scanner-68788838b4e7763c", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in apps/chat-app/config/translations/comparisons.ts:3"}, "properties": {"repobilityId": "f09e26a7bc4162ea", "scanner": "scanner-primary", "fingerprint": "68788838b4e7763c", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/config/translations/comparisons.ts"}, "region": {"startLine": 3}}}]}, {"ruleId": "scanner-04fcf53f5488ac33", "level": "error", "message": {"text": "Possible secret in apps/chat-app/api/server/index.spec.js"}, "properties": {"repobilityId": "faf534c7fed48605", "scanner": "scanner-primary", "fingerprint": "04fcf53f5488ac33", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/api/server/index.spec.js"}, "region": {"startLine": 75}}}]}, {"ruleId": "scanner-0b7ebca83c9ba499", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in apps/chat-app/api/server/index.js:61"}, "properties": {"repobilityId": "80c16ce00c5bc9da", "scanner": "scanner-primary", "fingerprint": "0b7ebca83c9ba499", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/api/server/index.js"}, "region": {"startLine": 61}}}]}, {"ruleId": "scanner-00026b8ca905daae", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in apps/chat-app/api/server/middleware/setHeaders.js:6"}, "properties": {"repobilityId": "d0f5e3f820389cfc", "scanner": "scanner-primary", "fingerprint": "00026b8ca905daae", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/api/server/middleware/setHeaders.js"}, "region": {"startLine": 6}}}]}, {"ruleId": "scanner-0dd6a44948714cfe", "level": "error", "message": {"text": "Insecure pattern 'eval_used' in apps/chat-app/api/server/services/AuthService.js:415"}, "properties": {"repobilityId": "1e0b9fea6fb9b8b5", "scanner": "scanner-primary", "fingerprint": "0dd6a44948714cfe", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["owasp", "eval_used"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/api/server/services/AuthService.js"}, "region": {"startLine": 415}}}]}, {"ruleId": "scanner-0518b6ba77ce2943", "level": "error", "message": {"text": "Possible secret in apps/chat-app/api/server/services/Config/loadConfigModels.spec.js"}, "properties": {"repobilityId": "62f4f7a55552ecc3", "scanner": "scanner-primary", "fingerprint": "0518b6ba77ce2943", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/api/server/services/Config/loadConfigModels.spec.js"}, "region": {"startLine": 210}}}]}, {"ruleId": "scanner-d92f9f885e683a77", "level": "error", "message": {"text": "Possible secret in apps/chat-app/api/server/services/start/checks.spec.js"}, "properties": {"repobilityId": "15a688c14b2a51c4", "scanner": "scanner-primary", "fingerprint": "d92f9f885e683a77", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/api/server/services/start/checks.spec.js"}, "region": {"startLine": 191}}}]}, {"ruleId": "scanner-7e88797aba36b133", "level": "error", "message": {"text": "Possible secret in apps/chat-app/api/strategies/validators.spec.js"}, "properties": {"repobilityId": "a339d5ec1c83684d", "scanner": "scanner-primary", "fingerprint": "7e88797aba36b133", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/api/strategies/validators.spec.js"}, "region": {"startLine": 10}}}]}, {"ruleId": "scanner-7e88797aba36b133", "level": "error", "message": {"text": "Possible secret in apps/chat-app/api/strategies/validators.spec.js"}, "properties": {"repobilityId": "a339d5ec1c83684d", "scanner": "scanner-primary", "fingerprint": "7e88797aba36b133", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/api/strategies/validators.spec.js"}, "region": {"startLine": 19}}}]}, {"ruleId": "scanner-7e88797aba36b133", "level": "error", "message": {"text": "Possible secret in apps/chat-app/api/strategies/validators.spec.js"}, "properties": {"repobilityId": "a339d5ec1c83684d", "scanner": "scanner-primary", "fingerprint": "7e88797aba36b133", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/api/strategies/validators.spec.js"}, "region": {"startLine": 39}}}]}, {"ruleId": "scanner-7e88797aba36b133", "level": "error", "message": {"text": "Possible secret in apps/chat-app/api/strategies/validators.spec.js"}, "properties": {"repobilityId": "a339d5ec1c83684d", "scanner": "scanner-primary", "fingerprint": "7e88797aba36b133", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/api/strategies/validators.spec.js"}, "region": {"startLine": 48}}}]}, {"ruleId": "scanner-7e88797aba36b133", "level": "error", "message": {"text": "Possible secret in apps/chat-app/api/strategies/validators.spec.js"}, "properties": {"repobilityId": "a339d5ec1c83684d", "scanner": "scanner-primary", "fingerprint": "7e88797aba36b133", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/api/strategies/validators.spec.js"}, "region": {"startLine": 56}}}]}, {"ruleId": "scanner-7e88797aba36b133", "level": "error", "message": {"text": "Possible secret in apps/chat-app/api/strategies/validators.spec.js"}, "properties": {"repobilityId": "a339d5ec1c83684d", "scanner": "scanner-primary", "fingerprint": "7e88797aba36b133", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/api/strategies/validators.spec.js"}, "region": {"startLine": 84}}}]}, {"ruleId": "scanner-7e88797aba36b133", "level": "error", "message": {"text": "Possible secret in apps/chat-app/api/strategies/validators.spec.js"}, "properties": {"repobilityId": "a339d5ec1c83684d", "scanner": "scanner-primary", "fingerprint": "7e88797aba36b133", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/api/strategies/validators.spec.js"}, "region": {"startLine": 85}}}]}, {"ruleId": "scanner-7e88797aba36b133", "level": "error", "message": {"text": "Possible secret in apps/chat-app/api/strategies/validators.spec.js"}, "properties": {"repobilityId": "a339d5ec1c83684d", "scanner": "scanner-primary", "fingerprint": "7e88797aba36b133", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/api/strategies/validators.spec.js"}, "region": {"startLine": 95}}}]}, {"ruleId": "scanner-7e88797aba36b133", "level": "error", "message": {"text": "Possible secret in apps/chat-app/api/strategies/validators.spec.js"}, "properties": {"repobilityId": "a339d5ec1c83684d", "scanner": "scanner-primary", "fingerprint": "7e88797aba36b133", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/api/strategies/validators.spec.js"}, "region": {"startLine": 96}}}]}, {"ruleId": "scanner-7e88797aba36b133", "level": "error", "message": {"text": "Possible secret in apps/chat-app/api/strategies/validators.spec.js"}, "properties": {"repobilityId": "a339d5ec1c83684d", "scanner": "scanner-primary", "fingerprint": "7e88797aba36b133", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/api/strategies/validators.spec.js"}, "region": {"startLine": 107}}}]}, {"ruleId": "scanner-7e88797aba36b133", "level": "error", "message": {"text": "Possible secret in apps/chat-app/api/strategies/validators.spec.js"}, "properties": {"repobilityId": "a339d5ec1c83684d", "scanner": "scanner-primary", "fingerprint": "7e88797aba36b133", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/api/strategies/validators.spec.js"}, "region": {"startLine": 108}}}]}, {"ruleId": "scanner-7e88797aba36b133", "level": "error", "message": {"text": "Possible secret in apps/chat-app/api/strategies/validators.spec.js"}, "properties": {"repobilityId": "a339d5ec1c83684d", "scanner": "scanner-primary", "fingerprint": "7e88797aba36b133", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/api/strategies/validators.spec.js"}, "region": {"startLine": 119}}}]}, {"ruleId": "scanner-7e88797aba36b133", "level": "error", "message": {"text": "Possible secret in apps/chat-app/api/strategies/validators.spec.js"}, "properties": {"repobilityId": "a339d5ec1c83684d", "scanner": "scanner-primary", "fingerprint": "7e88797aba36b133", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/api/strategies/validators.spec.js"}, "region": {"startLine": 120}}}]}, {"ruleId": "scanner-7e88797aba36b133", "level": "error", "message": {"text": "Possible secret in apps/chat-app/api/strategies/validators.spec.js"}, "properties": {"repobilityId": "a339d5ec1c83684d", "scanner": "scanner-primary", "fingerprint": "7e88797aba36b133", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/api/strategies/validators.spec.js"}, "region": {"startLine": 134}}}]}, {"ruleId": "scanner-7e88797aba36b133", "level": "error", "message": {"text": "Possible secret in apps/chat-app/api/strategies/validators.spec.js"}, "properties": {"repobilityId": "a339d5ec1c83684d", "scanner": "scanner-primary", "fingerprint": "7e88797aba36b133", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/api/strategies/validators.spec.js"}, "region": {"startLine": 135}}}]}, {"ruleId": "scanner-7e88797aba36b133", "level": "error", "message": {"text": "Possible secret in apps/chat-app/api/strategies/validators.spec.js"}, "properties": {"repobilityId": "a339d5ec1c83684d", "scanner": "scanner-primary", "fingerprint": "7e88797aba36b133", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/api/strategies/validators.spec.js"}, "region": {"startLine": 148}}}]}, {"ruleId": "scanner-7e88797aba36b133", "level": "error", "message": {"text": "Possible secret in apps/chat-app/api/strategies/validators.spec.js"}, "properties": {"repobilityId": "a339d5ec1c83684d", "scanner": "scanner-primary", "fingerprint": "7e88797aba36b133", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/api/strategies/validators.spec.js"}, "region": {"startLine": 149}}}]}, {"ruleId": "scanner-7e88797aba36b133", "level": "error", "message": {"text": "Possible secret in apps/chat-app/api/strategies/validators.spec.js"}, "properties": {"repobilityId": "a339d5ec1c83684d", "scanner": "scanner-primary", "fingerprint": "7e88797aba36b133", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/api/strategies/validators.spec.js"}, "region": {"startLine": 160}}}]}, {"ruleId": "scanner-7e88797aba36b133", "level": "error", "message": {"text": "Possible secret in apps/chat-app/api/strategies/validators.spec.js"}, "properties": {"repobilityId": "a339d5ec1c83684d", "scanner": "scanner-primary", "fingerprint": "7e88797aba36b133", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/api/strategies/validators.spec.js"}, "region": {"startLine": 161}}}]}, {"ruleId": "scanner-7e88797aba36b133", "level": "error", "message": {"text": "Possible secret in apps/chat-app/api/strategies/validators.spec.js"}, "properties": {"repobilityId": "a339d5ec1c83684d", "scanner": "scanner-primary", "fingerprint": "7e88797aba36b133", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/api/strategies/validators.spec.js"}, "region": {"startLine": 171}}}]}, {"ruleId": "scanner-7e88797aba36b133", "level": "error", "message": {"text": "Possible secret in apps/chat-app/api/strategies/validators.spec.js"}, "properties": {"repobilityId": "a339d5ec1c83684d", "scanner": "scanner-primary", "fingerprint": "7e88797aba36b133", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/api/strategies/validators.spec.js"}, "region": {"startLine": 172}}}]}, {"ruleId": "scanner-7e88797aba36b133", "level": "error", "message": {"text": "Possible secret in apps/chat-app/api/strategies/validators.spec.js"}, "properties": {"repobilityId": "a339d5ec1c83684d", "scanner": "scanner-primary", "fingerprint": "7e88797aba36b133", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/api/strategies/validators.spec.js"}, "region": {"startLine": 182}}}]}, {"ruleId": "scanner-7e88797aba36b133", "level": "error", "message": {"text": "Possible secret in apps/chat-app/api/strategies/validators.spec.js"}, "properties": {"repobilityId": "a339d5ec1c83684d", "scanner": "scanner-primary", "fingerprint": "7e88797aba36b133", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/api/strategies/validators.spec.js"}, "region": {"startLine": 183}}}]}, {"ruleId": "scanner-7e88797aba36b133", "level": "error", "message": {"text": "Possible secret in apps/chat-app/api/strategies/validators.spec.js"}, "properties": {"repobilityId": "a339d5ec1c83684d", "scanner": "scanner-primary", "fingerprint": "7e88797aba36b133", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/api/strategies/validators.spec.js"}, "region": {"startLine": 193}}}]}, {"ruleId": "scanner-7e88797aba36b133", "level": "error", "message": {"text": "Possible secret in apps/chat-app/api/strategies/validators.spec.js"}, "properties": {"repobilityId": "a339d5ec1c83684d", "scanner": "scanner-primary", "fingerprint": "7e88797aba36b133", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/api/strategies/validators.spec.js"}, "region": {"startLine": 194}}}]}, {"ruleId": "scanner-7e88797aba36b133", "level": "error", "message": {"text": "Possible secret in apps/chat-app/api/strategies/validators.spec.js"}, "properties": {"repobilityId": "a339d5ec1c83684d", "scanner": "scanner-primary", "fingerprint": "7e88797aba36b133", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/api/strategies/validators.spec.js"}, "region": {"startLine": 204}}}]}, {"ruleId": "scanner-7e88797aba36b133", "level": "error", "message": {"text": "Possible secret in apps/chat-app/api/strategies/validators.spec.js"}, "properties": {"repobilityId": "a339d5ec1c83684d", "scanner": "scanner-primary", "fingerprint": "7e88797aba36b133", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/api/strategies/validators.spec.js"}, "region": {"startLine": 205}}}]}, {"ruleId": "scanner-7e88797aba36b133", "level": "error", "message": {"text": "Possible secret in apps/chat-app/api/strategies/validators.spec.js"}, "properties": {"repobilityId": "a339d5ec1c83684d", "scanner": "scanner-primary", "fingerprint": "7e88797aba36b133", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/api/strategies/validators.spec.js"}, "region": {"startLine": 226}}}]}, {"ruleId": "scanner-7e88797aba36b133", "level": "error", "message": {"text": "Possible secret in apps/chat-app/api/strategies/validators.spec.js"}, "properties": {"repobilityId": "a339d5ec1c83684d", "scanner": "scanner-primary", "fingerprint": "7e88797aba36b133", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/api/strategies/validators.spec.js"}, "region": {"startLine": 227}}}]}, {"ruleId": "scanner-7e88797aba36b133", "level": "error", "message": {"text": "Possible secret in apps/chat-app/api/strategies/validators.spec.js"}, "properties": {"repobilityId": "a339d5ec1c83684d", "scanner": "scanner-primary", "fingerprint": "7e88797aba36b133", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/api/strategies/validators.spec.js"}, "region": {"startLine": 259}}}]}, {"ruleId": "scanner-7e88797aba36b133", "level": "error", "message": {"text": "Possible secret in apps/chat-app/api/strategies/validators.spec.js"}, "properties": {"repobilityId": "a339d5ec1c83684d", "scanner": "scanner-primary", "fingerprint": "7e88797aba36b133", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/api/strategies/validators.spec.js"}, "region": {"startLine": 260}}}]}, {"ruleId": "scanner-7e88797aba36b133", "level": "error", "message": {"text": "Possible secret in apps/chat-app/api/strategies/validators.spec.js"}, "properties": {"repobilityId": "a339d5ec1c83684d", "scanner": "scanner-primary", "fingerprint": "7e88797aba36b133", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/api/strategies/validators.spec.js"}, "region": {"startLine": 388}}}]}, {"ruleId": "scanner-7e88797aba36b133", "level": "error", "message": {"text": "Possible secret in apps/chat-app/api/strategies/validators.spec.js"}, "properties": {"repobilityId": "a339d5ec1c83684d", "scanner": "scanner-primary", "fingerprint": "7e88797aba36b133", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/api/strategies/validators.spec.js"}, "region": {"startLine": 389}}}]}, {"ruleId": "scanner-7e88797aba36b133", "level": "error", "message": {"text": "Possible secret in apps/chat-app/api/strategies/validators.spec.js"}, "properties": {"repobilityId": "a339d5ec1c83684d", "scanner": "scanner-primary", "fingerprint": "7e88797aba36b133", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/api/strategies/validators.spec.js"}, "region": {"startLine": 423}}}]}, {"ruleId": "scanner-7e88797aba36b133", "level": "error", "message": {"text": "Possible secret in apps/chat-app/api/strategies/validators.spec.js"}, "properties": {"repobilityId": "a339d5ec1c83684d", "scanner": "scanner-primary", "fingerprint": "7e88797aba36b133", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/api/strategies/validators.spec.js"}, "region": {"startLine": 424}}}]}, {"ruleId": "scanner-7e88797aba36b133", "level": "error", "message": {"text": "Possible secret in apps/chat-app/api/strategies/validators.spec.js"}, "properties": {"repobilityId": "a339d5ec1c83684d", "scanner": "scanner-primary", "fingerprint": "7e88797aba36b133", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/api/strategies/validators.spec.js"}, "region": {"startLine": 448}}}]}, {"ruleId": "scanner-7e88797aba36b133", "level": "error", "message": {"text": "Possible secret in apps/chat-app/api/strategies/validators.spec.js"}, "properties": {"repobilityId": "a339d5ec1c83684d", "scanner": "scanner-primary", "fingerprint": "7e88797aba36b133", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/api/strategies/validators.spec.js"}, "region": {"startLine": 449}}}]}, {"ruleId": "scanner-fc208dea8d4c3f79", "level": "error", "message": {"text": "Insecure pattern 'eval_used' in apps/chat-app/api/strategies/openIdJwtStrategy.js:21"}, "properties": {"repobilityId": "80cc00d9d0c39df1", "scanner": "scanner-primary", "fingerprint": "fc208dea8d4c3f79", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["owasp", "eval_used"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/api/strategies/openIdJwtStrategy.js"}, "region": {"startLine": 21}}}]}, {"ruleId": "scanner-993c86ee48d89a66", "level": "error", "message": {"text": "Possible secret in apps/chat-app/packages/api/src/mcp/mcp.spec.ts"}, "properties": {"repobilityId": "b2892b783ff81c91", "scanner": "scanner-primary", "fingerprint": "993c86ee48d89a66", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/packages/api/src/mcp/mcp.spec.ts"}, "region": {"startLine": 772}}}]}, {"ruleId": "scanner-993c86ee48d89a66", "level": "error", "message": {"text": "Possible secret in apps/chat-app/packages/api/src/mcp/mcp.spec.ts"}, "properties": {"repobilityId": "b2892b783ff81c91", "scanner": "scanner-primary", "fingerprint": "993c86ee48d89a66", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/packages/api/src/mcp/mcp.spec.ts"}, "region": {"startLine": 789}}}]}, {"ruleId": "scanner-993c86ee48d89a66", "level": "error", "message": {"text": "Possible secret in apps/chat-app/packages/api/src/mcp/mcp.spec.ts"}, "properties": {"repobilityId": "f269d88be06ed7f6", "scanner": "scanner-primary", "fingerprint": "993c86ee48d89a66", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/packages/api/src/mcp/mcp.spec.ts"}, "region": {"startLine": 490}}}]}, {"ruleId": "scanner-f899bdcf82da0e21", "level": "error", "message": {"text": "Insecure pattern 'eval_used' in apps/chat-app/packages/api/src/utils/math.ts:35"}, "properties": {"repobilityId": "bccfdea14725bd46", "scanner": "scanner-primary", "fingerprint": "f899bdcf82da0e21", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["owasp", "eval_used"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/packages/api/src/utils/math.ts"}, "region": {"startLine": 35}}}]}, {"ruleId": "scanner-48faf7c1a58ab57c", "level": "error", "message": {"text": "Insecure pattern 'private_key_in_repo' in apps/chat-app/packages/api/src/utils/key.test.ts:19"}, "properties": {"repobilityId": "69b9d46ce8707312", "scanner": "scanner-primary", "fingerprint": "48faf7c1a58ab57c", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["owasp", "private_key_in_repo"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/packages/api/src/utils/key.test.ts"}, "region": {"startLine": 19}}}]}, {"ruleId": "scanner-2354b6a9cfe27950", "level": "error", "message": {"text": "Possible secret in apps/chat-app/packages/api/src/files/mistral/crud.spec.ts"}, "properties": {"repobilityId": "9152083110fa4bca", "scanner": "scanner-primary", "fingerprint": "2354b6a9cfe27950", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/packages/api/src/files/mistral/crud.spec.ts"}, "region": {"startLine": 975}}}]}, {"ruleId": "scanner-2354b6a9cfe27950", "level": "error", "message": {"text": "Possible secret in apps/chat-app/packages/api/src/files/mistral/crud.spec.ts"}, "properties": {"repobilityId": "9152083110fa4bca", "scanner": "scanner-primary", "fingerprint": "2354b6a9cfe27950", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/packages/api/src/files/mistral/crud.spec.ts"}, "region": {"startLine": 1029}}}]}, {"ruleId": "scanner-2354b6a9cfe27950", "level": "error", "message": {"text": "Possible secret in apps/chat-app/packages/api/src/files/mistral/crud.spec.ts"}, "properties": {"repobilityId": "9152083110fa4bca", "scanner": "scanner-primary", "fingerprint": "2354b6a9cfe27950", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/packages/api/src/files/mistral/crud.spec.ts"}, "region": {"startLine": 1315}}}]}, {"ruleId": "scanner-2354b6a9cfe27950", "level": "error", "message": {"text": "Possible secret in apps/chat-app/packages/api/src/files/mistral/crud.spec.ts"}, "properties": {"repobilityId": "9152083110fa4bca", "scanner": "scanner-primary", "fingerprint": "2354b6a9cfe27950", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/packages/api/src/files/mistral/crud.spec.ts"}, "region": {"startLine": 1536}}}]}, {"ruleId": "scanner-12ce04aea6d1c782", "level": "error", "message": {"text": "Possible secret in apps/chat-app/packages/api/src/web/web.spec.ts"}, "properties": {"repobilityId": "c5ab9ad424198fc2", "scanner": "scanner-primary", "fingerprint": "12ce04aea6d1c782", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/packages/api/src/web/web.spec.ts"}, "region": {"startLine": 340}}}]}, {"ruleId": "scanner-049410a02c958023", "level": "error", "message": {"text": "Insecure pattern 'eval_used' in apps/chat-app/packages/data-schemas/src/methods/user.ts:152"}, "properties": {"repobilityId": "bf86e0978aff281e", "scanner": "scanner-primary", "fingerprint": "049410a02c958023", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["owasp", "eval_used"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/packages/data-schemas/src/methods/user.ts"}, "region": {"startLine": 152}}}]}, {"ruleId": "scanner-b98e763d8275ddc8", "level": "error", "message": {"text": "Insecure pattern 'eval_used' in apps/chat-app/packages/data-schemas/src/methods/session.ts:16"}, "properties": {"repobilityId": "54a09b8bdb5b22d8", "scanner": "scanner-primary", "fingerprint": "b98e763d8275ddc8", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["owasp", "eval_used"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/packages/data-schemas/src/methods/session.ts"}, "region": {"startLine": 16}}}]}, {"ruleId": "scanner-e5d45653f10919fa", "level": "error", "message": {"text": "Insecure pattern 'exec_used' in scripts/seed-demo/main.go:150"}, "properties": {"repobilityId": "7f87d1a97a9b656a", "scanner": "scanner-primary", "fingerprint": "e5d45653f10919fa", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["owasp", "exec_used"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/seed-demo/main.go"}, "region": {"startLine": 150}}}]}, {"ruleId": "scanner-151526e8307fe6e4", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in packages/openai-contract/scripts/lint-no-customer-usd.test.mjs:7"}, "properties": {"repobilityId": "12ecf2f18a145788", "scanner": "scanner-primary", "fingerprint": "151526e8307fe6e4", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/openai-contract/scripts/lint-no-customer-usd.test.mjs"}, "region": {"startLine": 7}}}]}, {"ruleId": "scanner-4d56323ae3bfe117", "level": "error", "message": {"text": "Possible secret in supabase/functions/e2e-fixtures/index.ts"}, "properties": {"repobilityId": "8a4c4cbbd329057c", "scanner": "scanner-primary", "fingerprint": "4d56323ae3bfe117", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/e2e-fixtures/index.ts"}, "region": {"startLine": 45}}}]}, {"ruleId": "scanner-4d56323ae3bfe117", "level": "error", "message": {"text": "Possible secret in supabase/functions/e2e-fixtures/index.ts"}, "properties": {"repobilityId": "8a4c4cbbd329057c", "scanner": "scanner-primary", "fingerprint": "4d56323ae3bfe117", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/e2e-fixtures/index.ts"}, "region": {"startLine": 46}}}]}, {"ruleId": "scanner-78e9b2844c27deeb", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in tools/lint-no-direct-tenant-setting.mjs:7"}, "properties": {"repobilityId": "667d8b0803d5d0f3", "scanner": "scanner-primary", "fingerprint": "78e9b2844c27deeb", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "tools/lint-no-direct-tenant-setting.mjs"}, "region": {"startLine": 7}}}]}, {"ruleId": "scanner-e2286d7e698b2396", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in tools/lint-no-direct-audit-write.mjs:6"}, "properties": {"repobilityId": "3c35ab7d40df7d6f", "scanner": "scanner-primary", "fingerprint": "e2286d7e698b2396", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "tools/lint-no-direct-audit-write.mjs"}, "region": {"startLine": 6}}}]}, {"ruleId": "scanner-b5522a1aa3e17fe4", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in tools/lint-no-direct-tenant-id.mjs:7"}, "properties": {"repobilityId": "59b6223f61120c0f", "scanner": "scanner-primary", "fingerprint": "b5522a1aa3e17fe4", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "tools/lint-no-direct-tenant-id.mjs"}, "region": {"startLine": 7}}}]}, {"ruleId": "scanner-2409b4ec264ffa72", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "65590094b6545fcd", "scanner": "scanner-primary", "fingerprint": "2409b4ec264ffa72", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/.github/workflows/helmcharts.yml"}, "region": {"startLine": 16}}}]}, {"ruleId": "scanner-2409b4ec264ffa72", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "0153eb144a985f77", "scanner": "scanner-primary", "fingerprint": "2409b4ec264ffa72", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/.github/workflows/helmcharts.yml"}, "region": {"startLine": 26}}}]}, {"ruleId": "scanner-2409b4ec264ffa72", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "34b70464c51e7525", "scanner": "scanner-primary", "fingerprint": "2409b4ec264ffa72", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/.github/workflows/helmcharts.yml"}, "region": {"startLine": 35}}}]}, {"ruleId": "scanner-a33ba7e025cc67bc", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "4a4395cba389df55", "scanner": "scanner-primary", "fingerprint": "a33ba7e025cc67bc", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/.github/workflows/helmcharts.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-2ef76ee3691c0fbd", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "98c6002ce619a9de", "scanner": "scanner-primary", "fingerprint": "2ef76ee3691c0fbd", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/.github/workflows/i18n-unused-keys.yml"}, "region": {"startLine": 17}}}]}, {"ruleId": "scanner-bbd38b7b8281fe81", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "76df2f12ed76709c", "scanner": "scanner-primary", "fingerprint": "bbd38b7b8281fe81", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/.github/workflows/backend-review.yml"}, "region": {"startLine": 29}}}]}, {"ruleId": "scanner-5297ebc2162660b1", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "6212b915c7452ec2", "scanner": "scanner-primary", "fingerprint": "5297ebc2162660b1", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/.github/workflows/main-image-workflow.yml"}, "region": {"startLine": 21}}}]}, {"ruleId": "scanner-5297ebc2162660b1", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "4ec0dc11d3ddce95", "scanner": "scanner-primary", "fingerprint": "5297ebc2162660b1", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/.github/workflows/main-image-workflow.yml"}, "region": {"startLine": 30}}}]}, {"ruleId": "scanner-5297ebc2162660b1", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "4b0c2625917496b0", "scanner": "scanner-primary", "fingerprint": "5297ebc2162660b1", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/.github/workflows/main-image-workflow.yml"}, "region": {"startLine": 34}}}]}, {"ruleId": "scanner-5297ebc2162660b1", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "9c727f49d563be22", "scanner": "scanner-primary", "fingerprint": "5297ebc2162660b1", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/.github/workflows/main-image-workflow.yml"}, "region": {"startLine": 38}}}]}, {"ruleId": "scanner-5297ebc2162660b1", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "71263eb74d748385", "scanner": "scanner-primary", "fingerprint": "5297ebc2162660b1", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/.github/workflows/main-image-workflow.yml"}, "region": {"startLine": 46}}}]}, {"ruleId": "scanner-5297ebc2162660b1", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "13ad2c2b2c48006d", "scanner": "scanner-primary", "fingerprint": "5297ebc2162660b1", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/.github/workflows/main-image-workflow.yml"}, "region": {"startLine": 58}}}]}, {"ruleId": "scanner-9761170cd7912894", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "f5d694312698199c", "scanner": "scanner-primary", "fingerprint": "9761170cd7912894", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/.github/workflows/dev-images.yml"}, "region": {"startLine": 29}}}]}, {"ruleId": "scanner-9761170cd7912894", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "d9c69f1c656dd13c", "scanner": "scanner-primary", "fingerprint": "9761170cd7912894", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/.github/workflows/dev-images.yml"}, "region": {"startLine": 33}}}]}, {"ruleId": "scanner-9761170cd7912894", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "46989002ad0e5ea4", "scanner": "scanner-primary", "fingerprint": "9761170cd7912894", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/.github/workflows/dev-images.yml"}, "region": {"startLine": 37}}}]}, {"ruleId": "scanner-9761170cd7912894", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "3770aa5484fb7fad", "scanner": "scanner-primary", "fingerprint": "9761170cd7912894", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/.github/workflows/dev-images.yml"}, "region": {"startLine": 41}}}]}, {"ruleId": "scanner-9761170cd7912894", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "7da8a36de4019fa1", "scanner": "scanner-primary", "fingerprint": "9761170cd7912894", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/.github/workflows/dev-images.yml"}, "region": {"startLine": 49}}}]}, {"ruleId": "scanner-9761170cd7912894", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "c766a2a597fd0ef3", "scanner": "scanner-primary", "fingerprint": "9761170cd7912894", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/.github/workflows/dev-images.yml"}, "region": {"startLine": 61}}}]}, {"ruleId": "scanner-0ea920247bb94c78", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "d15158abd7e485c8", "scanner": "scanner-primary", "fingerprint": "0ea920247bb94c78", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/.github/workflows/deploy.yml"}, "region": {"startLine": 20}}}]}, {"ruleId": "scanner-0ea920247bb94c78", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "74fbcaceb8f740a6", "scanner": "scanner-primary", "fingerprint": "0ea920247bb94c78", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/.github/workflows/deploy.yml"}, "region": {"startLine": 23}}}]}, {"ruleId": "scanner-0ea920247bb94c78", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "40298d304005a690", "scanner": "scanner-primary", "fingerprint": "0ea920247bb94c78", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/.github/workflows/deploy.yml"}, "region": {"startLine": 28}}}]}, {"ruleId": "scanner-fb326d819e23a985", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "81055609432bca76", "scanner": "scanner-primary", "fingerprint": "fb326d819e23a985", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/.github/workflows/frontend-review.yml"}, "region": {"startLine": 21}}}]}, {"ruleId": "scanner-fb326d819e23a985", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "81055609432bca76", "scanner": "scanner-primary", "fingerprint": "fb326d819e23a985", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/.github/workflows/frontend-review.yml"}, "region": {"startLine": 43}}}]}, {"ruleId": "scanner-106bbf1e699e8390", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "7782717f9c781af9", "scanner": "scanner-primary", "fingerprint": "106bbf1e699e8390", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/.github/workflows/eslint-ci.yml"}, "region": {"startLine": 23}}}]}, {"ruleId": "scanner-106bbf1e699e8390", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "842fe73f54abdeb5", "scanner": "scanner-primary", "fingerprint": "106bbf1e699e8390", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/.github/workflows/eslint-ci.yml"}, "region": {"startLine": 28}}}]}, {"ruleId": "scanner-106bbf1e699e8390", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "fdcd9003d3b375b1", "scanner": "scanner-primary", "fingerprint": "106bbf1e699e8390", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/.github/workflows/eslint-ci.yml"}, "region": {"startLine": 70}}}]}, {"ruleId": "scanner-eddfed6e65b447f7", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "dc56464d698055e6", "scanner": "scanner-primary", "fingerprint": "eddfed6e65b447f7", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/.github/workflows/client.yml"}, "region": {"startLine": 18}}}]}, {"ruleId": "scanner-d8ef459ea9a61554", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "f0f9d89e4bbd062d", "scanner": "scanner-primary", "fingerprint": "d8ef459ea9a61554", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/.github/workflows/data-schemas.yml"}, "region": {"startLine": 23}}}]}, {"ruleId": "scanner-dc4a7d94b52dd1ea", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "9c63838646060992", "scanner": "scanner-primary", "fingerprint": "dc4a7d94b52dd1ea", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/.github/workflows/locize-i18n-sync.yml"}, "region": {"startLine": 15}}}]}, {"ruleId": "scanner-dc4a7d94b52dd1ea", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "32a70e4434dd640b", "scanner": "scanner-primary", "fingerprint": "dc4a7d94b52dd1ea", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/.github/workflows/locize-i18n-sync.yml"}, "region": {"startLine": 18}}}]}, {"ruleId": "scanner-dc4a7d94b52dd1ea", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "9c63838646060992", "scanner": "scanner-primary", "fingerprint": "dc4a7d94b52dd1ea", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/.github/workflows/locize-i18n-sync.yml"}, "region": {"startLine": 47}}}]}, {"ruleId": "scanner-dc4a7d94b52dd1ea", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "0d709a0d55a8874e", "scanner": "scanner-primary", "fingerprint": "dc4a7d94b52dd1ea", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/.github/workflows/locize-i18n-sync.yml"}, "region": {"startLine": 51}}}]}, {"ruleId": "scanner-dc4a7d94b52dd1ea", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "90f78bdf4684e5e0", "scanner": "scanner-primary", "fingerprint": "dc4a7d94b52dd1ea", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/.github/workflows/locize-i18n-sync.yml"}, "region": {"startLine": 58}}}]}, {"ruleId": "scanner-e80a34f9c3185ce5", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "fda77dcb2f699579", "scanner": "scanner-primary", "fingerprint": "e80a34f9c3185ce5", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/.github/workflows/locize-i18n-sync.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-537649d62b96a481", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "6b9935e15487b9e1", "scanner": "scanner-primary", "fingerprint": "537649d62b96a481", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/.github/workflows/tag-images.yml"}, "region": {"startLine": 24}}}]}, {"ruleId": "scanner-537649d62b96a481", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "4bb6613fdecd8c77", "scanner": "scanner-primary", "fingerprint": "537649d62b96a481", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/.github/workflows/tag-images.yml"}, "region": {"startLine": 28}}}]}, {"ruleId": "scanner-537649d62b96a481", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "193ab0a5f6f45613", "scanner": "scanner-primary", "fingerprint": "537649d62b96a481", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/.github/workflows/tag-images.yml"}, "region": {"startLine": 32}}}]}, {"ruleId": "scanner-537649d62b96a481", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "37ce58b1b6f557e2", "scanner": "scanner-primary", "fingerprint": "537649d62b96a481", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/.github/workflows/tag-images.yml"}, "region": {"startLine": 36}}}]}, {"ruleId": "scanner-537649d62b96a481", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "620a5d044fc8e6bf", "scanner": "scanner-primary", "fingerprint": "537649d62b96a481", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/.github/workflows/tag-images.yml"}, "region": {"startLine": 44}}}]}, {"ruleId": "scanner-537649d62b96a481", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "cdd9805952eabf08", "scanner": "scanner-primary", "fingerprint": "537649d62b96a481", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/.github/workflows/tag-images.yml"}, "region": {"startLine": 56}}}]}, {"ruleId": "scanner-b250f851cdfddfb9", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "3041f7f21be8da3d", "scanner": "scanner-primary", "fingerprint": "b250f851cdfddfb9", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/.github/workflows/dev-branch-images.yml"}, "region": {"startLine": 29}}}]}, {"ruleId": "scanner-b250f851cdfddfb9", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "822dc621a057c960", "scanner": "scanner-primary", "fingerprint": "b250f851cdfddfb9", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/.github/workflows/dev-branch-images.yml"}, "region": {"startLine": 33}}}]}, {"ruleId": "scanner-b250f851cdfddfb9", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "45aa356654e8a16a", "scanner": "scanner-primary", "fingerprint": "b250f851cdfddfb9", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/.github/workflows/dev-branch-images.yml"}, "region": {"startLine": 37}}}]}, {"ruleId": "scanner-b250f851cdfddfb9", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "8640ff4bc1737c20", "scanner": "scanner-primary", "fingerprint": "b250f851cdfddfb9", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/.github/workflows/dev-branch-images.yml"}, "region": {"startLine": 41}}}]}, {"ruleId": "scanner-b250f851cdfddfb9", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "d001dc6ea8fb029a", "scanner": "scanner-primary", "fingerprint": "b250f851cdfddfb9", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/.github/workflows/dev-branch-images.yml"}, "region": {"startLine": 49}}}]}, {"ruleId": "scanner-b250f851cdfddfb9", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "45a8d03073bd7a7e", "scanner": "scanner-primary", "fingerprint": "b250f851cdfddfb9", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/.github/workflows/dev-branch-images.yml"}, "region": {"startLine": 61}}}]}, {"ruleId": "scanner-fa75f9efb3bc2c7c", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "53663ef1bde6f6e3", "scanner": "scanner-primary", "fingerprint": "fa75f9efb3bc2c7c", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/.github/workflows/deploy-dev.yml"}, "region": {"startLine": 19}}}]}, {"ruleId": "scanner-fa75f9efb3bc2c7c", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "e777b1a71ec3060f", "scanner": "scanner-primary", "fingerprint": "fa75f9efb3bc2c7c", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/.github/workflows/deploy-dev.yml"}, "region": {"startLine": 22}}}]}, {"ruleId": "scanner-4b65e7b558f055ed", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "f72eb11cc659446b", "scanner": "scanner-primary", "fingerprint": "4b65e7b558f055ed", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/.github/workflows/unused-packages.yml"}, "region": {"startLine": 21}}}]}, {"ruleId": "scanner-54e85c2b63e3ed76", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "63f303deae0a97ee", "scanner": "scanner-primary", "fingerprint": "54e85c2b63e3ed76", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/.github/workflows/generate-release-changelog-pr.yml"}, "region": {"startLine": 18}}}]}, {"ruleId": "scanner-54e85c2b63e3ed76", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "e6ba6a790e006470", "scanner": "scanner-primary", "fingerprint": "54e85c2b63e3ed76", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/.github/workflows/generate-release-changelog-pr.yml"}, "region": {"startLine": 25}}}]}, {"ruleId": "scanner-54e85c2b63e3ed76", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "c6911a29e76b0d4d", "scanner": "scanner-primary", "fingerprint": "54e85c2b63e3ed76", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/.github/workflows/generate-release-changelog-pr.yml"}, "region": {"startLine": 84}}}]}, {"ruleId": "scanner-6186bcf3bb32b5cc", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "a19736101ba80c92", "scanner": "scanner-primary", "fingerprint": "6186bcf3bb32b5cc", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/.github/workflows/generate-release-changelog-pr.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-4e540d481ba6d6b3", "level": "error", "message": {"text": "GitHub Action tracks a moving branch"}, "properties": {"repobilityId": "7670fd580463f531", "scanner": "scanner-primary", "fingerprint": "4e540d481ba6d6b3", "layer": "cicd", "severity": "high", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/.github/workflows/build.yml"}, "region": {"startLine": 15}}}]}, {"ruleId": "scanner-1145d16416bb3758", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "3fb03e74fae93b72", "scanner": "scanner-primary", "fingerprint": "1145d16416bb3758", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/.github/workflows/build.yml"}, "region": {"startLine": 18}}}]}, {"ruleId": "scanner-1145d16416bb3758", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "956e596d65ccd653", "scanner": "scanner-primary", "fingerprint": "1145d16416bb3758", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/.github/workflows/build.yml"}, "region": {"startLine": 23}}}]}, {"ruleId": "scanner-1145d16416bb3758", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "956e596d65ccd653", "scanner": "scanner-primary", "fingerprint": "1145d16416bb3758", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/.github/workflows/build.yml"}, "region": {"startLine": 32}}}]}, {"ruleId": "scanner-bf1a07b4fb979881", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "0e95ebcaf87917e8", "scanner": "scanner-primary", "fingerprint": "bf1a07b4fb979881", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/.github/workflows/generate-unreleased-changelog-pr.yml"}, "region": {"startLine": 17}}}]}, {"ruleId": "scanner-bf1a07b4fb979881", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "b3aca2c0c38ae0e9", "scanner": "scanner-primary", "fingerprint": "bf1a07b4fb979881", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/.github/workflows/generate-unreleased-changelog-pr.yml"}, "region": {"startLine": 33}}}]}, {"ruleId": "scanner-bf1a07b4fb979881", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "1a653987835e2842", "scanner": "scanner-primary", "fingerprint": "bf1a07b4fb979881", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/.github/workflows/generate-unreleased-changelog-pr.yml"}, "region": {"startLine": 95}}}]}, {"ruleId": "scanner-1a75d9cc3c0c4cc1", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "6d17b96a977d7eda", "scanner": "scanner-primary", "fingerprint": "1a75d9cc3c0c4cc1", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/.github/workflows/generate-unreleased-changelog-pr.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3b088b0a371a90d6", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "6faedef9e9bc7ae1", "scanner": "scanner-primary", "fingerprint": "3b088b0a371a90d6", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/pr-cleanup.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-36fd3c86ff87e5ff", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "d1ed83d087fbc18f", "scanner": "scanner-primary", "fingerprint": "36fd3c86ff87e5ff", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/deploy-staging.yml"}, "region": {"startLine": 112}}}]}, {"ruleId": "scanner-36fd3c86ff87e5ff", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "c3559dc885902863", "scanner": "scanner-primary", "fingerprint": "36fd3c86ff87e5ff", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/deploy-staging.yml"}, "region": {"startLine": 119}}}]}, {"ruleId": "scanner-36fd3c86ff87e5ff", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "58fdc3d1824e9788", "scanner": "scanner-primary", "fingerprint": "36fd3c86ff87e5ff", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/deploy-staging.yml"}, "region": {"startLine": 122}}}]}, {"ruleId": "scanner-36fd3c86ff87e5ff", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "3a4263b4e3e0d77f", "scanner": "scanner-primary", "fingerprint": "36fd3c86ff87e5ff", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/deploy-staging.yml"}, "region": {"startLine": 388}}}]}, {"ruleId": "scanner-a629b120390fd551", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "ed62bce030a81a93", "scanner": "scanner-primary", "fingerprint": "a629b120390fd551", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/deploy-staging.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "41f8ef414a406764", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 164}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "54c8f1b47dd62535", "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": 288}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "41f8ef414a406764", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 312}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "bd7f3c1c34d83159", "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": 412}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "54c8f1b47dd62535", "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": 511}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "41f8ef414a406764", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 532}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "54c8f1b47dd62535", "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": 587}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "bd7f3c1c34d83159", "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": 653}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "bd7f3c1c34d83159", "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": 661}}}]}, {"ruleId": "scanner-48090f6675fa2e68", "level": "note", "message": {"text": "Very large file: apps/web-console/lib/control-plane/client.ts (2069 lines)"}, "properties": {"repobilityId": "d8c0444426f20283", "scanner": "scanner-primary", "fingerprint": "48090f6675fa2e68", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-15d4c3481bfbe57f", "level": "note", "message": {"text": "Very large file: apps/chat-app/api/typedefs.js (1983 lines)"}, "properties": {"repobilityId": "2fc46d57d42611a8", "scanner": "scanner-primary", "fingerprint": "15d4c3481bfbe57f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-d54615e9d60de1eb", "level": "note", "message": {"text": "Very large file: apps/chat-app/api/models/Agent.spec.js (2660 lines)"}, "properties": {"repobilityId": "cd2070dc5f824bcc", "scanner": "scanner-primary", "fingerprint": "d54615e9d60de1eb", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-3a2bafdf1961fd1a", "level": "note", "message": {"text": "Very large file: apps/chat-app/api/app/clients/OpenAIClient.js (1565 lines)"}, "properties": {"repobilityId": "a3cb8908529bdd1d", "scanner": "scanner-primary", "fingerprint": "3a2bafdf1961fd1a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-d53540c7c38ef352", "level": "note", "message": {"text": "Very large file: apps/chat-app/packages/api/src/mcp/zod.spec.ts (1818 lines)"}, "properties": {"repobilityId": "d700930ec58a3cab", "scanner": "scanner-primary", "fingerprint": "d53540c7c38ef352", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-7b66beec156931fa", "level": "note", "message": {"text": "Very large file: apps/chat-app/packages/data-provider/src/artifacts.ts (3104 lines)"}, "properties": {"repobilityId": "6e75214e7f25cf41", "scanner": "scanner-primary", "fingerprint": "7b66beec156931fa", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-ea3b5e389d8c9c0f", "level": "note", "message": {"text": "Low test-to-source ratio"}, "properties": {"repobilityId": "ef7b2552cc00a375", "scanner": "scanner-primary", "fingerprint": "ea3b5e389d8c9c0f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["tests"]}}, {"ruleId": "scanner-4fc6e967d4418d48", "level": "note", "message": {"text": "98 TODO/FIXME markers"}, "properties": {"repobilityId": "4b38c118003e07d2", "scanner": "scanner-primary", "fingerprint": "4fc6e967d4418d48", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["maintenance"]}}, {"ruleId": "scanner-b3ed68815bca2f8c", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: package.json"}, "properties": {"repobilityId": "7edae0550c126386", "scanner": "scanner-primary", "fingerprint": "b3ed68815bca2f8c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-6113d41f93c2bcd7", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: apps/chat-app/client/package.json"}, "properties": {"repobilityId": "1927bd2f01bcfbac", "scanner": "scanner-primary", "fingerprint": "6113d41f93c2bcd7", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/client/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-e26a24633365fd74", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: apps/chat-app/api/package.json"}, "properties": {"repobilityId": "415aef52ec830cdd", "scanner": "scanner-primary", "fingerprint": "e26a24633365fd74", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/api/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-649e6366e41281d2", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: apps/chat-app/packages/api/package.json"}, "properties": {"repobilityId": "ff4e00a5f2e95b9f", "scanner": "scanner-primary", "fingerprint": "649e6366e41281d2", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/packages/api/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-fb2fe7a242ad9d87", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: apps/chat-app/packages/data-provider/package.json"}, "properties": {"repobilityId": "2a488cd6f4291191", "scanner": "scanner-primary", "fingerprint": "fb2fe7a242ad9d87", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/packages/data-provider/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-eb92484a26ebc358", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: apps/chat-app/packages/data-provider/react-query/package.json"}, "properties": {"repobilityId": "1fa7d4e0c5365218", "scanner": "scanner-primary", "fingerprint": "eb92484a26ebc358", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/packages/data-provider/react-query/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-711a9e3b69417836", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: apps/chat-app/packages/data-schemas/package.json"}, "properties": {"repobilityId": "3ddec32b45708613", "scanner": "scanner-primary", "fingerprint": "711a9e3b69417836", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/chat-app/packages/data-schemas/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-51c8fc43b8e5d29e", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: website/sovereign/package.json"}, "properties": {"repobilityId": "5b937b61551ddfed", "scanner": "scanner-primary", "fingerprint": "51c8fc43b8e5d29e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "website/sovereign/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-4e47ca3c3b6ff22d", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/sdk-tests/js/package.json"}, "properties": {"repobilityId": "c294daa93039c676", "scanner": "scanner-primary", "fingerprint": "4e47ca3c3b6ff22d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/sdk-tests/js/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "730f47d43e42d26c", "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": "3fe5b87e2f1e7d27", "scanner": "scanner-primary", "fingerprint": "72b2a6250083a784", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "incomplete", "generated-repo-pattern"]}}, {"ruleId": "scanner-9d79c4077342a7d0", "level": "warning", "message": {"text": "Runtime service client appears to use placeholder configuration"}, "properties": {"repobilityId": "fe5a87fe46b4590b", "scanner": "scanner-primary", "fingerprint": "9d79c4077342a7d0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "runtime-config", "service-client", "generated-repo-pattern"]}}, {"ruleId": "scanner-2d0c7b7ab8f8aacf", "level": "warning", "message": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "properties": {"repobilityId": "4b0764c68b1814d9", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-749d4bc1bd66df5f", "level": "warning", "message": {"text": "Agent instructions exist but release-hardening basics are missing"}, "properties": {"repobilityId": "f77995059d165096", "scanner": "scanner-primary", "fingerprint": "749d4bc1bd66df5f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-ea8f3013f588db25", "level": "note", "message": {"text": "Shallow git history limits provenance confidence"}, "properties": {"repobilityId": "fe75b520930b3dcf", "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": "33660693e4d311eb", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-ef9c1b1c3284b4a1", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/skills/memory-tools.md"}, "properties": {"repobilityId": "fa25e0ab187bc8b4", "scanner": "scanner-primary", "fingerprint": "ef9c1b1c3284b4a1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/memory-tools.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3443af2a9beda06a", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/skills/explore-codebase.md"}, "properties": {"repobilityId": "ae28d1ddc8f26e78", "scanner": "scanner-primary", "fingerprint": "3443af2a9beda06a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/explore-codebase.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-081889b478a0b8ac", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web-console/middleware.ts:52"}, "properties": {"repobilityId": "3a28ec2726dd27a7", "scanner": "scanner-primary", "fingerprint": "081889b478a0b8ac", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-145f85cd539426c6", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/web-console/tests/unit/invoice-decode.test.ts:7"}, "properties": {"repobilityId": "4397be7da347b516", "scanner": "scanner-primary", "fingerprint": "145f85cd539426c6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1f5cdd9b2f5062ab", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web-console/tests/unit/viewer-gates.test.ts:5"}, "properties": {"repobilityId": "d4dc73c7191e3a84", "scanner": "scanner-primary", "fingerprint": "1f5cdd9b2f5062ab", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a972ac12491ee8d1", "level": "none", "message": {"text": "Commented-code block (12 lines) in apps/web-console/tests/unit/permissions.parity.test.ts:35"}, "properties": {"repobilityId": "586239ca6f67e82c", "scanner": "scanner-primary", "fingerprint": "a972ac12491ee8d1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0196640d6c206fe6", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/web-console/tests/e2e/billing-fx-zero-leak.spec.ts:9"}, "properties": {"repobilityId": "3594a82864d8595c", "scanner": "scanner-primary", "fingerprint": "0196640d6c206fe6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c693043ab77a306c", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/web-console/tests/e2e/console-billing.spec.ts:10"}, "properties": {"repobilityId": "a72c95bd8c0e1bc3", "scanner": "scanner-primary", "fingerprint": "c693043ab77a306c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8bcba51095f86769", "level": "none", "message": {"text": "Commented-code block (11 lines) in apps/web-console/tests/e2e/console-fx-guard.spec.ts:15"}, "properties": {"repobilityId": "7a41d6888acdba39", "scanner": "scanner-primary", "fingerprint": "8bcba51095f86769", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5f633a5c0ac0102b", "level": "none", "message": {"text": "Commented-code block (7 lines) in apps/web-console/tests/e2e/support/e2e-auth-fixtures.mjs:110"}, "properties": {"repobilityId": "a7b0f1aa83c19112", "scanner": "scanner-primary", "fingerprint": "5f633a5c0ac0102b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2a4139e794b36894", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web-console/tests/e2e/support/reset-profile.ts:3"}, "properties": {"repobilityId": "52113c001c32f37b", "scanner": "scanner-primary", "fingerprint": "2a4139e794b36894", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8e6b09b450a472bb", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/web-console/components/app-shell/console-shell.tsx:105"}, "properties": {"repobilityId": "2bc61463db924c9c", "scanner": "scanner-primary", "fingerprint": "8e6b09b450a472bb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-31629889acbc57af", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/web-console/components/billing/checkout-modal.tsx:94"}, "properties": {"repobilityId": "8c693c022e677094", "scanner": "scanner-primary", "fingerprint": "31629889acbc57af", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-10103f1c32a15175", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/web-console/components/billing/checkout-modal.test.tsx:103"}, "properties": {"repobilityId": "0c10595c5371b311", "scanner": "scanner-primary", "fingerprint": "10103f1c32a15175", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3fbf23c9f1781ac2", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web-console/components/api-keys/api-key-create-form.tsx:69"}, "properties": {"repobilityId": "4a640a4be47da15f", "scanner": "scanner-primary", "fingerprint": "3fbf23c9f1781ac2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a629a4838f1a7b39", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web-console/app/layout.tsx:23"}, "properties": {"repobilityId": "4abab0f29eab9bce", "scanner": "scanner-primary", "fingerprint": "a629a4838f1a7b39", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-06694707f156845d", "level": "none", "message": {"text": "Commented-code block (8 lines) in apps/web-console/app/auth/callback/route.ts:53"}, "properties": {"repobilityId": "5d73735ccbb35a17", "scanner": "scanner-primary", "fingerprint": "06694707f156845d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4509262ea6ede160", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web-console/app/auth/sign-out/route.ts:15"}, "properties": {"repobilityId": "e601e761e139abbe", "scanner": "scanner-primary", "fingerprint": "4509262ea6ede160", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a862b09cedbbeb21", "level": "none", "message": {"text": "Commented-code block (7 lines) in apps/web-console/app/api/auth/signup-precheck/route.ts:3"}, "properties": {"repobilityId": "3cdbc5b423559e09", "scanner": "scanner-primary", "fingerprint": "a862b09cedbbeb21", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-91ef29b7e01c3086", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web-console/app/api/console/members/route.ts:10"}, "properties": {"repobilityId": "aa94dd4c21e390a5", "scanner": "scanner-primary", "fingerprint": "91ef29b7e01c3086", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d04e9b08f828383e", "level": "none", "message": {"text": "Commented-code block (7 lines) in apps/web-console/app/console/layout.tsx:16"}, "properties": {"repobilityId": "53bdb0aa74615bf3", "scanner": "scanner-primary", "fingerprint": "d04e9b08f828383e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-970cb903d3d8b396", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web-console/app/console/api-keys/[id]/limits/page.tsx:28"}, "properties": {"repobilityId": "0a5754afad254ead", "scanner": "scanner-primary", "fingerprint": "970cb903d3d8b396", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4f62222a3217f54f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web-console/app/console/api-keys/[id]/limits/page.tsx:21"}, "properties": {"repobilityId": "a90a73315a6d4243", "scanner": "scanner-primary", "fingerprint": "4f62222a3217f54f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4f10e18963068548", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web-console/lib/api-keys.ts:104"}, "properties": {"repobilityId": "ce2063bdb9f343d3", "scanner": "scanner-primary", "fingerprint": "4f10e18963068548", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-01433494fcd18162", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web-console/lib/http/origin.ts:3"}, "properties": {"repobilityId": "544fdf5336084d4b", "scanner": "scanner-primary", "fingerprint": "01433494fcd18162", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9599c09ae1efd7e6", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web-console/lib/control-plane/client.ts:538"}, "properties": {"repobilityId": "ae9b3057f959eed5", "scanner": "scanner-primary", "fingerprint": "9599c09ae1efd7e6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2ac1a28a3f6fa2e7", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web-console/lib/control-plane/client.ts:423"}, "properties": {"repobilityId": "114c202a3c6ac0cc", "scanner": "scanner-primary", "fingerprint": "2ac1a28a3f6fa2e7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e72954cb53766a69", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web-console/lib/control-plane/types.ts:3"}, "properties": {"repobilityId": "11617db26aeec036", "scanner": "scanner-primary", "fingerprint": "e72954cb53766a69", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-44fcb8b954a1a984", "level": "none", "message": {"text": "Commented-code block (23 lines) in apps/chat-app/eslint.config.mjs:146"}, "properties": {"repobilityId": "07b992a940a9985a", "scanner": "scanner-primary", "fingerprint": "44fcb8b954a1a984", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-77777a1c5fc070f1", "level": "none", "message": {"text": "Commented-code block (10 lines) in apps/chat-app/client/jest.config.cjs:15"}, "properties": {"repobilityId": "286a193273542ea6", "scanner": "scanner-primary", "fingerprint": "77777a1c5fc070f1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-211d22f20ebeffb5", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/chat-app/client/src/utils/files.ts:68"}, "properties": {"repobilityId": "1774ec1a1e975a6c", "scanner": "scanner-primary", "fingerprint": "211d22f20ebeffb5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b98ae2840ce72c45", "level": "none", "message": {"text": "Commented-code block (8 lines) in apps/chat-app/client/src/utils/artifacts.ts:45"}, "properties": {"repobilityId": "2d5e8e1e972b651b", "scanner": "scanner-primary", "fingerprint": "b98ae2840ce72c45", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a3707bb3a3bea3cc", "level": "none", "message": {"text": "Commented-code block (12 lines) in apps/chat-app/client/src/components/Auth/__tests__/Registration.spec.tsx:159"}, "properties": {"repobilityId": "e5c5f07e5ee2f18f", "scanner": "scanner-primary", "fingerprint": "a3707bb3a3bea3cc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-836d55fbb98d5825", "level": "none", "message": {"text": "Commented-code block (8 lines) in apps/chat-app/client/src/components/Chat/Menus/Endpoints/CustomMenu.tsx:191"}, "properties": {"repobilityId": "4350c0d5731890c3", "scanner": "scanner-primary", "fingerprint": "836d55fbb98d5825", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-90b3b9f1a6f4a73d", "level": "note", "message": {"text": "Legacy-named symbol `com_endpoint_deprecated` in apps/chat-app/client/src/components/Chat/Menus/Endpoints/components/EndpointItem.tsx:94"}, "properties": {"repobilityId": "9d29990713bea4f5", "scanner": "scanner-primary", "fingerprint": "90b3b9f1a6f4a73d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-11f438c77961fcac", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/chat-app/client/src/components/Chat/Input/StreamAudio.tsx:96"}, "properties": {"repobilityId": "4a265d89fa2ce105", "scanner": "scanner-primary", "fingerprint": "11f438c77961fcac", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a9f1e12f699bce32", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/chat-app/client/src/components/Chat/Messages/Content/DialogImage.tsx:40"}, "properties": {"repobilityId": "eb5e16f8d23d96bd", "scanner": "scanner-primary", "fingerprint": "a9f1e12f699bce32", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-51f89fcd6e0b0e20", "level": "none", "message": {"text": "Commented-code block (9 lines) in apps/chat-app/client/src/components/Chat/Messages/Content/ImageGen.tsx:20"}, "properties": {"repobilityId": "d56b3ff83ce92d8a", "scanner": "scanner-primary", "fingerprint": "51f89fcd6e0b0e20", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-506b1a4015514539", "level": "none", "message": {"text": "Commented-code block (12 lines) in apps/chat-app/client/src/components/ui/InputNumber.tsx:32"}, "properties": {"repobilityId": "4888c79ba80a0f25", "scanner": "scanner-primary", "fingerprint": "506b1a4015514539", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a38f093245daf28a", "level": "none", "message": {"text": "Commented-code block (9 lines) in apps/chat-app/client/src/components/SidePanel/Agents/ActionsTable/Columns.tsx:45"}, "properties": {"repobilityId": "a6c8b1367180cc12", "scanner": "scanner-primary", "fingerprint": "a38f093245daf28a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d6f7134071aaf558", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/chat-app/client/src/components/SidePanel/Parameters/Panel.tsx:57"}, "properties": {"repobilityId": "ce4ab129ca79d70b", "scanner": "scanner-primary", "fingerprint": "d6f7134071aaf558", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-97dc703c096d1b4a", "level": "none", "message": {"text": "Commented-code block (9 lines) in apps/chat-app/client/src/components/SidePanel/Builder/ActionsTable/Columns.tsx:45"}, "properties": {"repobilityId": "0132940af9cf0db0", "scanner": "scanner-primary", "fingerprint": "97dc703c096d1b4a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ce648543b042b9c5", "level": "note", "message": {"text": "Legacy-named symbol `hive_locale_v1` in apps/chat-app/client/src/components/Nav/LanguagePicker/FirstRunLanguageModal.tsx:11"}, "properties": {"repobilityId": "084dedd91910d222", "scanner": "scanner-primary", "fingerprint": "ce648543b042b9c5", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-9af50e3d44dc2757", "level": "note", "message": {"text": "Legacy-named symbol `com_ui_regenerate_backup` in apps/chat-app/client/src/components/Nav/SettingsTabs/Account/BackupCodesItem.tsx:168"}, "properties": {"repobilityId": "b6051527b896785b", "scanner": "scanner-primary", "fingerprint": "9af50e3d44dc2757", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-11e3e7ab4fbf9833", "level": "note", "message": {"text": "Legacy-named symbol `com_ui_download_backup` in apps/chat-app/client/src/components/Nav/SettingsTabs/Account/TwoFactorPhases/BackupPhase.tsx:52"}, "properties": {"repobilityId": "4c1703d4d37a6dc0", "scanner": "scanner-primary", "fingerprint": "11e3e7ab4fbf9833", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-994dda9aca3ea121", "level": "note", "message": {"text": "Legacy-named symbol `hive_locale_v1` in apps/chat-app/client/src/hooks/useFirstRunLocale.ts:11"}, "properties": {"repobilityId": "bca0befa8b2689b7", "scanner": "scanner-primary", "fingerprint": "994dda9aca3ea121", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-6575f439a867b6e3", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/chat-app/client/src/hooks/useChatBadges.ts:18"}, "properties": {"repobilityId": "824ea0154ff15316", "scanner": "scanner-primary", "fingerprint": "6575f439a867b6e3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0a1840774c2af3d9", "level": "none", "message": {"text": "Commented-code block (9 lines) in apps/chat-app/client/src/hooks/Chat/useChatHelpers.ts:58"}, "properties": {"repobilityId": "acf74c6403cfe69b", "scanner": "scanner-primary", "fingerprint": "0a1840774c2af3d9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9836a28a4b6a7b75", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/chat-app/client/src/store/submission.ts:8"}, "properties": {"repobilityId": "3dbcb490a462d8a7", "scanner": "scanner-primary", "fingerprint": "9836a28a4b6a7b75", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7817683515e299c3", "level": "none", "message": {"text": "Commented-code block (15 lines) in apps/chat-app/api/typedefs.js:1641"}, "properties": {"repobilityId": "f442b0c55e3649c6", "scanner": "scanner-primary", "fingerprint": "7817683515e299c3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-48696985006857da", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/chat-app/api/models/Transaction.js:77"}, "properties": {"repobilityId": "f3b84da1f8032488", "scanner": "scanner-primary", "fingerprint": "48696985006857da", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6224c966f4340671", "level": "none", "message": {"text": "Commented-code block (8 lines) in apps/chat-app/api/test/__mocks__/openid-client.js:29"}, "properties": {"repobilityId": "d27660e91673e1ab", "scanner": "scanner-primary", "fingerprint": "6224c966f4340671", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b857ba50cc0aeb06", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/chat-app/api/app/clients/BaseClient.js:132"}, "properties": {"repobilityId": "c3957d278d264e2b", "scanner": "scanner-primary", "fingerprint": "b857ba50cc0aeb06", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-1bdd6de402a933e2", "level": "none", "message": {"text": "Commented-code block (7 lines) in apps/chat-app/api/app/clients/agents/CustomAgent/outputParser.js:48"}, "properties": {"repobilityId": "9329f79717431561", "scanner": "scanner-primary", "fingerprint": "1bdd6de402a933e2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-67e782e55b59698e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/chat-app/api/app/clients/tools/structured/GoogleSearch.js:51"}, "properties": {"repobilityId": "22f928b47f4d39a6", "scanner": "scanner-primary", "fingerprint": "67e782e55b59698e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-de954ae937e0b5b8", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/chat-app/api/app/clients/tools/structured/TavilySearch.js:22"}, "properties": {"repobilityId": "bdc1cb95e69ef115", "scanner": "scanner-primary", "fingerprint": "de954ae937e0b5b8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3994f179dcd96309", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/chat-app/api/app/clients/tools/structured/TavilySearchResults.js:105"}, "properties": {"repobilityId": "47edad5412adebf1", "scanner": "scanner-primary", "fingerprint": "3994f179dcd96309", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c61764a636bdf16a", "level": "none", "message": {"text": "Commented-code block (26 lines) in apps/chat-app/api/app/clients/tools/structured/Wolfram.js:16"}, "properties": {"repobilityId": "08eca7cb4357b120", "scanner": "scanner-primary", "fingerprint": "c61764a636bdf16a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-08ca5bf9353e3502", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/chat-app/api/app/clients/tools/structured/OpenWeather.js:100"}, "properties": {"repobilityId": "6cd84ac6208f6ca3", "scanner": "scanner-primary", "fingerprint": "08ca5bf9353e3502", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-da0169a9f581f20e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/chat-app/api/app/clients/tools/structured/FluxAPI.js:300"}, "properties": {"repobilityId": "a6a8ee939c28ba2f", "scanner": "scanner-primary", "fingerprint": "da0169a9f581f20e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-455db9b92a321fb0", "level": "none", "message": {"text": "Commented-code block (12 lines) in apps/chat-app/api/app/clients/tools/structured/DALLE3.js:62"}, "properties": {"repobilityId": "d3889b01fe7bfe0c", "scanner": "scanner-primary", "fingerprint": "455db9b92a321fb0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-eadb35b33a3a3188", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/chat-app/api/app/clients/tools/structured/DALLE3.js:168"}, "properties": {"repobilityId": "0261a2d0a6409f47", "scanner": "scanner-primary", "fingerprint": "eadb35b33a3a3188", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d8b4ab6c7f056fa4", "level": "none", "message": {"text": "Commented-code block (9 lines) in apps/chat-app/api/app/clients/tools/structured/StableDiffusion.js:37"}, "properties": {"repobilityId": "b8caa3bc82d5e1bf", "scanner": "scanner-primary", "fingerprint": "d8b4ab6c7f056fa4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ea0fbfb0abeeb7e5", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/chat-app/api/server/controllers/UserController.js:106"}, "properties": {"repobilityId": "9be5efbbd565fd41", "scanner": "scanner-primary", "fingerprint": "ea0fbfb0abeeb7e5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-36cee926634a2c72", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/chat-app/api/server/controllers/agents/client.js:169"}, "properties": {"repobilityId": "e531382662728a43", "scanner": "scanner-primary", "fingerprint": "36cee926634a2c72", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a1215f036771cee3", "level": "none", "message": {"text": "Commented-code block (7 lines) in apps/chat-app/api/server/controllers/agents/errors.js:131"}, "properties": {"repobilityId": "bbd1ac94457bff47", "scanner": "scanner-primary", "fingerprint": "a1215f036771cee3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9f054e423f74de06", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/chat-app/api/server/services/ModelService.js:137"}, "properties": {"repobilityId": "ec1516e861227f0b", "scanner": "scanner-primary", "fingerprint": "9f054e423f74de06", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-34ae217d3282007c", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/chat-app/api/server/services/Runs/handle.js:200"}, "properties": {"repobilityId": "38d1c86df270bfb1", "scanner": "scanner-primary", "fingerprint": "34ae217d3282007c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7355bb3bb58a4ae1", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/chat-app/api/server/services/Config/getCachedTools.js:203"}, "properties": {"repobilityId": "ced4eaa9f1d1ce63", "scanner": "scanner-primary", "fingerprint": "7355bb3bb58a4ae1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c018017f0a5a7809", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/chat-app/api/server/services/Threads/manage.js:65"}, "properties": {"repobilityId": "23d6473d9dc39bb2", "scanner": "scanner-primary", "fingerprint": "c018017f0a5a7809", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7dc7b4e7287d845f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/chat-app/api/strategies/openidStrategy.js:56"}, "properties": {"repobilityId": "19051d173ac13854", "scanner": "scanner-primary", "fingerprint": "7dc7b4e7287d845f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-0d0c6d4c0c1e906f", "level": "none", "message": {"text": "Commented-code block (8 lines) in apps/chat-app/packages/api/jest.config.mjs:11"}, "properties": {"repobilityId": "cdfc840010ee5bf0", "scanner": "scanner-primary", "fingerprint": "0d0c6d4c0c1e906f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f8a8dcd04d925c49", "level": "none", "message": {"text": "Commented-code block (15 lines) in apps/chat-app/packages/api/src/mcp/parsers.ts:15"}, "properties": {"repobilityId": "c56ad1bdbbdc05ce", "scanner": "scanner-primary", "fingerprint": "f8a8dcd04d925c49", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-79b173028e10ed01", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/chat-app/packages/api/src/mcp/connection.ts:201"}, "properties": {"repobilityId": "829799bbf03d3e7a", "scanner": "scanner-primary", "fingerprint": "79b173028e10ed01", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-8043c73c45df9c98", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/chat-app/packages/api/src/mcp/oauth/handler.ts:507"}, "properties": {"repobilityId": "30495b0a23274f19", "scanner": "scanner-primary", "fingerprint": "8043c73c45df9c98", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-215ecbe36fa8a534", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/chat-app/packages/api/src/utils/generators.ts:38"}, "properties": {"repobilityId": "ad5d23a78c94c03c", "scanner": "scanner-primary", "fingerprint": "215ecbe36fa8a534", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-da21690cfac67fcd", "level": "none", "message": {"text": "Commented-code block (8 lines) in apps/chat-app/packages/data-provider/jest.config.js:9"}, "properties": {"repobilityId": "f551174d113138b0", "scanner": "scanner-primary", "fingerprint": "da21690cfac67fcd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3561e61bead963eb", "level": "note", "message": {"text": "Legacy-named symbol `_host_copy` in apps/chat-app/packages/data-provider/src/types/assistants.ts:487"}, "properties": {"repobilityId": "b0a4d67332edf86c", "scanner": "scanner-primary", "fingerprint": "3561e61bead963eb", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-fc0a118332c09c49", "level": "none", "message": {"text": "Commented-code block (8 lines) in apps/chat-app/packages/data-schemas/jest.config.mjs:10"}, "properties": {"repobilityId": "33a9977df3c58a17", "scanner": "scanner-primary", "fingerprint": "fc0a118332c09c49", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-37f1c65b4446a0f4", "level": "none", "message": {"text": "Commented-code block (7 lines) in website/sovereign/tailwind.config.ts:3"}, "properties": {"repobilityId": "5c8e53da7c41b229", "scanner": "scanner-primary", "fingerprint": "37f1c65b4446a0f4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-20e03a497d54a671", "level": "none", "message": {"text": "Commented-code block (6 lines) in website/sovereign/astro.config.mjs:11"}, "properties": {"repobilityId": "cbef1e043982f3f5", "scanner": "scanner-primary", "fingerprint": "20e03a497d54a671", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d6e055c0fce7a806", "level": "none", "message": {"text": "Commented-code block (7 lines) in website/sovereign/src/content.config.ts:3"}, "properties": {"repobilityId": "0a6a187118dd3f47", "scanner": "scanner-primary", "fingerprint": "d6e055c0fce7a806", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fc6aca8f2826a92a", "level": "none", "message": {"text": "Commented-code block (5 lines) in website/sovereign/src/integrations/content-lint.ts:8"}, "properties": {"repobilityId": "e09c56157741fa01", "scanner": "scanner-primary", "fingerprint": "fc6aca8f2826a92a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0b439c2e51efd5da", "level": "none", "message": {"text": "Commented-code block (5 lines) in website/sovereign/src/components/charts/TcoCrossover.tsx:4"}, "properties": {"repobilityId": "0603b893cb757e04", "scanner": "scanner-primary", "fingerprint": "0b439c2e51efd5da", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f5838160eec0a078", "level": "none", "message": {"text": "Commented-code block (9 lines) in deploy/docker/pipelines/hive_jwt_forward.py:34"}, "properties": {"repobilityId": "04a6e2c23ea7470b", "scanner": "scanner-primary", "fingerprint": "f5838160eec0a078", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9bcc4ac8df4a8823", "level": "note", "message": {"text": "Stub function `on_startup` (body is just `pass`/`return`) \u2014 deploy/docker/pipelines/hive_jwt_forward.py:24"}, "properties": {"repobilityId": "106ac37275ec0e59", "scanner": "scanner-primary", "fingerprint": "9bcc4ac8df4a8823", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "empty-handler", "dead-code"]}}, {"ruleId": "scanner-05c405a6b3dc6783", "level": "none", "message": {"text": "Commented-code block (12 lines) in deploy/geo-router/src/index.js:7"}, "properties": {"repobilityId": "fc023d2df97ce21b", "scanner": "scanner-primary", "fingerprint": "05c405a6b3dc6783", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-372078c664033cf2", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 deploy/geo-router/src/index.js:51"}, "properties": {"repobilityId": "2227691a7fdf5e85", "scanner": "scanner-primary", "fingerprint": "372078c664033cf2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a17404cad8386dce", "level": "none", "message": {"text": "Commented-code block (10 lines) in packages/openai-contract/scripts/lint-no-customer-usd.mjs:53"}, "properties": {"repobilityId": "f5dee7cd73786c06", "scanner": "scanner-primary", "fingerprint": "a17404cad8386dce", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7482ca0bab9b0def", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/openai-contract/scripts/lint-no-customer-usd.test.mjs:323"}, "properties": {"repobilityId": "9ca9e9c4de43bc22", "scanner": "scanner-primary", "fingerprint": "7482ca0bab9b0def", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-90e689576c92c750", "level": "none", "message": {"text": "Commented-code block (6 lines) in packages/openai-contract/scripts/lint-no-bare-role-check.mjs:7"}, "properties": {"repobilityId": "4a0f0963241c6fed", "scanner": "scanner-primary", "fingerprint": "90e689576c92c750", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-106b9480fc61647e", "level": "none", "message": {"text": "Commented-code block (10 lines) in .claude/hooks/secrets-scanner.js:2"}, "properties": {"repobilityId": "400962fbef377745", "scanner": "scanner-primary", "fingerprint": "106b9480fc61647e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-03c06d8ea089cc74", "level": "none", "message": {"text": "Commented-code block (9 lines) in supabase/functions/e2e-fixtures/index.ts:15"}, "properties": {"repobilityId": "cbe141a986826688", "scanner": "scanner-primary", "fingerprint": "03c06d8ea089cc74", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f52546362a1a885d", "level": "note", "message": {"text": "283 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "55c3488aa9a2457e", "scanner": "scanner-primary", "fingerprint": "f52546362a1a885d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "config-drift"]}}, {"ruleId": "scanner-98c504e5759d02b0", "level": "error", "message": {"text": "Dangling fetch: POST /images/edits (apps/chat-app/api/app/clients/tools/structured/OpenAIImageTools.js:456)"}, "properties": {"repobilityId": "346ffd5378bcea35", "scanner": "scanner-primary", "fingerprint": "98c504e5759d02b0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-d0716547083ab957", "level": "error", "message": {"text": "Dangling fetch: POST https://api.tavily.com/search (apps/chat-app/api/app/clients/tools/structured/TavilySearch.js:22)"}, "properties": {"repobilityId": "620ae3b126038328", "scanner": "scanner-primary", "fingerprint": "d0716547083ab957", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f48df99179f3e636", "level": "error", "message": {"text": "Dangling fetch: POST https://api.tavily.com/search (apps/chat-app/api/app/clients/tools/structured/TavilySearchResults.js:105)"}, "properties": {"repobilityId": "b766a4de208f9d95", "scanner": "scanner-primary", "fingerprint": "f48df99179f3e636", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c99eedd75bcdcd89", "level": "error", "message": {"text": "Dangling fetch: POST https://api-ares.traversaal.ai/live/predict (apps/chat-app/api/app/clients/tools/structured/TraversaalSearch.js:47)"}, "properties": {"repobilityId": "cdc514d7b9db1227", "scanner": "scanner-primary", "fingerprint": "c99eedd75bcdcd89", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d6de7068b0c3b301", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/accounts/current/checkout/rails (apps/web-console/tests/e2e/billing-fx-zero-leak.spec.ts:71)"}, "properties": {"repobilityId": "f90568f888b3b40c", "scanner": "scanner-primary", "fingerprint": "d6de7068b0c3b301", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2a8fa14ef2199819", "level": "error", "message": {"text": "Dangling fetch: PUT /api/budget (apps/web-console/components/billing/budget-alert-form.tsx:51)"}, "properties": {"repobilityId": "016fc567e9f01af8", "scanner": "scanner-primary", "fingerprint": "2a8fa14ef2199819", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b9b50cb1ebcd0907", "level": "error", "message": {"text": "Dangling fetch: POST /api/v1/accounts/current/checkout/rails (apps/web-console/components/billing/checkout-modal.tsx:59)"}, "properties": {"repobilityId": "a834e889f30f8231", "scanner": "scanner-primary", "fingerprint": "b9b50cb1ebcd0907", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9607c2b1bf3cda31", "level": "error", "message": {"text": "Dangling fetch: PUT /api/budget/${workspaceId} (apps/web-console/components/billing/budget-form.tsx:98)"}, "properties": {"repobilityId": "6048f06ead083898", "scanner": "scanner-primary", "fingerprint": "9607c2b1bf3cda31", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-feafdac90f7026c9", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/budget (apps/web-console/components/billing/budget-alert-banner.tsx:40)"}, "properties": {"repobilityId": "198d10640a0573e1", "scanner": "scanner-primary", "fingerprint": "feafdac90f7026c9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-91c62004f328e194", "level": "error", "message": {"text": "Dangling fetch: POST /api/spend-alerts/${workspaceId} (apps/web-console/components/billing/spend-alert-form.tsx:75)"}, "properties": {"repobilityId": "d1db84d4ee39b91b", "scanner": "scanner-primary", "fingerprint": "91c62004f328e194", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-48254167f5afef58", "level": "error", "message": {"text": "Dangling fetch: POST /api/v1/accounts/current/api-keys (apps/web-console/components/api-keys/api-key-create-form.tsx:69)"}, "properties": {"repobilityId": "d48aa609549ab209", "scanner": "scanner-primary", "fingerprint": "48254167f5afef58", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9d4f7c0b3c135153", "level": "error", "message": {"text": "Dangling fetch: POST /api/auth/signup-precheck (apps/web-console/app/auth/sign-up/page.tsx:101)"}, "properties": {"repobilityId": "302bb4843bdd1bcd", "scanner": "scanner-primary", "fingerprint": "9d4f7c0b3c135153", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e8068773249757fe", "level": "error", "message": {"text": "Dangling fetch: POST /api/files/speech/tts (apps/chat-app/client/src/components/Chat/Input/StreamAudio.tsx:96)"}, "properties": {"repobilityId": "975ffb6e0ad771e7", "scanner": "scanner-primary", "fingerprint": "e8068773249757fe", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-869b054882361eca", "level": "error", "message": {"text": "Dangling fetch: POST https://oauth2.googleapis.com/token (apps/chat-app/packages/api/src/files/mistral/crud.ts:507)"}, "properties": {"repobilityId": "c7be1f6618e0b362", "scanner": "scanner-primary", "fingerprint": "869b054882361eca", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-da7393715f553c94", "level": "note", "message": {"text": "Unused endpoint: USE /oauth"}, "properties": {"repobilityId": "b2a890eebaa4b55d", "scanner": "scanner-primary", "fingerprint": "da7393715f553c94", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6eb452fbfb454d20", "level": "note", "message": {"text": "Unused endpoint: USE /api/auth"}, "properties": {"repobilityId": "ddb1578ea98fd0e9", "scanner": "scanner-primary", "fingerprint": "6eb452fbfb454d20", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f32d96e32516c173", "level": "note", "message": {"text": "Unused endpoint: USE /api/actions"}, "properties": {"repobilityId": "3fa14a2961444b68", "scanner": "scanner-primary", "fingerprint": "f32d96e32516c173", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-12c925b320bb2d17", "level": "note", "message": {"text": "Unused endpoint: USE /api/keys"}, "properties": {"repobilityId": "9f24719ef3e72812", "scanner": "scanner-primary", "fingerprint": "12c925b320bb2d17", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8d0e596b29c46b1e", "level": "note", "message": {"text": "Unused endpoint: USE /api/user"}, "properties": {"repobilityId": "23d438c4a0cf42f9", "scanner": "scanner-primary", "fingerprint": "8d0e596b29c46b1e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a74449cc5d561bad", "level": "note", "message": {"text": "Unused endpoint: USE /api/search"}, "properties": {"repobilityId": "24702e5004831d8f", "scanner": "scanner-primary", "fingerprint": "a74449cc5d561bad", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5954dacfec384f29", "level": "note", "message": {"text": "Unused endpoint: USE /api/edit"}, "properties": {"repobilityId": "ba55727d384fa0d4", "scanner": "scanner-primary", "fingerprint": "5954dacfec384f29", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-9a300508c4edb651", "level": "note", "message": {"text": "Unused endpoint: USE /api/messages"}, "properties": {"repobilityId": "5d9e7839ece1f30e", "scanner": "scanner-primary", "fingerprint": "9a300508c4edb651", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-379886dec0bb8cd6", "level": "note", "message": {"text": "Unused endpoint: USE /api/convos"}, "properties": {"repobilityId": "2b2093dc506be475", "scanner": "scanner-primary", "fingerprint": "379886dec0bb8cd6", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-95c8b4f24f58096d", "level": "note", "message": {"text": "Unused endpoint: USE /api/presets"}, "properties": {"repobilityId": "5fce7d66c88ad99d", "scanner": "scanner-primary", "fingerprint": "95c8b4f24f58096d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c27f21f0c4bc3269", "level": "note", "message": {"text": "Unused endpoint: USE /api/prompts"}, "properties": {"repobilityId": "b8d0884fc6ff4466", "scanner": "scanner-primary", "fingerprint": "c27f21f0c4bc3269", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c10a85b9ad227a45", "level": "note", "message": {"text": "Unused endpoint: USE /api/categories"}, "properties": {"repobilityId": "e7dc6938bf1e5ff4", "scanner": "scanner-primary", "fingerprint": "c10a85b9ad227a45", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6460e3124d527475", "level": "note", "message": {"text": "Unused endpoint: USE /api/tokenizer"}, "properties": {"repobilityId": "9fde3be40b82f755", "scanner": "scanner-primary", "fingerprint": "6460e3124d527475", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-db2445af6bf3e266", "level": "note", "message": {"text": "Unused endpoint: USE /api/endpoints"}, "properties": {"repobilityId": "c45abf5887f2e898", "scanner": "scanner-primary", "fingerprint": "db2445af6bf3e266", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b74acf3521abf598", "level": "note", "message": {"text": "Unused endpoint: USE /api/balance"}, "properties": {"repobilityId": "b081b052cea4f5e6", "scanner": "scanner-primary", "fingerprint": "b74acf3521abf598", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5b66c53e8f32d566", "level": "note", "message": {"text": "Unused endpoint: USE /api/models"}, "properties": {"repobilityId": "3585923b0a6a9c52", "scanner": "scanner-primary", "fingerprint": "5b66c53e8f32d566", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-56eb4b3a1a35b4d0", "level": "note", "message": {"text": "Unused endpoint: USE /api/plugins"}, "properties": {"repobilityId": "8b753d572541f32d", "scanner": "scanner-primary", "fingerprint": "56eb4b3a1a35b4d0", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6f63dbe78bf2280a", "level": "note", "message": {"text": "Unused endpoint: USE /api/config"}, "properties": {"repobilityId": "c8985d840dd00d1c", "scanner": "scanner-primary", "fingerprint": "6f63dbe78bf2280a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-80afa19d01c8aea8", "level": "note", "message": {"text": "Unused endpoint: USE /api/assistants"}, "properties": {"repobilityId": "97b96184e205c66f", "scanner": "scanner-primary", "fingerprint": "80afa19d01c8aea8", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-15662ab348abba6b", "level": "note", "message": {"text": "Unused endpoint: USE /api/files"}, "properties": {"repobilityId": "0bd0d370d78d2700", "scanner": "scanner-primary", "fingerprint": "15662ab348abba6b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6b70b66bb7a15f31", "level": "note", "message": {"text": "Unused endpoint: USE /images/"}, "properties": {"repobilityId": "ef75c65e3cc8826f", "scanner": "scanner-primary", "fingerprint": "6b70b66bb7a15f31", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-cf0597ae7cca5b59", "level": "note", "message": {"text": "Unused endpoint: USE /api/share"}, "properties": {"repobilityId": "bc10f54d77c59e36", "scanner": "scanner-primary", "fingerprint": "cf0597ae7cca5b59", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-05bc0a4537549b92", "level": "note", "message": {"text": "Unused endpoint: USE /api/roles"}, "properties": {"repobilityId": "4ffeaf2696e145ac", "scanner": "scanner-primary", "fingerprint": "05bc0a4537549b92", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-094608bf688f5d04", "level": "note", "message": {"text": "Unused endpoint: USE /api/agents"}, "properties": {"repobilityId": "96ff712c60d7d51b", "scanner": "scanner-primary", "fingerprint": "094608bf688f5d04", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5e2fb29f13cb0293", "level": "note", "message": {"text": "Unused endpoint: USE /api/banner"}, "properties": {"repobilityId": "cf27746071f05b3c", "scanner": "scanner-primary", "fingerprint": "5e2fb29f13cb0293", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-4dc6237d07348713", "level": "note", "message": {"text": "Unused endpoint: USE /api/memories"}, "properties": {"repobilityId": "a2ac14e6627329d7", "scanner": "scanner-primary", "fingerprint": "4dc6237d07348713", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-53cfbec65b30b169", "level": "note", "message": {"text": "Unused endpoint: USE /api/tags"}, "properties": {"repobilityId": "2848c022d4c014b4", "scanner": "scanner-primary", "fingerprint": "53cfbec65b30b169", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-4df67aa27a99eee8", "level": "note", "message": {"text": "Unused endpoint: USE /api/mcp"}, "properties": {"repobilityId": "71572419d13ec1aa", "scanner": "scanner-primary", "fingerprint": "4df67aa27a99eee8", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5baa8971ebe192a1", "level": "note", "message": {"text": "Unused endpoint: GET /"}, "properties": {"repobilityId": "8ff9081ed5a5d805", "scanner": "scanner-primary", "fingerprint": "5baa8971ebe192a1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7a009b1a56794f45", "level": "note", "message": {"text": "Unused endpoint: POST /"}, "properties": {"repobilityId": "973b5f944fe5a98f", "scanner": "scanner-primary", "fingerprint": "7a009b1a56794f45", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5ad17de6517d58f2", "level": "note", "message": {"text": "Unused endpoint: POST /delete"}, "properties": {"repobilityId": "6daed2697459d040", "scanner": "scanner-primary", "fingerprint": "5ad17de6517d58f2", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-23158d18f6382551", "level": "note", "message": {"text": "Unused endpoint: GET /:conversationId"}, "properties": {"repobilityId": "44d9a98e4f705b0f", "scanner": "scanner-primary", "fingerprint": "23158d18f6382551", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a9eca83cacbf7d57", "level": "note", "message": {"text": "Unused endpoint: POST /gen_title"}, "properties": {"repobilityId": "4f776b92d082eb3d", "scanner": "scanner-primary", "fingerprint": "a9eca83cacbf7d57", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3b30f4c0994a30b4", "level": "note", "message": {"text": "Unused endpoint: DELETE /"}, "properties": {"repobilityId": "651590c6860a9df7", "scanner": "scanner-primary", "fingerprint": "3b30f4c0994a30b4", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d0e963cf059012cb", "level": "note", "message": {"text": "Unused endpoint: DELETE /all"}, "properties": {"repobilityId": "6ca469624fd96e37", "scanner": "scanner-primary", "fingerprint": "d0e963cf059012cb", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-69d327318617f514", "level": "note", "message": {"text": "Unused endpoint: POST /update"}, "properties": {"repobilityId": "bf0e3e5480689e60", "scanner": "scanner-primary", "fingerprint": "69d327318617f514", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-be4cb5e3cabcce80", "level": "note", "message": {"text": "Unused endpoint: POST /import"}, "properties": {"repobilityId": "7eba3e59a996f8bb", "scanner": "scanner-primary", "fingerprint": "be4cb5e3cabcce80", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3ebc6ff3f5657fbb", "level": "note", "message": {"text": "Unused endpoint: POST /fork"}, "properties": {"repobilityId": "542fa53429cac1fe", "scanner": "scanner-primary", "fingerprint": "3ebc6ff3f5657fbb", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f5566c93e4e0f6f7", "level": "note", "message": {"text": "Unused endpoint: POST /duplicate"}, "properties": {"repobilityId": "144605e3f0f7663c", "scanner": "scanner-primary", "fingerprint": "f5566c93e4e0f6f7", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d1abe18556aa5380", "level": "note", "message": {"text": "Unused endpoint: GET /:roleName"}, "properties": {"repobilityId": "3ee314d686cec767", "scanner": "scanner-primary", "fingerprint": "d1abe18556aa5380", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-4e6eb2f88493e391", "level": "note", "message": {"text": "Unused endpoint: PUT /:roleName/prompts"}, "properties": {"repobilityId": "ad3d2becc1405c1f", "scanner": "scanner-primary", "fingerprint": "4e6eb2f88493e391", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-0ce585ad197901d1", "level": "note", "message": {"text": "Unused endpoint: PUT /:roleName/agents"}, "properties": {"repobilityId": "4adea20b91144617", "scanner": "scanner-primary", "fingerprint": "0ce585ad197901d1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-904df3130885e910", "level": "note", "message": {"text": "Unused endpoint: PUT /:roleName/memories"}, "properties": {"repobilityId": "0e59211ba1c0c670", "scanner": "scanner-primary", "fingerprint": "904df3130885e910", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-207fb5eab13685c5", "level": "note", "message": {"text": "Unused endpoint: GET /groups/:groupId"}, "properties": {"repobilityId": "5b6f1fb8d34f608a", "scanner": "scanner-primary", "fingerprint": "207fb5eab13685c5", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2c3d1d103b19a7f6", "level": "note", "message": {"text": "Unused endpoint: GET /all"}, "properties": {"repobilityId": "f95178b2008620b3", "scanner": "scanner-primary", "fingerprint": "2c3d1d103b19a7f6", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e3e7e5fea4199d0c", "level": "note", "message": {"text": "Unused endpoint: GET /groups"}, "properties": {"repobilityId": "72d200e5e8512eb5", "scanner": "scanner-primary", "fingerprint": "e3e7e5fea4199d0c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-78dac01f53833912", "level": "note", "message": {"text": "Unused endpoint: PATCH /groups/:groupId"}, "properties": {"repobilityId": "52992c9fac52a03b", "scanner": "scanner-primary", "fingerprint": "78dac01f53833912", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f3fb0ad8cd8b8a65", "level": "note", "message": {"text": "Unused endpoint: PATCH /:promptId/tags/production"}, "properties": {"repobilityId": "e11527d5eb8ac7aa", "scanner": "scanner-primary", "fingerprint": "f3fb0ad8cd8b8a65", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3cb84a75c360e4e5", "level": "note", "message": {"text": "Unused endpoint: GET /:promptId"}, "properties": {"repobilityId": "059f2098d171c7b0", "scanner": "scanner-primary", "fingerprint": "3cb84a75c360e4e5", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f740c85695a9344d", "level": "note", "message": {"text": "Unused endpoint: DELETE /:promptId"}, "properties": {"repobilityId": "61fd6a23b6c53f78", "scanner": "scanner-primary", "fingerprint": "f740c85695a9344d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}