{"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-add0cfd9dadcfa5f", "name": "Stray `console.log` in TS/JS \u2014 studio/apps/web/src/index.ts:74", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 studio/apps/web/src/index.ts:74"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5d8ac109a91726a4", "name": "Stray `console.log` in TS/JS \u2014 studio/apps/web/src/containers/render-worker.ts:22", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 studio/apps/web/src/containers/render-worker.ts:22"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5be069c42027f559", "name": "`truncate` class without `title=` for hover reveal \u2014 studio/apps/web/client/components/panels/OutlineBuilder.tsx:372", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 studio/apps/web/client/components/panels/OutlineBuilder.tsx:372"}, "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-59bf11936896a97a", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 studio/apps/web/client/components/panels/PublishPanel.tsx:448", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 studio/apps/web/client/components/panels/PublishPanel.tsx:448"}, "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-ae8f9a7d00cb38b6", "name": "`truncate` class without `title=` for hover reveal \u2014 studio/apps/web/client/components/panels/FullBookPanel.tsx:251", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 studio/apps/web/client/components/panels/FullBookPanel.tsx:251"}, "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-d36bd8b73e9c2917", "name": "`truncate` class without `title=` for hover reveal \u2014 studio/apps/web/client/components/studio/BreadcrumbPill.tsx:35", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 studio/apps/web/client/components/studio/BreadcrumbPill.tsx:35"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a30a80a8a2afc953", "name": "`truncate` class without `title=` for hover reveal \u2014 studio/apps/web/client/components/studio/SideDrawer.tsx:399", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 studio/apps/web/client/components/studio/SideDrawer.tsx:399"}, "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-44e2b41331795d18", "name": "\"active\" state uses light bg in a dark theme \u2014 studio/apps/web/client/components/studio/SideDrawer.tsx:582", "shortDescription": {"text": "\"active\" state uses light bg in a dark theme \u2014 studio/apps/web/client/components/studio/SideDrawer.tsx:582"}, "fullDescription": {"text": "A ternary like `active ? 'bg-white' : '...'` (or bg-gray-100/200) on a dark theme produces jarring white pills. Use a dark-emphasized active state instead \u2014 border + ring or slightly brighter dark bg. Example: `active ? 'bg-gray-800 border-gray-500 ring-1 ring-blue-500/30' : '\u2026'`.\n\nWhy: P-E in CHECKLIST.md \u2014 light bg in a dark theme is a class of regression.\nRule id: fq.active-light-bg"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-71cee71526e94e20", "name": "`truncate` class without `title=` for hover reveal \u2014 studio/apps/web/client/components/workspace/outline-rail.tsx:147", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 studio/apps/web/client/components/workspace/outline-rail.tsx:147"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f67a384479fb351b", "name": "`truncate` class without `title=` for hover reveal \u2014 studio/apps/web/client/routes/admin.tsx:326", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 studio/apps/web/client/routes/admin.tsx:326"}, "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-5b03c01f5e194ee2", "name": "`truncate` class without `title=` for hover reveal \u2014 studio/apps/web/client/routes/_hub.$projectId.chapters.$chapterId.t", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 studio/apps/web/client/routes/_hub.$projectId.chapters.$chapterId.tsx:110"}, "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-d2a6ab56cd246257", "name": "`truncate` class without `title=` for hover reveal \u2014 studio/apps/web/client/routes/_hub.$projectId.outline.tsx:348", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 studio/apps/web/client/routes/_hub.$projectId.outline.tsx:348"}, "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-c646d203694141fa", "name": "`truncate` class without `title=` for hover reveal \u2014 studio/apps/web/client/routes/_hub.index.tsx:152", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 studio/apps/web/client/routes/_hub.index.tsx:152"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-08285bd8c7f774dd", "name": "`truncate` class without `title=` for hover reveal \u2014 studio/apps/web/client/routes/_hub.scripts.$scriptId.index.tsx:120", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 studio/apps/web/client/routes/_hub.scripts.$scriptId.index.tsx:120"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f2a38f479159d383", "name": "`truncate` class without `title=` for hover reveal \u2014 studio/apps/web/client/routes/_hub.compose-blog.tsx:360", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 studio/apps/web/client/routes/_hub.compose-blog.tsx:360"}, "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-ea0d56adc99f85c6", "name": "`truncate` class without `title=` for hover reveal \u2014 studio/apps/web/client/routes/_hub.blogs.$blogId.index.tsx:152", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 studio/apps/web/client/routes/_hub.blogs.$blogId.index.tsx:152"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fc7824c7ef35c0a4", "name": "`truncate` class without `title=` for hover reveal \u2014 studio/apps/web/client/routes/account.tsx:112", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 studio/apps/web/client/routes/account.tsx:112"}, "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-727c8c2ca4a682eb", "name": "Stray `console.log` in TS/JS \u2014 studio/services/render-worker/src/index.ts:503", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 studio/services/render-worker/src/index.ts:503"}, "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-7b007e467d415a47", "name": "TODO/FIXME marker in shipping code \u2014 tests/e2e/record.spec.ts:105", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 tests/e2e/record.spec.ts:105"}, "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-6200e876b914bd6e", "name": "Stray `console.log` in TS/JS \u2014 src/workers/index.ts:184", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/workers/index.ts:184"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-27bc76225344011e", "name": "Stray `console.log` in TS/JS \u2014 src/workers/create-cma.ts:72", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/workers/create-cma.ts:72"}, "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-149924fc7a3407da", "name": "TODO/FIXME marker in shipping code \u2014 src/workers/create-tools.ts:168", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/workers/create-tools.ts:168"}, "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-87158a77f4d91bf3", "name": "Stray `console.log` in TS/JS \u2014 src/workers/composer-agent-do.ts:174", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/workers/composer-agent-do.ts:174"}, "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-e42e9dedc1eff531", "name": "Stray `console.log` in TS/JS \u2014 src/workers/polar-webhook.ts:403", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/workers/polar-webhook.ts:403"}, "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-dd26c8210dd45386", "name": "Stray `console.log` in TS/JS \u2014 src/workers/dmca.ts:99", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/workers/dmca.ts:99"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-19cbd90fa4ea29af", "name": "Stray `console.log` in TS/JS \u2014 src/workers/account.ts:367", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/workers/account.ts:367"}, "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-b92a49d2af6aca02", "name": "Stray `console.log` in TS/JS \u2014 src/frontend/recorder/DevicePermission.tsx:145", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/frontend/recorder/DevicePermission.tsx:145"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-828e02565d2a8370", "name": "Stray `console.log` in TS/JS \u2014 src/frontend/recorder/WaitingForDevices.tsx:31", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/frontend/recorder/WaitingForDevices.tsx:31"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1ab191d6a5a1b941", "name": "TODO/FIXME marker in shipping code \u2014 src/frontend/recorder/helpers/transcribe-video.ts:1", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/frontend/recorder/helpers/transcribe-video.ts:1"}, "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-61f6fa73eb3ddf53", "name": "Stray `console.log` in TS/JS \u2014 src/frontend/recorder/helpers/start-media-recorder.ts:62", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/frontend/recorder/helpers/start-media-recorder.ts:62"}, "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-acd05d74c37589c8", "name": "Stray `console.log` in TS/JS \u2014 src/frontend/recorder/components/UseThisTake.tsx:101", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/frontend/recorder/components/UseThisTake.tsx:101"}, "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-723af8f47b57e19a", "name": "Stray `console.log` in TS/JS \u2014 src/frontend/recorder/components/EnsureBrowserSupport.tsx:20", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/frontend/recorder/components/EnsureBrowserSupport.tsx:20"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7e5188708495c8b8", "name": "TODO/FIXME marker in shipping code \u2014 src/frontend/recorder/remotion/scenes/Title/Title.tsx:36", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/frontend/recorder/remotion/scenes/Title/Title.tsx:36"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c58452a871c729ea", "name": "TODO/FIXME marker in shipping code \u2014 src/frontend/recorder/remotion/layout/get-webcam-size.ts:4", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/frontend/recorder/remotion/layout/get-webcam-size.ts:4"}, "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-bfede4a9deb34e53", "name": "TODO/FIXME marker in shipping code \u2014 src/frontend/recorder/remotion/captions/boxed/components/TransitionBetweenSubtitles", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/frontend/recorder/remotion/captions/boxed/components/TransitionBetweenSubtitles.tsx:17"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7f008bbf90b37526", "name": "TODO/FIXME marker in shipping code \u2014 src/frontend/recorder/config/endcard.ts:9", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/frontend/recorder/config/endcard.ts:9"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e9ef9e08433f0b23", "name": "Stray `console.log` in TS/JS \u2014 container/render/src/server.ts:166", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 container/render/src/server.ts:166"}, "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-9a2e4d0e87d067f4", "name": "TODO/FIXME marker in shipping code \u2014 container/render/remotion/scenes/Title/Title.tsx:36", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 container/render/remotion/scenes/Title/Title.tsx:36"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cc70c3e26b246503", "name": "TODO/FIXME marker in shipping code \u2014 container/render/remotion/layout/get-webcam-size.ts:4", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 container/render/remotion/layout/get-webcam-size.ts:4"}, "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-a4f84a0f7be360ab", "name": "TODO/FIXME marker in shipping code \u2014 container/render/remotion/captions/boxed/components/TransitionBetweenSubtitles.tsx:", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 container/render/remotion/captions/boxed/components/TransitionBetweenSubtitles.tsx:17"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-13709d54da5ea57c", "name": "TODO/FIXME marker in shipping code \u2014 container/render/config/endcard.ts:9", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 container/render/config/endcard.ts:9"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-21a8ef7287a807b8", "name": "Privileged port 19 in use", "shortDescription": {"text": "Privileged port 19 in use"}, "fullDescription": {"text": "Port 19 is privileged (<1024). Make sure the service runs with the right caps or front it with a non-privileged port via a load balancer."}, "properties": {"scanner": "scanner-primary", "layer": "network", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0fa31367c135b8e4", "name": "Privileged port 52 in use", "shortDescription": {"text": "Privileged port 52 in use"}, "fullDescription": {"text": "Port 52 is privileged (<1024). Make sure the service runs with the right caps or front it with a non-privileged port via a load balancer."}, "properties": {"scanner": "scanner-primary", "layer": "network", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b80cf102c9d91764", "name": "Dockerfile runs as root: studio/services/render-worker/Dockerfile", "shortDescription": {"text": "Dockerfile runs as root: studio/services/render-worker/Dockerfile"}, "fullDescription": {"text": "No non-root USER set. Containers running as root expand the blast radius of any vulnerability inside the image."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-52d1cab4b1b17e23", "name": "Docker base image is tag-pinned but not digest-pinned: node:22-bookworm-slim", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: node:22-bookworm-slim"}, "fullDescription": {"text": "Container tags can be retagged upstream. Pin production base images to a reviewed digest (`image@sha256:...`) when reproducibility and supply-chain integrity matter."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-29aadc2f22780122", "name": "Dockerfile runs as root: container/render/Dockerfile", "shortDescription": {"text": "Dockerfile runs as root: container/render/Dockerfile"}, "fullDescription": {"text": "No non-root USER set. Containers running as root expand the blast radius of any vulnerability inside the image."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-330bb5277f6d51ce", "name": "Docker base image is tag-pinned but not digest-pinned: node:22-bookworm-slim", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: node:22-bookworm-slim"}, "fullDescription": {"text": "Container tags can be retagged upstream. Pin production base images to a reviewed digest (`image@sha256:...`) when reproducibility and supply-chain integrity matter."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-63f904cb664c0a9d", "name": "Possible secret in studio/tests/integration/narration.test.ts", "shortDescription": {"text": "Possible secret in studio/tests/integration/narration.test.ts"}, "fullDescription": {"text": "Detected pattern matching generic_api_key. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-cb8c09cb474ddc28", "name": "Insecure pattern 'dangerous_innerhtml' in studio/apps/web/client/components/panels/PublishPanel.tsx:448", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in studio/apps/web/client/components/panels/PublishPanel.tsx:448"}, "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-49c3efffe39c68df", "name": "Insecure pattern 'node_child_process' in studio/services/render-worker/src/index.ts:1", "shortDescription": {"text": "Insecure pattern 'node_child_process' in studio/services/render-worker/src/index.ts:1"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-8c8935f6863fd48a", "name": "Insecure pattern 'node_child_process' in scripts/check-no-direct-providers.test.mjs:5", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/check-no-direct-providers.test.mjs:5"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-744e35a05dd270ed", "name": "Insecure pattern 'node_child_process' in scripts/sync-doppler-secrets.mjs:42", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/sync-doppler-secrets.mjs:42"}, "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-29f92161c1f515aa", "name": "Insecure pattern 'node_child_process' in .cursor/hooks/lib/hindsight-client.mjs:4", "shortDescription": {"text": "Insecure pattern 'node_child_process' in .cursor/hooks/lib/hindsight-client.mjs:4"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-da7abb4b8d0759e4", "name": "Insecure pattern 'node_child_process' in container/render/src/encode.ts:6", "shortDescription": {"text": "Insecure pattern 'node_child_process' in container/render/src/encode.ts:6"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-1e912da7ad42a994", "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-bc9f3e610f8f12c9", "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-376ceef717f12640", "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-40dba48ffd6bded2", "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-141b30a41e03817b", "name": "No license file detected", "shortDescription": {"text": "No license file detected"}, "fullDescription": {"text": "No LICENSE/COPYING/NOTICE file was found. Generated repositories often omit licensing, which blocks reuse and automated intake."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e97c7eb2eee0131b", "name": "Node manifest has dependencies but no lockfile: studio/apps/web/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: studio/apps/web/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-23ed299d662eeb0a", "name": "Node manifest has dependencies but no lockfile: studio/services/render-worker/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: studio/services/render-worker/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3ab5d313dda8e5f9", "name": "Debug logging residue appears in source files", "shortDescription": {"text": "Debug logging residue appears in source files"}, "fullDescription": {"text": "Found 76 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 177 placeholder/mock markers across 63 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-b9088664ace7f748", "name": "Composite production-readiness gap", "shortDescription": {"text": "Composite production-readiness gap"}, "fullDescription": {"text": "Multiple low-cost hardening controls are missing together: license, lockfile. Opus verification showed these co-occurring gaps are a better readiness signal than reading each flag in isolation."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "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 license, 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-fb639963cbb8f792", "name": "Agent authority lacks a verifier contract: .cursor/hooks.json", "shortDescription": {"text": "Agent authority lacks a verifier contract: .cursor/hooks.json"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d80d4cd519f1e750", "name": "Commented-code block (8 lines) in studio/vitest.config.ts:5", "shortDescription": {"text": "Commented-code block (8 lines) in studio/vitest.config.ts:5"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-125b576edd41e459", "name": "Legacy-named symbol `preorder_copy` in studio/tests/unit/gtm-brief.test.ts:78", "shortDescription": {"text": "Legacy-named symbol `preorder_copy` in studio/tests/unit/gtm-brief.test.ts:78"}, "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-b732b8d0d9961b0c", "name": "Legacy-named symbol `preorder_copy` in studio/tests/integration/launch.test.ts:51", "shortDescription": {"text": "Legacy-named symbol `preorder_copy` in studio/tests/integration/launch.test.ts:51"}, "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-06fc5285885e31c0", "name": "Commented-code block (5 lines) in studio/apps/web/vite.config.ts:19", "shortDescription": {"text": "Commented-code block (5 lines) in studio/apps/web/vite.config.ts:19"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-aa071c8654962d8b", "name": "Commented-code block (5 lines) in studio/apps/web/src/index.ts:146", "shortDescription": {"text": "Commented-code block (5 lines) in studio/apps/web/src/index.ts:146"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a2d8167e462e92fc", "name": "`fetch()` without try/.catch or AbortSignal \u2014 studio/apps/web/src/index.ts:134", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 studio/apps/web/src/index.ts:134"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ad48c1c18bca5cca", "name": "Commented-code block (7 lines) in studio/apps/web/src/spooool-session.ts:6", "shortDescription": {"text": "Commented-code block (7 lines) in studio/apps/web/src/spooool-session.ts:6"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ef65af2793058912", "name": "Commented-code block (7 lines) in studio/apps/web/src/shared/app-base.ts:1", "shortDescription": {"text": "Commented-code block (7 lines) in studio/apps/web/src/shared/app-base.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a41487ed985f0f48", "name": "Commented-code block (5 lines) in studio/apps/web/src/shared/beat-plan.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in studio/apps/web/src/shared/beat-plan.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a6fbcc8993f752a4", "name": "`fetch()` without try/.catch or AbortSignal \u2014 studio/apps/web/src/workflows/book-export.ts:145", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 studio/apps/web/src/workflows/book-export.ts:145"}, "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-edb6d8ecc78e0a02", "name": "Legacy-named symbol `eleven_multilingual_v2` in studio/apps/web/src/workflows/audiobook-mastering.ts:221", "shortDescription": {"text": "Legacy-named symbol `eleven_multilingual_v2` in studio/apps/web/src/workflows/audiobook-mastering.ts:221"}, "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-f0056b01e10cdb73", "name": "`fetch()` without try/.catch or AbortSignal \u2014 studio/apps/web/src/workflows/audiobook-mastering.ts:194", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 studio/apps/web/src/workflows/audiobook-mastering.ts:194"}, "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-69840ddaeeac26ef", "name": "`fetch()` without try/.catch or AbortSignal \u2014 studio/apps/web/src/workflows/gtm-brief.ts:145", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 studio/apps/web/src/workflows/gtm-brief.ts:145"}, "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-2f5f149c8af77cf0", "name": "Legacy-named symbol `preorder_copy` in studio/apps/web/src/skills/launch/gtm.ts:12", "shortDescription": {"text": "Legacy-named symbol `preorder_copy` in studio/apps/web/src/skills/launch/gtm.ts:12"}, "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-d0c206fae719eaa1", "name": "Legacy-named symbol `eleven_multilingual_v2` in studio/apps/web/src/routes/projects.ts:1083", "shortDescription": {"text": "Legacy-named symbol `eleven_multilingual_v2` in studio/apps/web/src/routes/projects.ts:1083"}, "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-efe8697539a06ac9", "name": "`fetch()` without try/.catch or AbortSignal \u2014 studio/apps/web/src/routes/projects.ts:1071", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 studio/apps/web/src/routes/projects.ts:1071"}, "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-de4b4c0aa17154e1", "name": "`fetch()` without try/.catch or AbortSignal \u2014 studio/apps/web/src/routes/health.ts:16", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 studio/apps/web/src/routes/health.ts:16"}, "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-7b4550560d430ade", "name": "`fetch()` without try/.catch or AbortSignal \u2014 studio/apps/web/src/routes/voices.ts:181", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 studio/apps/web/src/routes/voices.ts:181"}, "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-7991f2fe34bb253d", "name": "Commented-code block (5 lines) in studio/apps/web/client/components/studio/scene-bits.tsx:14", "shortDescription": {"text": "Commented-code block (5 lines) in studio/apps/web/client/components/studio/scene-bits.tsx:14"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-05aadc7cd0b5eb35", "name": "Commented-code block (6 lines) in studio/apps/web/client/components/chat/aloysius-sidecar.tsx:20", "shortDescription": {"text": "Commented-code block (6 lines) in studio/apps/web/client/components/chat/aloysius-sidecar.tsx:20"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-087f2738e26c9786", "name": "`fetch()` without try/.catch or AbortSignal \u2014 studio/apps/web/client/components/chat/aloysius-sidecar.tsx:23", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 studio/apps/web/client/components/chat/aloysius-sidecar.tsx:23"}, "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-489acc09a18c48fa", "name": "Legacy-named symbol `preorder_copy` in studio/apps/web/client/lib/api.ts:412", "shortDescription": {"text": "Legacy-named symbol `preorder_copy` in studio/apps/web/client/lib/api.ts:412"}, "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-574b16e87eb57e39", "name": "`fetch()` without try/.catch or AbortSignal \u2014 studio/apps/web/client/lib/api.ts:11", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 studio/apps/web/client/lib/api.ts:11"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-7f99ebc47982272a", "name": "Commented-code block (5 lines) in studio/apps/web/client/routes/__root.tsx:30", "shortDescription": {"text": "Commented-code block (5 lines) in studio/apps/web/client/routes/__root.tsx:30"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7602886cce0d73b8", "name": "Commented-code block (6 lines) in tests/load/watch.k6.js:3", "shortDescription": {"text": "Commented-code block (6 lines) in tests/load/watch.k6.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3c793fef5098bd6c", "name": "Commented-code block (5 lines) in tests/load/upload.k6.js:3", "shortDescription": {"text": "Commented-code block (5 lines) in tests/load/upload.k6.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6d83df7bb8291cb6", "name": "Commented-code block (5 lines) in tests/e2e/record.spec.ts:104", "shortDescription": {"text": "Commented-code block (5 lines) in tests/e2e/record.spec.ts:104"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5f19b3925a539e96", "name": "Commented-code block (5 lines) in tests/e2e/upload.spec.ts:9", "shortDescription": {"text": "Commented-code block (5 lines) in tests/e2e/upload.spec.ts:9"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-64dbf6d359cfcac7", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/check-no-direct-providers.test.mjs:56", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/check-no-direct-providers.test.mjs:56"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-aa84125610e0abb2", "name": "Commented-code block (6 lines) in scripts/check-no-direct-providers.mjs:2", "shortDescription": {"text": "Commented-code block (6 lines) in scripts/check-no-direct-providers.mjs:2"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f1d9072695e98e3f", "name": "Commented-code block (5 lines) in scripts/sync-doppler-secrets.mjs:9", "shortDescription": {"text": "Commented-code block (5 lines) in scripts/sync-doppler-secrets.mjs:9"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-63acdb6f0759c236", "name": "Commented-code block (5 lines) in src/workers/edge-cache.ts:7", "shortDescription": {"text": "Commented-code block (5 lines) in src/workers/edge-cache.ts:7"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-432a38bb9df213d5", "name": "Commented-code block (5 lines) in src/workers/index.ts:112", "shortDescription": {"text": "Commented-code block (5 lines) in src/workers/index.ts:112"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1e555f34e2474c57", "name": "Commented-code block (13 lines) in src/workers/upload-validation.ts:29", "shortDescription": {"text": "Commented-code block (13 lines) in src/workers/upload-validation.ts:29"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7628c93fba62e69f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/workers/create.test.ts:75", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/workers/create.test.ts:75"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-db7d7cc82576543a", "name": "Commented-code block (6 lines) in src/workers/create-cma.ts:7", "shortDescription": {"text": "Commented-code block (6 lines) in src/workers/create-cma.ts:7"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-05e915e96ec2fe86", "name": "Commented-code block (5 lines) in src/workers/tags.ts:3", "shortDescription": {"text": "Commented-code block (5 lines) in src/workers/tags.ts:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d09b4ba05cd9b354", "name": "Commented-code block (5 lines) in src/workers/email.ts:5", "shortDescription": {"text": "Commented-code block (5 lines) in src/workers/email.ts:5"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-706a59b18f072e2f", "name": "Commented-code block (7 lines) in src/workers/related.ts:4", "shortDescription": {"text": "Commented-code block (7 lines) in src/workers/related.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9afc4ef1c338a7be", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/workers/rum.test.ts:27", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/workers/rum.test.ts:27"}, "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-b3c7ecabb12f43e7", "name": "Commented-code block (7 lines) in src/workers/lifecycle.ts:1", "shortDescription": {"text": "Commented-code block (7 lines) in src/workers/lifecycle.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-504fdd041c792306", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/workers/spam-filter.ts:85", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/workers/spam-filter.ts:85"}, "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-058087b4cc3c3938", "name": "Commented-code block (9 lines) in src/workers/studio.ts:1", "shortDescription": {"text": "Commented-code block (9 lines) in src/workers/studio.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2f803719fbb129bb", "name": "Commented-code block (8 lines) in src/workers/rate-limit.ts:5", "shortDescription": {"text": "Commented-code block (8 lines) in src/workers/rate-limit.ts:5"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f124c5eba3036a3b", "name": "Commented-code block (5 lines) in src/workers/create-tools.ts:102", "shortDescription": {"text": "Commented-code block (5 lines) in src/workers/create-tools.ts:102"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-749d85cf91be6eec", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/workers/account.test.ts:264", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/workers/account.test.ts:264"}, "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-2a0c4dcd70d0b3ed", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/workers/encoding.ts:29", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/workers/encoding.ts:29"}, "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-8adf5aa18dee7dcc", "name": "Commented-code block (5 lines) in src/workers/feed-item.ts:49", "shortDescription": {"text": "Commented-code block (5 lines) in src/workers/feed-item.ts:49"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ef8787767d726498", "name": "Commented-code block (6 lines) in src/workers/search.ts:32", "shortDescription": {"text": "Commented-code block (6 lines) in src/workers/search.ts:32"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d2c481384073115e", "name": "Commented-code block (5 lines) in src/workers/composer-agent-do.ts:259", "shortDescription": {"text": "Commented-code block (5 lines) in src/workers/composer-agent-do.ts:259"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2f98979d9dc19e81", "name": "Commented-code block (5 lines) in src/workers/video-meta-cache.test.ts:89", "shortDescription": {"text": "Commented-code block (5 lines) in src/workers/video-meta-cache.test.ts:89"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9486fc64075f0c62", "name": "Commented-code block (5 lines) in src/workers/encoder-container.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/workers/encoder-container.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-764605a48437a9fa", "name": "Commented-code block (5 lines) in src/workers/polar-webhook.ts:4", "shortDescription": {"text": "Commented-code block (5 lines) in src/workers/polar-webhook.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-47a23b0a4d343489", "name": "Commented-code block (6 lines) in src/workers/storage-quota.ts:3", "shortDescription": {"text": "Commented-code block (6 lines) in src/workers/storage-quota.ts:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-eafe87353c3840ea", "name": "Commented-code block (6 lines) in src/workers/monetize.ts:3", "shortDescription": {"text": "Commented-code block (6 lines) in src/workers/monetize.ts:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c3294e2066938dc7", "name": "Commented-code block (5 lines) in src/workers/embed-page.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/workers/embed-page.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2840cb8061bcadd7", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/workers/embed-page.ts:20", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/workers/embed-page.ts:20"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ba025d0f46534bbf", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/workers/roles.test.ts:193", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/workers/roles.test.ts:193"}, "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-81db997e6b5a4380", "name": "Commented-code block (6 lines) in src/workers/costs.ts:3", "shortDescription": {"text": "Commented-code block (6 lines) in src/workers/costs.ts:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-bb220fc4ce6a28d9", "name": "Commented-code block (9 lines) in src/workers/create-tools.test.ts:72", "shortDescription": {"text": "Commented-code block (9 lines) in src/workers/create-tools.test.ts:72"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f17a984e83f6c790", "name": "Commented-code block (5 lines) in src/workers/dmca.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/workers/dmca.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-79ed485b49386016", "name": "Commented-code block (6 lines) in src/workers/trending-cache.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in src/workers/trending-cache.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-562885845347002e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/workers/videos.test.ts:66", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/workers/videos.test.ts:66"}, "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-ea7a90d0a960e3ab", "name": "Commented-code block (6 lines) in src/workers/create-cma.test.ts:3", "shortDescription": {"text": "Commented-code block (6 lines) in src/workers/create-cma.test.ts:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2efc1b50bee62c1d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/workers/composer-agent-do.test.ts:74", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/workers/composer-agent-do.test.ts:74"}, "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-18337ee6f8e371f0", "name": "Legacy-named symbol `u_v1` in src/workers/ai-costs.test.ts:157", "shortDescription": {"text": "Legacy-named symbol `u_v1` in src/workers/ai-costs.test.ts:157"}, "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-1401d817f6739cd3", "name": "Commented-code block (5 lines) in src/workers/og-meta.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/workers/og-meta.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-244151a37b7a028d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/workers/rate-limit.test.ts:13", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/workers/rate-limit.test.ts:13"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6ccc888ac54cd870", "name": "Commented-code block (5 lines) in src/workers/render.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/workers/render.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-39eb5d5cdb7d0f2b", "name": "Commented-code block (5 lines) in src/workers/render-container.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/workers/render-container.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-df58d0866157f68c", "name": "Commented-code block (5 lines) in src/workers/account.ts:393", "shortDescription": {"text": "Commented-code block (5 lines) in src/workers/account.ts:393"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-df04994eacfb6405", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/workers/account.ts:324", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/workers/account.ts:324"}, "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-f627777d7ae42da6", "name": "Commented-code block (5 lines) in src/workers/watch-history.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/workers/watch-history.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-36ab2655e1226064", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/workers/stream-webhook.workers.test.ts:19", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/workers/stream-webhook.workers.test.ts:19"}, "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-3f700a960d3a18e2", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/workers/dmca.test.ts:196", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/workers/dmca.test.ts:196"}, "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-c2cc520c3f985a77", "name": "Commented-code block (5 lines) in src/workers/videos.ts:312", "shortDescription": {"text": "Commented-code block (5 lines) in src/workers/videos.ts:312"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f1d2e593d231a764", "name": "Commented-code block (9 lines) in src/workers/canonical-host.ts:3", "shortDescription": {"text": "Commented-code block (9 lines) in src/workers/canonical-host.ts:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ebe0d88cfa788c50", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/workers/discover.workers.test.ts:6", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/workers/discover.workers.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-022066a5adc86cd3", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/workers/moderation.test.ts:163", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/workers/moderation.test.ts:163"}, "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-82207223c786e4fe", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/workers/turnstile.ts:26", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/workers/turnstile.ts:26"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c2655d63d96ef985", "name": "Commented-code block (12 lines) in src/workers/ai-video-consumer.ts:3", "shortDescription": {"text": "Commented-code block (12 lines) in src/workers/ai-video-consumer.ts:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-800d78b93895eb8d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/workers/ai-video-consumer.ts:10", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/workers/ai-video-consumer.ts:10"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-8d1163955244f453", "name": "Commented-code block (5 lines) in src/workers/stream-upload.ts:3", "shortDescription": {"text": "Commented-code block (5 lines) in src/workers/stream-upload.ts:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-85ef7fb25ef94aba", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/workers/encoding.test.ts:91", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/workers/encoding.test.ts:91"}, "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-b8615abb177024d8", "name": "Commented-code block (8 lines) in src/workers/create.ts:1", "shortDescription": {"text": "Commented-code block (8 lines) in src/workers/create.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-74864678e15bae44", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/workers/create.ts:168", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/workers/create.ts:168"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-5f3fb0540f036d1e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/workers/videos.workers.test.ts:18", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/workers/videos.workers.test.ts:18"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-762bf47351eaf44c", "name": "Commented-code block (5 lines) in src/frontend/App.shell.dom.test.tsx:63", "shortDescription": {"text": "Commented-code block (5 lines) in src/frontend/App.shell.dom.test.tsx:63"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c9bca9fe7eea8dc1", "name": "Commented-code block (6 lines) in src/frontend/App.tsx:11", "shortDescription": {"text": "Commented-code block (6 lines) in src/frontend/App.tsx:11"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8489f94ed583caee", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/frontend/recorder/helpers/transcribe-video.ts:32", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/frontend/recorder/helpers/transcribe-video.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-ae88d30f4ba3778e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/frontend/recorder/helpers/cancel-transcribe.ts:6", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/frontend/recorder/helpers/cancel-transcribe.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-a61126fe4691128d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/frontend/recorder/remotion/captions/editor/CaptionOverlay.tsx:59", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/frontend/recorder/remotion/captions/editor/CaptionOverlay.tsx:59"}, "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-a5bf67628ab70e5f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/frontend/recorder/lib/render-jobs.ts:28", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/frontend/recorder/lib/render-jobs.ts:28"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2f6d0185dd2d9fc0", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/frontend/recorder/actions/fetch-project-folders.ts:6", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/frontend/recorder/actions/fetch-project-folders.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-26ec6408d64d1b5b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/frontend/recorder/actions/create-folder.ts:11", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/frontend/recorder/actions/create-folder.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-2099b2fc09a52bc9", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/frontend/pages/Subscriptions.tsx:54", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/frontend/pages/Subscriptions.tsx:54"}, "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-38437166d5b896a0", "name": "Commented-code block (5 lines) in src/frontend/pages/Onboarding.tsx:73", "shortDescription": {"text": "Commented-code block (5 lines) in src/frontend/pages/Onboarding.tsx:73"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0adcf93b8ac15591", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/frontend/pages/Onboarding.tsx:22", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/frontend/pages/Onboarding.tsx:22"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-083fb0324861b553", "name": "Commented-code block (6 lines) in src/frontend/pages/NotFound.tsx:4", "shortDescription": {"text": "Commented-code block (6 lines) in src/frontend/pages/NotFound.tsx:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-325dbeda688094b1", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/frontend/pages/Watch.tsx:267", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/frontend/pages/Watch.tsx:267"}, "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-e54cf5b1ab731b03", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/frontend/pages/AdminStatus.tsx:69", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/frontend/pages/AdminStatus.tsx:69"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2cb5d14ed9d8a8b0", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/frontend/pages/AccountSettings.tsx:130", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/frontend/pages/AccountSettings.tsx:130"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ba449069ae3307bc", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/frontend/pages/Profile.tsx:15", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/frontend/pages/Profile.tsx:15"}, "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-e80e719c02e05e88", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/frontend/pages/Channel.tsx:89", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/frontend/pages/Channel.tsx:89"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b5aef732a19abacf", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/frontend/pages/Payouts.tsx:125", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/frontend/pages/Payouts.tsx:125"}, "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-d244056ccf38c108", "name": "Commented-code block (7 lines) in src/frontend/lib/analytics.ts:1", "shortDescription": {"text": "Commented-code block (7 lines) in src/frontend/lib/analytics.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f634f3e4d0c45085", "name": "Commented-code block (5 lines) in src/frontend/lib/onboarding.ts:3", "shortDescription": {"text": "Commented-code block (5 lines) in src/frontend/lib/onboarding.ts:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-dc5684eccfb56812", "name": "Commented-code block (5 lines) in src/frontend/lib/auto-advance.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/frontend/lib/auto-advance.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-37eec52761b82b93", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/frontend/lib/feeds-client.ts:58", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/frontend/lib/feeds-client.ts:58"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-47ad0781574038a5", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/frontend/lib/sessions.ts:30", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/frontend/lib/sessions.ts:30"}, "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-719976b3f2da8490", "name": "Commented-code block (5 lines) in src/frontend/lib/stream-player.tsx:5", "shortDescription": {"text": "Commented-code block (5 lines) in src/frontend/lib/stream-player.tsx:5"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d0b3e1f73a8b5cf9", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/frontend/lib/discover-client.ts:37", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/frontend/lib/discover-client.ts:37"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2ec31c44a6513265", "name": "Commented-code block (6 lines) in src/auth/index.ts:51", "shortDescription": {"text": "Commented-code block (6 lines) in src/auth/index.ts:51"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3dc65a7376bdc4a1", "name": "Commented-code block (5 lines) in src/__mocks__/aws-sdk-client-s3.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/__mocks__/aws-sdk-client-s3.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8aedc36ced91eac7", "name": "Commented-code block (6 lines) in container/render/src/server.ts:158", "shortDescription": {"text": "Commented-code block (6 lines) in container/render/src/server.ts:158"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7fedcb8df00783a9", "name": "`fetch()` without try/.catch or AbortSignal \u2014 container/render/src/server.ts:321", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 container/render/src/server.ts:321"}, "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-6aeb362c88b82687", "name": "Commented-code block (5 lines) in container/render/src/render.ts:51", "shortDescription": {"text": "Commented-code block (5 lines) in container/render/src/render.ts:51"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-33e04452f3a6183a", "name": "Commented-code block (5 lines) in container/render/src/queue.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in container/render/src/queue.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1cdab3ec322ee925", "name": "`fetch()` without try/.catch or AbortSignal \u2014 container/render/remotion/captions/editor/CaptionOverlay.tsx:59", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 container/render/remotion/captions/editor/CaptionOverlay.tsx:59"}, "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-89e1a6b443db98ac", "name": "Frontend route `/embed/:id` has no Link/navigate to it \u2014 src/frontend/App.tsx", "shortDescription": {"text": "Frontend route `/embed/:id` has no Link/navigate to it \u2014 src/frontend/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-debcf66658bac4e5", "name": "Frontend route `/reset-password` has no Link/navigate to it \u2014 src/frontend/App.tsx", "shortDescription": {"text": "Frontend route `/reset-password` has no Link/navigate to it \u2014 src/frontend/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e7b80fa295b68b77", "name": "Frontend route `/watch/:id` has no Link/navigate to it \u2014 src/frontend/App.tsx", "shortDescription": {"text": "Frontend route `/watch/:id` has no Link/navigate to it \u2014 src/frontend/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-92e3a69b0c012e64", "name": "Frontend route `/record` has no Link/navigate to it \u2014 src/frontend/App.tsx", "shortDescription": {"text": "Frontend route `/record` has no Link/navigate to it \u2014 src/frontend/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-088b9bd536d3893a", "name": "Frontend route `/create` has no Link/navigate to it \u2014 src/frontend/App.tsx", "shortDescription": {"text": "Frontend route `/create` has no Link/navigate to it \u2014 src/frontend/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b5eccfe2ea3676ef", "name": "Frontend route `/channel/:username` has no Link/navigate to it \u2014 src/frontend/App.tsx", "shortDescription": {"text": "Frontend route `/channel/:username` has no Link/navigate to it \u2014 src/frontend/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-5c9c26277c2b012a", "name": "Frontend route `/search` has no Link/navigate to it \u2014 src/frontend/App.tsx", "shortDescription": {"text": "Frontend route `/search` has no Link/navigate to it \u2014 src/frontend/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d6ae107263a1d9bc", "name": "Frontend route `/tag/:slug` has no Link/navigate to it \u2014 src/frontend/App.tsx", "shortDescription": {"text": "Frontend route `/tag/:slug` has no Link/navigate to it \u2014 src/frontend/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-190a8b544ef8828d", "name": "Frontend route `/admin/moderation` has no Link/navigate to it \u2014 src/frontend/App.tsx", "shortDescription": {"text": "Frontend route `/admin/moderation` has no Link/navigate to it \u2014 src/frontend/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-718daa5e6abfbf1e", "name": "Frontend route `/admin/roles` has no Link/navigate to it \u2014 src/frontend/App.tsx", "shortDescription": {"text": "Frontend route `/admin/roles` has no Link/navigate to it \u2014 src/frontend/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c282ec57efa68861", "name": "Frontend route `/settings` has no Link/navigate to it \u2014 src/frontend/App.tsx", "shortDescription": {"text": "Frontend route `/settings` has no Link/navigate to it \u2014 src/frontend/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-81e736b186d0565d", "name": "Frontend route `/legal/dmca/counter` has no Link/navigate to it \u2014 src/frontend/App.tsx", "shortDescription": {"text": "Frontend route `/legal/dmca/counter` has no Link/navigate to it \u2014 src/frontend/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-12e398c327177caa", "name": "Frontend route `/dmca-notice/:videoId` has no Link/navigate to it \u2014 src/frontend/App.tsx", "shortDescription": {"text": "Frontend route `/dmca-notice/:videoId` has no Link/navigate to it \u2014 src/frontend/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-1869ffd3b7019d8d", "name": "Frontend route `/feeds/:id` has no Link/navigate to it \u2014 src/frontend/pages/FeedView.dom.test.tsx", "shortDescription": {"text": "Frontend route `/feeds/:id` has no Link/navigate to it \u2014 src/frontend/pages/FeedView.dom.test.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-5fbf7cddaa337cb0", "name": "Frontend route `/onboarding` has no Link/navigate to it \u2014 src/frontend/App.tsx", "shortDescription": {"text": "Frontend route `/onboarding` has no Link/navigate to it \u2014 src/frontend/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e771ec9cffa4009f", "name": "Frontend route `/admin/status` has no Link/navigate to it \u2014 src/frontend/App.tsx", "shortDescription": {"text": "Frontend route `/admin/status` has no Link/navigate to it \u2014 src/frontend/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f618e713724eb103", "name": "JS POST `/api/admin/moderation/:reportId/decision` admin endpoint without auth \u2014 src/workers/moderation.ts:169", "shortDescription": {"text": "JS POST `/api/admin/moderation/:reportId/decision` admin endpoint without auth \u2014 src/workers/moderation.ts:169"}, "fullDescription": {"text": "Admin-scoped JS route with no recognizable auth: no middleware-position guard, no router-level guard above it in this file, and no inline permission call within the first 15 lines of the handler. If auth is applied where this router is mounted, dismiss with reason `by_design` or tag the route `// public-by-design`."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3b5afc166b12b234", "name": "JS POST `/api/admin/status/incidents` admin endpoint without auth \u2014 src/workers/status.ts:218", "shortDescription": {"text": "JS POST `/api/admin/status/incidents` admin endpoint without auth \u2014 src/workers/status.ts:218"}, "fullDescription": {"text": "Admin-scoped JS route with no recognizable auth: no middleware-position guard, no router-level guard above it in this file, and no inline permission call within the first 15 lines of the handler. If auth is applied where this router is mounted, dismiss with reason `by_design` or tag the route `// public-by-design`."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6cd9b087a4912212", "name": "JS PUT `/api/admin/status/incidents/:id` admin endpoint without auth \u2014 src/workers/status.ts:242", "shortDescription": {"text": "JS PUT `/api/admin/status/incidents/:id` admin endpoint without auth \u2014 src/workers/status.ts:242"}, "fullDescription": {"text": "Admin-scoped JS route with no recognizable auth: no middleware-position guard, no router-level guard above it in this file, and no inline permission call within the first 15 lines of the handler. If auth is applied where this router is mounted, dismiss with reason `by_design` or tag the route `// public-by-design`."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-17f46793e092e707", "name": "JS POST `/api/admin/status/incidents/:id/updates` admin endpoint without auth \u2014 src/workers/status.ts:273", "shortDescription": {"text": "JS POST `/api/admin/status/incidents/:id/updates` admin endpoint without auth \u2014 src/workers/status.ts:273"}, "fullDescription": {"text": "Admin-scoped JS route with no recognizable auth: no middleware-position guard, no router-level guard above it in this file, and no inline permission call within the first 15 lines of the handler. If auth is applied where this router is mounted, dismiss with reason `by_design` or tag the route `// public-by-design`."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b9f760eb9c191810", "name": "JS POST `/api/admin/status/maintenance` admin endpoint without auth \u2014 src/workers/status.ts:303", "shortDescription": {"text": "JS POST `/api/admin/status/maintenance` admin endpoint without auth \u2014 src/workers/status.ts:303"}, "fullDescription": {"text": "Admin-scoped JS route with no recognizable auth: no middleware-position guard, no router-level guard above it in this file, and no inline permission call within the first 15 lines of the handler. If auth is applied where this router is mounted, dismiss with reason `by_design` or tag the route `// public-by-design`."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2755da72eb98f064", "name": "JS PUT `/api/admin/status/maintenance/:id` admin endpoint without auth \u2014 src/workers/status.ts:320", "shortDescription": {"text": "JS PUT `/api/admin/status/maintenance/:id` admin endpoint without auth \u2014 src/workers/status.ts:320"}, "fullDescription": {"text": "Admin-scoped JS route with no recognizable auth: no middleware-position guard, no router-level guard above it in this file, and no inline permission call within the first 15 lines of the handler. If auth is applied where this router is mounted, dismiss with reason `by_design` or tag the route `// public-by-design`."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-76d4560158ddd049", "name": "JS POST `/api/admin/roles` admin endpoint without auth \u2014 src/workers/roles.ts:139", "shortDescription": {"text": "JS POST `/api/admin/roles` admin endpoint without auth \u2014 src/workers/roles.ts:139"}, "fullDescription": {"text": "Admin-scoped JS route with no recognizable auth: no middleware-position guard, no router-level guard above it in this file, and no inline permission call within the first 15 lines of the handler. If auth is applied where this router is mounted, dismiss with reason `by_design` or tag the route `// public-by-design`."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8d90cbcacedd5617", "name": "JS DELETE `/api/admin/roles` admin endpoint without auth \u2014 src/workers/roles.ts:159", "shortDescription": {"text": "JS DELETE `/api/admin/roles` admin endpoint without auth \u2014 src/workers/roles.ts:159"}, "fullDescription": {"text": "Admin-scoped JS route with no recognizable auth: no middleware-position guard, no router-level guard above it in this file, and no inline permission call within the first 15 lines of the handler. If auth is applied where this router is mounted, dismiss with reason `by_design` or tag the route `// public-by-design`."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ce1c24d973895b1f", "name": "JS POST `/api/admin/dmca/:claimId/decision` admin endpoint without auth \u2014 src/workers/dmca.ts:180", "shortDescription": {"text": "JS POST `/api/admin/dmca/:claimId/decision` admin endpoint without auth \u2014 src/workers/dmca.ts:180"}, "fullDescription": {"text": "Admin-scoped JS route with no recognizable auth: no middleware-position guard, no router-level guard above it in this file, and no inline permission call within the first 15 lines of the handler. If auth is applied where this router is mounted, dismiss with reason `by_design` or tag the route `// public-by-design`."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2741c6c84fd8b5c8", "name": "Dangling fetch: GET https://api.openai.com/v1/chat/completions (scripts/check-no-direct-providers.test.mjs:56)", "shortDescription": {"text": "Dangling fetch: GET https://api.openai.com/v1/chat/completions (scripts/check-no-direct-providers.test.mjs:56)"}, "fullDescription": {"text": "`scripts/check-no-direct-providers.test.mjs:56` calls `GET https://api.openai.com/v1/chat/completions` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.openai.com/v1/chat/completions`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-dc7891b6ecc46680", "name": "Dangling fetch: GET https://gateway.ai.cloudflare.com/v1/acc/x/compat/chat/completions (scripts/check-no-direct-provider", "shortDescription": {"text": "Dangling fetch: GET https://gateway.ai.cloudflare.com/v1/acc/x/compat/chat/completions (scripts/check-no-direct-providers.test.mjs:73)"}, "fullDescription": {"text": "`scripts/check-no-direct-providers.test.mjs:73` calls `GET https://gateway.ai.cloudflare.com/v1/acc/x/compat/chat/completions` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/gateway.ai.cloudflare.com/v1/acc/x/compat/chat/completions`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8c42f91c66ca3583", "name": "Dangling fetch: POST http://x/api/auth/sign-up/email (studio/tests/integration/blogs.test.ts:5)", "shortDescription": {"text": "Dangling fetch: POST http://x/api/auth/sign-up/email (studio/tests/integration/blogs.test.ts:5)"}, "fullDescription": {"text": "`studio/tests/integration/blogs.test.ts:5` calls `POST http://x/api/auth/sign-up/email` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/x/api/auth/sign-up/email`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4d434700c75d193e", "name": "Dangling fetch: POST http://x/api/v1/blogs (studio/tests/integration/blogs.test.ts:37)", "shortDescription": {"text": "Dangling fetch: POST http://x/api/v1/blogs (studio/tests/integration/blogs.test.ts:37)"}, "fullDescription": {"text": "`studio/tests/integration/blogs.test.ts:37` calls `POST http://x/api/v1/blogs` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/x/api/v1/blogs`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9bcece6957d3f239", "name": "Dangling fetch: GET http://x/api/v1/blogs (studio/tests/integration/blogs.test.ts:46)", "shortDescription": {"text": "Dangling fetch: GET http://x/api/v1/blogs (studio/tests/integration/blogs.test.ts:46)"}, "fullDescription": {"text": "`studio/tests/integration/blogs.test.ts:46` calls `GET http://x/api/v1/blogs` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/x/api/v1/blogs`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ff8777c7420ad34c", "name": "Dangling fetch: GET http://x/api/v1/blogs/${id} (studio/tests/integration/blogs.test.ts:52)", "shortDescription": {"text": "Dangling fetch: GET http://x/api/v1/blogs/${id} (studio/tests/integration/blogs.test.ts:52)"}, "fullDescription": {"text": "`studio/tests/integration/blogs.test.ts:52` calls `GET http://x/api/v1/blogs/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/x/api/v1/blogs/<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-06da172b14229962", "name": "Dangling fetch: POST http://x/api/v1/blogs/${id}/plan (studio/tests/integration/blogs.test.ts:61)", "shortDescription": {"text": "Dangling fetch: POST http://x/api/v1/blogs/${id}/plan (studio/tests/integration/blogs.test.ts:61)"}, "fullDescription": {"text": "`studio/tests/integration/blogs.test.ts:61` calls `POST http://x/api/v1/blogs/${id}/plan` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/x/api/v1/blogs/<p>/plan`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c3bf10b9ba40699f", "name": "Dangling fetch: POST http://x/api/v1/blogs/${id}/plan (studio/tests/integration/blogs.test.ts:68)", "shortDescription": {"text": "Dangling fetch: POST http://x/api/v1/blogs/${id}/plan (studio/tests/integration/blogs.test.ts:68)"}, "fullDescription": {"text": "`studio/tests/integration/blogs.test.ts:68` calls `POST http://x/api/v1/blogs/${id}/plan` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/x/api/v1/blogs/<p>/plan`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c78aa227fa2da612", "name": "Dangling fetch: GET http://x/api/v1/blogs/${id}/posts (studio/tests/integration/blogs.test.ts:78)", "shortDescription": {"text": "Dangling fetch: GET http://x/api/v1/blogs/${id}/posts (studio/tests/integration/blogs.test.ts:78)"}, "fullDescription": {"text": "`studio/tests/integration/blogs.test.ts:78` calls `GET http://x/api/v1/blogs/${id}/posts` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/x/api/v1/blogs/<p>/posts`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b21abb463a5684e2", "name": "Dangling fetch: POST http://x/api/v1/blogs/${id}/plan (studio/tests/integration/blogs.test.ts:87)", "shortDescription": {"text": "Dangling fetch: POST http://x/api/v1/blogs/${id}/plan (studio/tests/integration/blogs.test.ts:87)"}, "fullDescription": {"text": "`studio/tests/integration/blogs.test.ts:87` calls `POST http://x/api/v1/blogs/${id}/plan` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/x/api/v1/blogs/<p>/plan`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ac0de06fa652346d", "name": "Dangling fetch: PATCH http://x/api/v1/blogs/${id}/posts/${postId} (studio/tests/integration/blogs.test.ts:96)", "shortDescription": {"text": "Dangling fetch: PATCH http://x/api/v1/blogs/${id}/posts/${postId} (studio/tests/integration/blogs.test.ts:96)"}, "fullDescription": {"text": "`studio/tests/integration/blogs.test.ts:96` calls `PATCH http://x/api/v1/blogs/${id}/posts/${postId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/x/api/v1/blogs/<p>/posts/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-37dc6a1082850117", "name": "Dangling fetch: GET http://x/api/v1/blogs/${id}/posts/${postId} (studio/tests/integration/blogs.test.ts:108)", "shortDescription": {"text": "Dangling fetch: GET http://x/api/v1/blogs/${id}/posts/${postId} (studio/tests/integration/blogs.test.ts:108)"}, "fullDescription": {"text": "`studio/tests/integration/blogs.test.ts:108` calls `GET http://x/api/v1/blogs/${id}/posts/${postId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/x/api/v1/blogs/<p>/posts/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a37e2615b9ef3625", "name": "Dangling fetch: PATCH http://x/api/v1/blogs/${id}/posts/${crypto.randomUUID()} (studio/tests/integration/blogs.test.ts:1", "shortDescription": {"text": "Dangling fetch: PATCH http://x/api/v1/blogs/${id}/posts/${crypto.randomUUID()} (studio/tests/integration/blogs.test.ts:117)"}, "fullDescription": {"text": "`studio/tests/integration/blogs.test.ts:117` calls `PATCH http://x/api/v1/blogs/${id}/posts/${crypto.randomUUID()}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/x/api/v1/blogs/<p>/posts/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a035c72554e7d2cc", "name": "Dangling fetch: PATCH http://x/api/v1/blogs/${id}/posts/${secondPostId} (studio/tests/integration/blogs.test.ts:135)", "shortDescription": {"text": "Dangling fetch: PATCH http://x/api/v1/blogs/${id}/posts/${secondPostId} (studio/tests/integration/blogs.test.ts:135)"}, "fullDescription": {"text": "`studio/tests/integration/blogs.test.ts:135` calls `PATCH http://x/api/v1/blogs/${id}/posts/${secondPostId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/x/api/v1/blogs/<p>/posts/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-75c845906df46259", "name": "Dangling fetch: GET http://x/api/v1/blogs/${id}/posts/${secondPostId} (studio/tests/integration/blogs.test.ts:140)", "shortDescription": {"text": "Dangling fetch: GET http://x/api/v1/blogs/${id}/posts/${secondPostId} (studio/tests/integration/blogs.test.ts:140)"}, "fullDescription": {"text": "`studio/tests/integration/blogs.test.ts:140` calls `GET http://x/api/v1/blogs/${id}/posts/${secondPostId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/x/api/v1/blogs/<p>/posts/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-77f47cfb458379da", "name": "Dangling fetch: PATCH http://x/api/v1/blogs/${id}/posts/${secondPostId} (studio/tests/integration/blogs.test.ts:147)", "shortDescription": {"text": "Dangling fetch: PATCH http://x/api/v1/blogs/${id}/posts/${secondPostId} (studio/tests/integration/blogs.test.ts:147)"}, "fullDescription": {"text": "`studio/tests/integration/blogs.test.ts:147` calls `PATCH http://x/api/v1/blogs/${id}/posts/${secondPostId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/x/api/v1/blogs/<p>/posts/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b5eddd5ad9b966b8", "name": "Dangling fetch: PATCH http://x/api/v1/blogs/${id}/posts/${secondPostId} (studio/tests/integration/blogs.test.ts:152)", "shortDescription": {"text": "Dangling fetch: PATCH http://x/api/v1/blogs/${id}/posts/${secondPostId} (studio/tests/integration/blogs.test.ts:152)"}, "fullDescription": {"text": "`studio/tests/integration/blogs.test.ts:152` calls `PATCH http://x/api/v1/blogs/${id}/posts/${secondPostId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/x/api/v1/blogs/<p>/posts/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2c1dc70d20c95c33", "name": "Dangling fetch: GET http://x/api/v1/blogs/${id}/posts/${secondPostId} (studio/tests/integration/blogs.test.ts:157)", "shortDescription": {"text": "Dangling fetch: GET http://x/api/v1/blogs/${id}/posts/${secondPostId} (studio/tests/integration/blogs.test.ts:157)"}, "fullDescription": {"text": "`studio/tests/integration/blogs.test.ts:157` calls `GET http://x/api/v1/blogs/${id}/posts/${secondPostId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/x/api/v1/blogs/<p>/posts/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8712402c0c22b7c6", "name": "Dangling fetch: POST http://x/api/v1/blogs/${id}/posts/${postId}/publish (studio/tests/integration/blogs.test.ts:164)", "shortDescription": {"text": "Dangling fetch: POST http://x/api/v1/blogs/${id}/posts/${postId}/publish (studio/tests/integration/blogs.test.ts:164)"}, "fullDescription": {"text": "`studio/tests/integration/blogs.test.ts:164` calls `POST http://x/api/v1/blogs/${id}/posts/${postId}/publish` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/x/api/v1/blogs/<p>/posts/<p>/publish`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d1023d4781c0b2aa", "name": "Dangling fetch: PATCH http://x/api/v1/blogs/${id} (studio/tests/integration/blogs.test.ts:170)", "shortDescription": {"text": "Dangling fetch: PATCH http://x/api/v1/blogs/${id} (studio/tests/integration/blogs.test.ts:170)"}, "fullDescription": {"text": "`studio/tests/integration/blogs.test.ts:170` calls `PATCH http://x/api/v1/blogs/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/x/api/v1/blogs/<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-4148279f4a78b045", "name": "Dangling fetch: POST http://x/api/v1/blogs/${id}/posts/${postId}/publish (studio/tests/integration/blogs.test.ts:177)", "shortDescription": {"text": "Dangling fetch: POST http://x/api/v1/blogs/${id}/posts/${postId}/publish (studio/tests/integration/blogs.test.ts:177)"}, "fullDescription": {"text": "`studio/tests/integration/blogs.test.ts:177` calls `POST http://x/api/v1/blogs/${id}/posts/${postId}/publish` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/x/api/v1/blogs/<p>/posts/<p>/publish`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e45982a99a6c5cde", "name": "Dangling fetch: DELETE http://x/api/v1/blogs/${id} (studio/tests/integration/blogs.test.ts:186)", "shortDescription": {"text": "Dangling fetch: DELETE http://x/api/v1/blogs/${id} (studio/tests/integration/blogs.test.ts:186)"}, "fullDescription": {"text": "`studio/tests/integration/blogs.test.ts:186` calls `DELETE http://x/api/v1/blogs/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/x/api/v1/blogs/<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-3c8a248324668146", "name": "Dangling fetch: GET http://x/api/v1/blogs (studio/tests/integration/blogs.test.ts:189)", "shortDescription": {"text": "Dangling fetch: GET http://x/api/v1/blogs (studio/tests/integration/blogs.test.ts:189)"}, "fullDescription": {"text": "`studio/tests/integration/blogs.test.ts:189` calls `GET http://x/api/v1/blogs` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/x/api/v1/blogs`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-079422867e469c05", "name": "Dangling fetch: GET http://x/api/v1/blogs/deleted/recent (studio/tests/integration/blogs.test.ts:195)", "shortDescription": {"text": "Dangling fetch: GET http://x/api/v1/blogs/deleted/recent (studio/tests/integration/blogs.test.ts:195)"}, "fullDescription": {"text": "`studio/tests/integration/blogs.test.ts:195` calls `GET http://x/api/v1/blogs/deleted/recent` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/x/api/v1/blogs/deleted/recent`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-09e2ba165d8066d1", "name": "Dangling fetch: POST http://x/api/v1/blogs/${id}/restore (studio/tests/integration/blogs.test.ts:201)", "shortDescription": {"text": "Dangling fetch: POST http://x/api/v1/blogs/${id}/restore (studio/tests/integration/blogs.test.ts:201)"}, "fullDescription": {"text": "`studio/tests/integration/blogs.test.ts:201` calls `POST http://x/api/v1/blogs/${id}/restore` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/x/api/v1/blogs/<p>/restore`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-93eaf4cc35c5965f", "name": "Dangling fetch: GET http://x/api/v1/blogs (studio/tests/integration/blogs.test.ts:207)", "shortDescription": {"text": "Dangling fetch: GET http://x/api/v1/blogs (studio/tests/integration/blogs.test.ts:207)"}, "fullDescription": {"text": "`studio/tests/integration/blogs.test.ts:207` calls `GET http://x/api/v1/blogs` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/x/api/v1/blogs`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e42272a7e1267d2d", "name": "Dangling fetch: POST http://x/api/v1/blogs (studio/tests/integration/blogs.test.ts:217)", "shortDescription": {"text": "Dangling fetch: POST http://x/api/v1/blogs (studio/tests/integration/blogs.test.ts:217)"}, "fullDescription": {"text": "`studio/tests/integration/blogs.test.ts:217` calls `POST http://x/api/v1/blogs` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/x/api/v1/blogs`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5d9aac00bf2b39af", "name": "Dangling fetch: POST http://x/api/v1/blogs (studio/tests/integration/blogs.test.ts:228)", "shortDescription": {"text": "Dangling fetch: POST http://x/api/v1/blogs (studio/tests/integration/blogs.test.ts:228)"}, "fullDescription": {"text": "`studio/tests/integration/blogs.test.ts:228` calls `POST http://x/api/v1/blogs` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/x/api/v1/blogs`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-17173b763c0301fa", "name": "Dangling fetch: POST http://x/api/v1/blogs/${id}/plan (studio/tests/integration/blogs.test.ts:239)", "shortDescription": {"text": "Dangling fetch: POST http://x/api/v1/blogs/${id}/plan (studio/tests/integration/blogs.test.ts:239)"}, "fullDescription": {"text": "`studio/tests/integration/blogs.test.ts:239` calls `POST http://x/api/v1/blogs/${id}/plan` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/x/api/v1/blogs/<p>/plan`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-01d7de405e6a98b7", "name": "Dangling fetch: POST http://x/api/v1/blogs/${id}/plan (studio/tests/integration/blogs.test.ts:249)", "shortDescription": {"text": "Dangling fetch: POST http://x/api/v1/blogs/${id}/plan (studio/tests/integration/blogs.test.ts:249)"}, "fullDescription": {"text": "`studio/tests/integration/blogs.test.ts:249` calls `POST http://x/api/v1/blogs/${id}/plan` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/x/api/v1/blogs/<p>/plan`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9a23bf23c2e1b49c", "name": "Dangling fetch: GET http://x/api/v1/blogs/${id}/posts (studio/tests/integration/blogs.test.ts:256)", "shortDescription": {"text": "Dangling fetch: GET http://x/api/v1/blogs/${id}/posts (studio/tests/integration/blogs.test.ts:256)"}, "fullDescription": {"text": "`studio/tests/integration/blogs.test.ts:256` calls `GET http://x/api/v1/blogs/${id}/posts` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/x/api/v1/blogs/<p>/posts`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-53208392aa686811", "name": "Dangling fetch: GET http://x/api/v1/account/emdash-token (studio/tests/integration/blogs.test.ts:270)", "shortDescription": {"text": "Dangling fetch: GET http://x/api/v1/account/emdash-token (studio/tests/integration/blogs.test.ts:270)"}, "fullDescription": {"text": "`studio/tests/integration/blogs.test.ts:270` calls `GET http://x/api/v1/account/emdash-token` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/x/api/v1/account/emdash-token`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b08dc261e2ddcc0c", "name": "Dangling fetch: PUT http://x/api/v1/account/emdash-token (studio/tests/integration/blogs.test.ts:274)", "shortDescription": {"text": "Dangling fetch: PUT http://x/api/v1/account/emdash-token (studio/tests/integration/blogs.test.ts:274)"}, "fullDescription": {"text": "`studio/tests/integration/blogs.test.ts:274` calls `PUT http://x/api/v1/account/emdash-token` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/x/api/v1/account/emdash-token`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c3f7031da076d74c", "name": "Dangling fetch: GET http://x/api/v1/account/emdash-token (studio/tests/integration/blogs.test.ts:281)", "shortDescription": {"text": "Dangling fetch: GET http://x/api/v1/account/emdash-token (studio/tests/integration/blogs.test.ts:281)"}, "fullDescription": {"text": "`studio/tests/integration/blogs.test.ts:281` calls `GET http://x/api/v1/account/emdash-token` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/x/api/v1/account/emdash-token`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6ce8e6bbeb206f2e", "name": "Dangling fetch: POST http://x/api/auth/sign-up/email (studio/tests/integration/narration.test.ts:5)", "shortDescription": {"text": "Dangling fetch: POST http://x/api/auth/sign-up/email (studio/tests/integration/narration.test.ts:5)"}, "fullDescription": {"text": "`studio/tests/integration/narration.test.ts:5` calls `POST http://x/api/auth/sign-up/email` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/x/api/auth/sign-up/email`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d112d7ec275b0a20", "name": "Dangling fetch: GET http://x/api/v1/account/elevenlabs-key (studio/tests/integration/narration.test.ts:22)", "shortDescription": {"text": "Dangling fetch: GET http://x/api/v1/account/elevenlabs-key (studio/tests/integration/narration.test.ts:22)"}, "fullDescription": {"text": "`studio/tests/integration/narration.test.ts:22` calls `GET http://x/api/v1/account/elevenlabs-key` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/x/api/v1/account/elevenlabs-key`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-29b5be489d981ffe", "name": "Dangling fetch: POST http://x/api/v1/projects (studio/tests/integration/narration.test.ts:26)", "shortDescription": {"text": "Dangling fetch: POST http://x/api/v1/projects (studio/tests/integration/narration.test.ts:26)"}, "fullDescription": {"text": "`studio/tests/integration/narration.test.ts:26` calls `POST http://x/api/v1/projects` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/x/api/v1/projects`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-73be7423ca86f107", "name": "Dangling fetch: POST http://x/api/v1/projects/${project.id}/outlines (studio/tests/integration/narration.test.ts:33)", "shortDescription": {"text": "Dangling fetch: POST http://x/api/v1/projects/${project.id}/outlines (studio/tests/integration/narration.test.ts:33)"}, "fullDescription": {"text": "`studio/tests/integration/narration.test.ts:33` calls `POST http://x/api/v1/projects/${project.id}/outlines` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/x/api/v1/projects/<p>/outlines`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a52b39c0947b115d", "name": "Dangling fetch: POST http://x/api/v1/projects/${project.id}/narration/audition (studio/tests/integration/narration.test.", "shortDescription": {"text": "Dangling fetch: POST http://x/api/v1/projects/${project.id}/narration/audition (studio/tests/integration/narration.test.ts:42)"}, "fullDescription": {"text": "`studio/tests/integration/narration.test.ts:42` calls `POST http://x/api/v1/projects/${project.id}/narration/audition` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/x/api/v1/projects/<p>/narration/audition`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-612fd4584610e74a", "name": "Dangling fetch: POST http://x/api/v1/projects/${project.id}/audiobook (studio/tests/integration/narration.test.ts:52)", "shortDescription": {"text": "Dangling fetch: POST http://x/api/v1/projects/${project.id}/audiobook (studio/tests/integration/narration.test.ts:52)"}, "fullDescription": {"text": "`studio/tests/integration/narration.test.ts:52` calls `POST http://x/api/v1/projects/${project.id}/audiobook` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/x/api/v1/projects/<p>/audiobook`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-02470373e82066c2", "name": "Dangling fetch: PUT http://x/api/v1/account/elevenlabs-key (studio/tests/integration/narration.test.ts:58)", "shortDescription": {"text": "Dangling fetch: PUT http://x/api/v1/account/elevenlabs-key (studio/tests/integration/narration.test.ts:58)"}, "fullDescription": {"text": "`studio/tests/integration/narration.test.ts:58` calls `PUT http://x/api/v1/account/elevenlabs-key` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/x/api/v1/account/elevenlabs-key`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b0aac24a985ca456", "name": "Dangling fetch: GET http://x/api/v1/account/elevenlabs-key (studio/tests/integration/narration.test.ts:65)", "shortDescription": {"text": "Dangling fetch: GET http://x/api/v1/account/elevenlabs-key (studio/tests/integration/narration.test.ts:65)"}, "fullDescription": {"text": "`studio/tests/integration/narration.test.ts:65` calls `GET http://x/api/v1/account/elevenlabs-key` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/x/api/v1/account/elevenlabs-key`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ef55634eecb2c5d7", "name": "Dangling fetch: POST http://x/api/auth/sign-up/email (studio/tests/integration/chapters.test.ts:5)", "shortDescription": {"text": "Dangling fetch: POST http://x/api/auth/sign-up/email (studio/tests/integration/chapters.test.ts:5)"}, "fullDescription": {"text": "`studio/tests/integration/chapters.test.ts:5` calls `POST http://x/api/auth/sign-up/email` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/x/api/auth/sign-up/email`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-44fcab812cdf665e", "name": "Dangling fetch: POST http://x/api/v1/projects (studio/tests/integration/chapters.test.ts:22)", "shortDescription": {"text": "Dangling fetch: POST http://x/api/v1/projects (studio/tests/integration/chapters.test.ts:22)"}, "fullDescription": {"text": "`studio/tests/integration/chapters.test.ts:22` calls `POST http://x/api/v1/projects` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/x/api/v1/projects`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-00d4891906452b93", "name": "Dangling fetch: POST http://x/api/v1/projects/${project.id}/outlines (studio/tests/integration/chapters.test.ts:30)", "shortDescription": {"text": "Dangling fetch: POST http://x/api/v1/projects/${project.id}/outlines (studio/tests/integration/chapters.test.ts:30)"}, "fullDescription": {"text": "`studio/tests/integration/chapters.test.ts:30` calls `POST http://x/api/v1/projects/${project.id}/outlines` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/x/api/v1/projects/<p>/outlines`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e8a95c8a484f32a6", "name": "Dangling fetch: GET http://x/api/v1/projects/${project.id}/outline (studio/tests/integration/chapters.test.ts:40)", "shortDescription": {"text": "Dangling fetch: GET http://x/api/v1/projects/${project.id}/outline (studio/tests/integration/chapters.test.ts:40)"}, "fullDescription": {"text": "`studio/tests/integration/chapters.test.ts:40` calls `GET http://x/api/v1/projects/${project.id}/outline` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/x/api/v1/projects/<p>/outline`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f805bbda750f8a7c", "name": "Dangling fetch: GET http://x/api/v1/chapters/${chapterId}/sections (studio/tests/integration/chapters.test.ts:48)", "shortDescription": {"text": "Dangling fetch: GET http://x/api/v1/chapters/${chapterId}/sections (studio/tests/integration/chapters.test.ts:48)"}, "fullDescription": {"text": "`studio/tests/integration/chapters.test.ts:48` calls `GET http://x/api/v1/chapters/${chapterId}/sections` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/x/api/v1/chapters/<p>/sections`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-329a9a40303c9941", "name": "Dangling fetch: POST http://x/api/v1/chapters/${chapterId}/sections/${sections.items[0].id}/draft (studio/tests/integrat", "shortDescription": {"text": "Dangling fetch: POST http://x/api/v1/chapters/${chapterId}/sections/${sections.items[0].id}/draft (studio/tests/integration/chapters.test.ts:56)"}, "fullDescription": {"text": "`studio/tests/integration/chapters.test.ts:56` calls `POST http://x/api/v1/chapters/${chapterId}/sections/${sections.items[0].id}/draft` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/x/api/v1/chapters/<p>/sections/<p>/draft`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-cbca151c2270518a", "name": "Dangling fetch: GET http://x/api/v1/chapters/${chapterId} (studio/tests/integration/chapters.test.ts:77)", "shortDescription": {"text": "Dangling fetch: GET http://x/api/v1/chapters/${chapterId} (studio/tests/integration/chapters.test.ts:77)"}, "fullDescription": {"text": "`studio/tests/integration/chapters.test.ts:77` calls `GET http://x/api/v1/chapters/${chapterId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/x/api/v1/chapters/<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-0354888f5bbccabe", "name": "Dangling fetch: POST http://x/api/v1/chapters/${chapterId}/sections/${sections.items[1].id}/draft (studio/tests/integrat", "shortDescription": {"text": "Dangling fetch: POST http://x/api/v1/chapters/${chapterId}/sections/${sections.items[1].id}/draft (studio/tests/integration/chapters.test.ts:83)"}, "fullDescription": {"text": "`studio/tests/integration/chapters.test.ts:83` calls `POST http://x/api/v1/chapters/${chapterId}/sections/${sections.items[1].id}/draft` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/x/api/v1/chapters/<p>/sections/<p>/draft`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ff8a6b8cac4fd4cc", "name": "Dangling fetch: POST http://x/api/v1/chapters/${chapterId}/revise (studio/tests/integration/chapters.test.ts:108)", "shortDescription": {"text": "Dangling fetch: POST http://x/api/v1/chapters/${chapterId}/revise (studio/tests/integration/chapters.test.ts:108)"}, "fullDescription": {"text": "`studio/tests/integration/chapters.test.ts:108` calls `POST http://x/api/v1/chapters/${chapterId}/revise` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/x/api/v1/chapters/<p>/revise`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8f5f1b2f54705d73", "name": "Dangling fetch: POST http://x/api/auth/sign-up/email (studio/tests/integration/publisher-pack.test.ts:5)", "shortDescription": {"text": "Dangling fetch: POST http://x/api/auth/sign-up/email (studio/tests/integration/publisher-pack.test.ts:5)"}, "fullDescription": {"text": "`studio/tests/integration/publisher-pack.test.ts:5` calls `POST http://x/api/auth/sign-up/email` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/x/api/auth/sign-up/email`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0e9d05f315cb8be9", "name": "Dangling fetch: POST http://x/api/v1/projects (studio/tests/integration/publisher-pack.test.ts:22)", "shortDescription": {"text": "Dangling fetch: POST http://x/api/v1/projects (studio/tests/integration/publisher-pack.test.ts:22)"}, "fullDescription": {"text": "`studio/tests/integration/publisher-pack.test.ts:22` calls `POST http://x/api/v1/projects` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/x/api/v1/projects`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f88a7d5534226d35", "name": "Dangling fetch: POST http://x/api/v1/projects/${project.id}/publisher-pack/seo (studio/tests/integration/publisher-pack.", "shortDescription": {"text": "Dangling fetch: POST http://x/api/v1/projects/${project.id}/publisher-pack/seo (studio/tests/integration/publisher-pack.test.ts:30)"}, "fullDescription": {"text": "`studio/tests/integration/publisher-pack.test.ts:30` calls `POST http://x/api/v1/projects/${project.id}/publisher-pack/seo` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/x/api/v1/projects/<p>/publisher-pack/seo`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-55e7e767bf3a55e3", "name": "Dangling fetch: POST http://x/api/v1/projects/${project.id}/publisher-pack/seo (studio/tests/integration/publisher-pack.", "shortDescription": {"text": "Dangling fetch: POST http://x/api/v1/projects/${project.id}/publisher-pack/seo (studio/tests/integration/publisher-pack.test.ts:45)"}, "fullDescription": {"text": "`studio/tests/integration/publisher-pack.test.ts:45` calls `POST http://x/api/v1/projects/${project.id}/publisher-pack/seo` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/x/api/v1/projects/<p>/publisher-pack/seo`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e58347b4e4f4a04d", "name": "Dangling fetch: PATCH http://x/api/v1/projects/${project.id}/publisher-pack (studio/tests/integration/publisher-pack.tes", "shortDescription": {"text": "Dangling fetch: PATCH http://x/api/v1/projects/${project.id}/publisher-pack (studio/tests/integration/publisher-pack.test.ts:57)"}, "fullDescription": {"text": "`studio/tests/integration/publisher-pack.test.ts:57` calls `PATCH http://x/api/v1/projects/${project.id}/publisher-pack` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/x/api/v1/projects/<p>/publisher-pack`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9f5b557ccf52b417", "name": "Dangling fetch: POST http://x/api/v1/projects/${project.id}/publisher-pack/approve (studio/tests/integration/publisher-p", "shortDescription": {"text": "Dangling fetch: POST http://x/api/v1/projects/${project.id}/publisher-pack/approve (studio/tests/integration/publisher-pack.test.ts:71)"}, "fullDescription": {"text": "`studio/tests/integration/publisher-pack.test.ts:71` calls `POST http://x/api/v1/projects/${project.id}/publisher-pack/approve` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/x/api/v1/projects/<p>/publisher-pack/approve`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ec91eb9d35638d3c", "name": "Dangling fetch: POST http://x/api/auth/sign-up/email (studio/tests/integration/voices.test.ts:5)", "shortDescription": {"text": "Dangling fetch: POST http://x/api/auth/sign-up/email (studio/tests/integration/voices.test.ts:5)"}, "fullDescription": {"text": "`studio/tests/integration/voices.test.ts:5` calls `POST http://x/api/auth/sign-up/email` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/x/api/auth/sign-up/email`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6104eb42536deb80", "name": "Dangling fetch: POST http://x/api/v1/projects (studio/tests/integration/voices.test.ts:22)", "shortDescription": {"text": "Dangling fetch: POST http://x/api/v1/projects (studio/tests/integration/voices.test.ts:22)"}, "fullDescription": {"text": "`studio/tests/integration/voices.test.ts:22` calls `POST http://x/api/v1/projects` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/x/api/v1/projects`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-28a7e295f2366e96", "name": "Dangling fetch: POST http://x/api/v1/voices (studio/tests/integration/voices.test.ts:31)", "shortDescription": {"text": "Dangling fetch: POST http://x/api/v1/voices (studio/tests/integration/voices.test.ts:31)"}, "fullDescription": {"text": "`studio/tests/integration/voices.test.ts:31` calls `POST http://x/api/v1/voices` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/x/api/v1/voices`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-49f1f28a70b8c988", "name": "Dangling fetch: GET http://x/api/v1/voices (studio/tests/integration/voices.test.ts:43)", "shortDescription": {"text": "Dangling fetch: GET http://x/api/v1/voices (studio/tests/integration/voices.test.ts:43)"}, "fullDescription": {"text": "`studio/tests/integration/voices.test.ts:43` calls `GET http://x/api/v1/voices` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/x/api/v1/voices`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-17ad1c90df1b717c", "name": "Dangling fetch: GET http://x/api/v1/voices/${voice.id} (studio/tests/integration/voices.test.ts:49)", "shortDescription": {"text": "Dangling fetch: GET http://x/api/v1/voices/${voice.id} (studio/tests/integration/voices.test.ts:49)"}, "fullDescription": {"text": "`studio/tests/integration/voices.test.ts:49` calls `GET http://x/api/v1/voices/${voice.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/x/api/v1/voices/<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-a9fe0ec26ffae411", "name": "Dangling fetch: PATCH http://x/api/v1/projects/${project.id} (studio/tests/integration/voices.test.ts:59)", "shortDescription": {"text": "Dangling fetch: PATCH http://x/api/v1/projects/${project.id} (studio/tests/integration/voices.test.ts:59)"}, "fullDescription": {"text": "`studio/tests/integration/voices.test.ts:59` calls `PATCH http://x/api/v1/projects/${project.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/x/api/v1/projects/<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-bfe97c6f7a69d0d4", "name": "Dangling fetch: GET http://x/api/v1/projects/${project.id} (studio/tests/integration/voices.test.ts:66)", "shortDescription": {"text": "Dangling fetch: GET http://x/api/v1/projects/${project.id} (studio/tests/integration/voices.test.ts:66)"}, "fullDescription": {"text": "`studio/tests/integration/voices.test.ts:66` calls `GET http://x/api/v1/projects/${project.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/x/api/v1/projects/<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-2f59482cc7ab791e", "name": "Dangling fetch: GET https://spooool.com/studio/api/v1/health (studio/tests/integration/studio-route.test.ts:46)", "shortDescription": {"text": "Dangling fetch: GET https://spooool.com/studio/api/v1/health (studio/tests/integration/studio-route.test.ts:46)"}, "fullDescription": {"text": "`studio/tests/integration/studio-route.test.ts:46` calls `GET https://spooool.com/studio/api/v1/health` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/spooool.com/studio/api/v1/health`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3b797bea34865c07", "name": "Dangling fetch: POST https://spooool.com/studio/api/auth/sign-up/email (studio/tests/integration/studio-route.test.ts:51", "shortDescription": {"text": "Dangling fetch: POST https://spooool.com/studio/api/auth/sign-up/email (studio/tests/integration/studio-route.test.ts:51)"}, "fullDescription": {"text": "`studio/tests/integration/studio-route.test.ts:51` calls `POST https://spooool.com/studio/api/auth/sign-up/email` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/spooool.com/studio/api/auth/sign-up/email`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ac0093116a1b6faf", "name": "Dangling fetch: GET https://spooool.com/studio/api/v1/projects (studio/tests/integration/studio-route.test.ts:64)", "shortDescription": {"text": "Dangling fetch: GET https://spooool.com/studio/api/v1/projects (studio/tests/integration/studio-route.test.ts:64)"}, "fullDescription": {"text": "`studio/tests/integration/studio-route.test.ts:64` calls `GET https://spooool.com/studio/api/v1/projects` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/spooool.com/studio/api/v1/projects`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-09a97ed8869220fb", "name": "Dangling fetch: GET https://spooool.com/studio/api/auth/error?error=test_error (studio/tests/integration/studio-route.te", "shortDescription": {"text": "Dangling fetch: GET https://spooool.com/studio/api/auth/error?error=test_error (studio/tests/integration/studio-route.test.ts:71)"}, "fullDescription": {"text": "`studio/tests/integration/studio-route.test.ts:71` calls `GET https://spooool.com/studio/api/auth/error?error=test_error` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/spooool.com/studio/api/auth/error`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ded45240259003a7", "name": "Dangling fetch: GET https://book-cook.com/api/auth/error?error=spoofed (studio/tests/integration/studio-route.test.ts:79", "shortDescription": {"text": "Dangling fetch: GET https://book-cook.com/api/auth/error?error=spoofed (studio/tests/integration/studio-route.test.ts:79)"}, "fullDescription": {"text": "`studio/tests/integration/studio-route.test.ts:79` calls `GET https://book-cook.com/api/auth/error?error=spoofed` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/book-cook.com/api/auth/error`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-183fa7c65eca5592", "name": "Dangling fetch: GET https://spooool.com/words/blogs/x (studio/tests/integration/studio-route.test.ts:92)", "shortDescription": {"text": "Dangling fetch: GET https://spooool.com/words/blogs/x (studio/tests/integration/studio-route.test.ts:92)"}, "fullDescription": {"text": "`studio/tests/integration/studio-route.test.ts:92` calls `GET https://spooool.com/words/blogs/x` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/spooool.com/words/blogs/x`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a5bd0dbc4e588860", "name": "Dangling fetch: GET https://spooool.com/words?ref=legacy (studio/tests/integration/studio-route.test.ts:100)", "shortDescription": {"text": "Dangling fetch: GET https://spooool.com/words?ref=legacy (studio/tests/integration/studio-route.test.ts:100)"}, "fullDescription": {"text": "`studio/tests/integration/studio-route.test.ts:100` calls `GET https://spooool.com/words?ref=legacy` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/spooool.com/words`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-56861449130b1128", "name": "Dangling fetch: GET https://spooool.com/studio/api/v1/session (studio/tests/integration/studio-route.test.ts:112)", "shortDescription": {"text": "Dangling fetch: GET https://spooool.com/studio/api/v1/session (studio/tests/integration/studio-route.test.ts:112)"}, "fullDescription": {"text": "`studio/tests/integration/studio-route.test.ts:112` calls `GET https://spooool.com/studio/api/v1/session` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/spooool.com/studio/api/v1/session`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ec984ac8985a37b5", "name": "Dangling fetch: GET https://spooool.com/studio/api/v1/projects (studio/tests/integration/studio-route.test.ts:120)", "shortDescription": {"text": "Dangling fetch: GET https://spooool.com/studio/api/v1/projects (studio/tests/integration/studio-route.test.ts:120)"}, "fullDescription": {"text": "`studio/tests/integration/studio-route.test.ts:120` calls `GET https://spooool.com/studio/api/v1/projects` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/spooool.com/studio/api/v1/projects`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a152b632a65cda3f", "name": "Dangling fetch: GET https://book-cook.com/api/v1/projects (studio/tests/integration/studio-route.test.ts:128)", "shortDescription": {"text": "Dangling fetch: GET https://book-cook.com/api/v1/projects (studio/tests/integration/studio-route.test.ts:128)"}, "fullDescription": {"text": "`studio/tests/integration/studio-route.test.ts:128` calls `GET https://book-cook.com/api/v1/projects` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/book-cook.com/api/v1/projects`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-31c984c88ad84c97", "name": "Dangling fetch: GET https://spooool.com/studio/api/v1/projects (studio/tests/integration/studio-route.test.ts:136)", "shortDescription": {"text": "Dangling fetch: GET https://spooool.com/studio/api/v1/projects (studio/tests/integration/studio-route.test.ts:136)"}, "fullDescription": {"text": "`studio/tests/integration/studio-route.test.ts:136` calls `GET https://spooool.com/studio/api/v1/projects` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/spooool.com/studio/api/v1/projects`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b5614c93f7a8a6db", "name": "Dangling fetch: POST http://x/api/auth/sign-up/email (studio/tests/integration/projects.test.ts:5)", "shortDescription": {"text": "Dangling fetch: POST http://x/api/auth/sign-up/email (studio/tests/integration/projects.test.ts:5)"}, "fullDescription": {"text": "`studio/tests/integration/projects.test.ts:5` calls `POST http://x/api/auth/sign-up/email` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/x/api/auth/sign-up/email`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5f27a8d36962cc31", "name": "Dangling fetch: POST http://x/api/v1/projects (studio/tests/integration/projects.test.ts:22)", "shortDescription": {"text": "Dangling fetch: POST http://x/api/v1/projects (studio/tests/integration/projects.test.ts:22)"}, "fullDescription": {"text": "`studio/tests/integration/projects.test.ts:22` calls `POST http://x/api/v1/projects` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/x/api/v1/projects`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a85df44a9772e173", "name": "Dangling fetch: GET http://x/api/v1/projects (studio/tests/integration/projects.test.ts:38)", "shortDescription": {"text": "Dangling fetch: GET http://x/api/v1/projects (studio/tests/integration/projects.test.ts:38)"}, "fullDescription": {"text": "`studio/tests/integration/projects.test.ts:38` calls `GET http://x/api/v1/projects` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/x/api/v1/projects`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-388de30077def7bf", "name": "Dangling fetch: GET http://x/api/v1/projects/${id} (studio/tests/integration/projects.test.ts:46)", "shortDescription": {"text": "Dangling fetch: GET http://x/api/v1/projects/${id} (studio/tests/integration/projects.test.ts:46)"}, "fullDescription": {"text": "`studio/tests/integration/projects.test.ts:46` calls `GET http://x/api/v1/projects/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/x/api/v1/projects/<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-c6cb84b1892af473", "name": "Dangling fetch: POST http://x/api/v1/projects/${id}/outlines (studio/tests/integration/projects.test.ts:55)", "shortDescription": {"text": "Dangling fetch: POST http://x/api/v1/projects/${id}/outlines (studio/tests/integration/projects.test.ts:55)"}, "fullDescription": {"text": "`studio/tests/integration/projects.test.ts:55` calls `POST http://x/api/v1/projects/${id}/outlines` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/x/api/v1/projects/<p>/outlines`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3eecd2a4ba7c9a67", "name": "Dangling fetch: POST http://x/api/v1/projects/${id}/outlines (studio/tests/integration/projects.test.ts:65)", "shortDescription": {"text": "Dangling fetch: POST http://x/api/v1/projects/${id}/outlines (studio/tests/integration/projects.test.ts:65)"}, "fullDescription": {"text": "`studio/tests/integration/projects.test.ts:65` calls `POST http://x/api/v1/projects/${id}/outlines` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/x/api/v1/projects/<p>/outlines`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-18a649c43810818b", "name": "Dangling fetch: GET http://x/api/v1/projects/${id}/outline (studio/tests/integration/projects.test.ts:76)", "shortDescription": {"text": "Dangling fetch: GET http://x/api/v1/projects/${id}/outline (studio/tests/integration/projects.test.ts:76)"}, "fullDescription": {"text": "`studio/tests/integration/projects.test.ts:76` calls `GET http://x/api/v1/projects/${id}/outline` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/x/api/v1/projects/<p>/outline`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2fca684aad4bab47", "name": "Dangling fetch: PATCH http://x/api/v1/chapters/${chapterId} (studio/tests/integration/projects.test.ts:85)", "shortDescription": {"text": "Dangling fetch: PATCH http://x/api/v1/chapters/${chapterId} (studio/tests/integration/projects.test.ts:85)"}, "fullDescription": {"text": "`studio/tests/integration/projects.test.ts:85` calls `PATCH http://x/api/v1/chapters/${chapterId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/x/api/v1/chapters/<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-154f3987b84a3118", "name": "Dangling fetch: GET http://x/api/v1/projects/${id}/book (studio/tests/integration/projects.test.ts:92)", "shortDescription": {"text": "Dangling fetch: GET http://x/api/v1/projects/${id}/book (studio/tests/integration/projects.test.ts:92)"}, "fullDescription": {"text": "`studio/tests/integration/projects.test.ts:92` calls `GET http://x/api/v1/projects/${id}/book` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/x/api/v1/projects/<p>/book`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f7c0988ff701156d", "name": "Dangling fetch: DELETE http://x/api/v1/projects/${id} (studio/tests/integration/projects.test.ts:101)", "shortDescription": {"text": "Dangling fetch: DELETE http://x/api/v1/projects/${id} (studio/tests/integration/projects.test.ts:101)"}, "fullDescription": {"text": "`studio/tests/integration/projects.test.ts:101` calls `DELETE http://x/api/v1/projects/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/x/api/v1/projects/<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-0aad21e2af7a506f", "name": "Dangling fetch: GET http://x/api/v1/projects (studio/tests/integration/projects.test.ts:107)", "shortDescription": {"text": "Dangling fetch: GET http://x/api/v1/projects (studio/tests/integration/projects.test.ts:107)"}, "fullDescription": {"text": "`studio/tests/integration/projects.test.ts:107` calls `GET http://x/api/v1/projects` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/x/api/v1/projects`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1050f44297f49688", "name": "Dangling fetch: GET http://x/api/v1/projects/deleted/recent (studio/tests/integration/projects.test.ts:115)", "shortDescription": {"text": "Dangling fetch: GET http://x/api/v1/projects/deleted/recent (studio/tests/integration/projects.test.ts:115)"}, "fullDescription": {"text": "`studio/tests/integration/projects.test.ts:115` calls `GET http://x/api/v1/projects/deleted/recent` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/x/api/v1/projects/deleted/recent`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3c7aa75b854bc97d", "name": "Dangling fetch: POST http://x/api/v1/projects/${id}/restore (studio/tests/integration/projects.test.ts:125)", "shortDescription": {"text": "Dangling fetch: POST http://x/api/v1/projects/${id}/restore (studio/tests/integration/projects.test.ts:125)"}, "fullDescription": {"text": "`studio/tests/integration/projects.test.ts:125` calls `POST http://x/api/v1/projects/${id}/restore` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/x/api/v1/projects/<p>/restore`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a097487082919809", "name": "Dangling fetch: GET http://x/api/v1/projects (studio/tests/integration/projects.test.ts:131)", "shortDescription": {"text": "Dangling fetch: GET http://x/api/v1/projects (studio/tests/integration/projects.test.ts:131)"}, "fullDescription": {"text": "`studio/tests/integration/projects.test.ts:131` calls `GET http://x/api/v1/projects` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/x/api/v1/projects`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-dcfdd76d29d5a927", "name": "Dangling fetch: POST http://x/api/v1/health/market-dataset/refresh (studio/tests/integration/market-dataset.test.ts:6)", "shortDescription": {"text": "Dangling fetch: POST http://x/api/v1/health/market-dataset/refresh (studio/tests/integration/market-dataset.test.ts:6)"}, "fullDescription": {"text": "`studio/tests/integration/market-dataset.test.ts:6` calls `POST http://x/api/v1/health/market-dataset/refresh` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/x/api/v1/health/market-dataset/refresh`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b3edba625b107c45", "name": "Dangling fetch: GET http://x/api/v1/health/market-dataset (studio/tests/integration/market-dataset.test.ts:20)", "shortDescription": {"text": "Dangling fetch: GET http://x/api/v1/health/market-dataset (studio/tests/integration/market-dataset.test.ts:20)"}, "fullDescription": {"text": "`studio/tests/integration/market-dataset.test.ts:20` calls `GET http://x/api/v1/health/market-dataset` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/x/api/v1/health/market-dataset`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5c9ca0d7098dc289", "name": "Dangling fetch: GET http://x/agents/aloysius/${id} (studio/tests/integration/aloysius.test.ts:7)", "shortDescription": {"text": "Dangling fetch: GET http://x/agents/aloysius/${id} (studio/tests/integration/aloysius.test.ts:7)"}, "fullDescription": {"text": "`studio/tests/integration/aloysius.test.ts:7` calls `GET http://x/agents/aloysius/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/x/agents/aloysius/<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-d262f7ceecd42f3d", "name": "Dangling fetch: POST http://x/api/auth/sign-up/email (studio/tests/integration/scripts.test.ts:5)", "shortDescription": {"text": "Dangling fetch: POST http://x/api/auth/sign-up/email (studio/tests/integration/scripts.test.ts:5)"}, "fullDescription": {"text": "`studio/tests/integration/scripts.test.ts:5` calls `POST http://x/api/auth/sign-up/email` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/x/api/auth/sign-up/email`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c5b0b3143f7d6cf3", "name": "Dangling fetch: POST http://x/api/v1/scripts (studio/tests/integration/scripts.test.ts:33)", "shortDescription": {"text": "Dangling fetch: POST http://x/api/v1/scripts (studio/tests/integration/scripts.test.ts:33)"}, "fullDescription": {"text": "`studio/tests/integration/scripts.test.ts:33` calls `POST http://x/api/v1/scripts` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/x/api/v1/scripts`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-622b8de5cf4e08dc", "name": "Dangling fetch: GET http://x/api/v1/scripts (studio/tests/integration/scripts.test.ts:42)", "shortDescription": {"text": "Dangling fetch: GET http://x/api/v1/scripts (studio/tests/integration/scripts.test.ts:42)"}, "fullDescription": {"text": "`studio/tests/integration/scripts.test.ts:42` calls `GET http://x/api/v1/scripts` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/x/api/v1/scripts`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1556820247a5f73e", "name": "Dangling fetch: GET http://x/api/v1/scripts/${id} (studio/tests/integration/scripts.test.ts:48)", "shortDescription": {"text": "Dangling fetch: GET http://x/api/v1/scripts/${id} (studio/tests/integration/scripts.test.ts:48)"}, "fullDescription": {"text": "`studio/tests/integration/scripts.test.ts:48` calls `GET http://x/api/v1/scripts/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/x/api/v1/scripts/<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-d2b9dd36618075a8", "name": "Dangling fetch: POST http://x/api/v1/scripts/${id}/plan (studio/tests/integration/scripts.test.ts:57)", "shortDescription": {"text": "Dangling fetch: POST http://x/api/v1/scripts/${id}/plan (studio/tests/integration/scripts.test.ts:57)"}, "fullDescription": {"text": "`studio/tests/integration/scripts.test.ts:57` calls `POST http://x/api/v1/scripts/${id}/plan` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/x/api/v1/scripts/<p>/plan`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f17eb479c9dac873", "name": "Dangling fetch: POST http://x/api/v1/scripts/${id}/plan (studio/tests/integration/scripts.test.ts:64)", "shortDescription": {"text": "Dangling fetch: POST http://x/api/v1/scripts/${id}/plan (studio/tests/integration/scripts.test.ts:64)"}, "fullDescription": {"text": "`studio/tests/integration/scripts.test.ts:64` calls `POST http://x/api/v1/scripts/${id}/plan` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/x/api/v1/scripts/<p>/plan`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6e1c55e12acb5440", "name": "Dangling fetch: POST http://x/api/v1/scripts/${id}/plan (studio/tests/integration/scripts.test.ts:74)", "shortDescription": {"text": "Dangling fetch: POST http://x/api/v1/scripts/${id}/plan (studio/tests/integration/scripts.test.ts:74)"}, "fullDescription": {"text": "`studio/tests/integration/scripts.test.ts:74` calls `POST http://x/api/v1/scripts/${id}/plan` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/x/api/v1/scripts/<p>/plan`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-93493141bf16d54c", "name": "Dangling fetch: GET http://x/api/v1/scripts/${id}/scenes (studio/tests/integration/scripts.test.ts:84)", "shortDescription": {"text": "Dangling fetch: GET http://x/api/v1/scripts/${id}/scenes (studio/tests/integration/scripts.test.ts:84)"}, "fullDescription": {"text": "`studio/tests/integration/scripts.test.ts:84` calls `GET http://x/api/v1/scripts/${id}/scenes` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/x/api/v1/scripts/<p>/scenes`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a8924e6ceb918c93", "name": "Dangling fetch: POST http://x/api/v1/scripts/${id}/plan (studio/tests/integration/scripts.test.ts:96)", "shortDescription": {"text": "Dangling fetch: POST http://x/api/v1/scripts/${id}/plan (studio/tests/integration/scripts.test.ts:96)"}, "fullDescription": {"text": "`studio/tests/integration/scripts.test.ts:96` calls `POST http://x/api/v1/scripts/${id}/plan` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/x/api/v1/scripts/<p>/plan`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-08e7080e18f0d43a", "name": "Dangling fetch: PATCH http://x/api/v1/scripts/${id}/scenes/${sceneId} (studio/tests/integration/scripts.test.ts:105)", "shortDescription": {"text": "Dangling fetch: PATCH http://x/api/v1/scripts/${id}/scenes/${sceneId} (studio/tests/integration/scripts.test.ts:105)"}, "fullDescription": {"text": "`studio/tests/integration/scripts.test.ts:105` calls `PATCH http://x/api/v1/scripts/${id}/scenes/${sceneId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/x/api/v1/scripts/<p>/scenes/<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-c836ec8134955ce6", "name": "Dangling fetch: GET http://x/api/v1/scripts/${id}/scenes/${sceneId} (studio/tests/integration/scripts.test.ts:117)", "shortDescription": {"text": "Dangling fetch: GET http://x/api/v1/scripts/${id}/scenes/${sceneId} (studio/tests/integration/scripts.test.ts:117)"}, "fullDescription": {"text": "`studio/tests/integration/scripts.test.ts:117` calls `GET http://x/api/v1/scripts/${id}/scenes/${sceneId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/x/api/v1/scripts/<p>/scenes/<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-07c4e0bba260acd4", "name": "Dangling fetch: PATCH http://x/api/v1/scripts/${id}/scenes/${crypto.randomUUID()} (studio/tests/integration/scripts.test", "shortDescription": {"text": "Dangling fetch: PATCH http://x/api/v1/scripts/${id}/scenes/${crypto.randomUUID()} (studio/tests/integration/scripts.test.ts:128)"}, "fullDescription": {"text": "`studio/tests/integration/scripts.test.ts:128` calls `PATCH http://x/api/v1/scripts/${id}/scenes/${crypto.randomUUID()}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/x/api/v1/scripts/<p>/scenes/<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-d8a66004bdcda919", "name": "Dangling fetch: PATCH http://x/api/v1/scripts/${id}/scenes/${secondSceneId} (studio/tests/integration/scripts.test.ts:14", "shortDescription": {"text": "Dangling fetch: PATCH http://x/api/v1/scripts/${id}/scenes/${secondSceneId} (studio/tests/integration/scripts.test.ts:146)"}, "fullDescription": {"text": "`studio/tests/integration/scripts.test.ts:146` calls `PATCH http://x/api/v1/scripts/${id}/scenes/${secondSceneId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/x/api/v1/scripts/<p>/scenes/<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-0cb6595184f7a5fc", "name": "Dangling fetch: GET http://x/api/v1/scripts/${id}/scenes/${secondSceneId} (studio/tests/integration/scripts.test.ts:151)", "shortDescription": {"text": "Dangling fetch: GET http://x/api/v1/scripts/${id}/scenes/${secondSceneId} (studio/tests/integration/scripts.test.ts:151)"}, "fullDescription": {"text": "`studio/tests/integration/scripts.test.ts:151` calls `GET http://x/api/v1/scripts/${id}/scenes/${secondSceneId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/x/api/v1/scripts/<p>/scenes/<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-1c22fba062cffe28", "name": "Dangling fetch: PATCH http://x/api/v1/scripts/${id}/scenes/${secondSceneId} (studio/tests/integration/scripts.test.ts:15", "shortDescription": {"text": "Dangling fetch: PATCH http://x/api/v1/scripts/${id}/scenes/${secondSceneId} (studio/tests/integration/scripts.test.ts:158)"}, "fullDescription": {"text": "`studio/tests/integration/scripts.test.ts:158` calls `PATCH http://x/api/v1/scripts/${id}/scenes/${secondSceneId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/x/api/v1/scripts/<p>/scenes/<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-d49b6ee427a6cccc", "name": "Dangling fetch: PATCH http://x/api/v1/scripts/${id}/scenes/${secondSceneId} (studio/tests/integration/scripts.test.ts:16", "shortDescription": {"text": "Dangling fetch: PATCH http://x/api/v1/scripts/${id}/scenes/${secondSceneId} (studio/tests/integration/scripts.test.ts:163)"}, "fullDescription": {"text": "`studio/tests/integration/scripts.test.ts:163` calls `PATCH http://x/api/v1/scripts/${id}/scenes/${secondSceneId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/x/api/v1/scripts/<p>/scenes/<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-5bbd0984707affbe", "name": "Dangling fetch: GET http://x/api/v1/scripts/${id}/scenes/${secondSceneId} (studio/tests/integration/scripts.test.ts:168)", "shortDescription": {"text": "Dangling fetch: GET http://x/api/v1/scripts/${id}/scenes/${secondSceneId} (studio/tests/integration/scripts.test.ts:168)"}, "fullDescription": {"text": "`studio/tests/integration/scripts.test.ts:168` calls `GET http://x/api/v1/scripts/${id}/scenes/${secondSceneId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/x/api/v1/scripts/<p>/scenes/<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-e24ba3c2ae716145", "name": "Dangling fetch: DELETE http://x/api/v1/scripts/${id} (studio/tests/integration/scripts.test.ts:174)", "shortDescription": {"text": "Dangling fetch: DELETE http://x/api/v1/scripts/${id} (studio/tests/integration/scripts.test.ts:174)"}, "fullDescription": {"text": "`studio/tests/integration/scripts.test.ts:174` calls `DELETE http://x/api/v1/scripts/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/x/api/v1/scripts/<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-4ff4592eb7696b9b", "name": "Dangling fetch: GET http://x/api/v1/scripts (studio/tests/integration/scripts.test.ts:177)", "shortDescription": {"text": "Dangling fetch: GET http://x/api/v1/scripts (studio/tests/integration/scripts.test.ts:177)"}, "fullDescription": {"text": "`studio/tests/integration/scripts.test.ts:177` calls `GET http://x/api/v1/scripts` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/x/api/v1/scripts`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8f49c829b94d8c2e", "name": "Dangling fetch: GET http://x/api/v1/scripts/deleted/recent (studio/tests/integration/scripts.test.ts:183)", "shortDescription": {"text": "Dangling fetch: GET http://x/api/v1/scripts/deleted/recent (studio/tests/integration/scripts.test.ts:183)"}, "fullDescription": {"text": "`studio/tests/integration/scripts.test.ts:183` calls `GET http://x/api/v1/scripts/deleted/recent` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/x/api/v1/scripts/deleted/recent`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3be3451f6464ef61", "name": "Dangling fetch: POST http://x/api/v1/scripts/${id}/restore (studio/tests/integration/scripts.test.ts:189)", "shortDescription": {"text": "Dangling fetch: POST http://x/api/v1/scripts/${id}/restore (studio/tests/integration/scripts.test.ts:189)"}, "fullDescription": {"text": "`studio/tests/integration/scripts.test.ts:189` calls `POST http://x/api/v1/scripts/${id}/restore` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/x/api/v1/scripts/<p>/restore`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-89d9562fa1f2249d", "name": "Dangling fetch: GET http://x/api/v1/scripts (studio/tests/integration/scripts.test.ts:195)", "shortDescription": {"text": "Dangling fetch: GET http://x/api/v1/scripts (studio/tests/integration/scripts.test.ts:195)"}, "fullDescription": {"text": "`studio/tests/integration/scripts.test.ts:195` calls `GET http://x/api/v1/scripts` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/x/api/v1/scripts`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-04ffd633925fcc2e", "name": "Dangling fetch: POST http://x/api/v1/scripts (studio/tests/integration/scripts.test.ts:205)", "shortDescription": {"text": "Dangling fetch: POST http://x/api/v1/scripts (studio/tests/integration/scripts.test.ts:205)"}, "fullDescription": {"text": "`studio/tests/integration/scripts.test.ts:205` calls `POST http://x/api/v1/scripts` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/x/api/v1/scripts`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-459a8cd178068d29", "name": "Dangling fetch: POST http://x/api/v1/scripts (studio/tests/integration/scripts.test.ts:216)", "shortDescription": {"text": "Dangling fetch: POST http://x/api/v1/scripts (studio/tests/integration/scripts.test.ts:216)"}, "fullDescription": {"text": "`studio/tests/integration/scripts.test.ts:216` calls `POST http://x/api/v1/scripts` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/x/api/v1/scripts`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d5c6660b1dd4bb7d", "name": "Dangling fetch: POST http://x/api/v1/scripts/${id}/plan (studio/tests/integration/scripts.test.ts:225)", "shortDescription": {"text": "Dangling fetch: POST http://x/api/v1/scripts/${id}/plan (studio/tests/integration/scripts.test.ts:225)"}, "fullDescription": {"text": "`studio/tests/integration/scripts.test.ts:225` calls `POST http://x/api/v1/scripts/${id}/plan` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/x/api/v1/scripts/<p>/plan`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-36459a1134d16016", "name": "Dangling fetch: POST http://x/api/v1/scripts/${id}/plan (studio/tests/integration/scripts.test.ts:235)", "shortDescription": {"text": "Dangling fetch: POST http://x/api/v1/scripts/${id}/plan (studio/tests/integration/scripts.test.ts:235)"}, "fullDescription": {"text": "`studio/tests/integration/scripts.test.ts:235` calls `POST http://x/api/v1/scripts/${id}/plan` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/x/api/v1/scripts/<p>/plan`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-99776a2d2140c0d6", "name": "Dangling fetch: GET http://x/api/v1/scripts/${id}/scenes (studio/tests/integration/scripts.test.ts:242)", "shortDescription": {"text": "Dangling fetch: GET http://x/api/v1/scripts/${id}/scenes (studio/tests/integration/scripts.test.ts:242)"}, "fullDescription": {"text": "`studio/tests/integration/scripts.test.ts:242` calls `GET http://x/api/v1/scripts/${id}/scenes` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/x/api/v1/scripts/<p>/scenes`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-45876d97c72f62ac", "name": "Dangling fetch: POST http://x/api/auth/sign-up/email (studio/tests/integration/auth.test.ts:6)", "shortDescription": {"text": "Dangling fetch: POST http://x/api/auth/sign-up/email (studio/tests/integration/auth.test.ts:6)"}, "fullDescription": {"text": "`studio/tests/integration/auth.test.ts:6` calls `POST http://x/api/auth/sign-up/email` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/x/api/auth/sign-up/email`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-13dc988ecb0101bc", "name": "Dangling fetch: POST http://x/api/auth/sign-up/email (studio/tests/integration/launch.test.ts:5)", "shortDescription": {"text": "Dangling fetch: POST http://x/api/auth/sign-up/email (studio/tests/integration/launch.test.ts:5)"}, "fullDescription": {"text": "`studio/tests/integration/launch.test.ts:5` calls `POST http://x/api/auth/sign-up/email` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/x/api/auth/sign-up/email`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-93a134e904a9baea", "name": "Dangling fetch: POST http://x/api/v1/projects (studio/tests/integration/launch.test.ts:22)", "shortDescription": {"text": "Dangling fetch: POST http://x/api/v1/projects (studio/tests/integration/launch.test.ts:22)"}, "fullDescription": {"text": "`studio/tests/integration/launch.test.ts:22` calls `POST http://x/api/v1/projects` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/x/api/v1/projects`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3717e4c47518447f", "name": "Dangling fetch: POST http://x/api/v1/projects/${project.id}/launch/brief (studio/tests/integration/launch.test.ts:30)", "shortDescription": {"text": "Dangling fetch: POST http://x/api/v1/projects/${project.id}/launch/brief (studio/tests/integration/launch.test.ts:30)"}, "fullDescription": {"text": "`studio/tests/integration/launch.test.ts:30` calls `POST http://x/api/v1/projects/${project.id}/launch/brief` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/x/api/v1/projects/<p>/launch/brief`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f210125d9cc1d86c", "name": "Dangling fetch: GET http://x/api/v1/projects/${project.id}/launch/brief (studio/tests/integration/launch.test.ts:62)", "shortDescription": {"text": "Dangling fetch: GET http://x/api/v1/projects/${project.id}/launch/brief (studio/tests/integration/launch.test.ts:62)"}, "fullDescription": {"text": "`studio/tests/integration/launch.test.ts:62` calls `GET http://x/api/v1/projects/${project.id}/launch/brief` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/x/api/v1/projects/<p>/launch/brief`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-794d318fab9455f3", "name": "Dangling fetch: GET http://x/api/v1/projects/${project.id}/launch/brief/download (studio/tests/integration/launch.test.t", "shortDescription": {"text": "Dangling fetch: GET http://x/api/v1/projects/${project.id}/launch/brief/download (studio/tests/integration/launch.test.ts:71)"}, "fullDescription": {"text": "`studio/tests/integration/launch.test.ts:71` calls `GET http://x/api/v1/projects/${project.id}/launch/brief/download` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/x/api/v1/projects/<p>/launch/brief/download`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-41a2369cda620356", "name": "Dangling fetch: POST http://x/api/auth/sign-up/email (studio/tests/integration/scout.test.ts:5)", "shortDescription": {"text": "Dangling fetch: POST http://x/api/auth/sign-up/email (studio/tests/integration/scout.test.ts:5)"}, "fullDescription": {"text": "`studio/tests/integration/scout.test.ts:5` calls `POST http://x/api/auth/sign-up/email` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/x/api/auth/sign-up/email`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-40087006d7c66582", "name": "Dangling fetch: POST http://x/api/v1/projects (studio/tests/integration/scout.test.ts:22)", "shortDescription": {"text": "Dangling fetch: POST http://x/api/v1/projects (studio/tests/integration/scout.test.ts:22)"}, "fullDescription": {"text": "`studio/tests/integration/scout.test.ts:22` calls `POST http://x/api/v1/projects` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/x/api/v1/projects`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-44b23c4d8fbf717e", "name": "Dangling fetch: POST http://x/api/v1/scout/queries (studio/tests/integration/scout.test.ts:31)", "shortDescription": {"text": "Dangling fetch: POST http://x/api/v1/scout/queries (studio/tests/integration/scout.test.ts:31)"}, "fullDescription": {"text": "`studio/tests/integration/scout.test.ts:31` calls `POST http://x/api/v1/scout/queries` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/x/api/v1/scout/queries`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-58f3aba7db9544e9", "name": "Dangling fetch: GET http://x/api/v1/scout/queries (studio/tests/integration/scout.test.ts:63)", "shortDescription": {"text": "Dangling fetch: GET http://x/api/v1/scout/queries (studio/tests/integration/scout.test.ts:63)"}, "fullDescription": {"text": "`studio/tests/integration/scout.test.ts:63` calls `GET http://x/api/v1/scout/queries` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/x/api/v1/scout/queries`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3757ba150f093633", "name": "Dangling fetch: GET http://x/api/v1/scout/projects/${project.id}/findings (studio/tests/integration/scout.test.ts:69)", "shortDescription": {"text": "Dangling fetch: GET http://x/api/v1/scout/projects/${project.id}/findings (studio/tests/integration/scout.test.ts:69)"}, "fullDescription": {"text": "`studio/tests/integration/scout.test.ts:69` calls `GET http://x/api/v1/scout/projects/${project.id}/findings` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/x/api/v1/scout/projects/<p>/findings`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9e346bb9de6f5893", "name": "Dangling fetch: POST http://render/render (studio/apps/web/src/workflows/book-export.ts:145)", "shortDescription": {"text": "Dangling fetch: POST http://render/render (studio/apps/web/src/workflows/book-export.ts:145)"}, "fullDescription": {"text": "`studio/apps/web/src/workflows/book-export.ts:145` calls `POST http://render/render` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/render/render`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-dc6ac1551a5f2d92", "name": "Dangling fetch: POST http://render/master-audio (studio/apps/web/src/workflows/audiobook-mastering.ts:194)", "shortDescription": {"text": "Dangling fetch: POST http://render/master-audio (studio/apps/web/src/workflows/audiobook-mastering.ts:194)"}, "fullDescription": {"text": "`studio/apps/web/src/workflows/audiobook-mastering.ts:194` calls `POST http://render/master-audio` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/render/master-audio`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0b86184a87a76184", "name": "Dangling fetch: POST https://api.elevenlabs.io/v1/text-to-speech/${encodeURIComponent(\n      voiceId,\n    )}?output_form", "shortDescription": {"text": "Dangling fetch: POST https://api.elevenlabs.io/v1/text-to-speech/${encodeURIComponent(\n      voiceId,\n    )}?output_format=mp3_44100_128 (studio/apps/web/src/workflows/audiobook-mastering.ts:209)"}, "fullDescription": {"text": "`studio/apps/web/src/workflows/audiobook-mastering.ts:209` calls `POST https://api.elevenlabs.io/v1/text-to-speech/${encodeURIComponent(\n      voiceId,\n    )}?output_format=mp3_44100_128` 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.elevenlabs.io/v1/text-to-speech/<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-2764d97bccee7b1d", "name": "Dangling fetch: POST http://render/package-launch (studio/apps/web/src/workflows/gtm-brief.ts:145)", "shortDescription": {"text": "Dangling fetch: POST http://render/package-launch (studio/apps/web/src/workflows/gtm-brief.ts:145)"}, "fullDescription": {"text": "`studio/apps/web/src/workflows/gtm-brief.ts:145` calls `POST http://render/package-launch` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/render/package-launch`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-35e492de929646ab", "name": "Dangling fetch: POST https://api.elevenlabs.io/v1/text-to-speech/${encodeURIComponent(\n      voiceId,\n    )}?output_form", "shortDescription": {"text": "Dangling fetch: POST https://api.elevenlabs.io/v1/text-to-speech/${encodeURIComponent(\n      voiceId,\n    )}?output_format=mp3_44100_128 (studio/apps/web/src/routes/projects.ts:1071)"}, "fullDescription": {"text": "`studio/apps/web/src/routes/projects.ts:1071` calls `POST https://api.elevenlabs.io/v1/text-to-speech/${encodeURIComponent(\n      voiceId,\n    )}?output_format=mp3_44100_128` 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.elevenlabs.io/v1/text-to-speech/<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-8856d68a2f9464e0", "name": "Dangling fetch: GET http://render/health (studio/apps/web/src/routes/health.ts:16)", "shortDescription": {"text": "Dangling fetch: GET http://render/health (studio/apps/web/src/routes/health.ts:16)"}, "fullDescription": {"text": "`studio/apps/web/src/routes/health.ts:16` calls `GET http://render/health` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/render/health`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1656d3f878fd169d", "name": "Dangling fetch: GET /api/create/templates/hero-journey (src/workers/create.test.ts:134)", "shortDescription": {"text": "Dangling fetch: GET /api/create/templates/hero-journey (src/workers/create.test.ts:134)"}, "fullDescription": {"text": "`src/workers/create.test.ts:134` calls `GET /api/create/templates/hero-journey` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/create/templates/hero-journey`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7fa4289086780ad9", "name": "Dangling fetch: GET /api/create/templates/nope (src/workers/create.test.ts:142)", "shortDescription": {"text": "Dangling fetch: GET /api/create/templates/nope (src/workers/create.test.ts:142)"}, "fullDescription": {"text": "`src/workers/create.test.ts:142` calls `GET /api/create/templates/nope` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/create/templates/nope`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-409105172716ab1c", "name": "Dangling fetch: GET /api/create/sessions/s_abc/stream (src/workers/create.test.ts:241)", "shortDescription": {"text": "Dangling fetch: GET /api/create/sessions/s_abc/stream (src/workers/create.test.ts:241)"}, "fullDescription": {"text": "`src/workers/create.test.ts:241` calls `GET /api/create/sessions/s_abc/stream` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/create/sessions/s_abc/stream`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9b9893960045c12b", "name": "Dangling fetch: GET /api/create/sessions/s_abc/stream (src/workers/create.test.ts:251)", "shortDescription": {"text": "Dangling fetch: GET /api/create/sessions/s_abc/stream (src/workers/create.test.ts:251)"}, "fullDescription": {"text": "`src/workers/create.test.ts:251` calls `GET /api/create/sessions/s_abc/stream` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/create/sessions/s_abc/stream`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c2ebd90457682b7b", "name": "Dangling fetch: GET https://x.test/api/test (src/workers/edge-cache.test.ts:50)", "shortDescription": {"text": "Dangling fetch: GET https://x.test/api/test (src/workers/edge-cache.test.ts:50)"}, "fullDescription": {"text": "`src/workers/edge-cache.test.ts:50` calls `GET https://x.test/api/test` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/https:/x.test/api/test`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-636924a4539b3607", "name": "Dangling fetch: GET https://x.test/api/test (src/workers/edge-cache.test.ts:64)", "shortDescription": {"text": "Dangling fetch: GET https://x.test/api/test (src/workers/edge-cache.test.ts:64)"}, "fullDescription": {"text": "`src/workers/edge-cache.test.ts:64` calls `GET https://x.test/api/test` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/https:/x.test/api/test`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-769e57d35d351e50", "name": "Dangling fetch: GET https://x.test/api/test (src/workers/edge-cache.test.ts:67)", "shortDescription": {"text": "Dangling fetch: GET https://x.test/api/test (src/workers/edge-cache.test.ts:67)"}, "fullDescription": {"text": "`src/workers/edge-cache.test.ts:67` calls `GET https://x.test/api/test` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/https:/x.test/api/test`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-300e8cd63c419774", "name": "Dangling fetch: GET https://x.test/api/test?limit=12 (src/workers/edge-cache.test.ts:75)", "shortDescription": {"text": "Dangling fetch: GET https://x.test/api/test?limit=12 (src/workers/edge-cache.test.ts:75)"}, "fullDescription": {"text": "`src/workers/edge-cache.test.ts:75` calls `GET https://x.test/api/test?limit=12` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/https:/x.test/api/test`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5ef717f2c8198d37", "name": "Dangling fetch: GET https://x.test/api/test?limit=24 (src/workers/edge-cache.test.ts:77)", "shortDescription": {"text": "Dangling fetch: GET https://x.test/api/test?limit=24 (src/workers/edge-cache.test.ts:77)"}, "fullDescription": {"text": "`src/workers/edge-cache.test.ts:77` calls `GET https://x.test/api/test?limit=24` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/https:/x.test/api/test`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0feaea792a7991f3", "name": "Dangling fetch: POST https://x.test/api/test (src/workers/edge-cache.test.ts:88)", "shortDescription": {"text": "Dangling fetch: POST https://x.test/api/test (src/workers/edge-cache.test.ts:88)"}, "fullDescription": {"text": "`src/workers/edge-cache.test.ts:88` calls `POST https://x.test/api/test` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/https:/x.test/api/test`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-70365835905178df", "name": "Dangling fetch: GET https://x.test/api/missing (src/workers/edge-cache.test.ts:100)", "shortDescription": {"text": "Dangling fetch: GET https://x.test/api/missing (src/workers/edge-cache.test.ts:100)"}, "fullDescription": {"text": "`src/workers/edge-cache.test.ts:100` calls `GET https://x.test/api/missing` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/https:/x.test/api/missing`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-22c6f12a90158a71", "name": "Dangling fetch: GET https://x.test/api/test (src/workers/edge-cache.test.ts:113)", "shortDescription": {"text": "Dangling fetch: GET https://x.test/api/test (src/workers/edge-cache.test.ts:113)"}, "fullDescription": {"text": "`src/workers/edge-cache.test.ts:113` calls `GET https://x.test/api/test` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/https:/x.test/api/test`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5a3300a670a0f3eb", "name": "Dangling fetch: GET https://x.test/api/test (src/workers/edge-cache.test.ts:124)", "shortDescription": {"text": "Dangling fetch: GET https://x.test/api/test (src/workers/edge-cache.test.ts:124)"}, "fullDescription": {"text": "`src/workers/edge-cache.test.ts:124` calls `GET https://x.test/api/test` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/https:/x.test/api/test`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-26fc526c122638db", "name": "Dangling fetch: GET https://x.test/api/test (src/workers/edge-cache.test.ts:130)", "shortDescription": {"text": "Dangling fetch: GET https://x.test/api/test (src/workers/edge-cache.test.ts:130)"}, "fullDescription": {"text": "`src/workers/edge-cache.test.ts:130` calls `GET https://x.test/api/test` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/https:/x.test/api/test`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1894ff495c9b2297", "name": "Dangling fetch: GET https://x.test/api/test (src/workers/edge-cache.test.ts:137)", "shortDescription": {"text": "Dangling fetch: GET https://x.test/api/test (src/workers/edge-cache.test.ts:137)"}, "fullDescription": {"text": "`src/workers/edge-cache.test.ts:137` calls `GET https://x.test/api/test` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/https:/x.test/api/test`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-dfd592ec9eed71d0", "name": "Dangling fetch: POST https://x.test/api/mutate (src/workers/edge-cache.test.ts:157)", "shortDescription": {"text": "Dangling fetch: POST https://x.test/api/mutate (src/workers/edge-cache.test.ts:157)"}, "fullDescription": {"text": "`src/workers/edge-cache.test.ts:157` calls `POST https://x.test/api/mutate` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/https:/x.test/api/mutate`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-11d3319d90cb7b92", "name": "Dangling fetch: POST https://x.test/api/mutate (src/workers/edge-cache.test.ts:167)", "shortDescription": {"text": "Dangling fetch: POST https://x.test/api/mutate (src/workers/edge-cache.test.ts:167)"}, "fullDescription": {"text": "`src/workers/edge-cache.test.ts:167` calls `POST https://x.test/api/mutate` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/https:/x.test/api/mutate`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3e72ccec60cf0fd2", "name": "Dangling fetch: POST https://x.test/api/mutate (src/workers/edge-cache.test.ts:175)", "shortDescription": {"text": "Dangling fetch: POST https://x.test/api/mutate (src/workers/edge-cache.test.ts:175)"}, "fullDescription": {"text": "`src/workers/edge-cache.test.ts:175` calls `POST https://x.test/api/mutate` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/https:/x.test/api/mutate`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b46ad801ca459991", "name": "Dangling fetch: POST https://x.test/api/webhooks/encode (src/workers/edge-cache.test.ts:188)", "shortDescription": {"text": "Dangling fetch: POST https://x.test/api/webhooks/encode (src/workers/edge-cache.test.ts:188)"}, "fullDescription": {"text": "`src/workers/edge-cache.test.ts:188` calls `POST https://x.test/api/webhooks/encode` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/https:/x.test/api/webhooks/encode`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-55d74d218a3c7d27", "name": "Dangling fetch: GET /api/videos/v1/related?limit=0 (src/workers/related.test.ts:204)", "shortDescription": {"text": "Dangling fetch: GET /api/videos/v1/related?limit=0 (src/workers/related.test.ts:204)"}, "fullDescription": {"text": "`src/workers/related.test.ts:204` calls `GET /api/videos/v1/related?limit=0` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/videos/v1/related`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2b84bbcc67a15dd3", "name": "Dangling fetch: GET /api/videos/v1/related?limit=999 (src/workers/related.test.ts:205)", "shortDescription": {"text": "Dangling fetch: GET /api/videos/v1/related?limit=999 (src/workers/related.test.ts:205)"}, "fullDescription": {"text": "`src/workers/related.test.ts:205` calls `GET /api/videos/v1/related?limit=999` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/videos/v1/related`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e21aa1cde47d6855", "name": "Dangling fetch: GET /api/videos/src/related?limit=12 (src/workers/related.test.ts:275)", "shortDescription": {"text": "Dangling fetch: GET /api/videos/src/related?limit=12 (src/workers/related.test.ts:275)"}, "fullDescription": {"text": "`src/workers/related.test.ts:275` calls `GET /api/videos/src/related?limit=12` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/videos/src/related`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0d0357482623f29f", "name": "Dangling fetch: GET /api/videos/src/related?limit=12 (src/workers/related.test.ts:280)", "shortDescription": {"text": "Dangling fetch: GET /api/videos/src/related?limit=12 (src/workers/related.test.ts:280)"}, "fullDescription": {"text": "`src/workers/related.test.ts:280` calls `GET /api/videos/src/related?limit=12` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/videos/src/related`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-78ce7eb153a2d14d", "name": "Dangling fetch: POST /api/render/jobs/j_x/complete (src/workers/render.test.ts:134)", "shortDescription": {"text": "Dangling fetch: POST /api/render/jobs/j_x/complete (src/workers/render.test.ts:134)"}, "fullDescription": {"text": "`src/workers/render.test.ts:134` calls `POST /api/render/jobs/j_x/complete` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/render/jobs/j_x/complete`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7148556f2a7a9515", "name": "Dangling fetch: POST /api/render/jobs/j_nonexistent/complete (src/workers/render.test.ts:209)", "shortDescription": {"text": "Dangling fetch: POST /api/render/jobs/j_nonexistent/complete (src/workers/render.test.ts:209)"}, "fullDescription": {"text": "`src/workers/render.test.ts:209` calls `POST /api/render/jobs/j_nonexistent/complete` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/render/jobs/j_nonexistent/complete`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e41f6497d21da3b1", "name": "Dangling fetch: POST https://rl/take (src/workers/rate-limit.ts:95)", "shortDescription": {"text": "Dangling fetch: POST https://rl/take (src/workers/rate-limit.ts:95)"}, "fullDescription": {"text": "`src/workers/rate-limit.ts:95` calls `POST https://rl/take` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/rl/take`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0a22bbcfd3cd3531", "name": "Dangling fetch: GET /api/echo (src/workers/csrf.test.ts:27)", "shortDescription": {"text": "Dangling fetch: GET /api/echo (src/workers/csrf.test.ts:27)"}, "fullDescription": {"text": "`src/workers/csrf.test.ts:27` calls `GET /api/echo` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/echo`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-68bb61cc68c82bb2", "name": "Dangling fetch: POST /api/echo (src/workers/csrf.test.ts:36)", "shortDescription": {"text": "Dangling fetch: POST /api/echo (src/workers/csrf.test.ts:36)"}, "fullDescription": {"text": "`src/workers/csrf.test.ts:36` calls `POST /api/echo` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/echo`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6eaa0355ed0bee8d", "name": "Dangling fetch: POST http://localhost/api/echo (src/workers/csrf.test.ts:45)", "shortDescription": {"text": "Dangling fetch: POST http://localhost/api/echo (src/workers/csrf.test.ts:45)"}, "fullDescription": {"text": "`src/workers/csrf.test.ts:45` calls `POST http://localhost/api/echo` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/http:/localhost/api/echo`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2303c0fc4db0e003", "name": "Dangling fetch: POST /api/echo (src/workers/csrf.test.ts:54)", "shortDescription": {"text": "Dangling fetch: POST /api/echo (src/workers/csrf.test.ts:54)"}, "fullDescription": {"text": "`src/workers/csrf.test.ts:54` calls `POST /api/echo` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/echo`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7943f5c2c419d4f8", "name": "Dangling fetch: POST /api/echo (src/workers/csrf.test.ts:63)", "shortDescription": {"text": "Dangling fetch: POST /api/echo (src/workers/csrf.test.ts:63)"}, "fullDescription": {"text": "`src/workers/csrf.test.ts:63` calls `POST /api/echo` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/echo`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3693766e5d3c47e5", "name": "Dangling fetch: POST /api/echo (src/workers/csrf.test.ts:69)", "shortDescription": {"text": "Dangling fetch: POST /api/echo (src/workers/csrf.test.ts:69)"}, "fullDescription": {"text": "`src/workers/csrf.test.ts:69` calls `POST /api/echo` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/echo`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3dedde0ad7b9fece", "name": "Dangling fetch: PUT /api/echo (src/workers/csrf.test.ts:78)", "shortDescription": {"text": "Dangling fetch: PUT /api/echo (src/workers/csrf.test.ts:78)"}, "fullDescription": {"text": "`src/workers/csrf.test.ts:78` calls `PUT /api/echo` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/echo`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-db04157cb509ce46", "name": "Dangling fetch: DELETE /api/echo (src/workers/csrf.test.ts:82)", "shortDescription": {"text": "Dangling fetch: DELETE /api/echo (src/workers/csrf.test.ts:82)"}, "fullDescription": {"text": "`src/workers/csrf.test.ts:82` calls `DELETE /api/echo` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/echo`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9b0663a4cf20ac7f", "name": "Dangling fetch: POST https://api.cloudflare.com/client/v4/accounts/${accountId}/stream (src/workers/encoding.ts:29)", "shortDescription": {"text": "Dangling fetch: POST https://api.cloudflare.com/client/v4/accounts/${accountId}/stream (src/workers/encoding.ts:29)"}, "fullDescription": {"text": "`src/workers/encoding.ts:29` calls `POST https://api.cloudflare.com/client/v4/accounts/${accountId}/stream` 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/accounts/<p>/stream`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-80a666d30a2d032b", "name": "Dangling fetch: POST https://encoder-container/encode (src/workers/encoding.ts:82)", "shortDescription": {"text": "Dangling fetch: POST https://encoder-container/encode (src/workers/encoding.ts:82)"}, "fullDescription": {"text": "`src/workers/encoding.ts:82` calls `POST https://encoder-container/encode` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/encoder-container/encode`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3a633f9379bf5563", "name": "Dangling fetch: POST https://channel-do/fan-out (src/workers/channel-do.ts:94)", "shortDescription": {"text": "Dangling fetch: POST https://channel-do/fan-out (src/workers/channel-do.ts:94)"}, "fullDescription": {"text": "`src/workers/channel-do.ts:94` calls `POST https://channel-do/fan-out` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/channel-do/fan-out`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-07356a120075a361", "name": "Dangling fetch: POST http://localhost/api/studio/image (src/workers/studio.test.ts:171)", "shortDescription": {"text": "Dangling fetch: POST http://localhost/api/studio/image (src/workers/studio.test.ts:171)"}, "fullDescription": {"text": "`src/workers/studio.test.ts:171` calls `POST http://localhost/api/studio/image` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/http:/localhost/api/studio/image`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ca52b339a94a4bca", "name": "Dangling fetch: POST http://localhost/api/studio/image (src/workers/studio.test.ts:207)", "shortDescription": {"text": "Dangling fetch: POST http://localhost/api/studio/image (src/workers/studio.test.ts:207)"}, "fullDescription": {"text": "`src/workers/studio.test.ts:207` calls `POST http://localhost/api/studio/image` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/http:/localhost/api/studio/image`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2b759689e2845401", "name": "Dangling fetch: POST http://localhost/api/studio/image (src/workers/studio.test.ts:233)", "shortDescription": {"text": "Dangling fetch: POST http://localhost/api/studio/image (src/workers/studio.test.ts:233)"}, "fullDescription": {"text": "`src/workers/studio.test.ts:233` calls `POST http://localhost/api/studio/image` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/http:/localhost/api/studio/image`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9d594f79bf9fe33f", "name": "Dangling fetch: POST http://localhost/api/studio/image (src/workers/studio.test.ts:320)", "shortDescription": {"text": "Dangling fetch: POST http://localhost/api/studio/image (src/workers/studio.test.ts:320)"}, "fullDescription": {"text": "`src/workers/studio.test.ts:320` calls `POST http://localhost/api/studio/image` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/http:/localhost/api/studio/image`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1e4dd3640d17d0cf", "name": "Dangling fetch: POST http://localhost/api/studio/image (src/workers/studio.test.ts:346)", "shortDescription": {"text": "Dangling fetch: POST http://localhost/api/studio/image (src/workers/studio.test.ts:346)"}, "fullDescription": {"text": "`src/workers/studio.test.ts:346` calls `POST http://localhost/api/studio/image` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/http:/localhost/api/studio/image`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-16ba349573812670", "name": "Dangling fetch: POST http://localhost/api/studio/image (src/workers/studio.test.ts:364)", "shortDescription": {"text": "Dangling fetch: POST http://localhost/api/studio/image (src/workers/studio.test.ts:364)"}, "fullDescription": {"text": "`src/workers/studio.test.ts:364` calls `POST http://localhost/api/studio/image` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/http:/localhost/api/studio/image`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-199332ca9a41ac64", "name": "Dangling fetch: POST http://localhost/api/studio/video (src/workers/studio.test.ts:422)", "shortDescription": {"text": "Dangling fetch: POST http://localhost/api/studio/video (src/workers/studio.test.ts:422)"}, "fullDescription": {"text": "`src/workers/studio.test.ts:422` calls `POST http://localhost/api/studio/video` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/http:/localhost/api/studio/video`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-41435879d6391562", "name": "Dangling fetch: POST http://localhost/api/studio/video (src/workers/studio.test.ts:478)", "shortDescription": {"text": "Dangling fetch: POST http://localhost/api/studio/video (src/workers/studio.test.ts:478)"}, "fullDescription": {"text": "`src/workers/studio.test.ts:478` calls `POST http://localhost/api/studio/video` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/http:/localhost/api/studio/video`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7cf79a93895a23f4", "name": "Dangling fetch: POST http://localhost/api/studio/video (src/workers/studio.test.ts:505)", "shortDescription": {"text": "Dangling fetch: POST http://localhost/api/studio/video (src/workers/studio.test.ts:505)"}, "fullDescription": {"text": "`src/workers/studio.test.ts:505` calls `POST http://localhost/api/studio/video` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/http:/localhost/api/studio/video`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0ccff79362d36bb9", "name": "Dangling fetch: POST http://localhost/api/studio/video (src/workers/studio.test.ts:526)", "shortDescription": {"text": "Dangling fetch: POST http://localhost/api/studio/video (src/workers/studio.test.ts:526)"}, "fullDescription": {"text": "`src/workers/studio.test.ts:526` calls `POST http://localhost/api/studio/video` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/http:/localhost/api/studio/video`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6c871200bf2bfe0f", "name": "Dangling fetch: POST https://render-container/render (src/workers/render.ts:68)", "shortDescription": {"text": "Dangling fetch: POST https://render-container/render (src/workers/render.ts:68)"}, "fullDescription": {"text": "`src/workers/render.ts:68` calls `POST https://render-container/render` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/render-container/render`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-89f94dfdb45befea", "name": "Dangling fetch: GET https://auth.pdx.software/api/health (src/workers/canonical-host.test.ts:80)", "shortDescription": {"text": "Dangling fetch: GET https://auth.pdx.software/api/health (src/workers/canonical-host.test.ts:80)"}, "fullDescription": {"text": "`src/workers/canonical-host.test.ts:80` calls `GET https://auth.pdx.software/api/health` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/https:/auth.pdx.software/api/health`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5539070d22d30d66", "name": "Dangling fetch: GET https://spooool.com/api/health (src/workers/canonical-host.test.ts:83)", "shortDescription": {"text": "Dangling fetch: GET https://spooool.com/api/health (src/workers/canonical-host.test.ts:83)"}, "fullDescription": {"text": "`src/workers/canonical-host.test.ts:83` calls `GET https://spooool.com/api/health` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/https:/spooool.com/api/health`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7af1ba1782230811", "name": "Dangling fetch: POST http://localhost/api/webhooks/stream (src/workers/stream-webhook.workers.test.ts:19)", "shortDescription": {"text": "Dangling fetch: POST http://localhost/api/webhooks/stream (src/workers/stream-webhook.workers.test.ts:19)"}, "fullDescription": {"text": "`src/workers/stream-webhook.workers.test.ts:19` calls `POST http://localhost/api/webhooks/stream` 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/api/webhooks/stream`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-880236b6b5c08fc3", "name": "Dangling fetch: POST http://localhost/api/webhooks/stream (src/workers/stream-webhook.workers.test.ts:36)", "shortDescription": {"text": "Dangling fetch: POST http://localhost/api/webhooks/stream (src/workers/stream-webhook.workers.test.ts:36)"}, "fullDescription": {"text": "`src/workers/stream-webhook.workers.test.ts:36` calls `POST http://localhost/api/webhooks/stream` 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/api/webhooks/stream`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-eb6b8c22cbaf7407", "name": "Dangling fetch: POST http://localhost/api/webhooks/stream (src/workers/stream-webhook.workers.test.ts:59)", "shortDescription": {"text": "Dangling fetch: POST http://localhost/api/webhooks/stream (src/workers/stream-webhook.workers.test.ts:59)"}, "fullDescription": {"text": "`src/workers/stream-webhook.workers.test.ts:59` calls `POST http://localhost/api/webhooks/stream` 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/api/webhooks/stream`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2da7ecb1147d180b", "name": "Dangling fetch: GET https://example.com/api/discover/search?q=cats (src/workers/discover.workers.test.ts:6)", "shortDescription": {"text": "Dangling fetch: GET https://example.com/api/discover/search?q=cats (src/workers/discover.workers.test.ts:6)"}, "fullDescription": {"text": "`src/workers/discover.workers.test.ts:6` calls `GET https://example.com/api/discover/search?q=cats` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/example.com/api/discover/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-e28b281e8b24800e", "name": "Dangling fetch: GET https://example.com/api/discover/search (src/workers/discover.workers.test.ts:11)", "shortDescription": {"text": "Dangling fetch: GET https://example.com/api/discover/search (src/workers/discover.workers.test.ts:11)"}, "fullDescription": {"text": "`src/workers/discover.workers.test.ts:11` calls `GET https://example.com/api/discover/search` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/example.com/api/discover/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-2a3b9ca69f290839", "name": "Dangling fetch: GET /sitemap-videos-1.xml (src/workers/seo.test.ts:513)", "shortDescription": {"text": "Dangling fetch: GET /sitemap-videos-1.xml (src/workers/seo.test.ts:513)"}, "fullDescription": {"text": "`src/workers/seo.test.ts:513` calls `GET /sitemap-videos-1.xml` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/sitemap-videos-1.xml`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-474993bcc0c57e86", "name": "Dangling fetch: GET /sitemap-videos-foo.xml (src/workers/seo.test.ts:524)", "shortDescription": {"text": "Dangling fetch: GET /sitemap-videos-foo.xml (src/workers/seo.test.ts:524)"}, "fullDescription": {"text": "`src/workers/seo.test.ts:524` calls `GET /sitemap-videos-foo.xml` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/sitemap-videos-foo.xml`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9599f861e3450fd5", "name": "Dangling fetch: GET /sitemap-videos-0.xml (src/workers/seo.test.ts:530)", "shortDescription": {"text": "Dangling fetch: GET /sitemap-videos-0.xml (src/workers/seo.test.ts:530)"}, "fullDescription": {"text": "`src/workers/seo.test.ts:530` calls `GET /sitemap-videos-0.xml` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/sitemap-videos-0.xml`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9a932384cefb836a", "name": "Dangling fetch: GET /sitemap-videos-99.xml (src/workers/seo.test.ts:535)", "shortDescription": {"text": "Dangling fetch: GET /sitemap-videos-99.xml (src/workers/seo.test.ts:535)"}, "fullDescription": {"text": "`src/workers/seo.test.ts:535` calls `GET /sitemap-videos-99.xml` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/sitemap-videos-99.xml`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4b6e6c41b21fc1e3", "name": "Dangling fetch: POST https://composer-agent/run-auto-mode (src/workers/create.ts:92)", "shortDescription": {"text": "Dangling fetch: POST https://composer-agent/run-auto-mode (src/workers/create.ts:92)"}, "fullDescription": {"text": "`src/workers/create.ts:92` calls `POST https://composer-agent/run-auto-mode` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/composer-agent/run-auto-mode`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3786c49cd04ecca4", "name": "Dangling fetch: POST https://composer-agent/prime (src/workers/create.ts:146)", "shortDescription": {"text": "Dangling fetch: POST https://composer-agent/prime (src/workers/create.ts:146)"}, "fullDescription": {"text": "`src/workers/create.ts:146` calls `POST https://composer-agent/prime` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/composer-agent/prime`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-797716036bf06620", "name": "Dangling fetch: GET https://composer-agent/snapshot (src/workers/create.ts:178)", "shortDescription": {"text": "Dangling fetch: GET https://composer-agent/snapshot (src/workers/create.ts:178)"}, "fullDescription": {"text": "`src/workers/create.ts:178` calls `GET https://composer-agent/snapshot` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/composer-agent/snapshot`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d659f807363b4b3d", "name": "Dangling fetch: GET http://localhost/api/videos?limit=10&page=1 (src/workers/videos.workers.test.ts:18)", "shortDescription": {"text": "Dangling fetch: GET http://localhost/api/videos?limit=10&page=1 (src/workers/videos.workers.test.ts:18)"}, "fullDescription": {"text": "`src/workers/videos.workers.test.ts:18` calls `GET http://localhost/api/videos?limit=10&page=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/api/videos`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-133d24db3b64864f", "name": "Dangling fetch: GET http://localhost/api/videos/does-not-exist (src/workers/videos.workers.test.ts:25)", "shortDescription": {"text": "Dangling fetch: GET http://localhost/api/videos/does-not-exist (src/workers/videos.workers.test.ts:25)"}, "fullDescription": {"text": "`src/workers/videos.workers.test.ts:25` calls `GET http://localhost/api/videos/does-not-exist` 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/api/videos/does-not-exist`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ddc35e883f2b179d", "name": "Dangling fetch: GET http://localhost/api/videos/vid-int-1 (src/workers/videos.workers.test.ts:34)", "shortDescription": {"text": "Dangling fetch: GET http://localhost/api/videos/vid-int-1 (src/workers/videos.workers.test.ts:34)"}, "fullDescription": {"text": "`src/workers/videos.workers.test.ts:34` calls `GET http://localhost/api/videos/vid-int-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/api/videos/vid-int-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-d4f824dc2a0132a4", "name": "Dangling fetch: GET http://localhost/api/videos/trending?limit=5 (src/workers/videos.workers.test.ts:46)", "shortDescription": {"text": "Dangling fetch: GET http://localhost/api/videos/trending?limit=5 (src/workers/videos.workers.test.ts:46)"}, "fullDescription": {"text": "`src/workers/videos.workers.test.ts:46` calls `GET http://localhost/api/videos/trending?limit=5` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost/api/videos/trending`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-386f28619f7717b3", "name": "Dangling fetch: GET http://localhost/api/videos/trending?limit=5 (src/workers/videos.workers.test.ts:51)", "shortDescription": {"text": "Dangling fetch: GET http://localhost/api/videos/trending?limit=5 (src/workers/videos.workers.test.ts:51)"}, "fullDescription": {"text": "`src/workers/videos.workers.test.ts:51` calls `GET http://localhost/api/videos/trending?limit=5` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost/api/videos/trending`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-584818de47f216cc", "name": "Dangling fetch: POST http://localhost/api/videos/upload (src/workers/videos.workers.test.ts:64)", "shortDescription": {"text": "Dangling fetch: POST http://localhost/api/videos/upload (src/workers/videos.workers.test.ts:64)"}, "fullDescription": {"text": "`src/workers/videos.workers.test.ts:64` calls `POST http://localhost/api/videos/upload` 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/api/videos/upload`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e4e2222b3a49f4a2", "name": "Dangling fetch: POST http://localhost/api/videos/upload (src/workers/videos.workers.test.ts:76)", "shortDescription": {"text": "Dangling fetch: POST http://localhost/api/videos/upload (src/workers/videos.workers.test.ts:76)"}, "fullDescription": {"text": "`src/workers/videos.workers.test.ts:76` calls `POST http://localhost/api/videos/upload` 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/api/videos/upload`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-94e1009dc5273091", "name": "Dangling fetch: GET http://localhost:${SERVER_PORT}${GET_FOLDERS} (src/frontend/recorder/actions/fetch-project-folders.t", "shortDescription": {"text": "Dangling fetch: GET http://localhost:${SERVER_PORT}${GET_FOLDERS} (src/frontend/recorder/actions/fetch-project-folders.ts:6)"}, "fullDescription": {"text": "`src/frontend/recorder/actions/fetch-project-folders.ts:6` calls `GET http://localhost:${SERVER_PORT}${GET_FOLDERS}` 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-feda3b42da05c1de", "name": "Dangling fetch: POST http://localhost:${SERVER_PORT}${CREATE_FOLDER} (src/frontend/recorder/actions/create-folder.ts:11)", "shortDescription": {"text": "Dangling fetch: POST http://localhost:${SERVER_PORT}${CREATE_FOLDER} (src/frontend/recorder/actions/create-folder.ts:11)"}, "fullDescription": {"text": "`src/frontend/recorder/actions/create-folder.ts:11` calls `POST http://localhost:${SERVER_PORT}${CREATE_FOLDER}` 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-b13136938008565f", "name": "Dangling fetch: POST /api/users/me/${field} (src/frontend/pages/Profile.tsx:40)", "shortDescription": {"text": "Dangling fetch: POST /api/users/me/${field} (src/frontend/pages/Profile.tsx:40)"}, "fullDescription": {"text": "`src/frontend/pages/Profile.tsx:40` calls `POST /api/users/me/${field}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/users/me/<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-cf7d6e2ac2020f35", "name": "Dangling fetch: POST /api/auth/send-verification-email (src/frontend/pages/Upload.tsx:54)", "shortDescription": {"text": "Dangling fetch: POST /api/auth/send-verification-email (src/frontend/pages/Upload.tsx:54)"}, "fullDescription": {"text": "`src/frontend/pages/Upload.tsx:54` calls `POST /api/auth/send-verification-email` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/auth/send-verification-email`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-016428a82ca79152", "name": "Dangling fetch: GET /api/auth/list-sessions (src/frontend/lib/sessions.ts:30)", "shortDescription": {"text": "Dangling fetch: GET /api/auth/list-sessions (src/frontend/lib/sessions.ts:30)"}, "fullDescription": {"text": "`src/frontend/lib/sessions.ts:30` calls `GET /api/auth/list-sessions` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/auth/list-sessions`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4a9a89c9d6942f6b", "name": "Dangling fetch: POST /api/auth/revoke-session (src/frontend/lib/sessions.ts:38)", "shortDescription": {"text": "Dangling fetch: POST /api/auth/revoke-session (src/frontend/lib/sessions.ts:38)"}, "fullDescription": {"text": "`src/frontend/lib/sessions.ts:38` calls `POST /api/auth/revoke-session` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/auth/revoke-session`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6de0c6dc741104db", "name": "Dangling fetch: POST /api/auth/revoke-other-sessions (src/frontend/lib/sessions.ts:48)", "shortDescription": {"text": "Dangling fetch: POST /api/auth/revoke-other-sessions (src/frontend/lib/sessions.ts:48)"}, "fullDescription": {"text": "`src/frontend/lib/sessions.ts:48` calls `POST /api/auth/revoke-other-sessions` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/auth/revoke-other-sessions`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-75c76ddd7cb186c6", "name": "Unused endpoint: GET /api/v1/session", "shortDescription": {"text": "Unused endpoint: GET /api/v1/session"}, "fullDescription": {"text": "`studio/apps/web/src/index.ts` declares `GET /api/v1/session` 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-0f60899ab0400f78", "name": "Unused endpoint: GET /api/auth/error", "shortDescription": {"text": "Unused endpoint: GET /api/auth/error"}, "fullDescription": {"text": "`studio/apps/web/src/index.ts` declares `GET /api/auth/error` 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-1aa00d6976e8a478", "name": "Unused endpoint: GET /api/v1/debug-session", "shortDescription": {"text": "Unused endpoint: GET /api/v1/debug-session"}, "fullDescription": {"text": "`studio/apps/web/src/index.ts` declares `GET /api/v1/debug-session` 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-0d8a44fe2cfeb9c1", "name": "Unused endpoint: ALL /agents/*", "shortDescription": {"text": "Unused endpoint: ALL /agents/*"}, "fullDescription": {"text": "`studio/apps/web/src/index.ts` declares `ALL /agents/*` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-10d2f7f3a376d993", "name": "Unused endpoint: GET /deleted/recent", "shortDescription": {"text": "Unused endpoint: GET /deleted/recent"}, "fullDescription": {"text": "`studio/apps/web/src/routes/projects.ts` declares `GET /deleted/recent` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7a009b1a56794f45", "name": "Unused endpoint: POST /", "shortDescription": {"text": "Unused endpoint: POST /"}, "fullDescription": {"text": "`studio/apps/web/src/routes/projects.ts` declares `POST /` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-419089e7ca779e72", "name": "Unused endpoint: POST /:id/restore", "shortDescription": {"text": "Unused endpoint: POST /:id/restore"}, "fullDescription": {"text": "`studio/apps/web/src/routes/projects.ts` declares `POST /:id/restore` 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-ca5756175765b49d", "name": "Unused endpoint: GET /:id", "shortDescription": {"text": "Unused endpoint: GET /:id"}, "fullDescription": {"text": "`studio/apps/web/src/routes/projects.ts` declares `GET /:id` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-77eb63462d766ba4", "name": "Unused endpoint: GET /:id/chat", "shortDescription": {"text": "Unused endpoint: GET /:id/chat"}, "fullDescription": {"text": "`studio/apps/web/src/routes/projects.ts` declares `GET /:id/chat` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5fbc954f63526821", "name": "Unused endpoint: PATCH /:id", "shortDescription": {"text": "Unused endpoint: PATCH /:id"}, "fullDescription": {"text": "`studio/apps/web/src/routes/projects.ts` declares `PATCH /:id` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-029a05dcf8ba6bc8", "name": "Unused endpoint: GET /:id/outline", "shortDescription": {"text": "Unused endpoint: GET /:id/outline"}, "fullDescription": {"text": "`studio/apps/web/src/routes/projects.ts` declares `GET /:id/outline` 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-779a67424b0e4a17", "name": "Unused endpoint: GET /:id/publisher-pack", "shortDescription": {"text": "Unused endpoint: GET /:id/publisher-pack"}, "fullDescription": {"text": "`studio/apps/web/src/routes/projects.ts` declares `GET /:id/publisher-pack` 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-177e93927e24dc58", "name": "Unused endpoint: POST /:id/publisher-pack/seo", "shortDescription": {"text": "Unused endpoint: POST /:id/publisher-pack/seo"}, "fullDescription": {"text": "`studio/apps/web/src/routes/projects.ts` declares `POST /:id/publisher-pack/seo` 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-f7183c7b0f86e533", "name": "Unused endpoint: PATCH /:id/publisher-pack", "shortDescription": {"text": "Unused endpoint: PATCH /:id/publisher-pack"}, "fullDescription": {"text": "`studio/apps/web/src/routes/projects.ts` declares `PATCH /:id/publisher-pack` 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-82cbc876a8d4853a", "name": "Unused endpoint: POST /:id/publisher-pack/approve", "shortDescription": {"text": "Unused endpoint: POST /:id/publisher-pack/approve"}, "fullDescription": {"text": "`studio/apps/web/src/routes/projects.ts` declares `POST /:id/publisher-pack/approve` 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-dd2f02f124488566", "name": "Unused endpoint: GET /:id/book", "shortDescription": {"text": "Unused endpoint: GET /:id/book"}, "fullDescription": {"text": "`studio/apps/web/src/routes/projects.ts` declares `GET /:id/book` 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-f2b07ebf1cc25c57", "name": "Unused endpoint: POST /:id/tts", "shortDescription": {"text": "Unused endpoint: POST /:id/tts"}, "fullDescription": {"text": "`studio/apps/web/src/routes/projects.ts` declares `POST /:id/tts` 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-6f303311c967be30", "name": "Unused endpoint: GET /:id/export/jobs", "shortDescription": {"text": "Unused endpoint: GET /:id/export/jobs"}, "fullDescription": {"text": "`studio/apps/web/src/routes/projects.ts` declares `GET /:id/export/jobs` 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-5d51d59f41d7b91c", "name": "Unused endpoint: POST /:id/export", "shortDescription": {"text": "Unused endpoint: POST /:id/export"}, "fullDescription": {"text": "`studio/apps/web/src/routes/projects.ts` declares `POST /:id/export` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a8455c1a83a5e4c7", "name": "Unused endpoint: GET /:id/export/:jobId/download", "shortDescription": {"text": "Unused endpoint: GET /:id/export/:jobId/download"}, "fullDescription": {"text": "`studio/apps/web/src/routes/projects.ts` declares `GET /:id/export/:jobId/download` 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-0c24d29ec2d2de7e", "name": "Unused endpoint: GET /:id/narration/auditions", "shortDescription": {"text": "Unused endpoint: GET /:id/narration/auditions"}, "fullDescription": {"text": "`studio/apps/web/src/routes/projects.ts` declares `GET /:id/narration/auditions` 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-1eb265d2394d01ad", "name": "Unused endpoint: POST /:id/narration/audition", "shortDescription": {"text": "Unused endpoint: POST /:id/narration/audition"}, "fullDescription": {"text": "`studio/apps/web/src/routes/projects.ts` declares `POST /:id/narration/audition` 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-f7bf8f592c5b19d8", "name": "Unused endpoint: GET /:id/narration/auditions/:jobId/audio", "shortDescription": {"text": "Unused endpoint: GET /:id/narration/auditions/:jobId/audio"}, "fullDescription": {"text": "`studio/apps/web/src/routes/projects.ts` declares `GET /:id/narration/auditions/:jobId/audio` 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-15549d647cc6ca82", "name": "Unused endpoint: POST /:id/narration/auditions/:jobId/approve", "shortDescription": {"text": "Unused endpoint: POST /:id/narration/auditions/:jobId/approve"}, "fullDescription": {"text": "`studio/apps/web/src/routes/projects.ts` declares `POST /:id/narration/auditions/:jobId/approve` 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-88f7527c474fbbe2", "name": "Unused endpoint: POST /:id/audiobook", "shortDescription": {"text": "Unused endpoint: POST /:id/audiobook"}, "fullDescription": {"text": "`studio/apps/web/src/routes/projects.ts` declares `POST /:id/audiobook` 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-4c1502f5c222d7f4", "name": "Unused endpoint: GET /:id/audiobook/jobs", "shortDescription": {"text": "Unused endpoint: GET /:id/audiobook/jobs"}, "fullDescription": {"text": "`studio/apps/web/src/routes/projects.ts` declares `GET /:id/audiobook/jobs` 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-e4640cc0f147c43e", "name": "Unused endpoint: GET /:id/audiobook/:jobId/download", "shortDescription": {"text": "Unused endpoint: GET /:id/audiobook/:jobId/download"}, "fullDescription": {"text": "`studio/apps/web/src/routes/projects.ts` declares `GET /:id/audiobook/:jobId/download` 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-daba1f2767c4f031", "name": "Unused endpoint: GET /:id/launch/brief", "shortDescription": {"text": "Unused endpoint: GET /:id/launch/brief"}, "fullDescription": {"text": "`studio/apps/web/src/routes/projects.ts` declares `GET /:id/launch/brief` 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-9e4cfdb7efb26d7c", "name": "Unused endpoint: POST /:id/launch/brief", "shortDescription": {"text": "Unused endpoint: POST /:id/launch/brief"}, "fullDescription": {"text": "`studio/apps/web/src/routes/projects.ts` declares `POST /:id/launch/brief` 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-91df8d60000fc013", "name": "Unused endpoint: GET /:id/launch/brief/download", "shortDescription": {"text": "Unused endpoint: GET /:id/launch/brief/download"}, "fullDescription": {"text": "`studio/apps/web/src/routes/projects.ts` declares `GET /:id/launch/brief/download` 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-510795a36dcb9347", "name": "Unused endpoint: POST /:id/outlines", "shortDescription": {"text": "Unused endpoint: POST /:id/outlines"}, "fullDescription": {"text": "`studio/apps/web/src/routes/projects.ts` declares `POST /:id/outlines` 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-7a61c112b611f4bb", "name": "Unused endpoint: DELETE /:id", "shortDescription": {"text": "Unused endpoint: DELETE /:id"}, "fullDescription": {"text": "`studio/apps/web/src/routes/projects.ts` declares `DELETE /:id` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c6642d266d447038", "name": "Unused endpoint: POST /:id/plan", "shortDescription": {"text": "Unused endpoint: POST /:id/plan"}, "fullDescription": {"text": "`studio/apps/web/src/routes/blogs.ts` declares `POST /:id/plan` 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-3d9080588b5f6cc1", "name": "Unused endpoint: GET /:id/posts", "shortDescription": {"text": "Unused endpoint: GET /:id/posts"}, "fullDescription": {"text": "`studio/apps/web/src/routes/blogs.ts` declares `GET /:id/posts` 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-94a4daa5ff1bf840", "name": "Unused endpoint: GET /:id/posts/:postId", "shortDescription": {"text": "Unused endpoint: GET /:id/posts/:postId"}, "fullDescription": {"text": "`studio/apps/web/src/routes/blogs.ts` declares `GET /:id/posts/:postId` 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-cf77e282626d108f", "name": "Unused endpoint: PATCH /:id/posts/:postId", "shortDescription": {"text": "Unused endpoint: PATCH /:id/posts/:postId"}, "fullDescription": {"text": "`studio/apps/web/src/routes/blogs.ts` declares `PATCH /:id/posts/:postId` 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-ac42d30ebb4174e4", "name": "Unused endpoint: POST /:id/posts/:postId/publish", "shortDescription": {"text": "Unused endpoint: POST /:id/posts/:postId/publish"}, "fullDescription": {"text": "`studio/apps/web/src/routes/blogs.ts` declares `POST /:id/posts/:postId/publish` 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-8313cf93c61ffaa6", "name": "Unused endpoint: GET /render", "shortDescription": {"text": "Unused endpoint: GET /render"}, "fullDescription": {"text": "`studio/apps/web/src/routes/health.ts` declares `GET /render` 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-2ff59542e4fccd01", "name": "Unused endpoint: GET /market-dataset", "shortDescription": {"text": "Unused endpoint: GET /market-dataset"}, "fullDescription": {"text": "`studio/apps/web/src/routes/health.ts` declares `GET /market-dataset` 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-06ac0f2c74855539", "name": "Unused endpoint: POST /market-dataset/refresh", "shortDescription": {"text": "Unused endpoint: POST /market-dataset/refresh"}, "fullDescription": {"text": "`studio/apps/web/src/routes/health.ts` declares `POST /market-dataset/refresh` 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-ec4a5d55b1200f49", "name": "Unused endpoint: GET /queries", "shortDescription": {"text": "Unused endpoint: GET /queries"}, "fullDescription": {"text": "`studio/apps/web/src/routes/scout.ts` declares `GET /queries` 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-edbbebc9081b938c", "name": "Unused endpoint: GET /projects/:projectId/findings", "shortDescription": {"text": "Unused endpoint: GET /projects/:projectId/findings"}, "fullDescription": {"text": "`studio/apps/web/src/routes/scout.ts` declares `GET /projects/:projectId/findings` 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-0857ad98f7fbb9b7", "name": "Unused endpoint: POST /queries", "shortDescription": {"text": "Unused endpoint: POST /queries"}, "fullDescription": {"text": "`studio/apps/web/src/routes/scout.ts` declares `POST /queries` 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-fd1dc91abf32142d", "name": "Unused endpoint: GET /me", "shortDescription": {"text": "Unused endpoint: GET /me"}, "fullDescription": {"text": "`studio/apps/web/src/routes/account.ts` declares `GET /me` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8e05e0e489fc31a6", "name": "Unused endpoint: GET /elevenlabs-key", "shortDescription": {"text": "Unused endpoint: GET /elevenlabs-key"}, "fullDescription": {"text": "`studio/apps/web/src/routes/account.ts` declares `GET /elevenlabs-key` 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-6221447d7614808a", "name": "Unused endpoint: GET /emdash-token", "shortDescription": {"text": "Unused endpoint: GET /emdash-token"}, "fullDescription": {"text": "`studio/apps/web/src/routes/account.ts` declares `GET /emdash-token` 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-e4fb734252700a91", "name": "Unused endpoint: PUT /emdash-token", "shortDescription": {"text": "Unused endpoint: PUT /emdash-token"}, "fullDescription": {"text": "`studio/apps/web/src/routes/account.ts` declares `PUT /emdash-token` 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-3367914cf21ed509", "name": "Unused endpoint: PUT /elevenlabs-key", "shortDescription": {"text": "Unused endpoint: PUT /elevenlabs-key"}, "fullDescription": {"text": "`studio/apps/web/src/routes/account.ts` declares `PUT /elevenlabs-key` 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-10c3d3625395f13b", "name": "Unused endpoint: GET /postpilot-guides", "shortDescription": {"text": "Unused endpoint: GET /postpilot-guides"}, "fullDescription": {"text": "`studio/apps/web/src/routes/voices.ts` declares `GET /postpilot-guides` 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-bdf24efccd645f7c", "name": "Unused endpoint: POST /import-postpilot", "shortDescription": {"text": "Unused endpoint: POST /import-postpilot"}, "fullDescription": {"text": "`studio/apps/web/src/routes/voices.ts` declares `POST /import-postpilot` 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/24112"}, "properties": {"repository": "aloewright/spooool", "repoUrl": "https://github.com/aloewright/spooool", "branch": "main"}, "results": [{"ruleId": "scanner-add0cfd9dadcfa5f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 studio/apps/web/src/index.ts:74"}, "properties": {"repobilityId": "341defcbc25dc17d", "scanner": "scanner-primary", "fingerprint": "add0cfd9dadcfa5f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5d8ac109a91726a4", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 studio/apps/web/src/containers/render-worker.ts:22"}, "properties": {"repobilityId": "4c500dea8988eda5", "scanner": "scanner-primary", "fingerprint": "5d8ac109a91726a4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5be069c42027f559", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 studio/apps/web/client/components/panels/OutlineBuilder.tsx:372"}, "properties": {"repobilityId": "499a175a9049f9ca", "scanner": "scanner-primary", "fingerprint": "5be069c42027f559", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-59bf11936896a97a", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 studio/apps/web/client/components/panels/PublishPanel.tsx:448"}, "properties": {"repobilityId": "b03894ab2ab25123", "scanner": "scanner-primary", "fingerprint": "59bf11936896a97a", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-ae8f9a7d00cb38b6", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 studio/apps/web/client/components/panels/FullBookPanel.tsx:251"}, "properties": {"repobilityId": "0ba226589798c5b2", "scanner": "scanner-primary", "fingerprint": "ae8f9a7d00cb38b6", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d36bd8b73e9c2917", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 studio/apps/web/client/components/studio/BreadcrumbPill.tsx:35"}, "properties": {"repobilityId": "83ff4d3de211405e", "scanner": "scanner-primary", "fingerprint": "d36bd8b73e9c2917", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a30a80a8a2afc953", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 studio/apps/web/client/components/studio/SideDrawer.tsx:399"}, "properties": {"repobilityId": "66e5971f94fffa8c", "scanner": "scanner-primary", "fingerprint": "a30a80a8a2afc953", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-44e2b41331795d18", "level": "note", "message": {"text": "\"active\" state uses light bg in a dark theme \u2014 studio/apps/web/client/components/studio/SideDrawer.tsx:582"}, "properties": {"repobilityId": "d3cd7b4254b49f6d", "scanner": "scanner-primary", "fingerprint": "44e2b41331795d18", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.active-light-bg"]}}, {"ruleId": "scanner-71cee71526e94e20", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 studio/apps/web/client/components/workspace/outline-rail.tsx:147"}, "properties": {"repobilityId": "1a02b28e2107d188", "scanner": "scanner-primary", "fingerprint": "71cee71526e94e20", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f67a384479fb351b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 studio/apps/web/client/routes/admin.tsx:326"}, "properties": {"repobilityId": "8e98741f440d0c37", "scanner": "scanner-primary", "fingerprint": "f67a384479fb351b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-5b03c01f5e194ee2", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 studio/apps/web/client/routes/_hub.$projectId.chapters.$chapterId.tsx:110"}, "properties": {"repobilityId": "16ac85bb890eabc2", "scanner": "scanner-primary", "fingerprint": "5b03c01f5e194ee2", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d2a6ab56cd246257", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 studio/apps/web/client/routes/_hub.$projectId.outline.tsx:348"}, "properties": {"repobilityId": "c0ee926ebb4dad60", "scanner": "scanner-primary", "fingerprint": "d2a6ab56cd246257", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c646d203694141fa", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 studio/apps/web/client/routes/_hub.index.tsx:152"}, "properties": {"repobilityId": "c13a6b8cc61041c1", "scanner": "scanner-primary", "fingerprint": "c646d203694141fa", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-08285bd8c7f774dd", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 studio/apps/web/client/routes/_hub.scripts.$scriptId.index.tsx:120"}, "properties": {"repobilityId": "820e9efa70debace", "scanner": "scanner-primary", "fingerprint": "08285bd8c7f774dd", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f2a38f479159d383", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 studio/apps/web/client/routes/_hub.compose-blog.tsx:360"}, "properties": {"repobilityId": "c25c527da1ddecd1", "scanner": "scanner-primary", "fingerprint": "f2a38f479159d383", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ea0d56adc99f85c6", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 studio/apps/web/client/routes/_hub.blogs.$blogId.index.tsx:152"}, "properties": {"repobilityId": "48079ffbb8317a25", "scanner": "scanner-primary", "fingerprint": "ea0d56adc99f85c6", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-fc7824c7ef35c0a4", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 studio/apps/web/client/routes/account.tsx:112"}, "properties": {"repobilityId": "1e2afc984ecb515e", "scanner": "scanner-primary", "fingerprint": "fc7824c7ef35c0a4", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-727c8c2ca4a682eb", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 studio/services/render-worker/src/index.ts:503"}, "properties": {"repobilityId": "7a5d8a4a65e0015f", "scanner": "scanner-primary", "fingerprint": "727c8c2ca4a682eb", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7b007e467d415a47", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 tests/e2e/record.spec.ts:105"}, "properties": {"repobilityId": "2cd005aa3b4ed766", "scanner": "scanner-primary", "fingerprint": "7b007e467d415a47", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-6200e876b914bd6e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/workers/index.ts:184"}, "properties": {"repobilityId": "e1439d157c9cbae2", "scanner": "scanner-primary", "fingerprint": "6200e876b914bd6e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-27bc76225344011e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/workers/create-cma.ts:72"}, "properties": {"repobilityId": "a50710ba59794509", "scanner": "scanner-primary", "fingerprint": "27bc76225344011e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-149924fc7a3407da", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/workers/create-tools.ts:168"}, "properties": {"repobilityId": "1d1b105e71744314", "scanner": "scanner-primary", "fingerprint": "149924fc7a3407da", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-87158a77f4d91bf3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/workers/composer-agent-do.ts:174"}, "properties": {"repobilityId": "067810a9dd24834c", "scanner": "scanner-primary", "fingerprint": "87158a77f4d91bf3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e42e9dedc1eff531", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/workers/polar-webhook.ts:403"}, "properties": {"repobilityId": "d377d37b900d95bb", "scanner": "scanner-primary", "fingerprint": "e42e9dedc1eff531", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-dd26c8210dd45386", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/workers/dmca.ts:99"}, "properties": {"repobilityId": "565b4de537cfb600", "scanner": "scanner-primary", "fingerprint": "dd26c8210dd45386", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-19cbd90fa4ea29af", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/workers/account.ts:367"}, "properties": {"repobilityId": "6a7208bc52f39960", "scanner": "scanner-primary", "fingerprint": "19cbd90fa4ea29af", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b92a49d2af6aca02", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/frontend/recorder/DevicePermission.tsx:145"}, "properties": {"repobilityId": "8c2f8189ed947345", "scanner": "scanner-primary", "fingerprint": "b92a49d2af6aca02", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-828e02565d2a8370", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/frontend/recorder/WaitingForDevices.tsx:31"}, "properties": {"repobilityId": "2efd5c6f3e6825ca", "scanner": "scanner-primary", "fingerprint": "828e02565d2a8370", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1ab191d6a5a1b941", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/frontend/recorder/helpers/transcribe-video.ts:1"}, "properties": {"repobilityId": "c4d4d13011a5f57b", "scanner": "scanner-primary", "fingerprint": "1ab191d6a5a1b941", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-61f6fa73eb3ddf53", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/frontend/recorder/helpers/start-media-recorder.ts:62"}, "properties": {"repobilityId": "e18b28b714f1fd45", "scanner": "scanner-primary", "fingerprint": "61f6fa73eb3ddf53", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-acd05d74c37589c8", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/frontend/recorder/components/UseThisTake.tsx:101"}, "properties": {"repobilityId": "3fe4d5f611bec454", "scanner": "scanner-primary", "fingerprint": "acd05d74c37589c8", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-723af8f47b57e19a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/frontend/recorder/components/EnsureBrowserSupport.tsx:20"}, "properties": {"repobilityId": "e1d333f10e059adf", "scanner": "scanner-primary", "fingerprint": "723af8f47b57e19a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7e5188708495c8b8", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/frontend/recorder/remotion/scenes/Title/Title.tsx:36"}, "properties": {"repobilityId": "8415b0fb5216dbee", "scanner": "scanner-primary", "fingerprint": "7e5188708495c8b8", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-c58452a871c729ea", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/frontend/recorder/remotion/layout/get-webcam-size.ts:4"}, "properties": {"repobilityId": "5ec5caefb9b30025", "scanner": "scanner-primary", "fingerprint": "c58452a871c729ea", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-bfede4a9deb34e53", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/frontend/recorder/remotion/captions/boxed/components/TransitionBetweenSubtitles.tsx:17"}, "properties": {"repobilityId": "8510fc33b2a92594", "scanner": "scanner-primary", "fingerprint": "bfede4a9deb34e53", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-7f008bbf90b37526", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/frontend/recorder/config/endcard.ts:9"}, "properties": {"repobilityId": "2bf70eb838da6b85", "scanner": "scanner-primary", "fingerprint": "7f008bbf90b37526", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-e9ef9e08433f0b23", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 container/render/src/server.ts:166"}, "properties": {"repobilityId": "8cb76cc298eff984", "scanner": "scanner-primary", "fingerprint": "e9ef9e08433f0b23", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9a2e4d0e87d067f4", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 container/render/remotion/scenes/Title/Title.tsx:36"}, "properties": {"repobilityId": "19d9a049d8135e23", "scanner": "scanner-primary", "fingerprint": "9a2e4d0e87d067f4", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-cc70c3e26b246503", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 container/render/remotion/layout/get-webcam-size.ts:4"}, "properties": {"repobilityId": "df3c94bc8abaac62", "scanner": "scanner-primary", "fingerprint": "cc70c3e26b246503", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-a4f84a0f7be360ab", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 container/render/remotion/captions/boxed/components/TransitionBetweenSubtitles.tsx:17"}, "properties": {"repobilityId": "55b9eda8baa23d5d", "scanner": "scanner-primary", "fingerprint": "a4f84a0f7be360ab", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-13709d54da5ea57c", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 container/render/config/endcard.ts:9"}, "properties": {"repobilityId": "7b5cc2b344f3650b", "scanner": "scanner-primary", "fingerprint": "13709d54da5ea57c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-21a8ef7287a807b8", "level": "warning", "message": {"text": "Privileged port 19 in use"}, "properties": {"repobilityId": "a6b5b06deac36eac", "scanner": "scanner-primary", "fingerprint": "21a8ef7287a807b8", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/homunculus/instincts/inherited/spooool-instincts.yaml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-0fa31367c135b8e4", "level": "warning", "message": {"text": "Privileged port 52 in use"}, "properties": {"repobilityId": "2b6877fa37212075", "scanner": "scanner-primary", "fingerprint": "0fa31367c135b8e4", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/homunculus/instincts/inherited/spooool-instincts.yaml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-b80cf102c9d91764", "level": "warning", "message": {"text": "Dockerfile runs as root: studio/services/render-worker/Dockerfile"}, "properties": {"repobilityId": "e43cec15507f6511", "scanner": "scanner-primary", "fingerprint": "b80cf102c9d91764", "layer": "hardware", "severity": "medium", "confidence": 1.0, "tags": ["security", "container"]}}, {"ruleId": "scanner-52d1cab4b1b17e23", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: node:22-bookworm-slim"}, "properties": {"repobilityId": "24eca1db8985b3d1", "scanner": "scanner-primary", "fingerprint": "52d1cab4b1b17e23", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "studio/services/render-worker/Dockerfile"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-29aadc2f22780122", "level": "warning", "message": {"text": "Dockerfile runs as root: container/render/Dockerfile"}, "properties": {"repobilityId": "cc6495ff4a1f2931", "scanner": "scanner-primary", "fingerprint": "29aadc2f22780122", "layer": "hardware", "severity": "medium", "confidence": 1.0, "tags": ["security", "container"]}}, {"ruleId": "scanner-330bb5277f6d51ce", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: node:22-bookworm-slim"}, "properties": {"repobilityId": "34dff8d054942baa", "scanner": "scanner-primary", "fingerprint": "330bb5277f6d51ce", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "container/render/Dockerfile"}, "region": {"startLine": 4}}}]}, {"ruleId": "scanner-63f904cb664c0a9d", "level": "error", "message": {"text": "Possible secret in studio/tests/integration/narration.test.ts"}, "properties": {"repobilityId": "fbac487cd49bbdd9", "scanner": "scanner-primary", "fingerprint": "63f904cb664c0a9d", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "studio/tests/integration/narration.test.ts"}, "region": {"startLine": 61}}}]}, {"ruleId": "scanner-cb8c09cb474ddc28", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in studio/apps/web/client/components/panels/PublishPanel.tsx:448"}, "properties": {"repobilityId": "205b8421dab42489", "scanner": "scanner-primary", "fingerprint": "cb8c09cb474ddc28", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "studio/apps/web/client/components/panels/PublishPanel.tsx"}, "region": {"startLine": 448}}}]}, {"ruleId": "scanner-49c3efffe39c68df", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in studio/services/render-worker/src/index.ts:1"}, "properties": {"repobilityId": "d903ab3a9516cb53", "scanner": "scanner-primary", "fingerprint": "49c3efffe39c68df", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "studio/services/render-worker/src/index.ts"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-8c8935f6863fd48a", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/check-no-direct-providers.test.mjs:5"}, "properties": {"repobilityId": "2508a45a008123b6", "scanner": "scanner-primary", "fingerprint": "8c8935f6863fd48a", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/check-no-direct-providers.test.mjs"}, "region": {"startLine": 5}}}]}, {"ruleId": "scanner-744e35a05dd270ed", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/sync-doppler-secrets.mjs:42"}, "properties": {"repobilityId": "b8fedf5b130a9ba9", "scanner": "scanner-primary", "fingerprint": "744e35a05dd270ed", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/sync-doppler-secrets.mjs"}, "region": {"startLine": 42}}}]}, {"ruleId": "scanner-29f92161c1f515aa", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in .cursor/hooks/lib/hindsight-client.mjs:4"}, "properties": {"repobilityId": "bbe87254d6cb9fdd", "scanner": "scanner-primary", "fingerprint": "29f92161c1f515aa", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".cursor/hooks/lib/hindsight-client.mjs"}, "region": {"startLine": 4}}}]}, {"ruleId": "scanner-da7abb4b8d0759e4", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in container/render/src/encode.ts:6"}, "properties": {"repobilityId": "6832c61ba28ab8f2", "scanner": "scanner-primary", "fingerprint": "da7abb4b8d0759e4", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "container/render/src/encode.ts"}, "region": {"startLine": 6}}}]}, {"ruleId": "scanner-1e912da7ad42a994", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "508c77f88f1840cc", "scanner": "scanner-primary", "fingerprint": "1e912da7ad42a994", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "studio/.github/workflows/render-worker-image.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-bc9f3e610f8f12c9", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "73ab17c5f6f1f4fe", "scanner": "scanner-primary", "fingerprint": "bc9f3e610f8f12c9", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/e2e-staging.yml"}, "region": {"startLine": 36}}}]}, {"ruleId": "scanner-bc9f3e610f8f12c9", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "24cf179d69ce35a3", "scanner": "scanner-primary", "fingerprint": "bc9f3e610f8f12c9", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/e2e-staging.yml"}, "region": {"startLine": 44}}}]}, {"ruleId": "scanner-bc9f3e610f8f12c9", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "a51a4ad4f1e5b495", "scanner": "scanner-primary", "fingerprint": "bc9f3e610f8f12c9", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/e2e-staging.yml"}, "region": {"startLine": 64}}}]}, {"ruleId": "scanner-376ceef717f12640", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "a073727da30898b1", "scanner": "scanner-primary", "fingerprint": "376ceef717f12640", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/load-test.yml"}, "region": {"startLine": 54}}}]}, {"ruleId": "scanner-376ceef717f12640", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "b87e79f5a6aeb16b", "scanner": "scanner-primary", "fingerprint": "376ceef717f12640", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/load-test.yml"}, "region": {"startLine": 86}}}]}, {"ruleId": "scanner-40dba48ffd6bded2", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "1538935628a25bd0", "scanner": "scanner-primary", "fingerprint": "40dba48ffd6bded2", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/d1-backup.yml"}, "region": {"startLine": 35}}}]}, {"ruleId": "scanner-40dba48ffd6bded2", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "adac27da467cf64d", "scanner": "scanner-primary", "fingerprint": "40dba48ffd6bded2", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/d1-backup.yml"}, "region": {"startLine": 38}}}]}, {"ruleId": "scanner-141b30a41e03817b", "level": "note", "message": {"text": "No license file detected"}, "properties": {"repobilityId": "36ea7a899ec37f5d", "scanner": "scanner-primary", "fingerprint": "141b30a41e03817b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["license", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-e97c7eb2eee0131b", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: studio/apps/web/package.json"}, "properties": {"repobilityId": "6f1600baccd4be86", "scanner": "scanner-primary", "fingerprint": "e97c7eb2eee0131b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "studio/apps/web/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-23ed299d662eeb0a", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: studio/services/render-worker/package.json"}, "properties": {"repobilityId": "23d4b7091e0aa0d7", "scanner": "scanner-primary", "fingerprint": "23ed299d662eeb0a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "studio/services/render-worker/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "d6203fc7d7cbcdb7", "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": "610b2b825cca624a", "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": "46f02007d47cffa3", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-b9088664ace7f748", "level": "note", "message": {"text": "Composite production-readiness gap"}, "properties": {"repobilityId": "2e049ccf17f6bbdc", "scanner": "scanner-primary", "fingerprint": "b9088664ace7f748", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["production-readiness", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-749d4bc1bd66df5f", "level": "warning", "message": {"text": "Agent instructions exist but release-hardening basics are missing"}, "properties": {"repobilityId": "324ab8fc3d9cdfde", "scanner": "scanner-primary", "fingerprint": "749d4bc1bd66df5f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-fb639963cbb8f792", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .cursor/hooks.json"}, "properties": {"repobilityId": "d98fbd421541a70f", "scanner": "scanner-primary", "fingerprint": "fb639963cbb8f792", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "cursor_rule"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".cursor/hooks.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-d80d4cd519f1e750", "level": "none", "message": {"text": "Commented-code block (8 lines) in studio/vitest.config.ts:5"}, "properties": {"repobilityId": "636daa977909a866", "scanner": "scanner-primary", "fingerprint": "d80d4cd519f1e750", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-125b576edd41e459", "level": "note", "message": {"text": "Legacy-named symbol `preorder_copy` in studio/tests/unit/gtm-brief.test.ts:78"}, "properties": {"repobilityId": "56eb924dcaec94d0", "scanner": "scanner-primary", "fingerprint": "125b576edd41e459", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-b732b8d0d9961b0c", "level": "note", "message": {"text": "Legacy-named symbol `preorder_copy` in studio/tests/integration/launch.test.ts:51"}, "properties": {"repobilityId": "741241393ebbd170", "scanner": "scanner-primary", "fingerprint": "b732b8d0d9961b0c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-06fc5285885e31c0", "level": "none", "message": {"text": "Commented-code block (5 lines) in studio/apps/web/vite.config.ts:19"}, "properties": {"repobilityId": "5d1a2e4f94f42e63", "scanner": "scanner-primary", "fingerprint": "06fc5285885e31c0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-aa071c8654962d8b", "level": "none", "message": {"text": "Commented-code block (5 lines) in studio/apps/web/src/index.ts:146"}, "properties": {"repobilityId": "45636bf57f1aa89d", "scanner": "scanner-primary", "fingerprint": "aa071c8654962d8b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a2d8167e462e92fc", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 studio/apps/web/src/index.ts:134"}, "properties": {"repobilityId": "283d5885f7d052a0", "scanner": "scanner-primary", "fingerprint": "a2d8167e462e92fc", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ad48c1c18bca5cca", "level": "none", "message": {"text": "Commented-code block (7 lines) in studio/apps/web/src/spooool-session.ts:6"}, "properties": {"repobilityId": "dd0b7118427fb792", "scanner": "scanner-primary", "fingerprint": "ad48c1c18bca5cca", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ef65af2793058912", "level": "none", "message": {"text": "Commented-code block (7 lines) in studio/apps/web/src/shared/app-base.ts:1"}, "properties": {"repobilityId": "0a6769332b15516a", "scanner": "scanner-primary", "fingerprint": "ef65af2793058912", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a41487ed985f0f48", "level": "none", "message": {"text": "Commented-code block (5 lines) in studio/apps/web/src/shared/beat-plan.ts:1"}, "properties": {"repobilityId": "e33acf2dcd723f04", "scanner": "scanner-primary", "fingerprint": "a41487ed985f0f48", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a6fbcc8993f752a4", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 studio/apps/web/src/workflows/book-export.ts:145"}, "properties": {"repobilityId": "0105d4c628ffa51e", "scanner": "scanner-primary", "fingerprint": "a6fbcc8993f752a4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-edb6d8ecc78e0a02", "level": "note", "message": {"text": "Legacy-named symbol `eleven_multilingual_v2` in studio/apps/web/src/workflows/audiobook-mastering.ts:221"}, "properties": {"repobilityId": "7fb0b48fe650612f", "scanner": "scanner-primary", "fingerprint": "edb6d8ecc78e0a02", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-f0056b01e10cdb73", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 studio/apps/web/src/workflows/audiobook-mastering.ts:194"}, "properties": {"repobilityId": "6cff0bdf36d54f07", "scanner": "scanner-primary", "fingerprint": "f0056b01e10cdb73", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-69840ddaeeac26ef", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 studio/apps/web/src/workflows/gtm-brief.ts:145"}, "properties": {"repobilityId": "8d271b96dea3f6b0", "scanner": "scanner-primary", "fingerprint": "69840ddaeeac26ef", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2f5f149c8af77cf0", "level": "note", "message": {"text": "Legacy-named symbol `preorder_copy` in studio/apps/web/src/skills/launch/gtm.ts:12"}, "properties": {"repobilityId": "cf644ba874671082", "scanner": "scanner-primary", "fingerprint": "2f5f149c8af77cf0", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-d0c206fae719eaa1", "level": "note", "message": {"text": "Legacy-named symbol `eleven_multilingual_v2` in studio/apps/web/src/routes/projects.ts:1083"}, "properties": {"repobilityId": "2962e2460b1811db", "scanner": "scanner-primary", "fingerprint": "d0c206fae719eaa1", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-efe8697539a06ac9", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 studio/apps/web/src/routes/projects.ts:1071"}, "properties": {"repobilityId": "d02105db9006a142", "scanner": "scanner-primary", "fingerprint": "efe8697539a06ac9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-de4b4c0aa17154e1", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 studio/apps/web/src/routes/health.ts:16"}, "properties": {"repobilityId": "656fe1da7cfa286e", "scanner": "scanner-primary", "fingerprint": "de4b4c0aa17154e1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-7b4550560d430ade", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 studio/apps/web/src/routes/voices.ts:181"}, "properties": {"repobilityId": "3b48fba7b2067c15", "scanner": "scanner-primary", "fingerprint": "7b4550560d430ade", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-7991f2fe34bb253d", "level": "none", "message": {"text": "Commented-code block (5 lines) in studio/apps/web/client/components/studio/scene-bits.tsx:14"}, "properties": {"repobilityId": "bf9d202301fefbdb", "scanner": "scanner-primary", "fingerprint": "7991f2fe34bb253d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-05aadc7cd0b5eb35", "level": "none", "message": {"text": "Commented-code block (6 lines) in studio/apps/web/client/components/chat/aloysius-sidecar.tsx:20"}, "properties": {"repobilityId": "e108505c9f040b69", "scanner": "scanner-primary", "fingerprint": "05aadc7cd0b5eb35", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-087f2738e26c9786", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 studio/apps/web/client/components/chat/aloysius-sidecar.tsx:23"}, "properties": {"repobilityId": "fa53e5faf12f5179", "scanner": "scanner-primary", "fingerprint": "087f2738e26c9786", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-489acc09a18c48fa", "level": "note", "message": {"text": "Legacy-named symbol `preorder_copy` in studio/apps/web/client/lib/api.ts:412"}, "properties": {"repobilityId": "40625943d11068e2", "scanner": "scanner-primary", "fingerprint": "489acc09a18c48fa", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-574b16e87eb57e39", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 studio/apps/web/client/lib/api.ts:11"}, "properties": {"repobilityId": "0abce48587eeaeee", "scanner": "scanner-primary", "fingerprint": "574b16e87eb57e39", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-7f99ebc47982272a", "level": "none", "message": {"text": "Commented-code block (5 lines) in studio/apps/web/client/routes/__root.tsx:30"}, "properties": {"repobilityId": "d9f3deb30861c919", "scanner": "scanner-primary", "fingerprint": "7f99ebc47982272a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7602886cce0d73b8", "level": "none", "message": {"text": "Commented-code block (6 lines) in tests/load/watch.k6.js:3"}, "properties": {"repobilityId": "93b5c5a94a165fc9", "scanner": "scanner-primary", "fingerprint": "7602886cce0d73b8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3c793fef5098bd6c", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/load/upload.k6.js:3"}, "properties": {"repobilityId": "4ed7e1374dc25752", "scanner": "scanner-primary", "fingerprint": "3c793fef5098bd6c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6d83df7bb8291cb6", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/e2e/record.spec.ts:104"}, "properties": {"repobilityId": "ddffad6ae951f5b9", "scanner": "scanner-primary", "fingerprint": "6d83df7bb8291cb6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5f19b3925a539e96", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/e2e/upload.spec.ts:9"}, "properties": {"repobilityId": "44726f227931aa93", "scanner": "scanner-primary", "fingerprint": "5f19b3925a539e96", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-64dbf6d359cfcac7", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/check-no-direct-providers.test.mjs:56"}, "properties": {"repobilityId": "885875b39ae5be30", "scanner": "scanner-primary", "fingerprint": "64dbf6d359cfcac7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-aa84125610e0abb2", "level": "none", "message": {"text": "Commented-code block (6 lines) in scripts/check-no-direct-providers.mjs:2"}, "properties": {"repobilityId": "48e56812e6e15187", "scanner": "scanner-primary", "fingerprint": "aa84125610e0abb2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f1d9072695e98e3f", "level": "none", "message": {"text": "Commented-code block (5 lines) in scripts/sync-doppler-secrets.mjs:9"}, "properties": {"repobilityId": "ee726abdd4a6ac63", "scanner": "scanner-primary", "fingerprint": "f1d9072695e98e3f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-63acdb6f0759c236", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/workers/edge-cache.ts:7"}, "properties": {"repobilityId": "adcf45e6ca8bb17f", "scanner": "scanner-primary", "fingerprint": "63acdb6f0759c236", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-432a38bb9df213d5", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/workers/index.ts:112"}, "properties": {"repobilityId": "a5008d2735154630", "scanner": "scanner-primary", "fingerprint": "432a38bb9df213d5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1e555f34e2474c57", "level": "none", "message": {"text": "Commented-code block (13 lines) in src/workers/upload-validation.ts:29"}, "properties": {"repobilityId": "0dbde7b049fd1770", "scanner": "scanner-primary", "fingerprint": "1e555f34e2474c57", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7628c93fba62e69f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/workers/create.test.ts:75"}, "properties": {"repobilityId": "11ed7984538dc2fe", "scanner": "scanner-primary", "fingerprint": "7628c93fba62e69f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-db7d7cc82576543a", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/workers/create-cma.ts:7"}, "properties": {"repobilityId": "b084b995bb797391", "scanner": "scanner-primary", "fingerprint": "db7d7cc82576543a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-05e915e96ec2fe86", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/workers/tags.ts:3"}, "properties": {"repobilityId": "ff124be4f569a0b4", "scanner": "scanner-primary", "fingerprint": "05e915e96ec2fe86", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d09b4ba05cd9b354", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/workers/email.ts:5"}, "properties": {"repobilityId": "130c2568040c4127", "scanner": "scanner-primary", "fingerprint": "d09b4ba05cd9b354", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-706a59b18f072e2f", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/workers/related.ts:4"}, "properties": {"repobilityId": "dd37f93fd01805a9", "scanner": "scanner-primary", "fingerprint": "706a59b18f072e2f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9afc4ef1c338a7be", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/workers/rum.test.ts:27"}, "properties": {"repobilityId": "badbab1c51baadfe", "scanner": "scanner-primary", "fingerprint": "9afc4ef1c338a7be", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b3c7ecabb12f43e7", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/workers/lifecycle.ts:1"}, "properties": {"repobilityId": "855b4a66f98c4a3f", "scanner": "scanner-primary", "fingerprint": "b3c7ecabb12f43e7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-504fdd041c792306", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/workers/spam-filter.ts:85"}, "properties": {"repobilityId": "ab71fc0274a30e21", "scanner": "scanner-primary", "fingerprint": "504fdd041c792306", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-058087b4cc3c3938", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/workers/studio.ts:1"}, "properties": {"repobilityId": "92b194c648a296ac", "scanner": "scanner-primary", "fingerprint": "058087b4cc3c3938", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2f803719fbb129bb", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/workers/rate-limit.ts:5"}, "properties": {"repobilityId": "3d0d629712142d3b", "scanner": "scanner-primary", "fingerprint": "2f803719fbb129bb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f124c5eba3036a3b", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/workers/create-tools.ts:102"}, "properties": {"repobilityId": "01df6896997cb709", "scanner": "scanner-primary", "fingerprint": "f124c5eba3036a3b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-749d85cf91be6eec", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/workers/account.test.ts:264"}, "properties": {"repobilityId": "55df9d7fb1928cc4", "scanner": "scanner-primary", "fingerprint": "749d85cf91be6eec", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2a0c4dcd70d0b3ed", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/workers/encoding.ts:29"}, "properties": {"repobilityId": "28a273e16b81aab6", "scanner": "scanner-primary", "fingerprint": "2a0c4dcd70d0b3ed", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-8adf5aa18dee7dcc", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/workers/feed-item.ts:49"}, "properties": {"repobilityId": "56abf5c90c92b045", "scanner": "scanner-primary", "fingerprint": "8adf5aa18dee7dcc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ef8787767d726498", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/workers/search.ts:32"}, "properties": {"repobilityId": "070cd56fa9b75743", "scanner": "scanner-primary", "fingerprint": "ef8787767d726498", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d2c481384073115e", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/workers/composer-agent-do.ts:259"}, "properties": {"repobilityId": "4bb0a94ce22fc77d", "scanner": "scanner-primary", "fingerprint": "d2c481384073115e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2f98979d9dc19e81", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/workers/video-meta-cache.test.ts:89"}, "properties": {"repobilityId": "112b94522cc6e6ae", "scanner": "scanner-primary", "fingerprint": "2f98979d9dc19e81", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9486fc64075f0c62", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/workers/encoder-container.ts:1"}, "properties": {"repobilityId": "c91261debdfaf0f0", "scanner": "scanner-primary", "fingerprint": "9486fc64075f0c62", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-764605a48437a9fa", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/workers/polar-webhook.ts:4"}, "properties": {"repobilityId": "475f8831e24885aa", "scanner": "scanner-primary", "fingerprint": "764605a48437a9fa", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-47a23b0a4d343489", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/workers/storage-quota.ts:3"}, "properties": {"repobilityId": "feebde15dfbf2ceb", "scanner": "scanner-primary", "fingerprint": "47a23b0a4d343489", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-eafe87353c3840ea", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/workers/monetize.ts:3"}, "properties": {"repobilityId": "05f9cdea13df737c", "scanner": "scanner-primary", "fingerprint": "eafe87353c3840ea", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c3294e2066938dc7", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/workers/embed-page.ts:1"}, "properties": {"repobilityId": "de574d9b7fddbc0a", "scanner": "scanner-primary", "fingerprint": "c3294e2066938dc7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2840cb8061bcadd7", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/workers/embed-page.ts:20"}, "properties": {"repobilityId": "697327d2d8c5023e", "scanner": "scanner-primary", "fingerprint": "2840cb8061bcadd7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ba025d0f46534bbf", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/workers/roles.test.ts:193"}, "properties": {"repobilityId": "114fe603fec06160", "scanner": "scanner-primary", "fingerprint": "ba025d0f46534bbf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-81db997e6b5a4380", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/workers/costs.ts:3"}, "properties": {"repobilityId": "af05966dabd210ef", "scanner": "scanner-primary", "fingerprint": "81db997e6b5a4380", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bb220fc4ce6a28d9", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/workers/create-tools.test.ts:72"}, "properties": {"repobilityId": "1c65323c8d27aa1a", "scanner": "scanner-primary", "fingerprint": "bb220fc4ce6a28d9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f17a984e83f6c790", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/workers/dmca.ts:1"}, "properties": {"repobilityId": "2e19c1c363780004", "scanner": "scanner-primary", "fingerprint": "f17a984e83f6c790", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-79ed485b49386016", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/workers/trending-cache.ts:1"}, "properties": {"repobilityId": "24d56e34e0ce2585", "scanner": "scanner-primary", "fingerprint": "79ed485b49386016", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-562885845347002e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/workers/videos.test.ts:66"}, "properties": {"repobilityId": "b082d2d13b1b403b", "scanner": "scanner-primary", "fingerprint": "562885845347002e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ea7a90d0a960e3ab", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/workers/create-cma.test.ts:3"}, "properties": {"repobilityId": "f55cedfb262e80fb", "scanner": "scanner-primary", "fingerprint": "ea7a90d0a960e3ab", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2efc1b50bee62c1d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/workers/composer-agent-do.test.ts:74"}, "properties": {"repobilityId": "3ddae939d3c2d431", "scanner": "scanner-primary", "fingerprint": "2efc1b50bee62c1d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-18337ee6f8e371f0", "level": "note", "message": {"text": "Legacy-named symbol `u_v1` in src/workers/ai-costs.test.ts:157"}, "properties": {"repobilityId": "42a37a7cc2da971c", "scanner": "scanner-primary", "fingerprint": "18337ee6f8e371f0", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-1401d817f6739cd3", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/workers/og-meta.ts:1"}, "properties": {"repobilityId": "6d700649a5a8f178", "scanner": "scanner-primary", "fingerprint": "1401d817f6739cd3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-244151a37b7a028d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/workers/rate-limit.test.ts:13"}, "properties": {"repobilityId": "bd8bf8748837387e", "scanner": "scanner-primary", "fingerprint": "244151a37b7a028d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-6ccc888ac54cd870", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/workers/render.ts:1"}, "properties": {"repobilityId": "a7020abcdf498c24", "scanner": "scanner-primary", "fingerprint": "6ccc888ac54cd870", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-39eb5d5cdb7d0f2b", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/workers/render-container.ts:1"}, "properties": {"repobilityId": "45cbd36b2e5f7c14", "scanner": "scanner-primary", "fingerprint": "39eb5d5cdb7d0f2b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-df58d0866157f68c", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/workers/account.ts:393"}, "properties": {"repobilityId": "9386f7ac982a27d3", "scanner": "scanner-primary", "fingerprint": "df58d0866157f68c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-df04994eacfb6405", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/workers/account.ts:324"}, "properties": {"repobilityId": "e67ec9d6770a8ed8", "scanner": "scanner-primary", "fingerprint": "df04994eacfb6405", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f627777d7ae42da6", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/workers/watch-history.ts:1"}, "properties": {"repobilityId": "9609e7f92d7a54e2", "scanner": "scanner-primary", "fingerprint": "f627777d7ae42da6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-36ab2655e1226064", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/workers/stream-webhook.workers.test.ts:19"}, "properties": {"repobilityId": "714771d2316bab01", "scanner": "scanner-primary", "fingerprint": "36ab2655e1226064", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3f700a960d3a18e2", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/workers/dmca.test.ts:196"}, "properties": {"repobilityId": "fea15232fa0045c6", "scanner": "scanner-primary", "fingerprint": "3f700a960d3a18e2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c2cc520c3f985a77", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/workers/videos.ts:312"}, "properties": {"repobilityId": "7d25985412e62181", "scanner": "scanner-primary", "fingerprint": "c2cc520c3f985a77", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f1d2e593d231a764", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/workers/canonical-host.ts:3"}, "properties": {"repobilityId": "b4c3e638b265f563", "scanner": "scanner-primary", "fingerprint": "f1d2e593d231a764", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ebe0d88cfa788c50", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/workers/discover.workers.test.ts:6"}, "properties": {"repobilityId": "bc49e4c59032fd69", "scanner": "scanner-primary", "fingerprint": "ebe0d88cfa788c50", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-022066a5adc86cd3", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/workers/moderation.test.ts:163"}, "properties": {"repobilityId": "ecb0e51a31e53c4f", "scanner": "scanner-primary", "fingerprint": "022066a5adc86cd3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-82207223c786e4fe", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/workers/turnstile.ts:26"}, "properties": {"repobilityId": "85f08eced668b5b4", "scanner": "scanner-primary", "fingerprint": "82207223c786e4fe", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c2655d63d96ef985", "level": "none", "message": {"text": "Commented-code block (12 lines) in src/workers/ai-video-consumer.ts:3"}, "properties": {"repobilityId": "b327ca52f30900f1", "scanner": "scanner-primary", "fingerprint": "c2655d63d96ef985", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-800d78b93895eb8d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/workers/ai-video-consumer.ts:10"}, "properties": {"repobilityId": "d36e742b2fac4346", "scanner": "scanner-primary", "fingerprint": "800d78b93895eb8d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-8d1163955244f453", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/workers/stream-upload.ts:3"}, "properties": {"repobilityId": "7eae08ef19cb12b4", "scanner": "scanner-primary", "fingerprint": "8d1163955244f453", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-85ef7fb25ef94aba", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/workers/encoding.test.ts:91"}, "properties": {"repobilityId": "6a603e658d663997", "scanner": "scanner-primary", "fingerprint": "85ef7fb25ef94aba", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b8615abb177024d8", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/workers/create.ts:1"}, "properties": {"repobilityId": "303cde3f550f67a1", "scanner": "scanner-primary", "fingerprint": "b8615abb177024d8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-74864678e15bae44", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/workers/create.ts:168"}, "properties": {"repobilityId": "a3e23f9feb753c8e", "scanner": "scanner-primary", "fingerprint": "74864678e15bae44", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-5f3fb0540f036d1e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/workers/videos.workers.test.ts:18"}, "properties": {"repobilityId": "bb58dc9f5c14ca03", "scanner": "scanner-primary", "fingerprint": "5f3fb0540f036d1e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-762bf47351eaf44c", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/frontend/App.shell.dom.test.tsx:63"}, "properties": {"repobilityId": "a8dd452a1b4e59b0", "scanner": "scanner-primary", "fingerprint": "762bf47351eaf44c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c9bca9fe7eea8dc1", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/frontend/App.tsx:11"}, "properties": {"repobilityId": "24d66d665f043181", "scanner": "scanner-primary", "fingerprint": "c9bca9fe7eea8dc1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8489f94ed583caee", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/frontend/recorder/helpers/transcribe-video.ts:32"}, "properties": {"repobilityId": "0349699299b518cf", "scanner": "scanner-primary", "fingerprint": "8489f94ed583caee", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ae88d30f4ba3778e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/frontend/recorder/helpers/cancel-transcribe.ts:6"}, "properties": {"repobilityId": "08260f756e10c411", "scanner": "scanner-primary", "fingerprint": "ae88d30f4ba3778e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a61126fe4691128d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/frontend/recorder/remotion/captions/editor/CaptionOverlay.tsx:59"}, "properties": {"repobilityId": "70c6845908c60ac3", "scanner": "scanner-primary", "fingerprint": "a61126fe4691128d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a5bf67628ab70e5f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/frontend/recorder/lib/render-jobs.ts:28"}, "properties": {"repobilityId": "3d86a84fbe6000b1", "scanner": "scanner-primary", "fingerprint": "a5bf67628ab70e5f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2f6d0185dd2d9fc0", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/frontend/recorder/actions/fetch-project-folders.ts:6"}, "properties": {"repobilityId": "e3c818ac4d8229e5", "scanner": "scanner-primary", "fingerprint": "2f6d0185dd2d9fc0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-26ec6408d64d1b5b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/frontend/recorder/actions/create-folder.ts:11"}, "properties": {"repobilityId": "f2f700c2bc8890c2", "scanner": "scanner-primary", "fingerprint": "26ec6408d64d1b5b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2099b2fc09a52bc9", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/frontend/pages/Subscriptions.tsx:54"}, "properties": {"repobilityId": "f3122af35ec38752", "scanner": "scanner-primary", "fingerprint": "2099b2fc09a52bc9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-38437166d5b896a0", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/frontend/pages/Onboarding.tsx:73"}, "properties": {"repobilityId": "7e2be9e9daad8623", "scanner": "scanner-primary", "fingerprint": "38437166d5b896a0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0adcf93b8ac15591", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/frontend/pages/Onboarding.tsx:22"}, "properties": {"repobilityId": "93c3d5b5152e0cdd", "scanner": "scanner-primary", "fingerprint": "0adcf93b8ac15591", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-083fb0324861b553", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/frontend/pages/NotFound.tsx:4"}, "properties": {"repobilityId": "051fc7741e1bb12c", "scanner": "scanner-primary", "fingerprint": "083fb0324861b553", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-325dbeda688094b1", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/frontend/pages/Watch.tsx:267"}, "properties": {"repobilityId": "ced5cf5a99e1bf2f", "scanner": "scanner-primary", "fingerprint": "325dbeda688094b1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e54cf5b1ab731b03", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/frontend/pages/AdminStatus.tsx:69"}, "properties": {"repobilityId": "f3f27d4e2793fddd", "scanner": "scanner-primary", "fingerprint": "e54cf5b1ab731b03", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2cb5d14ed9d8a8b0", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/frontend/pages/AccountSettings.tsx:130"}, "properties": {"repobilityId": "8f545b22ebc03c72", "scanner": "scanner-primary", "fingerprint": "2cb5d14ed9d8a8b0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ba449069ae3307bc", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/frontend/pages/Profile.tsx:15"}, "properties": {"repobilityId": "65a127b2868abbec", "scanner": "scanner-primary", "fingerprint": "ba449069ae3307bc", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e80e719c02e05e88", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/frontend/pages/Channel.tsx:89"}, "properties": {"repobilityId": "a996ce93404b1908", "scanner": "scanner-primary", "fingerprint": "e80e719c02e05e88", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b5aef732a19abacf", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/frontend/pages/Payouts.tsx:125"}, "properties": {"repobilityId": "868563138d9e68e5", "scanner": "scanner-primary", "fingerprint": "b5aef732a19abacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d244056ccf38c108", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/frontend/lib/analytics.ts:1"}, "properties": {"repobilityId": "c965a062b9959216", "scanner": "scanner-primary", "fingerprint": "d244056ccf38c108", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f634f3e4d0c45085", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/frontend/lib/onboarding.ts:3"}, "properties": {"repobilityId": "719344b72c3b112d", "scanner": "scanner-primary", "fingerprint": "f634f3e4d0c45085", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-dc5684eccfb56812", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/frontend/lib/auto-advance.ts:1"}, "properties": {"repobilityId": "521b34b71ee4dcf4", "scanner": "scanner-primary", "fingerprint": "dc5684eccfb56812", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-37eec52761b82b93", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/frontend/lib/feeds-client.ts:58"}, "properties": {"repobilityId": "d8b834ca8fc74d41", "scanner": "scanner-primary", "fingerprint": "37eec52761b82b93", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-47ad0781574038a5", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/frontend/lib/sessions.ts:30"}, "properties": {"repobilityId": "d98a0e4abaa9806e", "scanner": "scanner-primary", "fingerprint": "47ad0781574038a5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-719976b3f2da8490", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/frontend/lib/stream-player.tsx:5"}, "properties": {"repobilityId": "6eaa077d7f1bab89", "scanner": "scanner-primary", "fingerprint": "719976b3f2da8490", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d0b3e1f73a8b5cf9", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/frontend/lib/discover-client.ts:37"}, "properties": {"repobilityId": "f34fe78c38bf17a3", "scanner": "scanner-primary", "fingerprint": "d0b3e1f73a8b5cf9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2ec31c44a6513265", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/auth/index.ts:51"}, "properties": {"repobilityId": "0015c8e7d42f5df7", "scanner": "scanner-primary", "fingerprint": "2ec31c44a6513265", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3dc65a7376bdc4a1", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/__mocks__/aws-sdk-client-s3.ts:1"}, "properties": {"repobilityId": "1f8c083c7b0e03c6", "scanner": "scanner-primary", "fingerprint": "3dc65a7376bdc4a1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8aedc36ced91eac7", "level": "none", "message": {"text": "Commented-code block (6 lines) in container/render/src/server.ts:158"}, "properties": {"repobilityId": "c8df63a1582e8e9f", "scanner": "scanner-primary", "fingerprint": "8aedc36ced91eac7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7fedcb8df00783a9", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 container/render/src/server.ts:321"}, "properties": {"repobilityId": "cfb7612469c98402", "scanner": "scanner-primary", "fingerprint": "7fedcb8df00783a9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-6aeb362c88b82687", "level": "none", "message": {"text": "Commented-code block (5 lines) in container/render/src/render.ts:51"}, "properties": {"repobilityId": "6341f6fcfbc25d58", "scanner": "scanner-primary", "fingerprint": "6aeb362c88b82687", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-33e04452f3a6183a", "level": "none", "message": {"text": "Commented-code block (5 lines) in container/render/src/queue.ts:1"}, "properties": {"repobilityId": "c9413ac75677d56d", "scanner": "scanner-primary", "fingerprint": "33e04452f3a6183a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1cdab3ec322ee925", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 container/render/remotion/captions/editor/CaptionOverlay.tsx:59"}, "properties": {"repobilityId": "0b2003a27070ad98", "scanner": "scanner-primary", "fingerprint": "1cdab3ec322ee925", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-89e1a6b443db98ac", "level": "warning", "message": {"text": "Frontend route `/embed/:id` has no Link/navigate to it \u2014 src/frontend/App.tsx"}, "properties": {"repobilityId": "9ece0a0226bb4ffa", "scanner": "scanner-primary", "fingerprint": "89e1a6b443db98ac", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-debcf66658bac4e5", "level": "warning", "message": {"text": "Frontend route `/reset-password` has no Link/navigate to it \u2014 src/frontend/App.tsx"}, "properties": {"repobilityId": "a8f1b87c766cb009", "scanner": "scanner-primary", "fingerprint": "debcf66658bac4e5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-e7b80fa295b68b77", "level": "warning", "message": {"text": "Frontend route `/watch/:id` has no Link/navigate to it \u2014 src/frontend/App.tsx"}, "properties": {"repobilityId": "6472432a2ec75309", "scanner": "scanner-primary", "fingerprint": "e7b80fa295b68b77", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-92e3a69b0c012e64", "level": "warning", "message": {"text": "Frontend route `/record` has no Link/navigate to it \u2014 src/frontend/App.tsx"}, "properties": {"repobilityId": "601f129dc627ccc4", "scanner": "scanner-primary", "fingerprint": "92e3a69b0c012e64", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-088b9bd536d3893a", "level": "warning", "message": {"text": "Frontend route `/create` has no Link/navigate to it \u2014 src/frontend/App.tsx"}, "properties": {"repobilityId": "5e91534c2650adb8", "scanner": "scanner-primary", "fingerprint": "088b9bd536d3893a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-b5eccfe2ea3676ef", "level": "warning", "message": {"text": "Frontend route `/channel/:username` has no Link/navigate to it \u2014 src/frontend/App.tsx"}, "properties": {"repobilityId": "fa6a7b019555e2f3", "scanner": "scanner-primary", "fingerprint": "b5eccfe2ea3676ef", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-5c9c26277c2b012a", "level": "warning", "message": {"text": "Frontend route `/search` has no Link/navigate to it \u2014 src/frontend/App.tsx"}, "properties": {"repobilityId": "4ba3a1a300ba8526", "scanner": "scanner-primary", "fingerprint": "5c9c26277c2b012a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-d6ae107263a1d9bc", "level": "warning", "message": {"text": "Frontend route `/tag/:slug` has no Link/navigate to it \u2014 src/frontend/App.tsx"}, "properties": {"repobilityId": "b10bc6fb845eb7be", "scanner": "scanner-primary", "fingerprint": "d6ae107263a1d9bc", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-190a8b544ef8828d", "level": "warning", "message": {"text": "Frontend route `/admin/moderation` has no Link/navigate to it \u2014 src/frontend/App.tsx"}, "properties": {"repobilityId": "6d22a479431ffee8", "scanner": "scanner-primary", "fingerprint": "190a8b544ef8828d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-718daa5e6abfbf1e", "level": "warning", "message": {"text": "Frontend route `/admin/roles` has no Link/navigate to it \u2014 src/frontend/App.tsx"}, "properties": {"repobilityId": "1dc2445fba82f042", "scanner": "scanner-primary", "fingerprint": "718daa5e6abfbf1e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-c282ec57efa68861", "level": "warning", "message": {"text": "Frontend route `/settings` has no Link/navigate to it \u2014 src/frontend/App.tsx"}, "properties": {"repobilityId": "6a8654238346b45e", "scanner": "scanner-primary", "fingerprint": "c282ec57efa68861", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-81e736b186d0565d", "level": "warning", "message": {"text": "Frontend route `/legal/dmca/counter` has no Link/navigate to it \u2014 src/frontend/App.tsx"}, "properties": {"repobilityId": "3392f0266ff76f3f", "scanner": "scanner-primary", "fingerprint": "81e736b186d0565d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-12e398c327177caa", "level": "warning", "message": {"text": "Frontend route `/dmca-notice/:videoId` has no Link/navigate to it \u2014 src/frontend/App.tsx"}, "properties": {"repobilityId": "f499629a02bf162f", "scanner": "scanner-primary", "fingerprint": "12e398c327177caa", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-1869ffd3b7019d8d", "level": "warning", "message": {"text": "Frontend route `/feeds/:id` has no Link/navigate to it \u2014 src/frontend/pages/FeedView.dom.test.tsx"}, "properties": {"repobilityId": "3a4af0d8bdbb69c0", "scanner": "scanner-primary", "fingerprint": "1869ffd3b7019d8d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-5fbf7cddaa337cb0", "level": "warning", "message": {"text": "Frontend route `/onboarding` has no Link/navigate to it \u2014 src/frontend/App.tsx"}, "properties": {"repobilityId": "2a43e5e24adfa519", "scanner": "scanner-primary", "fingerprint": "5fbf7cddaa337cb0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-e771ec9cffa4009f", "level": "warning", "message": {"text": "Frontend route `/admin/status` has no Link/navigate to it \u2014 src/frontend/App.tsx"}, "properties": {"repobilityId": "070e206248949b0f", "scanner": "scanner-primary", "fingerprint": "e771ec9cffa4009f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-f618e713724eb103", "level": "error", "message": {"text": "JS POST `/api/admin/moderation/:reportId/decision` admin endpoint without auth \u2014 src/workers/moderation.ts:169"}, "properties": {"repobilityId": "e2a37ced751197b3", "scanner": "scanner-primary", "fingerprint": "f618e713724eb103", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.js.admin_unauth"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/workers/moderation.ts"}, "region": {"startLine": 169}}}]}, {"ruleId": "scanner-3b5afc166b12b234", "level": "error", "message": {"text": "JS POST `/api/admin/status/incidents` admin endpoint without auth \u2014 src/workers/status.ts:218"}, "properties": {"repobilityId": "6870d7b815f55517", "scanner": "scanner-primary", "fingerprint": "3b5afc166b12b234", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.js.admin_unauth"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/workers/status.ts"}, "region": {"startLine": 218}}}]}, {"ruleId": "scanner-6cd9b087a4912212", "level": "error", "message": {"text": "JS PUT `/api/admin/status/incidents/:id` admin endpoint without auth \u2014 src/workers/status.ts:242"}, "properties": {"repobilityId": "ea87267ccf503e27", "scanner": "scanner-primary", "fingerprint": "6cd9b087a4912212", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.js.admin_unauth"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/workers/status.ts"}, "region": {"startLine": 242}}}]}, {"ruleId": "scanner-17f46793e092e707", "level": "error", "message": {"text": "JS POST `/api/admin/status/incidents/:id/updates` admin endpoint without auth \u2014 src/workers/status.ts:273"}, "properties": {"repobilityId": "0909a03aca0cb1d8", "scanner": "scanner-primary", "fingerprint": "17f46793e092e707", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.js.admin_unauth"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/workers/status.ts"}, "region": {"startLine": 273}}}]}, {"ruleId": "scanner-b9f760eb9c191810", "level": "error", "message": {"text": "JS POST `/api/admin/status/maintenance` admin endpoint without auth \u2014 src/workers/status.ts:303"}, "properties": {"repobilityId": "53122eddde6edfd9", "scanner": "scanner-primary", "fingerprint": "b9f760eb9c191810", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.js.admin_unauth"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/workers/status.ts"}, "region": {"startLine": 303}}}]}, {"ruleId": "scanner-2755da72eb98f064", "level": "error", "message": {"text": "JS PUT `/api/admin/status/maintenance/:id` admin endpoint without auth \u2014 src/workers/status.ts:320"}, "properties": {"repobilityId": "0af89fb92176a712", "scanner": "scanner-primary", "fingerprint": "2755da72eb98f064", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.js.admin_unauth"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/workers/status.ts"}, "region": {"startLine": 320}}}]}, {"ruleId": "scanner-76d4560158ddd049", "level": "error", "message": {"text": "JS POST `/api/admin/roles` admin endpoint without auth \u2014 src/workers/roles.ts:139"}, "properties": {"repobilityId": "4708a5a1207f8d6a", "scanner": "scanner-primary", "fingerprint": "76d4560158ddd049", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.js.admin_unauth"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/workers/roles.ts"}, "region": {"startLine": 139}}}]}, {"ruleId": "scanner-8d90cbcacedd5617", "level": "error", "message": {"text": "JS DELETE `/api/admin/roles` admin endpoint without auth \u2014 src/workers/roles.ts:159"}, "properties": {"repobilityId": "60b9f7bc75cac8df", "scanner": "scanner-primary", "fingerprint": "8d90cbcacedd5617", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.js.admin_unauth"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/workers/roles.ts"}, "region": {"startLine": 159}}}]}, {"ruleId": "scanner-ce1c24d973895b1f", "level": "error", "message": {"text": "JS POST `/api/admin/dmca/:claimId/decision` admin endpoint without auth \u2014 src/workers/dmca.ts:180"}, "properties": {"repobilityId": "ae42aab6c97cf6ac", "scanner": "scanner-primary", "fingerprint": "ce1c24d973895b1f", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.js.admin_unauth"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/workers/dmca.ts"}, "region": {"startLine": 180}}}]}, {"ruleId": "scanner-2741c6c84fd8b5c8", "level": "error", "message": {"text": "Dangling fetch: GET https://api.openai.com/v1/chat/completions (scripts/check-no-direct-providers.test.mjs:56)"}, "properties": {"repobilityId": "510d31929768eaa5", "scanner": "scanner-primary", "fingerprint": "2741c6c84fd8b5c8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-dc7891b6ecc46680", "level": "error", "message": {"text": "Dangling fetch: GET https://gateway.ai.cloudflare.com/v1/acc/x/compat/chat/completions (scripts/check-no-direct-providers.test.mjs:73)"}, "properties": {"repobilityId": "671ddd2ca763d664", "scanner": "scanner-primary", "fingerprint": "dc7891b6ecc46680", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8c42f91c66ca3583", "level": "error", "message": {"text": "Dangling fetch: POST http://x/api/auth/sign-up/email (studio/tests/integration/blogs.test.ts:5)"}, "properties": {"repobilityId": "f1219e98eafb2ddc", "scanner": "scanner-primary", "fingerprint": "8c42f91c66ca3583", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4d434700c75d193e", "level": "error", "message": {"text": "Dangling fetch: POST http://x/api/v1/blogs (studio/tests/integration/blogs.test.ts:37)"}, "properties": {"repobilityId": "a0cd80921aecda8a", "scanner": "scanner-primary", "fingerprint": "4d434700c75d193e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9bcece6957d3f239", "level": "error", "message": {"text": "Dangling fetch: GET http://x/api/v1/blogs (studio/tests/integration/blogs.test.ts:46)"}, "properties": {"repobilityId": "9697818abff50991", "scanner": "scanner-primary", "fingerprint": "9bcece6957d3f239", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ff8777c7420ad34c", "level": "error", "message": {"text": "Dangling fetch: GET http://x/api/v1/blogs/${id} (studio/tests/integration/blogs.test.ts:52)"}, "properties": {"repobilityId": "f5fcd6eaaef987cf", "scanner": "scanner-primary", "fingerprint": "ff8777c7420ad34c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-06da172b14229962", "level": "error", "message": {"text": "Dangling fetch: POST http://x/api/v1/blogs/${id}/plan (studio/tests/integration/blogs.test.ts:61)"}, "properties": {"repobilityId": "fa8809353e638906", "scanner": "scanner-primary", "fingerprint": "06da172b14229962", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c3bf10b9ba40699f", "level": "error", "message": {"text": "Dangling fetch: POST http://x/api/v1/blogs/${id}/plan (studio/tests/integration/blogs.test.ts:68)"}, "properties": {"repobilityId": "282cfc416ac6a9b2", "scanner": "scanner-primary", "fingerprint": "c3bf10b9ba40699f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c78aa227fa2da612", "level": "error", "message": {"text": "Dangling fetch: GET http://x/api/v1/blogs/${id}/posts (studio/tests/integration/blogs.test.ts:78)"}, "properties": {"repobilityId": "3d3402eee07521e2", "scanner": "scanner-primary", "fingerprint": "c78aa227fa2da612", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b21abb463a5684e2", "level": "error", "message": {"text": "Dangling fetch: POST http://x/api/v1/blogs/${id}/plan (studio/tests/integration/blogs.test.ts:87)"}, "properties": {"repobilityId": "7f5f3e2bbc381bda", "scanner": "scanner-primary", "fingerprint": "b21abb463a5684e2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ac0de06fa652346d", "level": "error", "message": {"text": "Dangling fetch: PATCH http://x/api/v1/blogs/${id}/posts/${postId} (studio/tests/integration/blogs.test.ts:96)"}, "properties": {"repobilityId": "e89c9fe64b47d115", "scanner": "scanner-primary", "fingerprint": "ac0de06fa652346d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-37dc6a1082850117", "level": "error", "message": {"text": "Dangling fetch: GET http://x/api/v1/blogs/${id}/posts/${postId} (studio/tests/integration/blogs.test.ts:108)"}, "properties": {"repobilityId": "c95b46191e59d07e", "scanner": "scanner-primary", "fingerprint": "37dc6a1082850117", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a37e2615b9ef3625", "level": "error", "message": {"text": "Dangling fetch: PATCH http://x/api/v1/blogs/${id}/posts/${crypto.randomUUID()} (studio/tests/integration/blogs.test.ts:117)"}, "properties": {"repobilityId": "3c5d88207e3868c7", "scanner": "scanner-primary", "fingerprint": "a37e2615b9ef3625", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a035c72554e7d2cc", "level": "error", "message": {"text": "Dangling fetch: PATCH http://x/api/v1/blogs/${id}/posts/${secondPostId} (studio/tests/integration/blogs.test.ts:135)"}, "properties": {"repobilityId": "58fe39dc62160d3a", "scanner": "scanner-primary", "fingerprint": "a035c72554e7d2cc", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-75c845906df46259", "level": "error", "message": {"text": "Dangling fetch: GET http://x/api/v1/blogs/${id}/posts/${secondPostId} (studio/tests/integration/blogs.test.ts:140)"}, "properties": {"repobilityId": "de05a44bc25f26d5", "scanner": "scanner-primary", "fingerprint": "75c845906df46259", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-77f47cfb458379da", "level": "error", "message": {"text": "Dangling fetch: PATCH http://x/api/v1/blogs/${id}/posts/${secondPostId} (studio/tests/integration/blogs.test.ts:147)"}, "properties": {"repobilityId": "a9ffef0f47a9d101", "scanner": "scanner-primary", "fingerprint": "77f47cfb458379da", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b5eddd5ad9b966b8", "level": "error", "message": {"text": "Dangling fetch: PATCH http://x/api/v1/blogs/${id}/posts/${secondPostId} (studio/tests/integration/blogs.test.ts:152)"}, "properties": {"repobilityId": "b982b49287564d43", "scanner": "scanner-primary", "fingerprint": "b5eddd5ad9b966b8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2c1dc70d20c95c33", "level": "error", "message": {"text": "Dangling fetch: GET http://x/api/v1/blogs/${id}/posts/${secondPostId} (studio/tests/integration/blogs.test.ts:157)"}, "properties": {"repobilityId": "fb083bbb955916cf", "scanner": "scanner-primary", "fingerprint": "2c1dc70d20c95c33", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8712402c0c22b7c6", "level": "error", "message": {"text": "Dangling fetch: POST http://x/api/v1/blogs/${id}/posts/${postId}/publish (studio/tests/integration/blogs.test.ts:164)"}, "properties": {"repobilityId": "894c909a10601de6", "scanner": "scanner-primary", "fingerprint": "8712402c0c22b7c6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d1023d4781c0b2aa", "level": "error", "message": {"text": "Dangling fetch: PATCH http://x/api/v1/blogs/${id} (studio/tests/integration/blogs.test.ts:170)"}, "properties": {"repobilityId": "b216ddb1a15cfdf7", "scanner": "scanner-primary", "fingerprint": "d1023d4781c0b2aa", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4148279f4a78b045", "level": "error", "message": {"text": "Dangling fetch: POST http://x/api/v1/blogs/${id}/posts/${postId}/publish (studio/tests/integration/blogs.test.ts:177)"}, "properties": {"repobilityId": "710236d00e9cc818", "scanner": "scanner-primary", "fingerprint": "4148279f4a78b045", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e45982a99a6c5cde", "level": "error", "message": {"text": "Dangling fetch: DELETE http://x/api/v1/blogs/${id} (studio/tests/integration/blogs.test.ts:186)"}, "properties": {"repobilityId": "c93574e901e523c7", "scanner": "scanner-primary", "fingerprint": "e45982a99a6c5cde", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3c8a248324668146", "level": "error", "message": {"text": "Dangling fetch: GET http://x/api/v1/blogs (studio/tests/integration/blogs.test.ts:189)"}, "properties": {"repobilityId": "d5bab9f3a3b04999", "scanner": "scanner-primary", "fingerprint": "3c8a248324668146", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-079422867e469c05", "level": "error", "message": {"text": "Dangling fetch: GET http://x/api/v1/blogs/deleted/recent (studio/tests/integration/blogs.test.ts:195)"}, "properties": {"repobilityId": "53ddf4fb28f89cc0", "scanner": "scanner-primary", "fingerprint": "079422867e469c05", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-09e2ba165d8066d1", "level": "error", "message": {"text": "Dangling fetch: POST http://x/api/v1/blogs/${id}/restore (studio/tests/integration/blogs.test.ts:201)"}, "properties": {"repobilityId": "d463359ee4ede154", "scanner": "scanner-primary", "fingerprint": "09e2ba165d8066d1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-93eaf4cc35c5965f", "level": "error", "message": {"text": "Dangling fetch: GET http://x/api/v1/blogs (studio/tests/integration/blogs.test.ts:207)"}, "properties": {"repobilityId": "7c674c823e19b003", "scanner": "scanner-primary", "fingerprint": "93eaf4cc35c5965f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e42272a7e1267d2d", "level": "error", "message": {"text": "Dangling fetch: POST http://x/api/v1/blogs (studio/tests/integration/blogs.test.ts:217)"}, "properties": {"repobilityId": "b7837300ed77c02f", "scanner": "scanner-primary", "fingerprint": "e42272a7e1267d2d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5d9aac00bf2b39af", "level": "error", "message": {"text": "Dangling fetch: POST http://x/api/v1/blogs (studio/tests/integration/blogs.test.ts:228)"}, "properties": {"repobilityId": "02fc740516c0e1a0", "scanner": "scanner-primary", "fingerprint": "5d9aac00bf2b39af", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-17173b763c0301fa", "level": "error", "message": {"text": "Dangling fetch: POST http://x/api/v1/blogs/${id}/plan (studio/tests/integration/blogs.test.ts:239)"}, "properties": {"repobilityId": "93d147a464a6a3b6", "scanner": "scanner-primary", "fingerprint": "17173b763c0301fa", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-01d7de405e6a98b7", "level": "error", "message": {"text": "Dangling fetch: POST http://x/api/v1/blogs/${id}/plan (studio/tests/integration/blogs.test.ts:249)"}, "properties": {"repobilityId": "6b0258e62a025a07", "scanner": "scanner-primary", "fingerprint": "01d7de405e6a98b7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9a23bf23c2e1b49c", "level": "error", "message": {"text": "Dangling fetch: GET http://x/api/v1/blogs/${id}/posts (studio/tests/integration/blogs.test.ts:256)"}, "properties": {"repobilityId": "4bfc14a9e6bdc5b7", "scanner": "scanner-primary", "fingerprint": "9a23bf23c2e1b49c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-53208392aa686811", "level": "error", "message": {"text": "Dangling fetch: GET http://x/api/v1/account/emdash-token (studio/tests/integration/blogs.test.ts:270)"}, "properties": {"repobilityId": "c5feea02fa77f933", "scanner": "scanner-primary", "fingerprint": "53208392aa686811", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b08dc261e2ddcc0c", "level": "error", "message": {"text": "Dangling fetch: PUT http://x/api/v1/account/emdash-token (studio/tests/integration/blogs.test.ts:274)"}, "properties": {"repobilityId": "8977a438dd334555", "scanner": "scanner-primary", "fingerprint": "b08dc261e2ddcc0c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c3f7031da076d74c", "level": "error", "message": {"text": "Dangling fetch: GET http://x/api/v1/account/emdash-token (studio/tests/integration/blogs.test.ts:281)"}, "properties": {"repobilityId": "ae9f1200561e6443", "scanner": "scanner-primary", "fingerprint": "c3f7031da076d74c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6ce8e6bbeb206f2e", "level": "error", "message": {"text": "Dangling fetch: POST http://x/api/auth/sign-up/email (studio/tests/integration/narration.test.ts:5)"}, "properties": {"repobilityId": "b581358b60427587", "scanner": "scanner-primary", "fingerprint": "6ce8e6bbeb206f2e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d112d7ec275b0a20", "level": "error", "message": {"text": "Dangling fetch: GET http://x/api/v1/account/elevenlabs-key (studio/tests/integration/narration.test.ts:22)"}, "properties": {"repobilityId": "5adedfc1d2e94472", "scanner": "scanner-primary", "fingerprint": "d112d7ec275b0a20", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-29b5be489d981ffe", "level": "error", "message": {"text": "Dangling fetch: POST http://x/api/v1/projects (studio/tests/integration/narration.test.ts:26)"}, "properties": {"repobilityId": "97d39384e79b8974", "scanner": "scanner-primary", "fingerprint": "29b5be489d981ffe", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-73be7423ca86f107", "level": "error", "message": {"text": "Dangling fetch: POST http://x/api/v1/projects/${project.id}/outlines (studio/tests/integration/narration.test.ts:33)"}, "properties": {"repobilityId": "95a9a07326f117a1", "scanner": "scanner-primary", "fingerprint": "73be7423ca86f107", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a52b39c0947b115d", "level": "error", "message": {"text": "Dangling fetch: POST http://x/api/v1/projects/${project.id}/narration/audition (studio/tests/integration/narration.test.ts:42)"}, "properties": {"repobilityId": "5bbef258d02254a7", "scanner": "scanner-primary", "fingerprint": "a52b39c0947b115d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-612fd4584610e74a", "level": "error", "message": {"text": "Dangling fetch: POST http://x/api/v1/projects/${project.id}/audiobook (studio/tests/integration/narration.test.ts:52)"}, "properties": {"repobilityId": "299c47cb03b39df3", "scanner": "scanner-primary", "fingerprint": "612fd4584610e74a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-02470373e82066c2", "level": "error", "message": {"text": "Dangling fetch: PUT http://x/api/v1/account/elevenlabs-key (studio/tests/integration/narration.test.ts:58)"}, "properties": {"repobilityId": "7757e5d9f17cee31", "scanner": "scanner-primary", "fingerprint": "02470373e82066c2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b0aac24a985ca456", "level": "error", "message": {"text": "Dangling fetch: GET http://x/api/v1/account/elevenlabs-key (studio/tests/integration/narration.test.ts:65)"}, "properties": {"repobilityId": "4967b4db3fa89ae5", "scanner": "scanner-primary", "fingerprint": "b0aac24a985ca456", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ef55634eecb2c5d7", "level": "error", "message": {"text": "Dangling fetch: POST http://x/api/auth/sign-up/email (studio/tests/integration/chapters.test.ts:5)"}, "properties": {"repobilityId": "affeb08d6c1e3acc", "scanner": "scanner-primary", "fingerprint": "ef55634eecb2c5d7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-44fcab812cdf665e", "level": "error", "message": {"text": "Dangling fetch: POST http://x/api/v1/projects (studio/tests/integration/chapters.test.ts:22)"}, "properties": {"repobilityId": "696f5b7e6f6da57a", "scanner": "scanner-primary", "fingerprint": "44fcab812cdf665e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-00d4891906452b93", "level": "error", "message": {"text": "Dangling fetch: POST http://x/api/v1/projects/${project.id}/outlines (studio/tests/integration/chapters.test.ts:30)"}, "properties": {"repobilityId": "fcc073c2a06b4bfe", "scanner": "scanner-primary", "fingerprint": "00d4891906452b93", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e8a95c8a484f32a6", "level": "error", "message": {"text": "Dangling fetch: GET http://x/api/v1/projects/${project.id}/outline (studio/tests/integration/chapters.test.ts:40)"}, "properties": {"repobilityId": "db640d5839b6b5b5", "scanner": "scanner-primary", "fingerprint": "e8a95c8a484f32a6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f805bbda750f8a7c", "level": "error", "message": {"text": "Dangling fetch: GET http://x/api/v1/chapters/${chapterId}/sections (studio/tests/integration/chapters.test.ts:48)"}, "properties": {"repobilityId": "257d45003d7df9a4", "scanner": "scanner-primary", "fingerprint": "f805bbda750f8a7c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-329a9a40303c9941", "level": "error", "message": {"text": "Dangling fetch: POST http://x/api/v1/chapters/${chapterId}/sections/${sections.items[0].id}/draft (studio/tests/integration/chapters.test.ts:56)"}, "properties": {"repobilityId": "6a69464d311d6003", "scanner": "scanner-primary", "fingerprint": "329a9a40303c9941", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-cbca151c2270518a", "level": "error", "message": {"text": "Dangling fetch: GET http://x/api/v1/chapters/${chapterId} (studio/tests/integration/chapters.test.ts:77)"}, "properties": {"repobilityId": "bcad4294ffcb85d7", "scanner": "scanner-primary", "fingerprint": "cbca151c2270518a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0354888f5bbccabe", "level": "error", "message": {"text": "Dangling fetch: POST http://x/api/v1/chapters/${chapterId}/sections/${sections.items[1].id}/draft (studio/tests/integration/chapters.test.ts:83)"}, "properties": {"repobilityId": "eec37e58c77b082f", "scanner": "scanner-primary", "fingerprint": "0354888f5bbccabe", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ff8a6b8cac4fd4cc", "level": "error", "message": {"text": "Dangling fetch: POST http://x/api/v1/chapters/${chapterId}/revise (studio/tests/integration/chapters.test.ts:108)"}, "properties": {"repobilityId": "8620e42ce17a4ead", "scanner": "scanner-primary", "fingerprint": "ff8a6b8cac4fd4cc", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8f5f1b2f54705d73", "level": "error", "message": {"text": "Dangling fetch: POST http://x/api/auth/sign-up/email (studio/tests/integration/publisher-pack.test.ts:5)"}, "properties": {"repobilityId": "f0ef6b0c8fd59b10", "scanner": "scanner-primary", "fingerprint": "8f5f1b2f54705d73", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0e9d05f315cb8be9", "level": "error", "message": {"text": "Dangling fetch: POST http://x/api/v1/projects (studio/tests/integration/publisher-pack.test.ts:22)"}, "properties": {"repobilityId": "a607a4ec7745a923", "scanner": "scanner-primary", "fingerprint": "0e9d05f315cb8be9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f88a7d5534226d35", "level": "error", "message": {"text": "Dangling fetch: POST http://x/api/v1/projects/${project.id}/publisher-pack/seo (studio/tests/integration/publisher-pack.test.ts:30)"}, "properties": {"repobilityId": "8da6b59f2c97eb39", "scanner": "scanner-primary", "fingerprint": "f88a7d5534226d35", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-55e7e767bf3a55e3", "level": "error", "message": {"text": "Dangling fetch: POST http://x/api/v1/projects/${project.id}/publisher-pack/seo (studio/tests/integration/publisher-pack.test.ts:45)"}, "properties": {"repobilityId": "dc8a81a4414584bb", "scanner": "scanner-primary", "fingerprint": "55e7e767bf3a55e3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e58347b4e4f4a04d", "level": "error", "message": {"text": "Dangling fetch: PATCH http://x/api/v1/projects/${project.id}/publisher-pack (studio/tests/integration/publisher-pack.test.ts:57)"}, "properties": {"repobilityId": "efcfb5517327dbfb", "scanner": "scanner-primary", "fingerprint": "e58347b4e4f4a04d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9f5b557ccf52b417", "level": "error", "message": {"text": "Dangling fetch: POST http://x/api/v1/projects/${project.id}/publisher-pack/approve (studio/tests/integration/publisher-pack.test.ts:71)"}, "properties": {"repobilityId": "50a93692dccc003e", "scanner": "scanner-primary", "fingerprint": "9f5b557ccf52b417", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ec91eb9d35638d3c", "level": "error", "message": {"text": "Dangling fetch: POST http://x/api/auth/sign-up/email (studio/tests/integration/voices.test.ts:5)"}, "properties": {"repobilityId": "b45ccd6004795799", "scanner": "scanner-primary", "fingerprint": "ec91eb9d35638d3c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6104eb42536deb80", "level": "error", "message": {"text": "Dangling fetch: POST http://x/api/v1/projects (studio/tests/integration/voices.test.ts:22)"}, "properties": {"repobilityId": "61f5bf4c0882b6ba", "scanner": "scanner-primary", "fingerprint": "6104eb42536deb80", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-28a7e295f2366e96", "level": "error", "message": {"text": "Dangling fetch: POST http://x/api/v1/voices (studio/tests/integration/voices.test.ts:31)"}, "properties": {"repobilityId": "7868ef64dee87698", "scanner": "scanner-primary", "fingerprint": "28a7e295f2366e96", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-49f1f28a70b8c988", "level": "error", "message": {"text": "Dangling fetch: GET http://x/api/v1/voices (studio/tests/integration/voices.test.ts:43)"}, "properties": {"repobilityId": "c343a4b81a7dfeff", "scanner": "scanner-primary", "fingerprint": "49f1f28a70b8c988", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-17ad1c90df1b717c", "level": "error", "message": {"text": "Dangling fetch: GET http://x/api/v1/voices/${voice.id} (studio/tests/integration/voices.test.ts:49)"}, "properties": {"repobilityId": "f92dc6fa9a6426da", "scanner": "scanner-primary", "fingerprint": "17ad1c90df1b717c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a9fe0ec26ffae411", "level": "error", "message": {"text": "Dangling fetch: PATCH http://x/api/v1/projects/${project.id} (studio/tests/integration/voices.test.ts:59)"}, "properties": {"repobilityId": "445f324ebd7a8e4a", "scanner": "scanner-primary", "fingerprint": "a9fe0ec26ffae411", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-bfe97c6f7a69d0d4", "level": "error", "message": {"text": "Dangling fetch: GET http://x/api/v1/projects/${project.id} (studio/tests/integration/voices.test.ts:66)"}, "properties": {"repobilityId": "b4eb217141126cdf", "scanner": "scanner-primary", "fingerprint": "bfe97c6f7a69d0d4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2f59482cc7ab791e", "level": "error", "message": {"text": "Dangling fetch: GET https://spooool.com/studio/api/v1/health (studio/tests/integration/studio-route.test.ts:46)"}, "properties": {"repobilityId": "fbcda158616d277a", "scanner": "scanner-primary", "fingerprint": "2f59482cc7ab791e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3b797bea34865c07", "level": "error", "message": {"text": "Dangling fetch: POST https://spooool.com/studio/api/auth/sign-up/email (studio/tests/integration/studio-route.test.ts:51)"}, "properties": {"repobilityId": "984a9ac9417ec40f", "scanner": "scanner-primary", "fingerprint": "3b797bea34865c07", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ac0093116a1b6faf", "level": "error", "message": {"text": "Dangling fetch: GET https://spooool.com/studio/api/v1/projects (studio/tests/integration/studio-route.test.ts:64)"}, "properties": {"repobilityId": "15525a81e346e0ae", "scanner": "scanner-primary", "fingerprint": "ac0093116a1b6faf", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-09a97ed8869220fb", "level": "error", "message": {"text": "Dangling fetch: GET https://spooool.com/studio/api/auth/error?error=test_error (studio/tests/integration/studio-route.test.ts:71)"}, "properties": {"repobilityId": "63b31b2f5994e816", "scanner": "scanner-primary", "fingerprint": "09a97ed8869220fb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ded45240259003a7", "level": "error", "message": {"text": "Dangling fetch: GET https://book-cook.com/api/auth/error?error=spoofed (studio/tests/integration/studio-route.test.ts:79)"}, "properties": {"repobilityId": "d8d3ab47e12d7299", "scanner": "scanner-primary", "fingerprint": "ded45240259003a7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-183fa7c65eca5592", "level": "error", "message": {"text": "Dangling fetch: GET https://spooool.com/words/blogs/x (studio/tests/integration/studio-route.test.ts:92)"}, "properties": {"repobilityId": "83e54314461f3774", "scanner": "scanner-primary", "fingerprint": "183fa7c65eca5592", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a5bd0dbc4e588860", "level": "error", "message": {"text": "Dangling fetch: GET https://spooool.com/words?ref=legacy (studio/tests/integration/studio-route.test.ts:100)"}, "properties": {"repobilityId": "efadf3038803ef93", "scanner": "scanner-primary", "fingerprint": "a5bd0dbc4e588860", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-56861449130b1128", "level": "error", "message": {"text": "Dangling fetch: GET https://spooool.com/studio/api/v1/session (studio/tests/integration/studio-route.test.ts:112)"}, "properties": {"repobilityId": "15a6907fef4e70ef", "scanner": "scanner-primary", "fingerprint": "56861449130b1128", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ec984ac8985a37b5", "level": "error", "message": {"text": "Dangling fetch: GET https://spooool.com/studio/api/v1/projects (studio/tests/integration/studio-route.test.ts:120)"}, "properties": {"repobilityId": "51aedb3b503b0b0f", "scanner": "scanner-primary", "fingerprint": "ec984ac8985a37b5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a152b632a65cda3f", "level": "error", "message": {"text": "Dangling fetch: GET https://book-cook.com/api/v1/projects (studio/tests/integration/studio-route.test.ts:128)"}, "properties": {"repobilityId": "cd13827f8999958d", "scanner": "scanner-primary", "fingerprint": "a152b632a65cda3f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-31c984c88ad84c97", "level": "error", "message": {"text": "Dangling fetch: GET https://spooool.com/studio/api/v1/projects (studio/tests/integration/studio-route.test.ts:136)"}, "properties": {"repobilityId": "ab62a5bd6fe9fa87", "scanner": "scanner-primary", "fingerprint": "31c984c88ad84c97", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b5614c93f7a8a6db", "level": "error", "message": {"text": "Dangling fetch: POST http://x/api/auth/sign-up/email (studio/tests/integration/projects.test.ts:5)"}, "properties": {"repobilityId": "7914d8ed27352037", "scanner": "scanner-primary", "fingerprint": "b5614c93f7a8a6db", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5f27a8d36962cc31", "level": "error", "message": {"text": "Dangling fetch: POST http://x/api/v1/projects (studio/tests/integration/projects.test.ts:22)"}, "properties": {"repobilityId": "0f8e6907c88219aa", "scanner": "scanner-primary", "fingerprint": "5f27a8d36962cc31", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a85df44a9772e173", "level": "error", "message": {"text": "Dangling fetch: GET http://x/api/v1/projects (studio/tests/integration/projects.test.ts:38)"}, "properties": {"repobilityId": "1a4b41a8fcc4ac98", "scanner": "scanner-primary", "fingerprint": "a85df44a9772e173", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-388de30077def7bf", "level": "error", "message": {"text": "Dangling fetch: GET http://x/api/v1/projects/${id} (studio/tests/integration/projects.test.ts:46)"}, "properties": {"repobilityId": "677e4feda694dffe", "scanner": "scanner-primary", "fingerprint": "388de30077def7bf", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c6cb84b1892af473", "level": "error", "message": {"text": "Dangling fetch: POST http://x/api/v1/projects/${id}/outlines (studio/tests/integration/projects.test.ts:55)"}, "properties": {"repobilityId": "dc9bb51a1433e61b", "scanner": "scanner-primary", "fingerprint": "c6cb84b1892af473", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3eecd2a4ba7c9a67", "level": "error", "message": {"text": "Dangling fetch: POST http://x/api/v1/projects/${id}/outlines (studio/tests/integration/projects.test.ts:65)"}, "properties": {"repobilityId": "5bb7247cf139d4bd", "scanner": "scanner-primary", "fingerprint": "3eecd2a4ba7c9a67", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-18a649c43810818b", "level": "error", "message": {"text": "Dangling fetch: GET http://x/api/v1/projects/${id}/outline (studio/tests/integration/projects.test.ts:76)"}, "properties": {"repobilityId": "100d04a38a83b76a", "scanner": "scanner-primary", "fingerprint": "18a649c43810818b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2fca684aad4bab47", "level": "error", "message": {"text": "Dangling fetch: PATCH http://x/api/v1/chapters/${chapterId} (studio/tests/integration/projects.test.ts:85)"}, "properties": {"repobilityId": "6d7c908bd2307e2b", "scanner": "scanner-primary", "fingerprint": "2fca684aad4bab47", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-154f3987b84a3118", "level": "error", "message": {"text": "Dangling fetch: GET http://x/api/v1/projects/${id}/book (studio/tests/integration/projects.test.ts:92)"}, "properties": {"repobilityId": "42d2cce724f1d1b1", "scanner": "scanner-primary", "fingerprint": "154f3987b84a3118", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f7c0988ff701156d", "level": "error", "message": {"text": "Dangling fetch: DELETE http://x/api/v1/projects/${id} (studio/tests/integration/projects.test.ts:101)"}, "properties": {"repobilityId": "ca29cffc18350d49", "scanner": "scanner-primary", "fingerprint": "f7c0988ff701156d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0aad21e2af7a506f", "level": "error", "message": {"text": "Dangling fetch: GET http://x/api/v1/projects (studio/tests/integration/projects.test.ts:107)"}, "properties": {"repobilityId": "cfd35943f7d4dd29", "scanner": "scanner-primary", "fingerprint": "0aad21e2af7a506f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1050f44297f49688", "level": "error", "message": {"text": "Dangling fetch: GET http://x/api/v1/projects/deleted/recent (studio/tests/integration/projects.test.ts:115)"}, "properties": {"repobilityId": "71c5c30dbffa6236", "scanner": "scanner-primary", "fingerprint": "1050f44297f49688", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3c7aa75b854bc97d", "level": "error", "message": {"text": "Dangling fetch: POST http://x/api/v1/projects/${id}/restore (studio/tests/integration/projects.test.ts:125)"}, "properties": {"repobilityId": "df7233adb96992c4", "scanner": "scanner-primary", "fingerprint": "3c7aa75b854bc97d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a097487082919809", "level": "error", "message": {"text": "Dangling fetch: GET http://x/api/v1/projects (studio/tests/integration/projects.test.ts:131)"}, "properties": {"repobilityId": "11ac099572285075", "scanner": "scanner-primary", "fingerprint": "a097487082919809", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-dcfdd76d29d5a927", "level": "error", "message": {"text": "Dangling fetch: POST http://x/api/v1/health/market-dataset/refresh (studio/tests/integration/market-dataset.test.ts:6)"}, "properties": {"repobilityId": "633b521c8958b165", "scanner": "scanner-primary", "fingerprint": "dcfdd76d29d5a927", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b3edba625b107c45", "level": "error", "message": {"text": "Dangling fetch: GET http://x/api/v1/health/market-dataset (studio/tests/integration/market-dataset.test.ts:20)"}, "properties": {"repobilityId": "2c877795419a8aa6", "scanner": "scanner-primary", "fingerprint": "b3edba625b107c45", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5c9ca0d7098dc289", "level": "error", "message": {"text": "Dangling fetch: GET http://x/agents/aloysius/${id} (studio/tests/integration/aloysius.test.ts:7)"}, "properties": {"repobilityId": "f10508396315a1b4", "scanner": "scanner-primary", "fingerprint": "5c9ca0d7098dc289", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d262f7ceecd42f3d", "level": "error", "message": {"text": "Dangling fetch: POST http://x/api/auth/sign-up/email (studio/tests/integration/scripts.test.ts:5)"}, "properties": {"repobilityId": "8517e7dbd79e847f", "scanner": "scanner-primary", "fingerprint": "d262f7ceecd42f3d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c5b0b3143f7d6cf3", "level": "error", "message": {"text": "Dangling fetch: POST http://x/api/v1/scripts (studio/tests/integration/scripts.test.ts:33)"}, "properties": {"repobilityId": "5902bc8103025ba1", "scanner": "scanner-primary", "fingerprint": "c5b0b3143f7d6cf3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-622b8de5cf4e08dc", "level": "error", "message": {"text": "Dangling fetch: GET http://x/api/v1/scripts (studio/tests/integration/scripts.test.ts:42)"}, "properties": {"repobilityId": "eafc1b6874c7be04", "scanner": "scanner-primary", "fingerprint": "622b8de5cf4e08dc", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1556820247a5f73e", "level": "error", "message": {"text": "Dangling fetch: GET http://x/api/v1/scripts/${id} (studio/tests/integration/scripts.test.ts:48)"}, "properties": {"repobilityId": "7fc5b0264053caf0", "scanner": "scanner-primary", "fingerprint": "1556820247a5f73e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d2b9dd36618075a8", "level": "error", "message": {"text": "Dangling fetch: POST http://x/api/v1/scripts/${id}/plan (studio/tests/integration/scripts.test.ts:57)"}, "properties": {"repobilityId": "1aa48abc43e44319", "scanner": "scanner-primary", "fingerprint": "d2b9dd36618075a8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f17eb479c9dac873", "level": "error", "message": {"text": "Dangling fetch: POST http://x/api/v1/scripts/${id}/plan (studio/tests/integration/scripts.test.ts:64)"}, "properties": {"repobilityId": "30273af93a3ec65a", "scanner": "scanner-primary", "fingerprint": "f17eb479c9dac873", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6e1c55e12acb5440", "level": "error", "message": {"text": "Dangling fetch: POST http://x/api/v1/scripts/${id}/plan (studio/tests/integration/scripts.test.ts:74)"}, "properties": {"repobilityId": "3b017e1e6d05c553", "scanner": "scanner-primary", "fingerprint": "6e1c55e12acb5440", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-93493141bf16d54c", "level": "error", "message": {"text": "Dangling fetch: GET http://x/api/v1/scripts/${id}/scenes (studio/tests/integration/scripts.test.ts:84)"}, "properties": {"repobilityId": "8da6ca4f97cf78cc", "scanner": "scanner-primary", "fingerprint": "93493141bf16d54c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a8924e6ceb918c93", "level": "error", "message": {"text": "Dangling fetch: POST http://x/api/v1/scripts/${id}/plan (studio/tests/integration/scripts.test.ts:96)"}, "properties": {"repobilityId": "4529c2b8b69ece9f", "scanner": "scanner-primary", "fingerprint": "a8924e6ceb918c93", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-08e7080e18f0d43a", "level": "error", "message": {"text": "Dangling fetch: PATCH http://x/api/v1/scripts/${id}/scenes/${sceneId} (studio/tests/integration/scripts.test.ts:105)"}, "properties": {"repobilityId": "6f37c187b27292c5", "scanner": "scanner-primary", "fingerprint": "08e7080e18f0d43a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c836ec8134955ce6", "level": "error", "message": {"text": "Dangling fetch: GET http://x/api/v1/scripts/${id}/scenes/${sceneId} (studio/tests/integration/scripts.test.ts:117)"}, "properties": {"repobilityId": "73b6679d4d8edcc0", "scanner": "scanner-primary", "fingerprint": "c836ec8134955ce6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-07c4e0bba260acd4", "level": "error", "message": {"text": "Dangling fetch: PATCH http://x/api/v1/scripts/${id}/scenes/${crypto.randomUUID()} (studio/tests/integration/scripts.test.ts:128)"}, "properties": {"repobilityId": "571768f286d62a14", "scanner": "scanner-primary", "fingerprint": "07c4e0bba260acd4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d8a66004bdcda919", "level": "error", "message": {"text": "Dangling fetch: PATCH http://x/api/v1/scripts/${id}/scenes/${secondSceneId} (studio/tests/integration/scripts.test.ts:146)"}, "properties": {"repobilityId": "4a79e281abb4b552", "scanner": "scanner-primary", "fingerprint": "d8a66004bdcda919", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0cb6595184f7a5fc", "level": "error", "message": {"text": "Dangling fetch: GET http://x/api/v1/scripts/${id}/scenes/${secondSceneId} (studio/tests/integration/scripts.test.ts:151)"}, "properties": {"repobilityId": "971c168818b0b367", "scanner": "scanner-primary", "fingerprint": "0cb6595184f7a5fc", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1c22fba062cffe28", "level": "error", "message": {"text": "Dangling fetch: PATCH http://x/api/v1/scripts/${id}/scenes/${secondSceneId} (studio/tests/integration/scripts.test.ts:158)"}, "properties": {"repobilityId": "bc5a0132f1209974", "scanner": "scanner-primary", "fingerprint": "1c22fba062cffe28", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d49b6ee427a6cccc", "level": "error", "message": {"text": "Dangling fetch: PATCH http://x/api/v1/scripts/${id}/scenes/${secondSceneId} (studio/tests/integration/scripts.test.ts:163)"}, "properties": {"repobilityId": "7f926bbd547b983f", "scanner": "scanner-primary", "fingerprint": "d49b6ee427a6cccc", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5bbd0984707affbe", "level": "error", "message": {"text": "Dangling fetch: GET http://x/api/v1/scripts/${id}/scenes/${secondSceneId} (studio/tests/integration/scripts.test.ts:168)"}, "properties": {"repobilityId": "c9208067da65ac3b", "scanner": "scanner-primary", "fingerprint": "5bbd0984707affbe", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e24ba3c2ae716145", "level": "error", "message": {"text": "Dangling fetch: DELETE http://x/api/v1/scripts/${id} (studio/tests/integration/scripts.test.ts:174)"}, "properties": {"repobilityId": "ce9974377e6a2622", "scanner": "scanner-primary", "fingerprint": "e24ba3c2ae716145", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4ff4592eb7696b9b", "level": "error", "message": {"text": "Dangling fetch: GET http://x/api/v1/scripts (studio/tests/integration/scripts.test.ts:177)"}, "properties": {"repobilityId": "271c4394bfcfdaf6", "scanner": "scanner-primary", "fingerprint": "4ff4592eb7696b9b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8f49c829b94d8c2e", "level": "error", "message": {"text": "Dangling fetch: GET http://x/api/v1/scripts/deleted/recent (studio/tests/integration/scripts.test.ts:183)"}, "properties": {"repobilityId": "c0212a1ac0baadd9", "scanner": "scanner-primary", "fingerprint": "8f49c829b94d8c2e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3be3451f6464ef61", "level": "error", "message": {"text": "Dangling fetch: POST http://x/api/v1/scripts/${id}/restore (studio/tests/integration/scripts.test.ts:189)"}, "properties": {"repobilityId": "c9730e21668765d0", "scanner": "scanner-primary", "fingerprint": "3be3451f6464ef61", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-89d9562fa1f2249d", "level": "error", "message": {"text": "Dangling fetch: GET http://x/api/v1/scripts (studio/tests/integration/scripts.test.ts:195)"}, "properties": {"repobilityId": "fa1079bdf2a6a37b", "scanner": "scanner-primary", "fingerprint": "89d9562fa1f2249d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-04ffd633925fcc2e", "level": "error", "message": {"text": "Dangling fetch: POST http://x/api/v1/scripts (studio/tests/integration/scripts.test.ts:205)"}, "properties": {"repobilityId": "3a6309dd57e419f0", "scanner": "scanner-primary", "fingerprint": "04ffd633925fcc2e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-459a8cd178068d29", "level": "error", "message": {"text": "Dangling fetch: POST http://x/api/v1/scripts (studio/tests/integration/scripts.test.ts:216)"}, "properties": {"repobilityId": "e1f2a8f990ca4696", "scanner": "scanner-primary", "fingerprint": "459a8cd178068d29", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d5c6660b1dd4bb7d", "level": "error", "message": {"text": "Dangling fetch: POST http://x/api/v1/scripts/${id}/plan (studio/tests/integration/scripts.test.ts:225)"}, "properties": {"repobilityId": "d2b52948e9ce7a62", "scanner": "scanner-primary", "fingerprint": "d5c6660b1dd4bb7d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-36459a1134d16016", "level": "error", "message": {"text": "Dangling fetch: POST http://x/api/v1/scripts/${id}/plan (studio/tests/integration/scripts.test.ts:235)"}, "properties": {"repobilityId": "82b5e51772e6388e", "scanner": "scanner-primary", "fingerprint": "36459a1134d16016", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-99776a2d2140c0d6", "level": "error", "message": {"text": "Dangling fetch: GET http://x/api/v1/scripts/${id}/scenes (studio/tests/integration/scripts.test.ts:242)"}, "properties": {"repobilityId": "db2a5b8b4a4eb050", "scanner": "scanner-primary", "fingerprint": "99776a2d2140c0d6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-45876d97c72f62ac", "level": "error", "message": {"text": "Dangling fetch: POST http://x/api/auth/sign-up/email (studio/tests/integration/auth.test.ts:6)"}, "properties": {"repobilityId": "8b9073e5aa9543b8", "scanner": "scanner-primary", "fingerprint": "45876d97c72f62ac", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-13dc988ecb0101bc", "level": "error", "message": {"text": "Dangling fetch: POST http://x/api/auth/sign-up/email (studio/tests/integration/launch.test.ts:5)"}, "properties": {"repobilityId": "79fb06678db17c0a", "scanner": "scanner-primary", "fingerprint": "13dc988ecb0101bc", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-93a134e904a9baea", "level": "error", "message": {"text": "Dangling fetch: POST http://x/api/v1/projects (studio/tests/integration/launch.test.ts:22)"}, "properties": {"repobilityId": "233aac272474c70f", "scanner": "scanner-primary", "fingerprint": "93a134e904a9baea", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3717e4c47518447f", "level": "error", "message": {"text": "Dangling fetch: POST http://x/api/v1/projects/${project.id}/launch/brief (studio/tests/integration/launch.test.ts:30)"}, "properties": {"repobilityId": "bea01857e31ad744", "scanner": "scanner-primary", "fingerprint": "3717e4c47518447f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f210125d9cc1d86c", "level": "error", "message": {"text": "Dangling fetch: GET http://x/api/v1/projects/${project.id}/launch/brief (studio/tests/integration/launch.test.ts:62)"}, "properties": {"repobilityId": "8312293b0860d721", "scanner": "scanner-primary", "fingerprint": "f210125d9cc1d86c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-794d318fab9455f3", "level": "error", "message": {"text": "Dangling fetch: GET http://x/api/v1/projects/${project.id}/launch/brief/download (studio/tests/integration/launch.test.ts:71)"}, "properties": {"repobilityId": "f1ce580847ca2afe", "scanner": "scanner-primary", "fingerprint": "794d318fab9455f3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-41a2369cda620356", "level": "error", "message": {"text": "Dangling fetch: POST http://x/api/auth/sign-up/email (studio/tests/integration/scout.test.ts:5)"}, "properties": {"repobilityId": "92e5f5e7dd4758b4", "scanner": "scanner-primary", "fingerprint": "41a2369cda620356", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-40087006d7c66582", "level": "error", "message": {"text": "Dangling fetch: POST http://x/api/v1/projects (studio/tests/integration/scout.test.ts:22)"}, "properties": {"repobilityId": "73a1ba68c825f402", "scanner": "scanner-primary", "fingerprint": "40087006d7c66582", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-44b23c4d8fbf717e", "level": "error", "message": {"text": "Dangling fetch: POST http://x/api/v1/scout/queries (studio/tests/integration/scout.test.ts:31)"}, "properties": {"repobilityId": "3724b750f92d475d", "scanner": "scanner-primary", "fingerprint": "44b23c4d8fbf717e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-58f3aba7db9544e9", "level": "error", "message": {"text": "Dangling fetch: GET http://x/api/v1/scout/queries (studio/tests/integration/scout.test.ts:63)"}, "properties": {"repobilityId": "cf078b3ebb708533", "scanner": "scanner-primary", "fingerprint": "58f3aba7db9544e9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3757ba150f093633", "level": "error", "message": {"text": "Dangling fetch: GET http://x/api/v1/scout/projects/${project.id}/findings (studio/tests/integration/scout.test.ts:69)"}, "properties": {"repobilityId": "8aad58fbae1e7dc2", "scanner": "scanner-primary", "fingerprint": "3757ba150f093633", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9e346bb9de6f5893", "level": "error", "message": {"text": "Dangling fetch: POST http://render/render (studio/apps/web/src/workflows/book-export.ts:145)"}, "properties": {"repobilityId": "783942e3605e44b7", "scanner": "scanner-primary", "fingerprint": "9e346bb9de6f5893", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-dc6ac1551a5f2d92", "level": "error", "message": {"text": "Dangling fetch: POST http://render/master-audio (studio/apps/web/src/workflows/audiobook-mastering.ts:194)"}, "properties": {"repobilityId": "75c69b939e4f8dc3", "scanner": "scanner-primary", "fingerprint": "dc6ac1551a5f2d92", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0b86184a87a76184", "level": "error", "message": {"text": "Dangling fetch: POST https://api.elevenlabs.io/v1/text-to-speech/${encodeURIComponent(\n      voiceId,\n    )}?output_format=mp3_44100_128 (studio/apps/web/src/workflows/audiobook-mastering.ts:209)"}, "properties": {"repobilityId": "538c86ba9861e6bb", "scanner": "scanner-primary", "fingerprint": "0b86184a87a76184", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2764d97bccee7b1d", "level": "error", "message": {"text": "Dangling fetch: POST http://render/package-launch (studio/apps/web/src/workflows/gtm-brief.ts:145)"}, "properties": {"repobilityId": "e483f02e1c303e63", "scanner": "scanner-primary", "fingerprint": "2764d97bccee7b1d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-35e492de929646ab", "level": "error", "message": {"text": "Dangling fetch: POST https://api.elevenlabs.io/v1/text-to-speech/${encodeURIComponent(\n      voiceId,\n    )}?output_format=mp3_44100_128 (studio/apps/web/src/routes/projects.ts:1071)"}, "properties": {"repobilityId": "588cb251c0e9f0b2", "scanner": "scanner-primary", "fingerprint": "35e492de929646ab", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8856d68a2f9464e0", "level": "error", "message": {"text": "Dangling fetch: GET http://render/health (studio/apps/web/src/routes/health.ts:16)"}, "properties": {"repobilityId": "ce54213bb8bdda8f", "scanner": "scanner-primary", "fingerprint": "8856d68a2f9464e0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1656d3f878fd169d", "level": "error", "message": {"text": "Dangling fetch: GET /api/create/templates/hero-journey (src/workers/create.test.ts:134)"}, "properties": {"repobilityId": "2e7f488ed32dc8fe", "scanner": "scanner-primary", "fingerprint": "1656d3f878fd169d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-7fa4289086780ad9", "level": "error", "message": {"text": "Dangling fetch: GET /api/create/templates/nope (src/workers/create.test.ts:142)"}, "properties": {"repobilityId": "b5248ce4e0692fce", "scanner": "scanner-primary", "fingerprint": "7fa4289086780ad9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-409105172716ab1c", "level": "error", "message": {"text": "Dangling fetch: GET /api/create/sessions/s_abc/stream (src/workers/create.test.ts:241)"}, "properties": {"repobilityId": "29abda55534d1cfe", "scanner": "scanner-primary", "fingerprint": "409105172716ab1c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-9b9893960045c12b", "level": "error", "message": {"text": "Dangling fetch: GET /api/create/sessions/s_abc/stream (src/workers/create.test.ts:251)"}, "properties": {"repobilityId": "12efa7122002362a", "scanner": "scanner-primary", "fingerprint": "9b9893960045c12b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-c2ebd90457682b7b", "level": "error", "message": {"text": "Dangling fetch: GET https://x.test/api/test (src/workers/edge-cache.test.ts:50)"}, "properties": {"repobilityId": "0af3ad81be8c9756", "scanner": "scanner-primary", "fingerprint": "c2ebd90457682b7b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-636924a4539b3607", "level": "error", "message": {"text": "Dangling fetch: GET https://x.test/api/test (src/workers/edge-cache.test.ts:64)"}, "properties": {"repobilityId": "2136a728888acd5c", "scanner": "scanner-primary", "fingerprint": "636924a4539b3607", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-769e57d35d351e50", "level": "error", "message": {"text": "Dangling fetch: GET https://x.test/api/test (src/workers/edge-cache.test.ts:67)"}, "properties": {"repobilityId": "1c0cb7bba5dfced3", "scanner": "scanner-primary", "fingerprint": "769e57d35d351e50", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-300e8cd63c419774", "level": "error", "message": {"text": "Dangling fetch: GET https://x.test/api/test?limit=12 (src/workers/edge-cache.test.ts:75)"}, "properties": {"repobilityId": "88d99d9d218de3e7", "scanner": "scanner-primary", "fingerprint": "300e8cd63c419774", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-5ef717f2c8198d37", "level": "error", "message": {"text": "Dangling fetch: GET https://x.test/api/test?limit=24 (src/workers/edge-cache.test.ts:77)"}, "properties": {"repobilityId": "6dae3333aa378e46", "scanner": "scanner-primary", "fingerprint": "5ef717f2c8198d37", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-0feaea792a7991f3", "level": "error", "message": {"text": "Dangling fetch: POST https://x.test/api/test (src/workers/edge-cache.test.ts:88)"}, "properties": {"repobilityId": "8007978d1b53a426", "scanner": "scanner-primary", "fingerprint": "0feaea792a7991f3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-70365835905178df", "level": "error", "message": {"text": "Dangling fetch: GET https://x.test/api/missing (src/workers/edge-cache.test.ts:100)"}, "properties": {"repobilityId": "00bc5c6a8d67a832", "scanner": "scanner-primary", "fingerprint": "70365835905178df", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-22c6f12a90158a71", "level": "error", "message": {"text": "Dangling fetch: GET https://x.test/api/test (src/workers/edge-cache.test.ts:113)"}, "properties": {"repobilityId": "dd4b40a799c059ad", "scanner": "scanner-primary", "fingerprint": "22c6f12a90158a71", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-5a3300a670a0f3eb", "level": "error", "message": {"text": "Dangling fetch: GET https://x.test/api/test (src/workers/edge-cache.test.ts:124)"}, "properties": {"repobilityId": "e6e3096b91091811", "scanner": "scanner-primary", "fingerprint": "5a3300a670a0f3eb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-26fc526c122638db", "level": "error", "message": {"text": "Dangling fetch: GET https://x.test/api/test (src/workers/edge-cache.test.ts:130)"}, "properties": {"repobilityId": "b176f1b1ec8d85d4", "scanner": "scanner-primary", "fingerprint": "26fc526c122638db", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-1894ff495c9b2297", "level": "error", "message": {"text": "Dangling fetch: GET https://x.test/api/test (src/workers/edge-cache.test.ts:137)"}, "properties": {"repobilityId": "b18aee3912bf1888", "scanner": "scanner-primary", "fingerprint": "1894ff495c9b2297", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-dfd592ec9eed71d0", "level": "error", "message": {"text": "Dangling fetch: POST https://x.test/api/mutate (src/workers/edge-cache.test.ts:157)"}, "properties": {"repobilityId": "ea347a8632086278", "scanner": "scanner-primary", "fingerprint": "dfd592ec9eed71d0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-11d3319d90cb7b92", "level": "error", "message": {"text": "Dangling fetch: POST https://x.test/api/mutate (src/workers/edge-cache.test.ts:167)"}, "properties": {"repobilityId": "847f66567235b9a4", "scanner": "scanner-primary", "fingerprint": "11d3319d90cb7b92", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-3e72ccec60cf0fd2", "level": "error", "message": {"text": "Dangling fetch: POST https://x.test/api/mutate (src/workers/edge-cache.test.ts:175)"}, "properties": {"repobilityId": "a12d55992c0fc328", "scanner": "scanner-primary", "fingerprint": "3e72ccec60cf0fd2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-b46ad801ca459991", "level": "error", "message": {"text": "Dangling fetch: POST https://x.test/api/webhooks/encode (src/workers/edge-cache.test.ts:188)"}, "properties": {"repobilityId": "2c451ae24459b824", "scanner": "scanner-primary", "fingerprint": "b46ad801ca459991", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-55d74d218a3c7d27", "level": "error", "message": {"text": "Dangling fetch: GET /api/videos/v1/related?limit=0 (src/workers/related.test.ts:204)"}, "properties": {"repobilityId": "f536fbb394716808", "scanner": "scanner-primary", "fingerprint": "55d74d218a3c7d27", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-2b84bbcc67a15dd3", "level": "error", "message": {"text": "Dangling fetch: GET /api/videos/v1/related?limit=999 (src/workers/related.test.ts:205)"}, "properties": {"repobilityId": "edd9320ee5427e98", "scanner": "scanner-primary", "fingerprint": "2b84bbcc67a15dd3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-e21aa1cde47d6855", "level": "error", "message": {"text": "Dangling fetch: GET /api/videos/src/related?limit=12 (src/workers/related.test.ts:275)"}, "properties": {"repobilityId": "7f525b3707bafa29", "scanner": "scanner-primary", "fingerprint": "e21aa1cde47d6855", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-0d0357482623f29f", "level": "error", "message": {"text": "Dangling fetch: GET /api/videos/src/related?limit=12 (src/workers/related.test.ts:280)"}, "properties": {"repobilityId": "570db0b8c9ba1470", "scanner": "scanner-primary", "fingerprint": "0d0357482623f29f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-78ce7eb153a2d14d", "level": "error", "message": {"text": "Dangling fetch: POST /api/render/jobs/j_x/complete (src/workers/render.test.ts:134)"}, "properties": {"repobilityId": "4778a952e0db74d0", "scanner": "scanner-primary", "fingerprint": "78ce7eb153a2d14d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-7148556f2a7a9515", "level": "error", "message": {"text": "Dangling fetch: POST /api/render/jobs/j_nonexistent/complete (src/workers/render.test.ts:209)"}, "properties": {"repobilityId": "0160c6dbd871cb33", "scanner": "scanner-primary", "fingerprint": "7148556f2a7a9515", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-e41f6497d21da3b1", "level": "error", "message": {"text": "Dangling fetch: POST https://rl/take (src/workers/rate-limit.ts:95)"}, "properties": {"repobilityId": "0df0eb8711cede8a", "scanner": "scanner-primary", "fingerprint": "e41f6497d21da3b1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0a22bbcfd3cd3531", "level": "error", "message": {"text": "Dangling fetch: GET /api/echo (src/workers/csrf.test.ts:27)"}, "properties": {"repobilityId": "da8f09cc04ef5b01", "scanner": "scanner-primary", "fingerprint": "0a22bbcfd3cd3531", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-68bb61cc68c82bb2", "level": "error", "message": {"text": "Dangling fetch: POST /api/echo (src/workers/csrf.test.ts:36)"}, "properties": {"repobilityId": "c16c2eaa5d1b1eb8", "scanner": "scanner-primary", "fingerprint": "68bb61cc68c82bb2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-6eaa0355ed0bee8d", "level": "error", "message": {"text": "Dangling fetch: POST http://localhost/api/echo (src/workers/csrf.test.ts:45)"}, "properties": {"repobilityId": "80b1c0eaca623981", "scanner": "scanner-primary", "fingerprint": "6eaa0355ed0bee8d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-2303c0fc4db0e003", "level": "error", "message": {"text": "Dangling fetch: POST /api/echo (src/workers/csrf.test.ts:54)"}, "properties": {"repobilityId": "6134e2300e0e07b4", "scanner": "scanner-primary", "fingerprint": "2303c0fc4db0e003", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-7943f5c2c419d4f8", "level": "error", "message": {"text": "Dangling fetch: POST /api/echo (src/workers/csrf.test.ts:63)"}, "properties": {"repobilityId": "4e56c2d5347aad30", "scanner": "scanner-primary", "fingerprint": "7943f5c2c419d4f8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-3693766e5d3c47e5", "level": "error", "message": {"text": "Dangling fetch: POST /api/echo (src/workers/csrf.test.ts:69)"}, "properties": {"repobilityId": "c8ff85b86d11189c", "scanner": "scanner-primary", "fingerprint": "3693766e5d3c47e5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-3dedde0ad7b9fece", "level": "error", "message": {"text": "Dangling fetch: PUT /api/echo (src/workers/csrf.test.ts:78)"}, "properties": {"repobilityId": "6334c9d301abbaa4", "scanner": "scanner-primary", "fingerprint": "3dedde0ad7b9fece", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-db04157cb509ce46", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/echo (src/workers/csrf.test.ts:82)"}, "properties": {"repobilityId": "aff89af01741dd93", "scanner": "scanner-primary", "fingerprint": "db04157cb509ce46", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-9b0663a4cf20ac7f", "level": "error", "message": {"text": "Dangling fetch: POST https://api.cloudflare.com/client/v4/accounts/${accountId}/stream (src/workers/encoding.ts:29)"}, "properties": {"repobilityId": "79850cd63f823384", "scanner": "scanner-primary", "fingerprint": "9b0663a4cf20ac7f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-80a666d30a2d032b", "level": "error", "message": {"text": "Dangling fetch: POST https://encoder-container/encode (src/workers/encoding.ts:82)"}, "properties": {"repobilityId": "8c003ba29753ed1f", "scanner": "scanner-primary", "fingerprint": "80a666d30a2d032b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3a633f9379bf5563", "level": "error", "message": {"text": "Dangling fetch: POST https://channel-do/fan-out (src/workers/channel-do.ts:94)"}, "properties": {"repobilityId": "88216b27293d11ba", "scanner": "scanner-primary", "fingerprint": "3a633f9379bf5563", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-07356a120075a361", "level": "error", "message": {"text": "Dangling fetch: POST http://localhost/api/studio/image (src/workers/studio.test.ts:171)"}, "properties": {"repobilityId": "6e60a1e6909bb3ab", "scanner": "scanner-primary", "fingerprint": "07356a120075a361", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-ca52b339a94a4bca", "level": "error", "message": {"text": "Dangling fetch: POST http://localhost/api/studio/image (src/workers/studio.test.ts:207)"}, "properties": {"repobilityId": "7e11144c79bb5a4c", "scanner": "scanner-primary", "fingerprint": "ca52b339a94a4bca", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-2b759689e2845401", "level": "error", "message": {"text": "Dangling fetch: POST http://localhost/api/studio/image (src/workers/studio.test.ts:233)"}, "properties": {"repobilityId": "2b79b11d2027d355", "scanner": "scanner-primary", "fingerprint": "2b759689e2845401", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-9d594f79bf9fe33f", "level": "error", "message": {"text": "Dangling fetch: POST http://localhost/api/studio/image (src/workers/studio.test.ts:320)"}, "properties": {"repobilityId": "b8bb05362f97035f", "scanner": "scanner-primary", "fingerprint": "9d594f79bf9fe33f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-1e4dd3640d17d0cf", "level": "error", "message": {"text": "Dangling fetch: POST http://localhost/api/studio/image (src/workers/studio.test.ts:346)"}, "properties": {"repobilityId": "1d8b538d7a16d9cb", "scanner": "scanner-primary", "fingerprint": "1e4dd3640d17d0cf", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-16ba349573812670", "level": "error", "message": {"text": "Dangling fetch: POST http://localhost/api/studio/image (src/workers/studio.test.ts:364)"}, "properties": {"repobilityId": "4e563902be53bb3d", "scanner": "scanner-primary", "fingerprint": "16ba349573812670", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-199332ca9a41ac64", "level": "error", "message": {"text": "Dangling fetch: POST http://localhost/api/studio/video (src/workers/studio.test.ts:422)"}, "properties": {"repobilityId": "f476cf3e869bc8fe", "scanner": "scanner-primary", "fingerprint": "199332ca9a41ac64", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-41435879d6391562", "level": "error", "message": {"text": "Dangling fetch: POST http://localhost/api/studio/video (src/workers/studio.test.ts:478)"}, "properties": {"repobilityId": "31de71ab5fb329c0", "scanner": "scanner-primary", "fingerprint": "41435879d6391562", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-7cf79a93895a23f4", "level": "error", "message": {"text": "Dangling fetch: POST http://localhost/api/studio/video (src/workers/studio.test.ts:505)"}, "properties": {"repobilityId": "576d3cb684853f76", "scanner": "scanner-primary", "fingerprint": "7cf79a93895a23f4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-0ccff79362d36bb9", "level": "error", "message": {"text": "Dangling fetch: POST http://localhost/api/studio/video (src/workers/studio.test.ts:526)"}, "properties": {"repobilityId": "3e09ffa4df377e1e", "scanner": "scanner-primary", "fingerprint": "0ccff79362d36bb9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-6c871200bf2bfe0f", "level": "error", "message": {"text": "Dangling fetch: POST https://render-container/render (src/workers/render.ts:68)"}, "properties": {"repobilityId": "819e5fd5e28552c7", "scanner": "scanner-primary", "fingerprint": "6c871200bf2bfe0f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-89f94dfdb45befea", "level": "error", "message": {"text": "Dangling fetch: GET https://auth.pdx.software/api/health (src/workers/canonical-host.test.ts:80)"}, "properties": {"repobilityId": "43d77de5a96b5a08", "scanner": "scanner-primary", "fingerprint": "89f94dfdb45befea", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-5539070d22d30d66", "level": "error", "message": {"text": "Dangling fetch: GET https://spooool.com/api/health (src/workers/canonical-host.test.ts:83)"}, "properties": {"repobilityId": "16accd5c9cd877dc", "scanner": "scanner-primary", "fingerprint": "5539070d22d30d66", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-7af1ba1782230811", "level": "error", "message": {"text": "Dangling fetch: POST http://localhost/api/webhooks/stream (src/workers/stream-webhook.workers.test.ts:19)"}, "properties": {"repobilityId": "8002f1d71bd970c1", "scanner": "scanner-primary", "fingerprint": "7af1ba1782230811", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-880236b6b5c08fc3", "level": "error", "message": {"text": "Dangling fetch: POST http://localhost/api/webhooks/stream (src/workers/stream-webhook.workers.test.ts:36)"}, "properties": {"repobilityId": "2a4cb8309fcd5fd4", "scanner": "scanner-primary", "fingerprint": "880236b6b5c08fc3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-eb6b8c22cbaf7407", "level": "error", "message": {"text": "Dangling fetch: POST http://localhost/api/webhooks/stream (src/workers/stream-webhook.workers.test.ts:59)"}, "properties": {"repobilityId": "5b2be8493483d1f3", "scanner": "scanner-primary", "fingerprint": "eb6b8c22cbaf7407", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2da7ecb1147d180b", "level": "error", "message": {"text": "Dangling fetch: GET https://example.com/api/discover/search?q=cats (src/workers/discover.workers.test.ts:6)"}, "properties": {"repobilityId": "8420e330f861c5de", "scanner": "scanner-primary", "fingerprint": "2da7ecb1147d180b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e28b281e8b24800e", "level": "error", "message": {"text": "Dangling fetch: GET https://example.com/api/discover/search (src/workers/discover.workers.test.ts:11)"}, "properties": {"repobilityId": "e366b3eeb90c3d4b", "scanner": "scanner-primary", "fingerprint": "e28b281e8b24800e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2a3b9ca69f290839", "level": "error", "message": {"text": "Dangling fetch: GET /sitemap-videos-1.xml (src/workers/seo.test.ts:513)"}, "properties": {"repobilityId": "3b1d993a79699846", "scanner": "scanner-primary", "fingerprint": "2a3b9ca69f290839", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-474993bcc0c57e86", "level": "error", "message": {"text": "Dangling fetch: GET /sitemap-videos-foo.xml (src/workers/seo.test.ts:524)"}, "properties": {"repobilityId": "a72438a1541296ab", "scanner": "scanner-primary", "fingerprint": "474993bcc0c57e86", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-9599f861e3450fd5", "level": "error", "message": {"text": "Dangling fetch: GET /sitemap-videos-0.xml (src/workers/seo.test.ts:530)"}, "properties": {"repobilityId": "608a8d32ef0d1351", "scanner": "scanner-primary", "fingerprint": "9599f861e3450fd5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-9a932384cefb836a", "level": "error", "message": {"text": "Dangling fetch: GET /sitemap-videos-99.xml (src/workers/seo.test.ts:535)"}, "properties": {"repobilityId": "3489d47f43c06e70", "scanner": "scanner-primary", "fingerprint": "9a932384cefb836a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-4b6e6c41b21fc1e3", "level": "error", "message": {"text": "Dangling fetch: POST https://composer-agent/run-auto-mode (src/workers/create.ts:92)"}, "properties": {"repobilityId": "4a52ccb64cf65c02", "scanner": "scanner-primary", "fingerprint": "4b6e6c41b21fc1e3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3786c49cd04ecca4", "level": "error", "message": {"text": "Dangling fetch: POST https://composer-agent/prime (src/workers/create.ts:146)"}, "properties": {"repobilityId": "8f51a49f132b1ac8", "scanner": "scanner-primary", "fingerprint": "3786c49cd04ecca4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-797716036bf06620", "level": "error", "message": {"text": "Dangling fetch: GET https://composer-agent/snapshot (src/workers/create.ts:178)"}, "properties": {"repobilityId": "752ba04eec131e54", "scanner": "scanner-primary", "fingerprint": "797716036bf06620", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d659f807363b4b3d", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost/api/videos?limit=10&page=1 (src/workers/videos.workers.test.ts:18)"}, "properties": {"repobilityId": "210075a04453575d", "scanner": "scanner-primary", "fingerprint": "d659f807363b4b3d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-133d24db3b64864f", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost/api/videos/does-not-exist (src/workers/videos.workers.test.ts:25)"}, "properties": {"repobilityId": "2237fc83ef24b25d", "scanner": "scanner-primary", "fingerprint": "133d24db3b64864f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ddc35e883f2b179d", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost/api/videos/vid-int-1 (src/workers/videos.workers.test.ts:34)"}, "properties": {"repobilityId": "eb5907b9077a7af8", "scanner": "scanner-primary", "fingerprint": "ddc35e883f2b179d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d4f824dc2a0132a4", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost/api/videos/trending?limit=5 (src/workers/videos.workers.test.ts:46)"}, "properties": {"repobilityId": "8b4333b721b58134", "scanner": "scanner-primary", "fingerprint": "d4f824dc2a0132a4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-386f28619f7717b3", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost/api/videos/trending?limit=5 (src/workers/videos.workers.test.ts:51)"}, "properties": {"repobilityId": "e6952f6dd95d7e90", "scanner": "scanner-primary", "fingerprint": "386f28619f7717b3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-584818de47f216cc", "level": "error", "message": {"text": "Dangling fetch: POST http://localhost/api/videos/upload (src/workers/videos.workers.test.ts:64)"}, "properties": {"repobilityId": "af7668df5701e230", "scanner": "scanner-primary", "fingerprint": "584818de47f216cc", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e4e2222b3a49f4a2", "level": "error", "message": {"text": "Dangling fetch: POST http://localhost/api/videos/upload (src/workers/videos.workers.test.ts:76)"}, "properties": {"repobilityId": "1922ef0f98fc6113", "scanner": "scanner-primary", "fingerprint": "e4e2222b3a49f4a2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-94e1009dc5273091", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost:${SERVER_PORT}${GET_FOLDERS} (src/frontend/recorder/actions/fetch-project-folders.ts:6)"}, "properties": {"repobilityId": "ca5747c3a71153eb", "scanner": "scanner-primary", "fingerprint": "94e1009dc5273091", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-feda3b42da05c1de", "level": "error", "message": {"text": "Dangling fetch: POST http://localhost:${SERVER_PORT}${CREATE_FOLDER} (src/frontend/recorder/actions/create-folder.ts:11)"}, "properties": {"repobilityId": "0dab9f885c86a0df", "scanner": "scanner-primary", "fingerprint": "feda3b42da05c1de", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b13136938008565f", "level": "error", "message": {"text": "Dangling fetch: POST /api/users/me/${field} (src/frontend/pages/Profile.tsx:40)"}, "properties": {"repobilityId": "e1f61553f1e92bc9", "scanner": "scanner-primary", "fingerprint": "b13136938008565f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-cf7d6e2ac2020f35", "level": "error", "message": {"text": "Dangling fetch: POST /api/auth/send-verification-email (src/frontend/pages/Upload.tsx:54)"}, "properties": {"repobilityId": "89ed3c4a23377a0b", "scanner": "scanner-primary", "fingerprint": "cf7d6e2ac2020f35", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-016428a82ca79152", "level": "error", "message": {"text": "Dangling fetch: GET /api/auth/list-sessions (src/frontend/lib/sessions.ts:30)"}, "properties": {"repobilityId": "f986e6bf99b484ce", "scanner": "scanner-primary", "fingerprint": "016428a82ca79152", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4a9a89c9d6942f6b", "level": "error", "message": {"text": "Dangling fetch: POST /api/auth/revoke-session (src/frontend/lib/sessions.ts:38)"}, "properties": {"repobilityId": "5da20c81e67a2eb7", "scanner": "scanner-primary", "fingerprint": "4a9a89c9d6942f6b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6de0c6dc741104db", "level": "error", "message": {"text": "Dangling fetch: POST /api/auth/revoke-other-sessions (src/frontend/lib/sessions.ts:48)"}, "properties": {"repobilityId": "10234e313c69fc2f", "scanner": "scanner-primary", "fingerprint": "6de0c6dc741104db", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-75c76ddd7cb186c6", "level": "note", "message": {"text": "Unused endpoint: GET /api/v1/session"}, "properties": {"repobilityId": "330bbea985a3b60c", "scanner": "scanner-primary", "fingerprint": "75c76ddd7cb186c6", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-0f60899ab0400f78", "level": "note", "message": {"text": "Unused endpoint: GET /api/auth/error"}, "properties": {"repobilityId": "14288faface1c61b", "scanner": "scanner-primary", "fingerprint": "0f60899ab0400f78", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1aa00d6976e8a478", "level": "note", "message": {"text": "Unused endpoint: GET /api/v1/debug-session"}, "properties": {"repobilityId": "e19862c13bec300b", "scanner": "scanner-primary", "fingerprint": "1aa00d6976e8a478", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-0d8a44fe2cfeb9c1", "level": "note", "message": {"text": "Unused endpoint: ALL /agents/*"}, "properties": {"repobilityId": "d7c02c5176b2f7a6", "scanner": "scanner-primary", "fingerprint": "0d8a44fe2cfeb9c1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-10d2f7f3a376d993", "level": "note", "message": {"text": "Unused endpoint: GET /deleted/recent"}, "properties": {"repobilityId": "1a2b00095e454152", "scanner": "scanner-primary", "fingerprint": "10d2f7f3a376d993", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7a009b1a56794f45", "level": "note", "message": {"text": "Unused endpoint: POST /"}, "properties": {"repobilityId": "e515b14b6dd458c9", "scanner": "scanner-primary", "fingerprint": "7a009b1a56794f45", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-419089e7ca779e72", "level": "note", "message": {"text": "Unused endpoint: POST /:id/restore"}, "properties": {"repobilityId": "dc25d335f93d6452", "scanner": "scanner-primary", "fingerprint": "419089e7ca779e72", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ca5756175765b49d", "level": "note", "message": {"text": "Unused endpoint: GET /:id"}, "properties": {"repobilityId": "fdbdd0e8cd989408", "scanner": "scanner-primary", "fingerprint": "ca5756175765b49d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-77eb63462d766ba4", "level": "note", "message": {"text": "Unused endpoint: GET /:id/chat"}, "properties": {"repobilityId": "4ab28a794b2a5bea", "scanner": "scanner-primary", "fingerprint": "77eb63462d766ba4", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5fbc954f63526821", "level": "note", "message": {"text": "Unused endpoint: PATCH /:id"}, "properties": {"repobilityId": "0dc4dcff398d2179", "scanner": "scanner-primary", "fingerprint": "5fbc954f63526821", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-029a05dcf8ba6bc8", "level": "note", "message": {"text": "Unused endpoint: GET /:id/outline"}, "properties": {"repobilityId": "b4cf4a1d425a98d6", "scanner": "scanner-primary", "fingerprint": "029a05dcf8ba6bc8", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-779a67424b0e4a17", "level": "note", "message": {"text": "Unused endpoint: GET /:id/publisher-pack"}, "properties": {"repobilityId": "9293f97b50f8fa32", "scanner": "scanner-primary", "fingerprint": "779a67424b0e4a17", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-177e93927e24dc58", "level": "note", "message": {"text": "Unused endpoint: POST /:id/publisher-pack/seo"}, "properties": {"repobilityId": "c5669265f30285db", "scanner": "scanner-primary", "fingerprint": "177e93927e24dc58", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f7183c7b0f86e533", "level": "note", "message": {"text": "Unused endpoint: PATCH /:id/publisher-pack"}, "properties": {"repobilityId": "ecf877ca657fa1fb", "scanner": "scanner-primary", "fingerprint": "f7183c7b0f86e533", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-82cbc876a8d4853a", "level": "note", "message": {"text": "Unused endpoint: POST /:id/publisher-pack/approve"}, "properties": {"repobilityId": "426e51eeed753c7e", "scanner": "scanner-primary", "fingerprint": "82cbc876a8d4853a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-dd2f02f124488566", "level": "note", "message": {"text": "Unused endpoint: GET /:id/book"}, "properties": {"repobilityId": "310585c755b0140b", "scanner": "scanner-primary", "fingerprint": "dd2f02f124488566", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f2b07ebf1cc25c57", "level": "note", "message": {"text": "Unused endpoint: POST /:id/tts"}, "properties": {"repobilityId": "6be735d7e2d48844", "scanner": "scanner-primary", "fingerprint": "f2b07ebf1cc25c57", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6f303311c967be30", "level": "note", "message": {"text": "Unused endpoint: GET /:id/export/jobs"}, "properties": {"repobilityId": "3858f666be10fb3f", "scanner": "scanner-primary", "fingerprint": "6f303311c967be30", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5d51d59f41d7b91c", "level": "note", "message": {"text": "Unused endpoint: POST /:id/export"}, "properties": {"repobilityId": "e3f8c819cdf51f8b", "scanner": "scanner-primary", "fingerprint": "5d51d59f41d7b91c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a8455c1a83a5e4c7", "level": "note", "message": {"text": "Unused endpoint: GET /:id/export/:jobId/download"}, "properties": {"repobilityId": "bd9c398908e42c63", "scanner": "scanner-primary", "fingerprint": "a8455c1a83a5e4c7", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-0c24d29ec2d2de7e", "level": "note", "message": {"text": "Unused endpoint: GET /:id/narration/auditions"}, "properties": {"repobilityId": "e1bbf708dad11479", "scanner": "scanner-primary", "fingerprint": "0c24d29ec2d2de7e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1eb265d2394d01ad", "level": "note", "message": {"text": "Unused endpoint: POST /:id/narration/audition"}, "properties": {"repobilityId": "f3ebde2f08d3886e", "scanner": "scanner-primary", "fingerprint": "1eb265d2394d01ad", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f7bf8f592c5b19d8", "level": "note", "message": {"text": "Unused endpoint: GET /:id/narration/auditions/:jobId/audio"}, "properties": {"repobilityId": "b9bb5f9faa83043b", "scanner": "scanner-primary", "fingerprint": "f7bf8f592c5b19d8", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-15549d647cc6ca82", "level": "note", "message": {"text": "Unused endpoint: POST /:id/narration/auditions/:jobId/approve"}, "properties": {"repobilityId": "085c3d0af0367b98", "scanner": "scanner-primary", "fingerprint": "15549d647cc6ca82", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-88f7527c474fbbe2", "level": "note", "message": {"text": "Unused endpoint: POST /:id/audiobook"}, "properties": {"repobilityId": "59f94e4ddd65411a", "scanner": "scanner-primary", "fingerprint": "88f7527c474fbbe2", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-4c1502f5c222d7f4", "level": "note", "message": {"text": "Unused endpoint: GET /:id/audiobook/jobs"}, "properties": {"repobilityId": "3d566206da1d8af7", "scanner": "scanner-primary", "fingerprint": "4c1502f5c222d7f4", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e4640cc0f147c43e", "level": "note", "message": {"text": "Unused endpoint: GET /:id/audiobook/:jobId/download"}, "properties": {"repobilityId": "903ab7226921056e", "scanner": "scanner-primary", "fingerprint": "e4640cc0f147c43e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-daba1f2767c4f031", "level": "note", "message": {"text": "Unused endpoint: GET /:id/launch/brief"}, "properties": {"repobilityId": "5e3cf8e16256dac3", "scanner": "scanner-primary", "fingerprint": "daba1f2767c4f031", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-9e4cfdb7efb26d7c", "level": "note", "message": {"text": "Unused endpoint: POST /:id/launch/brief"}, "properties": {"repobilityId": "ceebd4f9937afea0", "scanner": "scanner-primary", "fingerprint": "9e4cfdb7efb26d7c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-91df8d60000fc013", "level": "note", "message": {"text": "Unused endpoint: GET /:id/launch/brief/download"}, "properties": {"repobilityId": "d7d163df0ca0f5ab", "scanner": "scanner-primary", "fingerprint": "91df8d60000fc013", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-510795a36dcb9347", "level": "note", "message": {"text": "Unused endpoint: POST /:id/outlines"}, "properties": {"repobilityId": "802dd99791c60b35", "scanner": "scanner-primary", "fingerprint": "510795a36dcb9347", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7a61c112b611f4bb", "level": "note", "message": {"text": "Unused endpoint: DELETE /:id"}, "properties": {"repobilityId": "15d7b5a19cffc50e", "scanner": "scanner-primary", "fingerprint": "7a61c112b611f4bb", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c6642d266d447038", "level": "note", "message": {"text": "Unused endpoint: POST /:id/plan"}, "properties": {"repobilityId": "e51cd37e498c904e", "scanner": "scanner-primary", "fingerprint": "c6642d266d447038", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3d9080588b5f6cc1", "level": "note", "message": {"text": "Unused endpoint: GET /:id/posts"}, "properties": {"repobilityId": "b3b6f3761d46c3c8", "scanner": "scanner-primary", "fingerprint": "3d9080588b5f6cc1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-94a4daa5ff1bf840", "level": "note", "message": {"text": "Unused endpoint: GET /:id/posts/:postId"}, "properties": {"repobilityId": "5fc09a50ab50601f", "scanner": "scanner-primary", "fingerprint": "94a4daa5ff1bf840", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-cf77e282626d108f", "level": "note", "message": {"text": "Unused endpoint: PATCH /:id/posts/:postId"}, "properties": {"repobilityId": "c51ea17f4052ae57", "scanner": "scanner-primary", "fingerprint": "cf77e282626d108f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ac42d30ebb4174e4", "level": "note", "message": {"text": "Unused endpoint: POST /:id/posts/:postId/publish"}, "properties": {"repobilityId": "275e98583623ada2", "scanner": "scanner-primary", "fingerprint": "ac42d30ebb4174e4", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8313cf93c61ffaa6", "level": "note", "message": {"text": "Unused endpoint: GET /render"}, "properties": {"repobilityId": "c01e3a2acda01d5a", "scanner": "scanner-primary", "fingerprint": "8313cf93c61ffaa6", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2ff59542e4fccd01", "level": "note", "message": {"text": "Unused endpoint: GET /market-dataset"}, "properties": {"repobilityId": "ea4755f3fd6e89d0", "scanner": "scanner-primary", "fingerprint": "2ff59542e4fccd01", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-06ac0f2c74855539", "level": "note", "message": {"text": "Unused endpoint: POST /market-dataset/refresh"}, "properties": {"repobilityId": "879fbdfc3d329086", "scanner": "scanner-primary", "fingerprint": "06ac0f2c74855539", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ec4a5d55b1200f49", "level": "note", "message": {"text": "Unused endpoint: GET /queries"}, "properties": {"repobilityId": "5cd4c583e2a72491", "scanner": "scanner-primary", "fingerprint": "ec4a5d55b1200f49", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-edbbebc9081b938c", "level": "note", "message": {"text": "Unused endpoint: GET /projects/:projectId/findings"}, "properties": {"repobilityId": "fc3cb6dadcc84af0", "scanner": "scanner-primary", "fingerprint": "edbbebc9081b938c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-0857ad98f7fbb9b7", "level": "note", "message": {"text": "Unused endpoint: POST /queries"}, "properties": {"repobilityId": "fab578c52a32f041", "scanner": "scanner-primary", "fingerprint": "0857ad98f7fbb9b7", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-fd1dc91abf32142d", "level": "note", "message": {"text": "Unused endpoint: GET /me"}, "properties": {"repobilityId": "dd2a293edd956c01", "scanner": "scanner-primary", "fingerprint": "fd1dc91abf32142d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8e05e0e489fc31a6", "level": "note", "message": {"text": "Unused endpoint: GET /elevenlabs-key"}, "properties": {"repobilityId": "c9dbd93988ad1104", "scanner": "scanner-primary", "fingerprint": "8e05e0e489fc31a6", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6221447d7614808a", "level": "note", "message": {"text": "Unused endpoint: GET /emdash-token"}, "properties": {"repobilityId": "2cec9d3135012dc3", "scanner": "scanner-primary", "fingerprint": "6221447d7614808a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e4fb734252700a91", "level": "note", "message": {"text": "Unused endpoint: PUT /emdash-token"}, "properties": {"repobilityId": "b57282749540f1c0", "scanner": "scanner-primary", "fingerprint": "e4fb734252700a91", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3367914cf21ed509", "level": "note", "message": {"text": "Unused endpoint: PUT /elevenlabs-key"}, "properties": {"repobilityId": "b855224df15a4f84", "scanner": "scanner-primary", "fingerprint": "3367914cf21ed509", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-10c3d3625395f13b", "level": "note", "message": {"text": "Unused endpoint: GET /postpilot-guides"}, "properties": {"repobilityId": "5ea0135919938a36", "scanner": "scanner-primary", "fingerprint": "10c3d3625395f13b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-bdf24efccd645f7c", "level": "note", "message": {"text": "Unused endpoint: POST /import-postpilot"}, "properties": {"repobilityId": "68f34e828286b38a", "scanner": "scanner-primary", "fingerprint": "bdf24efccd645f7c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}