{"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-dc8f4550c8d9c82d", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/demo/src/components/ui/typography.tsx:1766", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/demo/src/components/ui/typography.tsx:1766"}, "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-a54beed848336ccf", "name": "TODO/FIXME marker in shipping code \u2014 apps/demo/src/components/ui/container.tsx:252", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 apps/demo/src/components/ui/container.tsx:252"}, "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-7e124ecbbb7c8703", "name": "TODO/FIXME marker in shipping code \u2014 apps/demo/src/components/ui/grid.tsx:183", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 apps/demo/src/components/ui/grid.tsx:183"}, "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-593ee4be1eff393a", "name": "Stray `console.log` in TS/JS \u2014 apps/demo/src/lib/primitives/block-palette.ts:25", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/demo/src/lib/primitives/block-palette.ts:25"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c1a36844e355ee91", "name": "Stray `console.log` in TS/JS \u2014 apps/demo/src/lib/primitives/inline-formatter.ts:385", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/demo/src/lib/primitives/inline-formatter.ts:385"}, "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-e960f01f825183ef", "name": "Stray `console.log` in TS/JS \u2014 apps/demo/src/lib/primitives/clipboard.ts:87", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/demo/src/lib/primitives/clipboard.ts: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-da6131e67d9a80aa", "name": "Stray `console.log` in TS/JS \u2014 apps/demo/src/lib/primitives/command-palette.ts:18", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/demo/src/lib/primitives/command-palette.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-143c26c5d080637b", "name": "Stray `console.log` in TS/JS \u2014 apps/api/worker-configuration.d.ts:173", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/api/worker-configuration.d.ts:173"}, "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-e622772d910887dd", "name": "Stray `console.log` in TS/JS \u2014 apps/api/src/scripts/regenerate-color-names.ts:60", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/api/src/scripts/regenerate-color-names.ts: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-b0a932cd499606aa", "name": "Stray `console.log` in TS/JS \u2014 apps/api/src/lib/queue/publisher.ts:70", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/api/src/lib/queue/publisher.ts:70"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-fee87ae8cb4d776f", "name": "Stray `console.log` in TS/JS \u2014 scripts/warm-color-cache.ts:325", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/warm-color-cache.ts:325"}, "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-c920b6479e1d8ce0", "name": "Stray `console.log` in TS/JS \u2014 scripts/generate-color-fixture.ts:24", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/generate-color-fixture.ts:24"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c3c870d466c16719", "name": "Stray `console.log` in TS/JS \u2014 scripts/warm-comprehensive-cache.ts:392", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/warm-comprehensive-cache.ts:392"}, "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-9551b4e7471c7686", "name": "Stray `console.log` in TS/JS \u2014 packages/color-utils/src/builder.ts:79", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/color-utils/src/builder.ts:79"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e22244279e71be3b", "name": "Stray `console.log` in TS/JS \u2014 packages/color-utils/src/color-wheel.ts:211", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/color-utils/src/color-wheel.ts:211"}, "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-a5fecbe0a327f4d5", "name": "Stray `console.log` in TS/JS \u2014 packages/ui/test/components/typography.test.tsx:1453", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/ui/test/components/typography.test.tsx:1453"}, "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-3ae17ad41c0c0289", "name": "Stray `console.log` in TS/JS \u2014 packages/ui/src/primitives/input-events.ts:86", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/ui/src/primitives/input-events.ts:86"}, "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-befa934362c1d2e1", "name": "Stray `console.log` in TS/JS \u2014 packages/ui/src/primitives/selection.ts:438", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/ui/src/primitives/selection.ts:438"}, "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-87e4ad8b327f0986", "name": "Stray `console.log` in TS/JS \u2014 packages/ui/src/primitives/block-palette.ts:25", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/ui/src/primitives/block-palette.ts:25"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-39642bb15352cb01", "name": "Stray `console.log` in TS/JS \u2014 packages/ui/src/primitives/color-input.ts:20", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/ui/src/primitives/color-input.ts:20"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ec7c7e4026c990ba", "name": "Stray `console.log` in TS/JS \u2014 packages/ui/src/primitives/drag-drop.ts:16", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/ui/src/primitives/drag-drop.ts:16"}, "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-d72e1ef0720cfea2", "name": "Stray `console.log` in TS/JS \u2014 packages/ui/src/primitives/color-picker.ts:47", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/ui/src/primitives/color-picker.ts:47"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-59fbc3ff4cc0d675", "name": "Stray `console.log` in TS/JS \u2014 packages/ui/src/primitives/color-family.ts:33", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/ui/src/primitives/color-family.ts:33"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-49ae649c840d71b6", "name": "Stray `console.log` in TS/JS \u2014 packages/ui/src/primitives/inline-formatter.ts:380", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/ui/src/primitives/inline-formatter.ts:380"}, "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-af4b13060f91455b", "name": "Stray `console.log` in TS/JS \u2014 packages/ui/src/primitives/clipboard.ts:87", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/ui/src/primitives/clipboard.ts: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-f410e20af5728546", "name": "Stray `console.log` in TS/JS \u2014 packages/ui/src/primitives/command-palette.ts:18", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/ui/src/primitives/command-palette.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-b1f74446c57cef24", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 packages/ui/src/components/ui/typography.tsx:1832", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 packages/ui/src/components/ui/typography.tsx:1832"}, "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-21636f268114483d", "name": "TODO/FIXME marker in shipping code \u2014 packages/ui/src/components/ui/container.tsx:173", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 packages/ui/src/components/ui/container.tsx:173"}, "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-7ecc505bc643665b", "name": "TODO/FIXME marker in shipping code \u2014 packages/ui/src/components/ui/grid.tsx:173", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 packages/ui/src/components/ui/grid.tsx:173"}, "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-d5bb759579a8322e", "name": "`truncate` class without `title=` for hover reveal \u2014 packages/ui/src/components/ui/date-picker.tsx:202", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/ui/src/components/ui/date-picker.tsx:202"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-04d90beacdbb6ccf", "name": "Stray `console.log` in TS/JS \u2014 packages/ui/src/components/ui/color-picker.tsx:21", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/ui/src/components/ui/color-picker.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-4bd14804ce14410f", "name": "Stray `console.log` in TS/JS \u2014 packages/ui/src/hooks/use-block-selection.ts:105", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/ui/src/hooks/use-block-selection.ts: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-7d81ce22d4b48223", "name": "Stray `console.log` in TS/JS \u2014 packages/ui/src/hooks/use-command-palette.ts:142", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/ui/src/hooks/use-command-palette.ts:142"}, "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-8509416a7cb0c1db", "name": "Stray `console.log` in TS/JS \u2014 packages/ui/src/hooks/use-clipboard.ts:12", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/ui/src/hooks/use-clipboard.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-4e7ba69e25609893", "name": "Stray `console.log` in TS/JS \u2014 packages/ui/src/hooks/use-drag-drop.ts:162", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/ui/src/hooks/use-drag-drop.ts:162"}, "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-b14975bc448313d0", "name": "TODO/FIXME marker in shipping code \u2014 packages/cli/test/integration/init.integration.test.ts:481", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 packages/cli/test/integration/init.integration.test.ts:481"}, "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-be4a880e4879454a", "name": "Stray `console.log` in TS/JS \u2014 packages/cli/scripts/smoke-detect.ts:15", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/cli/scripts/smoke-detect.ts:15"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f328a15d37074f4a", "name": "TODO/FIXME marker in shipping code \u2014 packages/cli/src/mcp/tools.ts:360", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 packages/cli/src/mcp/tools.ts:360"}, "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-0281d5d2b5cc05b3", "name": "Stray `console.log` in TS/JS \u2014 packages/cli/src/commands/add.ts:482", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/cli/src/commands/add.ts:482"}, "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-b1cb7b67c301eda9", "name": "Stray `console.log` in TS/JS \u2014 packages/cli/src/commands/studio.ts:23", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/cli/src/commands/studio.ts:23"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f35493c65cfd8b3b", "name": "TODO/FIXME marker in shipping code \u2014 packages/cli/src/utils/install-registry-deps.ts:42", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 packages/cli/src/utils/install-registry-deps.ts:42"}, "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-07cd7dc042c0abe7", "name": "Stray `console.log` in TS/JS \u2014 packages/cli/src/utils/ui.ts:32", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/cli/src/utils/ui.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-5391ea3a74d744c6", "name": "Stray `console.log` in TS/JS \u2014 packages/studio/scripts/setup-standalone.ts:28", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/studio/scripts/setup-standalone.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-be0376dd6ac80dcb", "name": "Stray `console.log` in TS/JS \u2014 packages/studio/src/api/vite-plugin.ts:315", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/studio/src/api/vite-plugin.ts:315"}, "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-f7fcd018de9e501f", "name": "Insecure pattern 'dangerous_innerhtml' in apps/demo/src/components/ui/typography.tsx:1766", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in apps/demo/src/components/ui/typography.tsx:1766"}, "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-a761658cedc68bf8", "name": "Insecure pattern 'direct_innerhtml_assignment' in apps/demo/src/components/ui/typography.tsx:432", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in apps/demo/src/components/ui/typography.tsx:432"}, "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-bc3e78402bbe241c", "name": "Insecure pattern 'direct_innerhtml_assignment' in apps/demo/src/lib/primitives/typeahead.ts:398", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in apps/demo/src/lib/primitives/typeahead.ts:398"}, "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-ec744ccddb47a213", "name": "Insecure pattern 'exec_used' in apps/api/worker-configuration.d.ts:2944", "shortDescription": {"text": "Insecure pattern 'exec_used' in apps/api/worker-configuration.d.ts:2944"}, "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-a5473326b0508522", "name": "Insecure pattern 'cors_wildcard' in apps/api/src/queue-consumer.ts:20", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in apps/api/src/queue-consumer.ts:20"}, "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-ac0b7f9399e3f5ca", "name": "Insecure pattern 'node_child_process' in apps/api/src/scripts/regenerate-color-names.ts:13", "shortDescription": {"text": "Insecure pattern 'node_child_process' in apps/api/src/scripts/regenerate-color-names.ts:13"}, "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-4387a4103e838d8b", "name": "Insecure pattern 'cors_wildcard' in apps/registry/src/pages/registry/index.json.ts:19", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in apps/registry/src/pages/registry/index.json.ts:19"}, "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-3a378622e3e3bb4f", "name": "Insecure pattern 'cors_wildcard' in apps/registry/src/pages/registry/composites/[name].json.ts:40", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in apps/registry/src/pages/registry/composites/[name].json.ts:40"}, "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-7df44934893273ef", "name": "Insecure pattern 'cors_wildcard' in apps/registry/src/pages/registry/primitives/[name].json.ts:40", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in apps/registry/src/pages/registry/primitives/[name].json.ts:40"}, "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-f506bdca9f5d0b94", "name": "Insecure pattern 'cors_wildcard' in apps/registry/src/pages/registry/components/[name].json.ts:40", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in apps/registry/src/pages/registry/components/[name].json.ts:40"}, "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-cfea39cbf7404e51", "name": "Insecure pattern 'direct_innerhtml_assignment' in packages/ui/src/primitives/typeahead.ts:398", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in packages/ui/src/primitives/typeahead.ts:398"}, "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-cc11fb7f9dc276a8", "name": "Insecure pattern 'dangerous_innerhtml' in packages/ui/src/components/ui/typography.tsx:1832", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in packages/ui/src/components/ui/typography.tsx:1832"}, "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-ebfeb1994327faf5", "name": "Insecure pattern 'direct_innerhtml_assignment' in packages/ui/src/components/ui/typography.tsx:403", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in packages/ui/src/components/ui/typography.tsx:403"}, "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-de53ac274e5b4ecf", "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-37716d9c0a33ad5c", "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-46c644c6227e4d4a", "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-1838a141491ce38c", "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-9d83497d71a9cae4", "name": "Very large file: apps/demo/src/components/ui/typography.tsx (2034 lines)", "shortDescription": {"text": "Very large file: apps/demo/src/components/ui/typography.tsx (2034 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-918f92803defd5ec", "name": "Very large file: apps/demo/src/components/ui/editor.tsx (2249 lines)", "shortDescription": {"text": "Very large file: apps/demo/src/components/ui/editor.tsx (2249 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-f97ed6c5690d878b", "name": "Very large file: apps/api/worker-configuration.d.ts (10850 lines)", "shortDescription": {"text": "Very large file: apps/api/worker-configuration.d.ts (10850 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-612150222deacfb8", "name": "Very large file: packages/color-utils/src/naming/hue-hubs.ts (2452 lines)", "shortDescription": {"text": "Very large file: packages/color-utils/src/naming/hue-hubs.ts (2452 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-e7a34c4cf1dfc8ec", "name": "Very large file: packages/ui/test/components/typography.test.tsx (1679 lines)", "shortDescription": {"text": "Very large file: packages/ui/test/components/typography.test.tsx (1679 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-5c528420f0086dd1", "name": "Very large file: packages/ui/src/components/ui/typography.tsx (2125 lines)", "shortDescription": {"text": "Very large file: packages/ui/src/components/ui/typography.tsx (2125 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-2d13021d0552ead7", "name": "Very large file: packages/cli/src/commands/init.ts (1387 lines)", "shortDescription": {"text": "Very large file: packages/cli/src/commands/init.ts (1387 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-90093cc80120f462", "name": "Very large file: packages/studio/test/api/vite-plugin.test.ts (2092 lines)", "shortDescription": {"text": "Very large file: packages/studio/test/api/vite-plugin.test.ts (2092 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-b65deeec504332ee", "name": "Very large file: packages/design-tokens/src/generators/defaults.ts (2795 lines)", "shortDescription": {"text": "Very large file: packages/design-tokens/src/generators/defaults.ts (2795 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-c39ba7ebc985b6cb", "name": "Node manifest has dependencies but no lockfile: apps/demo/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: apps/demo/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-b06b8d86f24c77f9", "name": "Node manifest has dependencies but no lockfile: apps/api/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: apps/api/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6f294e9fee725f23", "name": "Node manifest has dependencies but no lockfile: apps/registry/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: apps/registry/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-3f896178938ceb9a", "name": "Node manifest has dependencies but no lockfile: packages/color-utils/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/color-utils/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-41b143027f4bc32e", "name": "Node manifest has dependencies but no lockfile: packages/composites/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/composites/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-139a051a810cd74d", "name": "Node manifest has dependencies but no lockfile: packages/math-utils/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/math-utils/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-2699d5f16ae11282", "name": "Node manifest has dependencies but no lockfile: packages/shared/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/shared/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-50218c90b43393bb", "name": "Node manifest has dependencies but no lockfile: packages/ui/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/ui/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8c2e3196a4ef0cdd", "name": "Node manifest has dependencies but no lockfile: packages/cli/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/cli/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-4a2550a13b29da43", "name": "Node manifest has dependencies but no lockfile: packages/studio/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/studio/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-bcfee846e2ec548b", "name": "Node manifest has dependencies but no lockfile: packages/design-tokens/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/design-tokens/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 184 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 286 placeholder/mock markers across 46 source files. This often means the repo looks complete while core flows still use generated scaffolding or fake data."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2d0c7b7ab8f8aacf", "name": "Critical user flow still appears backed by mock or placeholder data", "shortDescription": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "fullDescription": {"text": "A payment/auth/admin/order/billing-style flow contains mock, fake, TODO, dummy, or placeholder markers in runtime source. In the Fable corpus this is a high-leverage completeness smell: the app can look finished while the money, identity, or tenant flow is still scaffolded."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-749d4bc1bd66df5f", "name": "Agent instructions exist but release-hardening basics are missing", "shortDescription": {"text": "Agent instructions exist but release-hardening basics are missing"}, "fullDescription": {"text": "AI-coder instruction files were found, but the repo is missing lockfile. Treat this as a contract gap: the agent is guided, but the generated output is not yet guarded by the controls that make it repeatable."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ea8f3013f588db25", "name": "Shallow git history limits provenance confidence", "shortDescription": {"text": "Shallow git history limits provenance confidence"}, "fullDescription": {"text": "The repository is a shallow clone. Origin/evolution analysis cannot distinguish fresh generation, imported legacy code, or long-lived human code with high confidence."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8424db9c75e04ba4", "name": "Very short observed git history", "shortDescription": {"text": "Very short observed git history"}, "fullDescription": {"text": "The repo has multiple source files but two or fewer visible commits. This is not a failure by itself, but it lowers confidence in evolution-based diagnosis."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3a5b8188fdbb408b", "name": "Agent authority lacks a verifier contract: plugin/skills/rafters-frontend/SKILL.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: plugin/skills/rafters-frontend/SKILL.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-883d546cf7538d81", "name": "Agent authority lacks a verifier contract: .claude/ARCHITECTURE.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/ARCHITECTURE.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-919ee37ff8153725", "name": "Agent authority lacks a verifier contract: .claude/skills/rafters-frontend/SKILL.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/skills/rafters-frontend/SKILL.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-1605f34f3bcd231d", "name": "Legacy-named symbol `certIssuerDNLegacy` in apps/api/worker-configuration.d.ts:9325", "shortDescription": {"text": "Legacy-named symbol `certIssuerDNLegacy` in apps/api/worker-configuration.d.ts:9325"}, "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-1df4fc02140d71cf", "name": "Commented-code block (8 lines) in apps/api/worker-configuration.d.ts:10086", "shortDescription": {"text": "Commented-code block (8 lines) in apps/api/worker-configuration.d.ts:10086"}, "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-bdf9ca864e4d08e6", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/api/worker-configuration.d.ts:306", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/api/worker-configuration.d.ts:306"}, "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-2fdb63508419ddf7", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/api/test/routes/index.test.ts:6", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/api/test/routes/index.test.ts:6"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-91d7c012c6043e6e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/api/test/routes/color/color.test.ts:9", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/api/test/routes/color/color.test.ts:9"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-81bb43d5da143b5d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/api/test/routes/tokens/tokens.test.ts:17", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/api/test/routes/tokens/tokens.test.ts:17"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b32d110781715e65", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/api/test/routes/queue/queue.test.ts:11", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/api/test/routes/queue/queue.test.ts:11"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-7604851d08231835", "name": "Commented-code block (5 lines) in apps/api/src/routes/tokens/tokens.handlers.ts:130", "shortDescription": {"text": "Commented-code block (5 lines) in apps/api/src/routes/tokens/tokens.handlers.ts:130"}, "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-1bb0e1d7f26becbd", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/warm-color-cache.ts:340", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/warm-color-cache.ts:340"}, "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-ed10b41ff1791bd0", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/warm-comprehensive-cache.ts:415", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/warm-comprehensive-cache.ts:415"}, "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-b83d5353cf1f8bba", "name": "Commented-code block (6 lines) in packages/color-utils/test/conversion.test.ts:62", "shortDescription": {"text": "Commented-code block (6 lines) in packages/color-utils/test/conversion.test.ts: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-bf91daa41f81d255", "name": "Commented-code block (8 lines) in packages/color-utils/test/naming.test.ts:169", "shortDescription": {"text": "Commented-code block (8 lines) in packages/color-utils/test/naming.test.ts: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-2bf1e59cdffafbeb", "name": "Commented-code block (6 lines) in packages/color-utils/src/semantic.ts:324", "shortDescription": {"text": "Commented-code block (6 lines) in packages/color-utils/src/semantic.ts:324"}, "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-515c319783846980", "name": "Commented-code block (5 lines) in packages/color-utils/src/naming/hue-hubs.ts:2400", "shortDescription": {"text": "Commented-code block (5 lines) in packages/color-utils/src/naming/hue-hubs.ts:2400"}, "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-ff80f0f6a189de29", "name": "Commented-code block (5 lines) in packages/math-utils/src/index.ts:13", "shortDescription": {"text": "Commented-code block (5 lines) in packages/math-utils/src/index.ts:13"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6d05a25bc5e32549", "name": "Commented-code block (9 lines) in packages/ui/src/components/ui/radio-group.element.ts:638", "shortDescription": {"text": "Commented-code block (9 lines) in packages/ui/src/components/ui/radio-group.element.ts:638"}, "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-f93b06eea4df6f09", "name": "Commented-code block (5 lines) in packages/ui/src/components/ui/radio-group.element.a11y.tsx:205", "shortDescription": {"text": "Commented-code block (5 lines) in packages/ui/src/components/ui/radio-group.element.a11y.tsx:205"}, "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-376095bb7abf8e4d", "name": "Commented-code block (7 lines) in packages/ui/src/components/ui/switch.element.a11y.tsx:171", "shortDescription": {"text": "Commented-code block (7 lines) in packages/ui/src/components/ui/switch.element.a11y.tsx:171"}, "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-b1bb142f55931c46", "name": "Commented-code block (7 lines) in packages/ui/src/components/ui/checkbox.element.a11y.tsx:195", "shortDescription": {"text": "Commented-code block (7 lines) in packages/ui/src/components/ui/checkbox.element.a11y.tsx:195"}, "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-29f2b91dd1a35a9d", "name": "Commented-code block (6 lines) in packages/cli/test/integration/init.integration.test.ts:533", "shortDescription": {"text": "Commented-code block (6 lines) in packages/cli/test/integration/init.integration.test.ts:533"}, "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-0bf55d62aee40e62", "name": "`fetch()` without try/.catch or AbortSignal \u2014 packages/cli/test/commands/add.spec.ts:117", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/cli/test/commands/add.spec.ts:117"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-aaa6201ee4584a4c", "name": "Commented-code block (6 lines) in packages/cli/src/mcp/tools.ts:469", "shortDescription": {"text": "Commented-code block (6 lines) in packages/cli/src/mcp/tools.ts:469"}, "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-b3ddbf82352d6ddf", "name": "Legacy-named symbol `reset_backup` in packages/cli/src/commands/init.ts:661", "shortDescription": {"text": "Legacy-named symbol `reset_backup` in packages/cli/src/commands/init.ts:661"}, "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-ae46af2460088e1c", "name": "Commented-code block (9 lines) in packages/cli/src/commands/init.ts:815", "shortDescription": {"text": "Commented-code block (9 lines) in packages/cli/src/commands/init.ts:815"}, "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-b27b17ad3852bb14", "name": "Commented-code block (5 lines) in packages/cli/src/utils/detect.ts:204", "shortDescription": {"text": "Commented-code block (5 lines) in packages/cli/src/utils/detect.ts:204"}, "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-2a8c79a1f5e457a4", "name": "`fetch()` without try/.catch or AbortSignal \u2014 packages/cli/src/registry/client.ts:32", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/cli/src/registry/client.ts:32"}, "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-f65652ebd2926d1e", "name": "Commented-code block (10 lines) in packages/studio/src/api/vite-plugin.ts:447", "shortDescription": {"text": "Commented-code block (10 lines) in packages/studio/src/api/vite-plugin.ts:447"}, "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-db2332b109da832c", "name": "Commented-code block (5 lines) in packages/design-tokens/src/registry.ts:31", "shortDescription": {"text": "Commented-code block (5 lines) in packages/design-tokens/src/registry.ts:31"}, "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-2f4f56dc09a6c284", "name": "Commented-code block (5 lines) in packages/design-tokens/src/generators/semantic.ts:135", "shortDescription": {"text": "Commented-code block (5 lines) in packages/design-tokens/src/generators/semantic.ts:135"}, "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-a82dcc13cee826f0", "name": "Commented-code block (6 lines) in packages/design-tokens/src/generators/typography.ts:192", "shortDescription": {"text": "Commented-code block (6 lines) in packages/design-tokens/src/generators/typography.ts:192"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2d42e492a244050c", "name": "Commented-code block (6 lines) in packages/design-tokens/src/generators/motion.ts:195", "shortDescription": {"text": "Commented-code block (6 lines) in packages/design-tokens/src/generators/motion.ts:195"}, "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-6d1d1419031ed8dc", "name": "Commented-code block (5 lines) in packages/design-tokens/src/importers/classify.ts:115", "shortDescription": {"text": "Commented-code block (5 lines) in packages/design-tokens/src/importers/classify.ts:115"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-bb327bc147d9e2fb", "name": "Commented-code block (5 lines) in packages/design-tokens/src/importers/color.ts:40", "shortDescription": {"text": "Commented-code block (5 lines) in packages/design-tokens/src/importers/color.ts:40"}, "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-1f469a4e538b0045", "name": "Commented-code block (8 lines) in packages/design-tokens/src/importers/bases.ts:81", "shortDescription": {"text": "Commented-code block (8 lines) in packages/design-tokens/src/importers/bases.ts:81"}, "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-7a3da6e5d3e0278f", "name": "Dangling fetch: GET http://localhost/ (apps/api/test/routes/index.test.ts:6)", "shortDescription": {"text": "Dangling fetch: GET http://localhost/ (apps/api/test/routes/index.test.ts:6)"}, "fullDescription": {"text": "`apps/api/test/routes/index.test.ts:6` calls `GET http://localhost/` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b623a07fed91612b", "name": "Dangling fetch: GET http://localhost/docs (apps/api/test/routes/index.test.ts:18)", "shortDescription": {"text": "Dangling fetch: GET http://localhost/docs (apps/api/test/routes/index.test.ts:18)"}, "fullDescription": {"text": "`apps/api/test/routes/index.test.ts:18` calls `GET http://localhost/docs` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost/docs`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-86d82d069c66e168", "name": "Dangling fetch: GET http://localhost/reference (apps/api/test/routes/index.test.ts:28)", "shortDescription": {"text": "Dangling fetch: GET http://localhost/reference (apps/api/test/routes/index.test.ts:28)"}, "fullDescription": {"text": "`apps/api/test/routes/index.test.ts:28` calls `GET http://localhost/reference` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost/reference`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3cdc97c14c8d5ab0", "name": "Dangling fetch: GET http://localhost/unknown-route (apps/api/test/routes/index.test.ts:35)", "shortDescription": {"text": "Dangling fetch: GET http://localhost/unknown-route (apps/api/test/routes/index.test.ts:35)"}, "fullDescription": {"text": "`apps/api/test/routes/index.test.ts:35` calls `GET http://localhost/unknown-route` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost/unknown-route`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f9665b50a103e639", "name": "Dangling fetch: GET http://localhost/color/search?q=ocean%20blue (apps/api/test/routes/color/color.test.ts:9)", "shortDescription": {"text": "Dangling fetch: GET http://localhost/color/search?q=ocean%20blue (apps/api/test/routes/color/color.test.ts:9)"}, "fullDescription": {"text": "`apps/api/test/routes/color/color.test.ts:9` calls `GET http://localhost/color/search?q=ocean%20blue` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost/color/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-a7dc85bc9146fd67", "name": "Dangling fetch: GET http://localhost/color/search (apps/api/test/routes/color/color.test.ts:20)", "shortDescription": {"text": "Dangling fetch: GET http://localhost/color/search (apps/api/test/routes/color/color.test.ts:20)"}, "fullDescription": {"text": "`apps/api/test/routes/color/color.test.ts:20` calls `GET http://localhost/color/search` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost/color/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-6c70408984118f4a", "name": "Dangling fetch: GET http://localhost/color/search?q=test&hue=invalid (apps/api/test/routes/color/color.test.ts:38)", "shortDescription": {"text": "Dangling fetch: GET http://localhost/color/search?q=test&hue=invalid (apps/api/test/routes/color/color.test.ts:38)"}, "fullDescription": {"text": "`apps/api/test/routes/color/color.test.ts:38` calls `GET http://localhost/color/search?q=test&hue=invalid` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost/color/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-22f0165a3502d1bc", "name": "Dangling fetch: GET http://localhost/color/search?q=test&limit=200 (apps/api/test/routes/color/color.test.ts:45)", "shortDescription": {"text": "Dangling fetch: GET http://localhost/color/search?q=test&limit=200 (apps/api/test/routes/color/color.test.ts:45)"}, "fullDescription": {"text": "`apps/api/test/routes/color/color.test.ts:45` calls `GET http://localhost/color/search?q=test&limit=200` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost/color/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-5bf4ac871c170c60", "name": "Dangling fetch: GET http://localhost/color/0.500-0.120-240 (apps/api/test/routes/color/color.test.ts:54)", "shortDescription": {"text": "Dangling fetch: GET http://localhost/color/0.500-0.120-240 (apps/api/test/routes/color/color.test.ts:54)"}, "fullDescription": {"text": "`apps/api/test/routes/color/color.test.ts:54` calls `GET http://localhost/color/0.500-0.120-240` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost/color/0.500-0.120-240`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4bbef131d19e6bdd", "name": "Dangling fetch: GET http://localhost/color/invalid-format (apps/api/test/routes/color/color.test.ts:64)", "shortDescription": {"text": "Dangling fetch: GET http://localhost/color/invalid-format (apps/api/test/routes/color/color.test.ts:64)"}, "fullDescription": {"text": "`apps/api/test/routes/color/color.test.ts:64` calls `GET http://localhost/color/invalid-format` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost/color/invalid-format`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-44594692bed3ebdb", "name": "Dangling fetch: GET http://localhost/color/0.5-0.12-240 (apps/api/test/routes/color/color.test.ts:72)", "shortDescription": {"text": "Dangling fetch: GET http://localhost/color/0.5-0.12-240 (apps/api/test/routes/color/color.test.ts:72)"}, "fullDescription": {"text": "`apps/api/test/routes/color/color.test.ts:72` calls `GET http://localhost/color/0.5-0.12-240` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost/color/0.5-0.12-240`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8ee35c91a9886bf5", "name": "Dangling fetch: GET http://localhost/color/0.700-0.150-260?adhoc=true (apps/api/test/routes/color/color.test.ts:80)", "shortDescription": {"text": "Dangling fetch: GET http://localhost/color/0.700-0.150-260?adhoc=true (apps/api/test/routes/color/color.test.ts:80)"}, "fullDescription": {"text": "`apps/api/test/routes/color/color.test.ts:80` calls `GET http://localhost/color/0.700-0.150-260?adhoc=true` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost/color/0.700-0.150-260`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4a4dc053c31559df", "name": "Dangling fetch: GET http://localhost/color/0.700-0.150-260?adhoc=true (apps/api/test/routes/color/color.test.ts:90)", "shortDescription": {"text": "Dangling fetch: GET http://localhost/color/0.700-0.150-260?adhoc=true (apps/api/test/routes/color/color.test.ts:90)"}, "fullDescription": {"text": "`apps/api/test/routes/color/color.test.ts:90` calls `GET http://localhost/color/0.700-0.150-260?adhoc=true` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost/color/0.700-0.150-260`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-412a7b450783aff4", "name": "Dangling fetch: GET http://localhost/color/0.700-0.150-260?adhoc=true (apps/api/test/routes/color/color.test.ts:101)", "shortDescription": {"text": "Dangling fetch: GET http://localhost/color/0.700-0.150-260?adhoc=true (apps/api/test/routes/color/color.test.ts:101)"}, "fullDescription": {"text": "`apps/api/test/routes/color/color.test.ts:101` calls `GET http://localhost/color/0.700-0.150-260?adhoc=true` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost/color/0.700-0.150-260`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b6eda91674740f1d", "name": "Dangling fetch: GET http://localhost/color/0.700-0.150-260?adhoc=true (apps/api/test/routes/color/color.test.ts:114)", "shortDescription": {"text": "Dangling fetch: GET http://localhost/color/0.700-0.150-260?adhoc=true (apps/api/test/routes/color/color.test.ts:114)"}, "fullDescription": {"text": "`apps/api/test/routes/color/color.test.ts:114` calls `GET http://localhost/color/0.700-0.150-260?adhoc=true` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost/color/0.700-0.150-260`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2bda3b8bb633bbf2", "name": "Dangling fetch: GET http://localhost/color/0.700-0.150-260?adhoc=true (apps/api/test/routes/color/color.test.ts:128)", "shortDescription": {"text": "Dangling fetch: GET http://localhost/color/0.700-0.150-260?adhoc=true (apps/api/test/routes/color/color.test.ts:128)"}, "fullDescription": {"text": "`apps/api/test/routes/color/color.test.ts:128` calls `GET http://localhost/color/0.700-0.150-260?adhoc=true` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost/color/0.700-0.150-260`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5d712580842941c8", "name": "Dangling fetch: GET http://localhost/color/0.700-0.150-260?adhoc=true (apps/api/test/routes/color/color.test.ts:138)", "shortDescription": {"text": "Dangling fetch: GET http://localhost/color/0.700-0.150-260?adhoc=true (apps/api/test/routes/color/color.test.ts:138)"}, "fullDescription": {"text": "`apps/api/test/routes/color/color.test.ts:138` calls `GET http://localhost/color/0.700-0.150-260?adhoc=true` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost/color/0.700-0.150-260`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-39f8447ab8f84599", "name": "Dangling fetch: GET http://localhost/color/0.700-0.150-260?adhoc=true (apps/api/test/routes/color/color.test.ts:146)", "shortDescription": {"text": "Dangling fetch: GET http://localhost/color/0.700-0.150-260?adhoc=true (apps/api/test/routes/color/color.test.ts:146)"}, "fullDescription": {"text": "`apps/api/test/routes/color/color.test.ts:146` calls `GET http://localhost/color/0.700-0.150-260?adhoc=true` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost/color/0.700-0.150-260`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-cb0ec5ea42a4f51c", "name": "Dangling fetch: GET http://localhost/color/0.700-0.150-260?adhoc=true (apps/api/test/routes/color/color.test.ts:158)", "shortDescription": {"text": "Dangling fetch: GET http://localhost/color/0.700-0.150-260?adhoc=true (apps/api/test/routes/color/color.test.ts:158)"}, "fullDescription": {"text": "`apps/api/test/routes/color/color.test.ts:158` calls `GET http://localhost/color/0.700-0.150-260?adhoc=true` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost/color/0.700-0.150-260`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-cd1d34df661ae9e1", "name": "Dangling fetch: GET http://localhost/color/0.500-0.200-10?adhoc=true (apps/api/test/routes/color/color.test.ts:163)", "shortDescription": {"text": "Dangling fetch: GET http://localhost/color/0.500-0.200-10?adhoc=true (apps/api/test/routes/color/color.test.ts:163)"}, "fullDescription": {"text": "`apps/api/test/routes/color/color.test.ts:163` calls `GET http://localhost/color/0.500-0.200-10?adhoc=true` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost/color/0.500-0.200-10`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c9d729f5e5d4f46f", "name": "Dangling fetch: GET http://localhost/color/0.500-0.020-180?adhoc=true (apps/api/test/routes/color/color.test.ts:168)", "shortDescription": {"text": "Dangling fetch: GET http://localhost/color/0.500-0.020-180?adhoc=true (apps/api/test/routes/color/color.test.ts:168)"}, "fullDescription": {"text": "`apps/api/test/routes/color/color.test.ts:168` calls `GET http://localhost/color/0.500-0.020-180?adhoc=true` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost/color/0.500-0.020-180`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9dba6f000d26d817", "name": "Dangling fetch: GET http://localhost/color/0.850-0.150-260?adhoc=true (apps/api/test/routes/color/color.test.ts:175)", "shortDescription": {"text": "Dangling fetch: GET http://localhost/color/0.850-0.150-260?adhoc=true (apps/api/test/routes/color/color.test.ts:175)"}, "fullDescription": {"text": "`apps/api/test/routes/color/color.test.ts:175` calls `GET http://localhost/color/0.850-0.150-260?adhoc=true` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost/color/0.850-0.150-260`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7ced5fab3b981f6b", "name": "Dangling fetch: GET http://localhost/color/0.200-0.150-260?adhoc=true (apps/api/test/routes/color/color.test.ts:180)", "shortDescription": {"text": "Dangling fetch: GET http://localhost/color/0.200-0.150-260?adhoc=true (apps/api/test/routes/color/color.test.ts:180)"}, "fullDescription": {"text": "`apps/api/test/routes/color/color.test.ts:180` calls `GET http://localhost/color/0.200-0.150-260?adhoc=true` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost/color/0.200-0.150-260`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e6bb025a749e7213", "name": "Dangling fetch: GET http://localhost/tokens/system (apps/api/test/routes/tokens/tokens.test.ts:17)", "shortDescription": {"text": "Dangling fetch: GET http://localhost/tokens/system (apps/api/test/routes/tokens/tokens.test.ts:17)"}, "fullDescription": {"text": "`apps/api/test/routes/tokens/tokens.test.ts:17` calls `GET http://localhost/tokens/system` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost/tokens/system`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a2e392053bdc9439", "name": "Dangling fetch: GET http://localhost/tokens (apps/api/test/routes/tokens/tokens.test.ts:27)", "shortDescription": {"text": "Dangling fetch: GET http://localhost/tokens (apps/api/test/routes/tokens/tokens.test.ts:27)"}, "fullDescription": {"text": "`apps/api/test/routes/tokens/tokens.test.ts:27` calls `GET http://localhost/tokens` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost/tokens`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-58f7fc76b79bbd61", "name": "Dangling fetch: GET http://localhost/tokens (apps/api/test/routes/tokens/tokens.test.ts:36)", "shortDescription": {"text": "Dangling fetch: GET http://localhost/tokens (apps/api/test/routes/tokens/tokens.test.ts:36)"}, "fullDescription": {"text": "`apps/api/test/routes/tokens/tokens.test.ts:36` calls `GET http://localhost/tokens` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost/tokens`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d22ab181044652fc", "name": "Dangling fetch: GET http://localhost/tokens/spacing (apps/api/test/routes/tokens/tokens.test.ts:53)", "shortDescription": {"text": "Dangling fetch: GET http://localhost/tokens/spacing (apps/api/test/routes/tokens/tokens.test.ts:53)"}, "fullDescription": {"text": "`apps/api/test/routes/tokens/tokens.test.ts:53` calls `GET http://localhost/tokens/spacing` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost/tokens/spacing`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-44f1ee479a6c55ee", "name": "Dangling fetch: GET http://localhost/tokens/nonexistent (apps/api/test/routes/tokens/tokens.test.ts:60)", "shortDescription": {"text": "Dangling fetch: GET http://localhost/tokens/nonexistent (apps/api/test/routes/tokens/tokens.test.ts:60)"}, "fullDescription": {"text": "`apps/api/test/routes/tokens/tokens.test.ts:60` calls `GET http://localhost/tokens/nonexistent` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost/tokens/nonexistent`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-715b079a0309bb84", "name": "Dangling fetch: GET http://localhost/tokens/semantic/primary (apps/api/test/routes/tokens/tokens.test.ts:67)", "shortDescription": {"text": "Dangling fetch: GET http://localhost/tokens/semantic/primary (apps/api/test/routes/tokens/tokens.test.ts:67)"}, "fullDescription": {"text": "`apps/api/test/routes/tokens/tokens.test.ts:67` calls `GET http://localhost/tokens/semantic/primary` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost/tokens/semantic/primary`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-78ba2a8377700a56", "name": "Dangling fetch: GET http://localhost/tokens/color/spacing-1 (apps/api/test/routes/tokens/tokens.test.ts:77)", "shortDescription": {"text": "Dangling fetch: GET http://localhost/tokens/color/spacing-1 (apps/api/test/routes/tokens/tokens.test.ts:77)"}, "fullDescription": {"text": "`apps/api/test/routes/tokens/tokens.test.ts:77` calls `GET http://localhost/tokens/color/spacing-1` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost/tokens/color/spacing-1`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b8653e158765a000", "name": "Dangling fetch: PUT http://localhost/tokens/spacing/spacing-4 (apps/api/test/routes/tokens/tokens.test.ts:88)", "shortDescription": {"text": "Dangling fetch: PUT http://localhost/tokens/spacing/spacing-4 (apps/api/test/routes/tokens/tokens.test.ts:88)"}, "fullDescription": {"text": "`apps/api/test/routes/tokens/tokens.test.ts:88` calls `PUT http://localhost/tokens/spacing/spacing-4` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost/tokens/spacing/spacing-4`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5f2e8d61f86016d7", "name": "Dangling fetch: GET http://localhost/tokens/spacing/spacing-4 (apps/api/test/routes/tokens/tokens.test.ts:98)", "shortDescription": {"text": "Dangling fetch: GET http://localhost/tokens/spacing/spacing-4 (apps/api/test/routes/tokens/tokens.test.ts:98)"}, "fullDescription": {"text": "`apps/api/test/routes/tokens/tokens.test.ts:98` calls `GET http://localhost/tokens/spacing/spacing-4` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost/tokens/spacing/spacing-4`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ff033d4bfb98210d", "name": "Dangling fetch: PUT http://localhost/tokens/spacing/spacing-5 (apps/api/test/routes/tokens/tokens.test.ts:106)", "shortDescription": {"text": "Dangling fetch: PUT http://localhost/tokens/spacing/spacing-5 (apps/api/test/routes/tokens/tokens.test.ts:106)"}, "fullDescription": {"text": "`apps/api/test/routes/tokens/tokens.test.ts:106` calls `PUT http://localhost/tokens/spacing/spacing-5` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost/tokens/spacing/spacing-5`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0d039d8ba60f3bdd", "name": "Dangling fetch: PUT http://localhost/tokens/spacing/spacing-5 (apps/api/test/routes/tokens/tokens.test.ts:115)", "shortDescription": {"text": "Dangling fetch: PUT http://localhost/tokens/spacing/spacing-5 (apps/api/test/routes/tokens/tokens.test.ts:115)"}, "fullDescription": {"text": "`apps/api/test/routes/tokens/tokens.test.ts:115` calls `PUT http://localhost/tokens/spacing/spacing-5` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost/tokens/spacing/spacing-5`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c196cec89bab4da9", "name": "Dangling fetch: PUT http://localhost/tokens/spacing/nonexistent (apps/api/test/routes/tokens/tokens.test.ts:124)", "shortDescription": {"text": "Dangling fetch: PUT http://localhost/tokens/spacing/nonexistent (apps/api/test/routes/tokens/tokens.test.ts:124)"}, "fullDescription": {"text": "`apps/api/test/routes/tokens/tokens.test.ts:124` calls `PUT http://localhost/tokens/spacing/nonexistent` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost/tokens/spacing/nonexistent`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ef06a9587bbb98cd", "name": "Dangling fetch: PUT http://localhost/tokens/spacing/spacing-6 (apps/api/test/routes/tokens/tokens.test.ts:136)", "shortDescription": {"text": "Dangling fetch: PUT http://localhost/tokens/spacing/spacing-6 (apps/api/test/routes/tokens/tokens.test.ts:136)"}, "fullDescription": {"text": "`apps/api/test/routes/tokens/tokens.test.ts:136` calls `PUT http://localhost/tokens/spacing/spacing-6` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost/tokens/spacing/spacing-6`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9940e983939188ff", "name": "Dangling fetch: DELETE http://localhost/tokens/spacing/spacing-6/override (apps/api/test/routes/tokens/tokens.test.ts:14", "shortDescription": {"text": "Dangling fetch: DELETE http://localhost/tokens/spacing/spacing-6/override (apps/api/test/routes/tokens/tokens.test.ts:142)"}, "fullDescription": {"text": "`apps/api/test/routes/tokens/tokens.test.ts:142` calls `DELETE http://localhost/tokens/spacing/spacing-6/override` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost/tokens/spacing/spacing-6/override`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f98ff6fa4798d93e", "name": "Dangling fetch: GET http://localhost/tokens/spacing/spacing-6 (apps/api/test/routes/tokens/tokens.test.ts:150)", "shortDescription": {"text": "Dangling fetch: GET http://localhost/tokens/spacing/spacing-6 (apps/api/test/routes/tokens/tokens.test.ts:150)"}, "fullDescription": {"text": "`apps/api/test/routes/tokens/tokens.test.ts:150` calls `GET http://localhost/tokens/spacing/spacing-6` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost/tokens/spacing/spacing-6`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2dda614fdd46cf73", "name": "Dangling fetch: DELETE http://localhost/tokens/spacing/spacing-7/override (apps/api/test/routes/tokens/tokens.test.ts:15", "shortDescription": {"text": "Dangling fetch: DELETE http://localhost/tokens/spacing/spacing-7/override (apps/api/test/routes/tokens/tokens.test.ts:156)"}, "fullDescription": {"text": "`apps/api/test/routes/tokens/tokens.test.ts:156` calls `DELETE http://localhost/tokens/spacing/spacing-7/override` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost/tokens/spacing/spacing-7/override`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-26617320e131c078", "name": "Dangling fetch: POST http://localhost/tokens/spacing/reset (apps/api/test/routes/tokens/tokens.test.ts:169)", "shortDescription": {"text": "Dangling fetch: POST http://localhost/tokens/spacing/reset (apps/api/test/routes/tokens/tokens.test.ts:169)"}, "fullDescription": {"text": "`apps/api/test/routes/tokens/tokens.test.ts:169` calls `POST http://localhost/tokens/spacing/reset` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost/tokens/spacing/reset`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9afc368143e97dad", "name": "Dangling fetch: POST http://localhost/tokens/nonexistent/reset (apps/api/test/routes/tokens/tokens.test.ts:181)", "shortDescription": {"text": "Dangling fetch: POST http://localhost/tokens/nonexistent/reset (apps/api/test/routes/tokens/tokens.test.ts:181)"}, "fullDescription": {"text": "`apps/api/test/routes/tokens/tokens.test.ts:181` calls `POST http://localhost/tokens/nonexistent/reset` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost/tokens/nonexistent/reset`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-52e327f77b9e85ea", "name": "Dangling fetch: PUT http://localhost/tokens/spacing/spacing-8 (apps/api/test/routes/tokens/tokens.test.ts:196)", "shortDescription": {"text": "Dangling fetch: PUT http://localhost/tokens/spacing/spacing-8 (apps/api/test/routes/tokens/tokens.test.ts:196)"}, "fullDescription": {"text": "`apps/api/test/routes/tokens/tokens.test.ts:196` calls `PUT http://localhost/tokens/spacing/spacing-8` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost/tokens/spacing/spacing-8`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c6215036a780e664", "name": "Dangling fetch: GET http://localhost/tokens/spacing/spacing-8 (apps/api/test/routes/tokens/tokens.test.ts:202)", "shortDescription": {"text": "Dangling fetch: GET http://localhost/tokens/spacing/spacing-8 (apps/api/test/routes/tokens/tokens.test.ts:202)"}, "fullDescription": {"text": "`apps/api/test/routes/tokens/tokens.test.ts:202` calls `GET http://localhost/tokens/spacing/spacing-8` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost/tokens/spacing/spacing-8`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-dd1de93fa2c09972", "name": "Dangling fetch: POST http://localhost/queue (apps/api/test/routes/queue/queue.test.ts:11)", "shortDescription": {"text": "Dangling fetch: POST http://localhost/queue (apps/api/test/routes/queue/queue.test.ts:11)"}, "fullDescription": {"text": "`apps/api/test/routes/queue/queue.test.ts:11` calls `POST http://localhost/queue` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost/queue`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6359433967abe090", "name": "Dangling fetch: POST http://localhost/queue (apps/api/test/routes/queue/queue.test.ts:27)", "shortDescription": {"text": "Dangling fetch: POST http://localhost/queue (apps/api/test/routes/queue/queue.test.ts:27)"}, "fullDescription": {"text": "`apps/api/test/routes/queue/queue.test.ts:27` calls `POST http://localhost/queue` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost/queue`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1ad66381c43e0200", "name": "Dangling fetch: POST http://localhost/queue (apps/api/test/routes/queue/queue.test.ts:43)", "shortDescription": {"text": "Dangling fetch: POST http://localhost/queue (apps/api/test/routes/queue/queue.test.ts:43)"}, "fullDescription": {"text": "`apps/api/test/routes/queue/queue.test.ts:43` calls `POST http://localhost/queue` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost/queue`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-92d01ad380ead1ac", "name": "Dangling fetch: POST http://localhost/queue (apps/api/test/routes/queue/queue.test.ts:53)", "shortDescription": {"text": "Dangling fetch: POST http://localhost/queue (apps/api/test/routes/queue/queue.test.ts:53)"}, "fullDescription": {"text": "`apps/api/test/routes/queue/queue.test.ts:53` calls `POST http://localhost/queue` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost/queue`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b816d25b96291122", "name": "Dangling fetch: POST http://localhost/queue/batch (apps/api/test/routes/queue/queue.test.ts:71)", "shortDescription": {"text": "Dangling fetch: POST http://localhost/queue/batch (apps/api/test/routes/queue/queue.test.ts:71)"}, "fullDescription": {"text": "`apps/api/test/routes/queue/queue.test.ts:71` calls `POST http://localhost/queue/batch` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost/queue/batch`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f5e28f263a9e4eaa", "name": "Dangling fetch: POST http://localhost/queue/batch (apps/api/test/routes/queue/queue.test.ts:87)", "shortDescription": {"text": "Dangling fetch: POST http://localhost/queue/batch (apps/api/test/routes/queue/queue.test.ts:87)"}, "fullDescription": {"text": "`apps/api/test/routes/queue/queue.test.ts:87` calls `POST http://localhost/queue/batch` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost/queue/batch`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-483227887b6e9f66", "name": "Dangling fetch: POST http://localhost/queue/batch (apps/api/test/routes/queue/queue.test.ts:99)", "shortDescription": {"text": "Dangling fetch: POST http://localhost/queue/batch (apps/api/test/routes/queue/queue.test.ts:99)"}, "fullDescription": {"text": "`apps/api/test/routes/queue/queue.test.ts:99` calls `POST http://localhost/queue/batch` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost/queue/batch`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-75aa5a5c993106c0", "name": "Dangling fetch: POST http://localhost/queue/batch (apps/api/test/routes/queue/queue.test.ts:115)", "shortDescription": {"text": "Dangling fetch: POST http://localhost/queue/batch (apps/api/test/routes/queue/queue.test.ts:115)"}, "fullDescription": {"text": "`apps/api/test/routes/queue/queue.test.ts:115` calls `POST http://localhost/queue/batch` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost/queue/batch`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2681e3c17cd62bc9", "name": "Dangling fetch: POST http://localhost/queue/spectrum (apps/api/test/routes/queue/queue.test.ts:127)", "shortDescription": {"text": "Dangling fetch: POST http://localhost/queue/spectrum (apps/api/test/routes/queue/queue.test.ts:127)"}, "fullDescription": {"text": "`apps/api/test/routes/queue/queue.test.ts:127` calls `POST http://localhost/queue/spectrum` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost/queue/spectrum`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8b703599f26b25f9", "name": "Dangling fetch: POST http://localhost/queue/spectrum (apps/api/test/routes/queue/queue.test.ts:148)", "shortDescription": {"text": "Dangling fetch: POST http://localhost/queue/spectrum (apps/api/test/routes/queue/queue.test.ts:148)"}, "fullDescription": {"text": "`apps/api/test/routes/queue/queue.test.ts:148` calls `POST http://localhost/queue/spectrum` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost/queue/spectrum`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-26fcc077ed1cc553", "name": "Dangling fetch: POST http://localhost/queue/spectrum (apps/api/test/routes/queue/queue.test.ts:168)", "shortDescription": {"text": "Dangling fetch: POST http://localhost/queue/spectrum (apps/api/test/routes/queue/queue.test.ts:168)"}, "fullDescription": {"text": "`apps/api/test/routes/queue/queue.test.ts:168` calls `POST http://localhost/queue/spectrum` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost/queue/spectrum`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-191aa354334bc8e8", "name": "Dangling fetch: POST http://localhost/queue/spectrum (apps/api/test/routes/queue/queue.test.ts:178)", "shortDescription": {"text": "Dangling fetch: POST http://localhost/queue/spectrum (apps/api/test/routes/queue/queue.test.ts:178)"}, "fullDescription": {"text": "`apps/api/test/routes/queue/queue.test.ts:178` calls `POST http://localhost/queue/spectrum` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost/queue/spectrum`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6e561e83546aa96b", "name": "Dangling fetch: GET http://localhost/queue/list (apps/api/test/routes/queue/queue.test.ts:190)", "shortDescription": {"text": "Dangling fetch: GET http://localhost/queue/list (apps/api/test/routes/queue/queue.test.ts:190)"}, "fullDescription": {"text": "`apps/api/test/routes/queue/queue.test.ts:190` calls `GET http://localhost/queue/list` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost/queue/list`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-341a34e113607322", "name": "Dangling fetch: GET http://localhost/queue/list (apps/api/test/routes/queue/queue.test.ts:203)", "shortDescription": {"text": "Dangling fetch: GET http://localhost/queue/list (apps/api/test/routes/queue/queue.test.ts:203)"}, "fullDescription": {"text": "`apps/api/test/routes/queue/queue.test.ts:203` calls `GET http://localhost/queue/list` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost/queue/list`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-cb43417402807415", "name": "Dangling fetch: POST http://internal/uncertainty/predictions (apps/api/src/lib/uncertainty/client.ts:114)", "shortDescription": {"text": "Dangling fetch: POST http://internal/uncertainty/predictions (apps/api/src/lib/uncertainty/client.ts:114)"}, "fullDescription": {"text": "`apps/api/src/lib/uncertainty/client.ts:114` calls `POST http://internal/uncertainty/predictions` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/internal/uncertainty/predictions`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4fbbef8fdebe717e", "name": "Dangling fetch: POST https://api.cloudflare.com/client/v4/graphql (apps/api/src/lib/queue/list.ts:85)", "shortDescription": {"text": "Dangling fetch: POST https://api.cloudflare.com/client/v4/graphql (apps/api/src/lib/queue/list.ts:85)"}, "fullDescription": {"text": "`apps/api/src/lib/queue/list.ts:85` calls `POST https://api.cloudflare.com/client/v4/graphql` 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.cloudflare.com/client/v4/graphql`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c2841c8d1650cbc5", "name": "Dangling fetch: POST https://api.rafters.studio/queue/batch (scripts/warm-color-cache.ts:340)", "shortDescription": {"text": "Dangling fetch: POST https://api.rafters.studio/queue/batch (scripts/warm-color-cache.ts:340)"}, "fullDescription": {"text": "`scripts/warm-color-cache.ts:340` calls `POST https://api.rafters.studio/queue/batch` 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.rafters.studio/queue/batch`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c4facc085979390a", "name": "Dangling fetch: POST https://api.rafters.studio/queue/batch (scripts/warm-comprehensive-cache.ts:415)", "shortDescription": {"text": "Dangling fetch: POST https://api.rafters.studio/queue/batch (scripts/warm-comprehensive-cache.ts:415)"}, "fullDescription": {"text": "`scripts/warm-comprehensive-cache.ts:415` calls `POST https://api.rafters.studio/queue/batch` 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.rafters.studio/queue/batch`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-887756f70c685009", "name": "Dangling fetch: GET http://localhost:${serverPort}/ (packages/cli/test/steps/studio.steps.ts:39)", "shortDescription": {"text": "Dangling fetch: GET http://localhost:${serverPort}/ (packages/cli/test/steps/studio.steps.ts:39)"}, "fullDescription": {"text": "`packages/cli/test/steps/studio.steps.ts:39` calls `GET http://localhost:${serverPort}/` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost:/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-48b3213623a0893f", "name": "Dangling fetch: GET http://localhost:${serverPort}${path} (packages/cli/test/steps/studio.steps.ts:54)", "shortDescription": {"text": "Dangling fetch: GET http://localhost:${serverPort}${path} (packages/cli/test/steps/studio.steps.ts:54)"}, "fullDescription": {"text": "`packages/cli/test/steps/studio.steps.ts:54` calls `GET http://localhost:${serverPort}${path}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost:/<p>/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6117b1aecf5d19e9", "name": "Dangling fetch: POST http://localhost:${serverPort}${path} (packages/cli/test/steps/studio.steps.ts:69)", "shortDescription": {"text": "Dangling fetch: POST http://localhost:${serverPort}${path} (packages/cli/test/steps/studio.steps.ts:69)"}, "fullDescription": {"text": "`packages/cli/test/steps/studio.steps.ts:69` calls `POST http://localhost:${serverPort}${path}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost:/<p>/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-cd42e75f38c8f85d", "name": "Dangling fetch: GET https://api.rafters.studio/color/${l}-${c}-${h}?sync=true (packages/studio/src/api/vite-plugin.ts:66", "shortDescription": {"text": "Dangling fetch: GET https://api.rafters.studio/color/${l}-${c}-${h}?sync=true (packages/studio/src/api/vite-plugin.ts:660)"}, "fullDescription": {"text": "`packages/studio/src/api/vite-plugin.ts:660` calls `GET https://api.rafters.studio/color/${l}-${c}-${h}?sync=true` 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.rafters.studio/color/<p>-/<p>-/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f1ea293101f6cf53", "name": "Unused endpoint: GET /reference", "shortDescription": {"text": "Unused endpoint: GET /reference"}, "fullDescription": {"text": "`apps/api/src/lib/configure-open-api.ts` declares `GET /reference` 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-13bb8db3b38eca98", "name": "Unused endpoint: GET /llms.txt", "shortDescription": {"text": "Unused endpoint: GET /llms.txt"}, "fullDescription": {"text": "`apps/api/src/lib/configure-open-api.ts` declares `GET /llms.txt` 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/17734"}, "properties": {"repository": "rafters-studio/rafters", "repoUrl": "https://github.com/rafters-studio/rafters", "branch": "main"}, "results": [{"ruleId": "scanner-dc8f4550c8d9c82d", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/demo/src/components/ui/typography.tsx:1766"}, "properties": {"repobilityId": "dd1d1e9e6a6a3cd9", "scanner": "scanner-primary", "fingerprint": "dc8f4550c8d9c82d", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-a54beed848336ccf", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 apps/demo/src/components/ui/container.tsx:252"}, "properties": {"repobilityId": "d4b4b1b072f06048", "scanner": "scanner-primary", "fingerprint": "a54beed848336ccf", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-7e124ecbbb7c8703", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 apps/demo/src/components/ui/grid.tsx:183"}, "properties": {"repobilityId": "d01f9d9670595754", "scanner": "scanner-primary", "fingerprint": "7e124ecbbb7c8703", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-593ee4be1eff393a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/demo/src/lib/primitives/block-palette.ts:25"}, "properties": {"repobilityId": "17ed23caed155d06", "scanner": "scanner-primary", "fingerprint": "593ee4be1eff393a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c1a36844e355ee91", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/demo/src/lib/primitives/inline-formatter.ts:385"}, "properties": {"repobilityId": "e777d5040976d205", "scanner": "scanner-primary", "fingerprint": "c1a36844e355ee91", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e960f01f825183ef", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/demo/src/lib/primitives/clipboard.ts:87"}, "properties": {"repobilityId": "56ede32626a4916f", "scanner": "scanner-primary", "fingerprint": "e960f01f825183ef", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-da6131e67d9a80aa", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/demo/src/lib/primitives/command-palette.ts:18"}, "properties": {"repobilityId": "25ea9a61ef1dccb0", "scanner": "scanner-primary", "fingerprint": "da6131e67d9a80aa", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-143c26c5d080637b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/api/worker-configuration.d.ts:173"}, "properties": {"repobilityId": "392abf1ece243ab1", "scanner": "scanner-primary", "fingerprint": "143c26c5d080637b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e622772d910887dd", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/api/src/scripts/regenerate-color-names.ts:60"}, "properties": {"repobilityId": "8d673a5435806010", "scanner": "scanner-primary", "fingerprint": "e622772d910887dd", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b0a932cd499606aa", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/api/src/lib/queue/publisher.ts:70"}, "properties": {"repobilityId": "c2dfe4f8cc31e4fb", "scanner": "scanner-primary", "fingerprint": "b0a932cd499606aa", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-fee87ae8cb4d776f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/warm-color-cache.ts:325"}, "properties": {"repobilityId": "cb84d2aca5b38b97", "scanner": "scanner-primary", "fingerprint": "fee87ae8cb4d776f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c920b6479e1d8ce0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/generate-color-fixture.ts:24"}, "properties": {"repobilityId": "6ff8b050d753b88d", "scanner": "scanner-primary", "fingerprint": "c920b6479e1d8ce0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c3c870d466c16719", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/warm-comprehensive-cache.ts:392"}, "properties": {"repobilityId": "9237c8cb557c09cf", "scanner": "scanner-primary", "fingerprint": "c3c870d466c16719", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9551b4e7471c7686", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/color-utils/src/builder.ts:79"}, "properties": {"repobilityId": "d196093cec733032", "scanner": "scanner-primary", "fingerprint": "9551b4e7471c7686", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e22244279e71be3b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/color-utils/src/color-wheel.ts:211"}, "properties": {"repobilityId": "dbb39f8c904d0f4e", "scanner": "scanner-primary", "fingerprint": "e22244279e71be3b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a5fecbe0a327f4d5", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/ui/test/components/typography.test.tsx:1453"}, "properties": {"repobilityId": "113645075f31ea92", "scanner": "scanner-primary", "fingerprint": "a5fecbe0a327f4d5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3ae17ad41c0c0289", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/ui/src/primitives/input-events.ts:86"}, "properties": {"repobilityId": "16b937ada3b48857", "scanner": "scanner-primary", "fingerprint": "3ae17ad41c0c0289", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-befa934362c1d2e1", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/ui/src/primitives/selection.ts:438"}, "properties": {"repobilityId": "5a808317967fcbf2", "scanner": "scanner-primary", "fingerprint": "befa934362c1d2e1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-87e4ad8b327f0986", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/ui/src/primitives/block-palette.ts:25"}, "properties": {"repobilityId": "a3d9940893e83b1c", "scanner": "scanner-primary", "fingerprint": "87e4ad8b327f0986", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-39642bb15352cb01", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/ui/src/primitives/color-input.ts:20"}, "properties": {"repobilityId": "fbafc05d4ffbd784", "scanner": "scanner-primary", "fingerprint": "39642bb15352cb01", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ec7c7e4026c990ba", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/ui/src/primitives/drag-drop.ts:16"}, "properties": {"repobilityId": "84beee75f4cdfa3b", "scanner": "scanner-primary", "fingerprint": "ec7c7e4026c990ba", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d72e1ef0720cfea2", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/ui/src/primitives/color-picker.ts:47"}, "properties": {"repobilityId": "c0c4e928ad7bbab4", "scanner": "scanner-primary", "fingerprint": "d72e1ef0720cfea2", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-59fbc3ff4cc0d675", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/ui/src/primitives/color-family.ts:33"}, "properties": {"repobilityId": "05ee3a5f454b7154", "scanner": "scanner-primary", "fingerprint": "59fbc3ff4cc0d675", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-49ae649c840d71b6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/ui/src/primitives/inline-formatter.ts:380"}, "properties": {"repobilityId": "d83e87e9adb07965", "scanner": "scanner-primary", "fingerprint": "49ae649c840d71b6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-af4b13060f91455b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/ui/src/primitives/clipboard.ts:87"}, "properties": {"repobilityId": "d7c9e32fbb7a07ed", "scanner": "scanner-primary", "fingerprint": "af4b13060f91455b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f410e20af5728546", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/ui/src/primitives/command-palette.ts:18"}, "properties": {"repobilityId": "385ee39007e756f0", "scanner": "scanner-primary", "fingerprint": "f410e20af5728546", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b1f74446c57cef24", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 packages/ui/src/components/ui/typography.tsx:1832"}, "properties": {"repobilityId": "0479ef0a8cc871e7", "scanner": "scanner-primary", "fingerprint": "b1f74446c57cef24", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-21636f268114483d", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 packages/ui/src/components/ui/container.tsx:173"}, "properties": {"repobilityId": "bcb38cdb39d3d915", "scanner": "scanner-primary", "fingerprint": "21636f268114483d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-7ecc505bc643665b", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 packages/ui/src/components/ui/grid.tsx:173"}, "properties": {"repobilityId": "ed2c3775868462ce", "scanner": "scanner-primary", "fingerprint": "7ecc505bc643665b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-d5bb759579a8322e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/ui/src/components/ui/date-picker.tsx:202"}, "properties": {"repobilityId": "80c510c32520aa25", "scanner": "scanner-primary", "fingerprint": "d5bb759579a8322e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-04d90beacdbb6ccf", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/ui/src/components/ui/color-picker.tsx:21"}, "properties": {"repobilityId": "90c771d7b81c1019", "scanner": "scanner-primary", "fingerprint": "04d90beacdbb6ccf", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4bd14804ce14410f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/ui/src/hooks/use-block-selection.ts:105"}, "properties": {"repobilityId": "ba63acdc830e95ce", "scanner": "scanner-primary", "fingerprint": "4bd14804ce14410f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7d81ce22d4b48223", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/ui/src/hooks/use-command-palette.ts:142"}, "properties": {"repobilityId": "5b6fa7cf8c2f7567", "scanner": "scanner-primary", "fingerprint": "7d81ce22d4b48223", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8509416a7cb0c1db", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/ui/src/hooks/use-clipboard.ts:12"}, "properties": {"repobilityId": "753e01be0e19a71e", "scanner": "scanner-primary", "fingerprint": "8509416a7cb0c1db", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4e7ba69e25609893", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/ui/src/hooks/use-drag-drop.ts:162"}, "properties": {"repobilityId": "9733c31e790f2d8b", "scanner": "scanner-primary", "fingerprint": "4e7ba69e25609893", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b14975bc448313d0", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 packages/cli/test/integration/init.integration.test.ts:481"}, "properties": {"repobilityId": "5d93dbe822fb8f48", "scanner": "scanner-primary", "fingerprint": "b14975bc448313d0", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-be4a880e4879454a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/cli/scripts/smoke-detect.ts:15"}, "properties": {"repobilityId": "f94eebfbbc65a59f", "scanner": "scanner-primary", "fingerprint": "be4a880e4879454a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f328a15d37074f4a", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 packages/cli/src/mcp/tools.ts:360"}, "properties": {"repobilityId": "214d8ea726e5f0bd", "scanner": "scanner-primary", "fingerprint": "f328a15d37074f4a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-0281d5d2b5cc05b3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/cli/src/commands/add.ts:482"}, "properties": {"repobilityId": "a1959351d5fa60eb", "scanner": "scanner-primary", "fingerprint": "0281d5d2b5cc05b3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b1cb7b67c301eda9", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/cli/src/commands/studio.ts:23"}, "properties": {"repobilityId": "79df0cdcd7f9a472", "scanner": "scanner-primary", "fingerprint": "b1cb7b67c301eda9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f35493c65cfd8b3b", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 packages/cli/src/utils/install-registry-deps.ts:42"}, "properties": {"repobilityId": "9974cff45468ffcd", "scanner": "scanner-primary", "fingerprint": "f35493c65cfd8b3b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-07cd7dc042c0abe7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/cli/src/utils/ui.ts:32"}, "properties": {"repobilityId": "de82203803f14bea", "scanner": "scanner-primary", "fingerprint": "07cd7dc042c0abe7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5391ea3a74d744c6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/studio/scripts/setup-standalone.ts:28"}, "properties": {"repobilityId": "51dbcfd376e081e3", "scanner": "scanner-primary", "fingerprint": "5391ea3a74d744c6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-be0376dd6ac80dcb", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/studio/src/api/vite-plugin.ts:315"}, "properties": {"repobilityId": "37d197591f601f85", "scanner": "scanner-primary", "fingerprint": "be0376dd6ac80dcb", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f7fcd018de9e501f", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in apps/demo/src/components/ui/typography.tsx:1766"}, "properties": {"repobilityId": "fc6358480aa460d2", "scanner": "scanner-primary", "fingerprint": "f7fcd018de9e501f", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/demo/src/components/ui/typography.tsx"}, "region": {"startLine": 1766}}}]}, {"ruleId": "scanner-a761658cedc68bf8", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in apps/demo/src/components/ui/typography.tsx:432"}, "properties": {"repobilityId": "5e60eccf7dc84520", "scanner": "scanner-primary", "fingerprint": "a761658cedc68bf8", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/demo/src/components/ui/typography.tsx"}, "region": {"startLine": 432}}}]}, {"ruleId": "scanner-bc3e78402bbe241c", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in apps/demo/src/lib/primitives/typeahead.ts:398"}, "properties": {"repobilityId": "e14fcf1e06e2a711", "scanner": "scanner-primary", "fingerprint": "bc3e78402bbe241c", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/demo/src/lib/primitives/typeahead.ts"}, "region": {"startLine": 398}}}]}, {"ruleId": "scanner-ec744ccddb47a213", "level": "error", "message": {"text": "Insecure pattern 'exec_used' in apps/api/worker-configuration.d.ts:2944"}, "properties": {"repobilityId": "21c51c81f1afe933", "scanner": "scanner-primary", "fingerprint": "ec744ccddb47a213", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["owasp", "exec_used"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/worker-configuration.d.ts"}, "region": {"startLine": 2944}}}]}, {"ruleId": "scanner-a5473326b0508522", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in apps/api/src/queue-consumer.ts:20"}, "properties": {"repobilityId": "bf13a09e082495df", "scanner": "scanner-primary", "fingerprint": "a5473326b0508522", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/queue-consumer.ts"}, "region": {"startLine": 20}}}]}, {"ruleId": "scanner-ac0b7f9399e3f5ca", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in apps/api/src/scripts/regenerate-color-names.ts:13"}, "properties": {"repobilityId": "da94625b5f27c002", "scanner": "scanner-primary", "fingerprint": "ac0b7f9399e3f5ca", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/scripts/regenerate-color-names.ts"}, "region": {"startLine": 13}}}]}, {"ruleId": "scanner-4387a4103e838d8b", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in apps/registry/src/pages/registry/index.json.ts:19"}, "properties": {"repobilityId": "1ce02d6b8f3a5d2f", "scanner": "scanner-primary", "fingerprint": "4387a4103e838d8b", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/registry/src/pages/registry/index.json.ts"}, "region": {"startLine": 19}}}]}, {"ruleId": "scanner-3a378622e3e3bb4f", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in apps/registry/src/pages/registry/composites/[name].json.ts:40"}, "properties": {"repobilityId": "22981b7d230fbacf", "scanner": "scanner-primary", "fingerprint": "3a378622e3e3bb4f", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/registry/src/pages/registry/composites/[name].json.ts"}, "region": {"startLine": 40}}}]}, {"ruleId": "scanner-7df44934893273ef", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in apps/registry/src/pages/registry/primitives/[name].json.ts:40"}, "properties": {"repobilityId": "16729ebd2c519a88", "scanner": "scanner-primary", "fingerprint": "7df44934893273ef", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/registry/src/pages/registry/primitives/[name].json.ts"}, "region": {"startLine": 40}}}]}, {"ruleId": "scanner-f506bdca9f5d0b94", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in apps/registry/src/pages/registry/components/[name].json.ts:40"}, "properties": {"repobilityId": "7f69bc495395ae75", "scanner": "scanner-primary", "fingerprint": "f506bdca9f5d0b94", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/registry/src/pages/registry/components/[name].json.ts"}, "region": {"startLine": 40}}}]}, {"ruleId": "scanner-cfea39cbf7404e51", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in packages/ui/src/primitives/typeahead.ts:398"}, "properties": {"repobilityId": "da7299f7aed0900a", "scanner": "scanner-primary", "fingerprint": "cfea39cbf7404e51", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/ui/src/primitives/typeahead.ts"}, "region": {"startLine": 398}}}]}, {"ruleId": "scanner-cc11fb7f9dc276a8", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in packages/ui/src/components/ui/typography.tsx:1832"}, "properties": {"repobilityId": "9de63ca9d63006f8", "scanner": "scanner-primary", "fingerprint": "cc11fb7f9dc276a8", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/ui/src/components/ui/typography.tsx"}, "region": {"startLine": 1832}}}]}, {"ruleId": "scanner-ebfeb1994327faf5", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in packages/ui/src/components/ui/typography.tsx:403"}, "properties": {"repobilityId": "16f5042f08ad2a34", "scanner": "scanner-primary", "fingerprint": "ebfeb1994327faf5", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/ui/src/components/ui/typography.tsx"}, "region": {"startLine": 403}}}]}, {"ruleId": "scanner-de53ac274e5b4ecf", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "02600186fc092bd4", "scanner": "scanner-primary", "fingerprint": "de53ac274e5b4ecf", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/claude.yml"}, "region": {"startLine": 28}}}]}, {"ruleId": "scanner-de53ac274e5b4ecf", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "1767eb8fd5b0b814", "scanner": "scanner-primary", "fingerprint": "de53ac274e5b4ecf", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/claude.yml"}, "region": {"startLine": 33}}}]}, {"ruleId": "scanner-37716d9c0a33ad5c", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "abfb5752158cf655", "scanner": "scanner-primary", "fingerprint": "37716d9c0a33ad5c", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/claude.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-46c644c6227e4d4a", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "2644034c718fb80d", "scanner": "scanner-primary", "fingerprint": "46c644c6227e4d4a", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/release.yml"}, "region": {"startLine": 17}}}]}, {"ruleId": "scanner-46c644c6227e4d4a", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "4a76b700066ca8f5", "scanner": "scanner-primary", "fingerprint": "46c644c6227e4d4a", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/release.yml"}, "region": {"startLine": 20}}}]}, {"ruleId": "scanner-46c644c6227e4d4a", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "eeb76410cc935c30", "scanner": "scanner-primary", "fingerprint": "46c644c6227e4d4a", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/release.yml"}, "region": {"startLine": 23}}}]}, {"ruleId": "scanner-1838a141491ce38c", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "b8fd4f5048f96576", "scanner": "scanner-primary", "fingerprint": "1838a141491ce38c", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/release.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-9d83497d71a9cae4", "level": "note", "message": {"text": "Very large file: apps/demo/src/components/ui/typography.tsx (2034 lines)"}, "properties": {"repobilityId": "e175681c1e104155", "scanner": "scanner-primary", "fingerprint": "9d83497d71a9cae4", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-918f92803defd5ec", "level": "note", "message": {"text": "Very large file: apps/demo/src/components/ui/editor.tsx (2249 lines)"}, "properties": {"repobilityId": "c5e73a219e232bab", "scanner": "scanner-primary", "fingerprint": "918f92803defd5ec", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-f97ed6c5690d878b", "level": "note", "message": {"text": "Very large file: apps/api/worker-configuration.d.ts (10850 lines)"}, "properties": {"repobilityId": "74752ded9019b47f", "scanner": "scanner-primary", "fingerprint": "f97ed6c5690d878b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-612150222deacfb8", "level": "note", "message": {"text": "Very large file: packages/color-utils/src/naming/hue-hubs.ts (2452 lines)"}, "properties": {"repobilityId": "ce247400f45bccca", "scanner": "scanner-primary", "fingerprint": "612150222deacfb8", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-e7a34c4cf1dfc8ec", "level": "note", "message": {"text": "Very large file: packages/ui/test/components/typography.test.tsx (1679 lines)"}, "properties": {"repobilityId": "e81a2a3948badce8", "scanner": "scanner-primary", "fingerprint": "e7a34c4cf1dfc8ec", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-5c528420f0086dd1", "level": "note", "message": {"text": "Very large file: packages/ui/src/components/ui/typography.tsx (2125 lines)"}, "properties": {"repobilityId": "e7284cf4fa5f3eea", "scanner": "scanner-primary", "fingerprint": "5c528420f0086dd1", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-2d13021d0552ead7", "level": "note", "message": {"text": "Very large file: packages/cli/src/commands/init.ts (1387 lines)"}, "properties": {"repobilityId": "646e5490e2844fd0", "scanner": "scanner-primary", "fingerprint": "2d13021d0552ead7", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-90093cc80120f462", "level": "note", "message": {"text": "Very large file: packages/studio/test/api/vite-plugin.test.ts (2092 lines)"}, "properties": {"repobilityId": "12273b4d5170d0a9", "scanner": "scanner-primary", "fingerprint": "90093cc80120f462", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-b65deeec504332ee", "level": "note", "message": {"text": "Very large file: packages/design-tokens/src/generators/defaults.ts (2795 lines)"}, "properties": {"repobilityId": "3e3f39b2e4db9dfe", "scanner": "scanner-primary", "fingerprint": "b65deeec504332ee", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-c39ba7ebc985b6cb", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: apps/demo/package.json"}, "properties": {"repobilityId": "a97db61cc729fb7e", "scanner": "scanner-primary", "fingerprint": "c39ba7ebc985b6cb", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/demo/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-b06b8d86f24c77f9", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: apps/api/package.json"}, "properties": {"repobilityId": "ce77cd34ed0306d4", "scanner": "scanner-primary", "fingerprint": "b06b8d86f24c77f9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-6f294e9fee725f23", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: apps/registry/package.json"}, "properties": {"repobilityId": "730d1f881d6735ac", "scanner": "scanner-primary", "fingerprint": "6f294e9fee725f23", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/registry/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3f896178938ceb9a", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/color-utils/package.json"}, "properties": {"repobilityId": "e689015fe89b7012", "scanner": "scanner-primary", "fingerprint": "3f896178938ceb9a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/color-utils/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-41b143027f4bc32e", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/composites/package.json"}, "properties": {"repobilityId": "0e8c00ef9869ee6f", "scanner": "scanner-primary", "fingerprint": "41b143027f4bc32e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/composites/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-139a051a810cd74d", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/math-utils/package.json"}, "properties": {"repobilityId": "c6a43a5adc1aa8df", "scanner": "scanner-primary", "fingerprint": "139a051a810cd74d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/math-utils/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-2699d5f16ae11282", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/shared/package.json"}, "properties": {"repobilityId": "37ac218a4ef9b430", "scanner": "scanner-primary", "fingerprint": "2699d5f16ae11282", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/shared/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-50218c90b43393bb", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/ui/package.json"}, "properties": {"repobilityId": "637e26a8c754e81d", "scanner": "scanner-primary", "fingerprint": "50218c90b43393bb", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/ui/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-8c2e3196a4ef0cdd", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/cli/package.json"}, "properties": {"repobilityId": "2faf23490612d7a6", "scanner": "scanner-primary", "fingerprint": "8c2e3196a4ef0cdd", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/cli/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-4a2550a13b29da43", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/studio/package.json"}, "properties": {"repobilityId": "738f286e91cac21d", "scanner": "scanner-primary", "fingerprint": "4a2550a13b29da43", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/studio/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-bcfee846e2ec548b", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/design-tokens/package.json"}, "properties": {"repobilityId": "e14fd044e4f21085", "scanner": "scanner-primary", "fingerprint": "bcfee846e2ec548b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/design-tokens/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "66b4df056ab2a4cd", "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": "3fb6a240ecd16b52", "scanner": "scanner-primary", "fingerprint": "72b2a6250083a784", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "incomplete", "generated-repo-pattern"]}}, {"ruleId": "scanner-2d0c7b7ab8f8aacf", "level": "warning", "message": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "properties": {"repobilityId": "dd59bc67e621623d", "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": "b126b6d0020a5c79", "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": "1be2182803471f68", "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": "dc00d7ae5c2d1804", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-3a5b8188fdbb408b", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: plugin/skills/rafters-frontend/SKILL.md"}, "properties": {"repobilityId": "40dad6429041139e", "scanner": "scanner-primary", "fingerprint": "3a5b8188fdbb408b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "skill_file"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "plugin/skills/rafters-frontend/SKILL.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-883d546cf7538d81", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/ARCHITECTURE.md"}, "properties": {"repobilityId": "bd5865e785721860", "scanner": "scanner-primary", "fingerprint": "883d546cf7538d81", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/ARCHITECTURE.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-919ee37ff8153725", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/skills/rafters-frontend/SKILL.md"}, "properties": {"repobilityId": "c88b5fe7b0cd0555", "scanner": "scanner-primary", "fingerprint": "919ee37ff8153725", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/rafters-frontend/SKILL.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-1605f34f3bcd231d", "level": "note", "message": {"text": "Legacy-named symbol `certIssuerDNLegacy` in apps/api/worker-configuration.d.ts:9325"}, "properties": {"repobilityId": "85b1e68d9cedd9e3", "scanner": "scanner-primary", "fingerprint": "1605f34f3bcd231d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-1df4fc02140d71cf", "level": "none", "message": {"text": "Commented-code block (8 lines) in apps/api/worker-configuration.d.ts:10086"}, "properties": {"repobilityId": "9f218516e296f451", "scanner": "scanner-primary", "fingerprint": "1df4fc02140d71cf", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bdf9ca864e4d08e6", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/api/worker-configuration.d.ts:306"}, "properties": {"repobilityId": "f50deee844767dcc", "scanner": "scanner-primary", "fingerprint": "bdf9ca864e4d08e6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2fdb63508419ddf7", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/api/test/routes/index.test.ts:6"}, "properties": {"repobilityId": "b7ed54d1fa96dcd9", "scanner": "scanner-primary", "fingerprint": "2fdb63508419ddf7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-91d7c012c6043e6e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/api/test/routes/color/color.test.ts:9"}, "properties": {"repobilityId": "78f4173e3584273f", "scanner": "scanner-primary", "fingerprint": "91d7c012c6043e6e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-81bb43d5da143b5d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/api/test/routes/tokens/tokens.test.ts:17"}, "properties": {"repobilityId": "3b51219d76d3d73c", "scanner": "scanner-primary", "fingerprint": "81bb43d5da143b5d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b32d110781715e65", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/api/test/routes/queue/queue.test.ts:11"}, "properties": {"repobilityId": "ea21b507da21c84b", "scanner": "scanner-primary", "fingerprint": "b32d110781715e65", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-7604851d08231835", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/api/src/routes/tokens/tokens.handlers.ts:130"}, "properties": {"repobilityId": "16cf87c0a6ce23cb", "scanner": "scanner-primary", "fingerprint": "7604851d08231835", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1bb0e1d7f26becbd", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/warm-color-cache.ts:340"}, "properties": {"repobilityId": "e706c6752dcdf4a0", "scanner": "scanner-primary", "fingerprint": "1bb0e1d7f26becbd", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ed10b41ff1791bd0", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/warm-comprehensive-cache.ts:415"}, "properties": {"repobilityId": "8972cb6ce16928a9", "scanner": "scanner-primary", "fingerprint": "ed10b41ff1791bd0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b83d5353cf1f8bba", "level": "none", "message": {"text": "Commented-code block (6 lines) in packages/color-utils/test/conversion.test.ts:62"}, "properties": {"repobilityId": "caef0364600a6166", "scanner": "scanner-primary", "fingerprint": "b83d5353cf1f8bba", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bf91daa41f81d255", "level": "none", "message": {"text": "Commented-code block (8 lines) in packages/color-utils/test/naming.test.ts:169"}, "properties": {"repobilityId": "e0f0cce1d00d1cb9", "scanner": "scanner-primary", "fingerprint": "bf91daa41f81d255", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2bf1e59cdffafbeb", "level": "none", "message": {"text": "Commented-code block (6 lines) in packages/color-utils/src/semantic.ts:324"}, "properties": {"repobilityId": "4866c055f93d12c6", "scanner": "scanner-primary", "fingerprint": "2bf1e59cdffafbeb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-515c319783846980", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/color-utils/src/naming/hue-hubs.ts:2400"}, "properties": {"repobilityId": "663f5de017f2aefd", "scanner": "scanner-primary", "fingerprint": "515c319783846980", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ff80f0f6a189de29", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/math-utils/src/index.ts:13"}, "properties": {"repobilityId": "bbd7c72c0c3ef89e", "scanner": "scanner-primary", "fingerprint": "ff80f0f6a189de29", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6d05a25bc5e32549", "level": "none", "message": {"text": "Commented-code block (9 lines) in packages/ui/src/components/ui/radio-group.element.ts:638"}, "properties": {"repobilityId": "d757b008e0769234", "scanner": "scanner-primary", "fingerprint": "6d05a25bc5e32549", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f93b06eea4df6f09", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/ui/src/components/ui/radio-group.element.a11y.tsx:205"}, "properties": {"repobilityId": "a3f35ad876ee81e2", "scanner": "scanner-primary", "fingerprint": "f93b06eea4df6f09", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-376095bb7abf8e4d", "level": "none", "message": {"text": "Commented-code block (7 lines) in packages/ui/src/components/ui/switch.element.a11y.tsx:171"}, "properties": {"repobilityId": "f06bc4f792ea1581", "scanner": "scanner-primary", "fingerprint": "376095bb7abf8e4d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b1bb142f55931c46", "level": "none", "message": {"text": "Commented-code block (7 lines) in packages/ui/src/components/ui/checkbox.element.a11y.tsx:195"}, "properties": {"repobilityId": "17b533a91761cc11", "scanner": "scanner-primary", "fingerprint": "b1bb142f55931c46", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-29f2b91dd1a35a9d", "level": "none", "message": {"text": "Commented-code block (6 lines) in packages/cli/test/integration/init.integration.test.ts:533"}, "properties": {"repobilityId": "db2004e4fe5c4e9d", "scanner": "scanner-primary", "fingerprint": "29f2b91dd1a35a9d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0bf55d62aee40e62", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/cli/test/commands/add.spec.ts:117"}, "properties": {"repobilityId": "c20984aa8a1e6b8f", "scanner": "scanner-primary", "fingerprint": "0bf55d62aee40e62", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-aaa6201ee4584a4c", "level": "none", "message": {"text": "Commented-code block (6 lines) in packages/cli/src/mcp/tools.ts:469"}, "properties": {"repobilityId": "de3699bbd457aaf7", "scanner": "scanner-primary", "fingerprint": "aaa6201ee4584a4c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b3ddbf82352d6ddf", "level": "note", "message": {"text": "Legacy-named symbol `reset_backup` in packages/cli/src/commands/init.ts:661"}, "properties": {"repobilityId": "560b9025c8e99fe6", "scanner": "scanner-primary", "fingerprint": "b3ddbf82352d6ddf", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-ae46af2460088e1c", "level": "none", "message": {"text": "Commented-code block (9 lines) in packages/cli/src/commands/init.ts:815"}, "properties": {"repobilityId": "186dde3fb0447632", "scanner": "scanner-primary", "fingerprint": "ae46af2460088e1c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b27b17ad3852bb14", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/cli/src/utils/detect.ts:204"}, "properties": {"repobilityId": "7516ffbe70811ee9", "scanner": "scanner-primary", "fingerprint": "b27b17ad3852bb14", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2a8c79a1f5e457a4", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/cli/src/registry/client.ts:32"}, "properties": {"repobilityId": "78b67e5cc792df03", "scanner": "scanner-primary", "fingerprint": "2a8c79a1f5e457a4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f65652ebd2926d1e", "level": "none", "message": {"text": "Commented-code block (10 lines) in packages/studio/src/api/vite-plugin.ts:447"}, "properties": {"repobilityId": "87f38cc97dc1e61d", "scanner": "scanner-primary", "fingerprint": "f65652ebd2926d1e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-db2332b109da832c", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/design-tokens/src/registry.ts:31"}, "properties": {"repobilityId": "7c3b103d188fc895", "scanner": "scanner-primary", "fingerprint": "db2332b109da832c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2f4f56dc09a6c284", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/design-tokens/src/generators/semantic.ts:135"}, "properties": {"repobilityId": "c21e32fc2952037b", "scanner": "scanner-primary", "fingerprint": "2f4f56dc09a6c284", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a82dcc13cee826f0", "level": "none", "message": {"text": "Commented-code block (6 lines) in packages/design-tokens/src/generators/typography.ts:192"}, "properties": {"repobilityId": "57675c372b4be0dc", "scanner": "scanner-primary", "fingerprint": "a82dcc13cee826f0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2d42e492a244050c", "level": "none", "message": {"text": "Commented-code block (6 lines) in packages/design-tokens/src/generators/motion.ts:195"}, "properties": {"repobilityId": "0292ddd19b6a82f0", "scanner": "scanner-primary", "fingerprint": "2d42e492a244050c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6d1d1419031ed8dc", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/design-tokens/src/importers/classify.ts:115"}, "properties": {"repobilityId": "adeb97c8ab9990af", "scanner": "scanner-primary", "fingerprint": "6d1d1419031ed8dc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bb327bc147d9e2fb", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/design-tokens/src/importers/color.ts:40"}, "properties": {"repobilityId": "b6fa65d50e8247d8", "scanner": "scanner-primary", "fingerprint": "bb327bc147d9e2fb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1f469a4e538b0045", "level": "none", "message": {"text": "Commented-code block (8 lines) in packages/design-tokens/src/importers/bases.ts:81"}, "properties": {"repobilityId": "a38252cf975497a6", "scanner": "scanner-primary", "fingerprint": "1f469a4e538b0045", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7a3da6e5d3e0278f", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost/ (apps/api/test/routes/index.test.ts:6)"}, "properties": {"repobilityId": "468b9d891a43cc7e", "scanner": "scanner-primary", "fingerprint": "7a3da6e5d3e0278f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b623a07fed91612b", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost/docs (apps/api/test/routes/index.test.ts:18)"}, "properties": {"repobilityId": "8787ea7be0ead99a", "scanner": "scanner-primary", "fingerprint": "b623a07fed91612b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-86d82d069c66e168", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost/reference (apps/api/test/routes/index.test.ts:28)"}, "properties": {"repobilityId": "d196a7b40ad2537a", "scanner": "scanner-primary", "fingerprint": "86d82d069c66e168", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3cdc97c14c8d5ab0", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost/unknown-route (apps/api/test/routes/index.test.ts:35)"}, "properties": {"repobilityId": "24b28df5de54e2da", "scanner": "scanner-primary", "fingerprint": "3cdc97c14c8d5ab0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f9665b50a103e639", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost/color/search?q=ocean%20blue (apps/api/test/routes/color/color.test.ts:9)"}, "properties": {"repobilityId": "2aef2cae7d63a93c", "scanner": "scanner-primary", "fingerprint": "f9665b50a103e639", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a7dc85bc9146fd67", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost/color/search (apps/api/test/routes/color/color.test.ts:20)"}, "properties": {"repobilityId": "25ecc3893e5707a7", "scanner": "scanner-primary", "fingerprint": "a7dc85bc9146fd67", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6c70408984118f4a", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost/color/search?q=test&hue=invalid (apps/api/test/routes/color/color.test.ts:38)"}, "properties": {"repobilityId": "76f00ba5a79c487e", "scanner": "scanner-primary", "fingerprint": "6c70408984118f4a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-22f0165a3502d1bc", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost/color/search?q=test&limit=200 (apps/api/test/routes/color/color.test.ts:45)"}, "properties": {"repobilityId": "2deedae5447f1ac3", "scanner": "scanner-primary", "fingerprint": "22f0165a3502d1bc", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5bf4ac871c170c60", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost/color/0.500-0.120-240 (apps/api/test/routes/color/color.test.ts:54)"}, "properties": {"repobilityId": "8699fb3215fcf4ca", "scanner": "scanner-primary", "fingerprint": "5bf4ac871c170c60", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4bbef131d19e6bdd", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost/color/invalid-format (apps/api/test/routes/color/color.test.ts:64)"}, "properties": {"repobilityId": "801c4cc094550b01", "scanner": "scanner-primary", "fingerprint": "4bbef131d19e6bdd", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-44594692bed3ebdb", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost/color/0.5-0.12-240 (apps/api/test/routes/color/color.test.ts:72)"}, "properties": {"repobilityId": "d3ebbbb93329d9a2", "scanner": "scanner-primary", "fingerprint": "44594692bed3ebdb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8ee35c91a9886bf5", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost/color/0.700-0.150-260?adhoc=true (apps/api/test/routes/color/color.test.ts:80)"}, "properties": {"repobilityId": "c8145bc7ef6ae9df", "scanner": "scanner-primary", "fingerprint": "8ee35c91a9886bf5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4a4dc053c31559df", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost/color/0.700-0.150-260?adhoc=true (apps/api/test/routes/color/color.test.ts:90)"}, "properties": {"repobilityId": "b3557164713be5a6", "scanner": "scanner-primary", "fingerprint": "4a4dc053c31559df", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-412a7b450783aff4", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost/color/0.700-0.150-260?adhoc=true (apps/api/test/routes/color/color.test.ts:101)"}, "properties": {"repobilityId": "f87ea62412c5cc84", "scanner": "scanner-primary", "fingerprint": "412a7b450783aff4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b6eda91674740f1d", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost/color/0.700-0.150-260?adhoc=true (apps/api/test/routes/color/color.test.ts:114)"}, "properties": {"repobilityId": "5389ff94310d801f", "scanner": "scanner-primary", "fingerprint": "b6eda91674740f1d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2bda3b8bb633bbf2", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost/color/0.700-0.150-260?adhoc=true (apps/api/test/routes/color/color.test.ts:128)"}, "properties": {"repobilityId": "8b93ce0e7b927a05", "scanner": "scanner-primary", "fingerprint": "2bda3b8bb633bbf2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5d712580842941c8", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost/color/0.700-0.150-260?adhoc=true (apps/api/test/routes/color/color.test.ts:138)"}, "properties": {"repobilityId": "17600a7edb2a899e", "scanner": "scanner-primary", "fingerprint": "5d712580842941c8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-39f8447ab8f84599", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost/color/0.700-0.150-260?adhoc=true (apps/api/test/routes/color/color.test.ts:146)"}, "properties": {"repobilityId": "e25b24c72699009f", "scanner": "scanner-primary", "fingerprint": "39f8447ab8f84599", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-cb0ec5ea42a4f51c", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost/color/0.700-0.150-260?adhoc=true (apps/api/test/routes/color/color.test.ts:158)"}, "properties": {"repobilityId": "0c88c155e12707fd", "scanner": "scanner-primary", "fingerprint": "cb0ec5ea42a4f51c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-cd1d34df661ae9e1", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost/color/0.500-0.200-10?adhoc=true (apps/api/test/routes/color/color.test.ts:163)"}, "properties": {"repobilityId": "46d046241acc86c4", "scanner": "scanner-primary", "fingerprint": "cd1d34df661ae9e1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c9d729f5e5d4f46f", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost/color/0.500-0.020-180?adhoc=true (apps/api/test/routes/color/color.test.ts:168)"}, "properties": {"repobilityId": "7597214a33484b4c", "scanner": "scanner-primary", "fingerprint": "c9d729f5e5d4f46f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9dba6f000d26d817", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost/color/0.850-0.150-260?adhoc=true (apps/api/test/routes/color/color.test.ts:175)"}, "properties": {"repobilityId": "a1561326123d66f4", "scanner": "scanner-primary", "fingerprint": "9dba6f000d26d817", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7ced5fab3b981f6b", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost/color/0.200-0.150-260?adhoc=true (apps/api/test/routes/color/color.test.ts:180)"}, "properties": {"repobilityId": "9951edc6e600a819", "scanner": "scanner-primary", "fingerprint": "7ced5fab3b981f6b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e6bb025a749e7213", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost/tokens/system (apps/api/test/routes/tokens/tokens.test.ts:17)"}, "properties": {"repobilityId": "0f3dd9a00f18d0a7", "scanner": "scanner-primary", "fingerprint": "e6bb025a749e7213", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a2e392053bdc9439", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost/tokens (apps/api/test/routes/tokens/tokens.test.ts:27)"}, "properties": {"repobilityId": "b16258d6c0505980", "scanner": "scanner-primary", "fingerprint": "a2e392053bdc9439", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-58f7fc76b79bbd61", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost/tokens (apps/api/test/routes/tokens/tokens.test.ts:36)"}, "properties": {"repobilityId": "b0d0eaf2810a59f2", "scanner": "scanner-primary", "fingerprint": "58f7fc76b79bbd61", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d22ab181044652fc", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost/tokens/spacing (apps/api/test/routes/tokens/tokens.test.ts:53)"}, "properties": {"repobilityId": "984b75d57a2ee280", "scanner": "scanner-primary", "fingerprint": "d22ab181044652fc", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-44f1ee479a6c55ee", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost/tokens/nonexistent (apps/api/test/routes/tokens/tokens.test.ts:60)"}, "properties": {"repobilityId": "40c859d1b7aee836", "scanner": "scanner-primary", "fingerprint": "44f1ee479a6c55ee", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-715b079a0309bb84", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost/tokens/semantic/primary (apps/api/test/routes/tokens/tokens.test.ts:67)"}, "properties": {"repobilityId": "ed475b2c2fa936ee", "scanner": "scanner-primary", "fingerprint": "715b079a0309bb84", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-78ba2a8377700a56", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost/tokens/color/spacing-1 (apps/api/test/routes/tokens/tokens.test.ts:77)"}, "properties": {"repobilityId": "ac7645ca971ad7ef", "scanner": "scanner-primary", "fingerprint": "78ba2a8377700a56", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b8653e158765a000", "level": "error", "message": {"text": "Dangling fetch: PUT http://localhost/tokens/spacing/spacing-4 (apps/api/test/routes/tokens/tokens.test.ts:88)"}, "properties": {"repobilityId": "c44038567f0908f0", "scanner": "scanner-primary", "fingerprint": "b8653e158765a000", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5f2e8d61f86016d7", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost/tokens/spacing/spacing-4 (apps/api/test/routes/tokens/tokens.test.ts:98)"}, "properties": {"repobilityId": "5067ed4de9bfa116", "scanner": "scanner-primary", "fingerprint": "5f2e8d61f86016d7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ff033d4bfb98210d", "level": "error", "message": {"text": "Dangling fetch: PUT http://localhost/tokens/spacing/spacing-5 (apps/api/test/routes/tokens/tokens.test.ts:106)"}, "properties": {"repobilityId": "529e3f1f822f9618", "scanner": "scanner-primary", "fingerprint": "ff033d4bfb98210d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0d039d8ba60f3bdd", "level": "error", "message": {"text": "Dangling fetch: PUT http://localhost/tokens/spacing/spacing-5 (apps/api/test/routes/tokens/tokens.test.ts:115)"}, "properties": {"repobilityId": "dadfbd78fc0a4624", "scanner": "scanner-primary", "fingerprint": "0d039d8ba60f3bdd", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c196cec89bab4da9", "level": "error", "message": {"text": "Dangling fetch: PUT http://localhost/tokens/spacing/nonexistent (apps/api/test/routes/tokens/tokens.test.ts:124)"}, "properties": {"repobilityId": "3d628fb1f5ee86ab", "scanner": "scanner-primary", "fingerprint": "c196cec89bab4da9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ef06a9587bbb98cd", "level": "error", "message": {"text": "Dangling fetch: PUT http://localhost/tokens/spacing/spacing-6 (apps/api/test/routes/tokens/tokens.test.ts:136)"}, "properties": {"repobilityId": "d7d93043ceb903e8", "scanner": "scanner-primary", "fingerprint": "ef06a9587bbb98cd", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9940e983939188ff", "level": "error", "message": {"text": "Dangling fetch: DELETE http://localhost/tokens/spacing/spacing-6/override (apps/api/test/routes/tokens/tokens.test.ts:142)"}, "properties": {"repobilityId": "3295ea917ffb856c", "scanner": "scanner-primary", "fingerprint": "9940e983939188ff", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f98ff6fa4798d93e", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost/tokens/spacing/spacing-6 (apps/api/test/routes/tokens/tokens.test.ts:150)"}, "properties": {"repobilityId": "6c8d784dfd5fda2b", "scanner": "scanner-primary", "fingerprint": "f98ff6fa4798d93e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2dda614fdd46cf73", "level": "error", "message": {"text": "Dangling fetch: DELETE http://localhost/tokens/spacing/spacing-7/override (apps/api/test/routes/tokens/tokens.test.ts:156)"}, "properties": {"repobilityId": "7e640ae116f17bda", "scanner": "scanner-primary", "fingerprint": "2dda614fdd46cf73", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-26617320e131c078", "level": "error", "message": {"text": "Dangling fetch: POST http://localhost/tokens/spacing/reset (apps/api/test/routes/tokens/tokens.test.ts:169)"}, "properties": {"repobilityId": "2471d9e6c6226886", "scanner": "scanner-primary", "fingerprint": "26617320e131c078", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9afc368143e97dad", "level": "error", "message": {"text": "Dangling fetch: POST http://localhost/tokens/nonexistent/reset (apps/api/test/routes/tokens/tokens.test.ts:181)"}, "properties": {"repobilityId": "09aa1cb608516de0", "scanner": "scanner-primary", "fingerprint": "9afc368143e97dad", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-52e327f77b9e85ea", "level": "error", "message": {"text": "Dangling fetch: PUT http://localhost/tokens/spacing/spacing-8 (apps/api/test/routes/tokens/tokens.test.ts:196)"}, "properties": {"repobilityId": "958b56cf262cd8e4", "scanner": "scanner-primary", "fingerprint": "52e327f77b9e85ea", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c6215036a780e664", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost/tokens/spacing/spacing-8 (apps/api/test/routes/tokens/tokens.test.ts:202)"}, "properties": {"repobilityId": "bc040234ae8ccc0c", "scanner": "scanner-primary", "fingerprint": "c6215036a780e664", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-dd1de93fa2c09972", "level": "error", "message": {"text": "Dangling fetch: POST http://localhost/queue (apps/api/test/routes/queue/queue.test.ts:11)"}, "properties": {"repobilityId": "7b3848cc8d20d41e", "scanner": "scanner-primary", "fingerprint": "dd1de93fa2c09972", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6359433967abe090", "level": "error", "message": {"text": "Dangling fetch: POST http://localhost/queue (apps/api/test/routes/queue/queue.test.ts:27)"}, "properties": {"repobilityId": "614e3c39c5152047", "scanner": "scanner-primary", "fingerprint": "6359433967abe090", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1ad66381c43e0200", "level": "error", "message": {"text": "Dangling fetch: POST http://localhost/queue (apps/api/test/routes/queue/queue.test.ts:43)"}, "properties": {"repobilityId": "1d4222555cce27ff", "scanner": "scanner-primary", "fingerprint": "1ad66381c43e0200", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-92d01ad380ead1ac", "level": "error", "message": {"text": "Dangling fetch: POST http://localhost/queue (apps/api/test/routes/queue/queue.test.ts:53)"}, "properties": {"repobilityId": "41460bdab2a881b3", "scanner": "scanner-primary", "fingerprint": "92d01ad380ead1ac", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b816d25b96291122", "level": "error", "message": {"text": "Dangling fetch: POST http://localhost/queue/batch (apps/api/test/routes/queue/queue.test.ts:71)"}, "properties": {"repobilityId": "53c8550d58532345", "scanner": "scanner-primary", "fingerprint": "b816d25b96291122", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f5e28f263a9e4eaa", "level": "error", "message": {"text": "Dangling fetch: POST http://localhost/queue/batch (apps/api/test/routes/queue/queue.test.ts:87)"}, "properties": {"repobilityId": "eb64c37ab739e23f", "scanner": "scanner-primary", "fingerprint": "f5e28f263a9e4eaa", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-483227887b6e9f66", "level": "error", "message": {"text": "Dangling fetch: POST http://localhost/queue/batch (apps/api/test/routes/queue/queue.test.ts:99)"}, "properties": {"repobilityId": "ebd87d3b03e2c6e8", "scanner": "scanner-primary", "fingerprint": "483227887b6e9f66", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-75aa5a5c993106c0", "level": "error", "message": {"text": "Dangling fetch: POST http://localhost/queue/batch (apps/api/test/routes/queue/queue.test.ts:115)"}, "properties": {"repobilityId": "c951b2425ca73e00", "scanner": "scanner-primary", "fingerprint": "75aa5a5c993106c0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2681e3c17cd62bc9", "level": "error", "message": {"text": "Dangling fetch: POST http://localhost/queue/spectrum (apps/api/test/routes/queue/queue.test.ts:127)"}, "properties": {"repobilityId": "d9585abb988763a3", "scanner": "scanner-primary", "fingerprint": "2681e3c17cd62bc9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8b703599f26b25f9", "level": "error", "message": {"text": "Dangling fetch: POST http://localhost/queue/spectrum (apps/api/test/routes/queue/queue.test.ts:148)"}, "properties": {"repobilityId": "862f591f513f2fbf", "scanner": "scanner-primary", "fingerprint": "8b703599f26b25f9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-26fcc077ed1cc553", "level": "error", "message": {"text": "Dangling fetch: POST http://localhost/queue/spectrum (apps/api/test/routes/queue/queue.test.ts:168)"}, "properties": {"repobilityId": "9e7e1f38ef13ecb2", "scanner": "scanner-primary", "fingerprint": "26fcc077ed1cc553", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-191aa354334bc8e8", "level": "error", "message": {"text": "Dangling fetch: POST http://localhost/queue/spectrum (apps/api/test/routes/queue/queue.test.ts:178)"}, "properties": {"repobilityId": "fcaf4079b8e80183", "scanner": "scanner-primary", "fingerprint": "191aa354334bc8e8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6e561e83546aa96b", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost/queue/list (apps/api/test/routes/queue/queue.test.ts:190)"}, "properties": {"repobilityId": "33257f9750f94653", "scanner": "scanner-primary", "fingerprint": "6e561e83546aa96b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-341a34e113607322", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost/queue/list (apps/api/test/routes/queue/queue.test.ts:203)"}, "properties": {"repobilityId": "64be62305d953659", "scanner": "scanner-primary", "fingerprint": "341a34e113607322", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-cb43417402807415", "level": "error", "message": {"text": "Dangling fetch: POST http://internal/uncertainty/predictions (apps/api/src/lib/uncertainty/client.ts:114)"}, "properties": {"repobilityId": "57aa10e6010a23e3", "scanner": "scanner-primary", "fingerprint": "cb43417402807415", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4fbbef8fdebe717e", "level": "error", "message": {"text": "Dangling fetch: POST https://api.cloudflare.com/client/v4/graphql (apps/api/src/lib/queue/list.ts:85)"}, "properties": {"repobilityId": "1c422858b3e36f8c", "scanner": "scanner-primary", "fingerprint": "4fbbef8fdebe717e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c2841c8d1650cbc5", "level": "error", "message": {"text": "Dangling fetch: POST https://api.rafters.studio/queue/batch (scripts/warm-color-cache.ts:340)"}, "properties": {"repobilityId": "1b404d43d1c79bfa", "scanner": "scanner-primary", "fingerprint": "c2841c8d1650cbc5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c4facc085979390a", "level": "error", "message": {"text": "Dangling fetch: POST https://api.rafters.studio/queue/batch (scripts/warm-comprehensive-cache.ts:415)"}, "properties": {"repobilityId": "efff02ba2ba0903f", "scanner": "scanner-primary", "fingerprint": "c4facc085979390a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-887756f70c685009", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost:${serverPort}/ (packages/cli/test/steps/studio.steps.ts:39)"}, "properties": {"repobilityId": "074c1f9886cee78d", "scanner": "scanner-primary", "fingerprint": "887756f70c685009", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-48b3213623a0893f", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost:${serverPort}${path} (packages/cli/test/steps/studio.steps.ts:54)"}, "properties": {"repobilityId": "8501498957d3fe38", "scanner": "scanner-primary", "fingerprint": "48b3213623a0893f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6117b1aecf5d19e9", "level": "error", "message": {"text": "Dangling fetch: POST http://localhost:${serverPort}${path} (packages/cli/test/steps/studio.steps.ts:69)"}, "properties": {"repobilityId": "47116295771bd6a9", "scanner": "scanner-primary", "fingerprint": "6117b1aecf5d19e9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-cd42e75f38c8f85d", "level": "error", "message": {"text": "Dangling fetch: GET https://api.rafters.studio/color/${l}-${c}-${h}?sync=true (packages/studio/src/api/vite-plugin.ts:660)"}, "properties": {"repobilityId": "b962dbeb24d0ead1", "scanner": "scanner-primary", "fingerprint": "cd42e75f38c8f85d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f1ea293101f6cf53", "level": "note", "message": {"text": "Unused endpoint: GET /reference"}, "properties": {"repobilityId": "5da7042623db05d1", "scanner": "scanner-primary", "fingerprint": "f1ea293101f6cf53", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-13bb8db3b38eca98", "level": "note", "message": {"text": "Unused endpoint: GET /llms.txt"}, "properties": {"repobilityId": "851427d9817bb5a2", "scanner": "scanner-primary", "fingerprint": "13bb8db3b38eca98", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}