{"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-9bafb55c7a587702", "name": "Stray `console.log` in TS/JS \u2014 api/run-sentinel.js:179", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 api/run-sentinel.js:179"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-20c93a52a9d30291", "name": "Stray `console.log` in TS/JS \u2014 api/adapt-format.js:483", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 api/adapt-format.js:483"}, "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-96365dd6a09c00c6", "name": "Stray `console.log` in TS/JS \u2014 api/chat.js:535", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 api/chat.js:535"}, "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-ae039135cd5f8b2f", "name": "Stray `console.log` in TS/JS \u2014 api/_dnaDebugLog.js:23", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 api/_dnaDebugLog.js:23"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b6ae2a6c225ce936", "name": "Stray `console.log` in TS/JS \u2014 api/watch-build-persona.ts:202", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 api/watch-build-persona.ts:202"}, "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-92463f770fbcf499", "name": "Stray `console.log` in TS/JS \u2014 scripts/generate-icons.js:29", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/generate-icons.js:29"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f8a36318defc6fc7", "name": "TODO/FIXME marker in shipping code \u2014 legacy/api/kajabi-webhook.js:41", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 legacy/api/kajabi-webhook.js:41"}, "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-9b62cc00232c3e60", "name": "Stray `console.log` in TS/JS \u2014 legacy/api/kajabi-webhook.js:39", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 legacy/api/kajabi-webhook.js:39"}, "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-22b6bdd720b9f83a", "name": "Stray `console.log` in TS/JS \u2014 legacy/api/adapt-format.js:325", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 legacy/api/adapt-format.js:325"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e0e47132dfe557c8", "name": "Stray `console.log` in TS/JS \u2014 legacy/api/generate.js:94", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 legacy/api/generate.js:94"}, "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-64f8b74774bd6651", "name": "Stray `console.log` in TS/JS \u2014 legacy/api/chat.js:405", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 legacy/api/chat.js:405"}, "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-e7ed811d9cb50f73", "name": "Stray `console.log` in TS/JS \u2014 legacy/api/run-pipeline.js:250", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 legacy/api/run-pipeline.js:250"}, "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-8f300e3602f542ee", "name": "Stray `console.log` in TS/JS \u2014 legacy/api/visual.js:134", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 legacy/api/visual.js:134"}, "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-f527b245d473d865", "name": "Stray `console.log` in TS/JS \u2014 server/index.js:530", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/index.js:530"}, "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-5d82f47df16eeb7b", "name": "TODO/FIXME marker in shipping code \u2014 src/pages/BookADemoPage.tsx:27", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/pages/BookADemoPage.tsx:27"}, "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-c636b1923e45a9b8", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/pages/studio/BrandDnaSettings.tsx:157", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/pages/studio/BrandDnaSettings.tsx:157"}, "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-0ec82a527a342043", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/pages/studio/OutputDetail.tsx:812", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/pages/studio/OutputDetail.tsx:812"}, "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-f0ea4e127f796eba", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/claude-agent/index.ts:9", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/claude-agent/index.ts:9"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b5fa0fad62eca166", "name": "Insecure pattern 'local_storage_auth_token' in src/components/studio/StudioSidebar.tsx:127", "shortDescription": {"text": "Insecure pattern 'local_storage_auth_token' in src/components/studio/StudioSidebar.tsx:127"}, "fullDescription": {"text": "Found a known-risky pattern (local_storage_auth_token). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c7c45c943c741ad5", "name": "Insecure pattern 'dangerous_innerhtml' in src/pages/studio/BrandDnaSettings.tsx:157", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/pages/studio/BrandDnaSettings.tsx:157"}, "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-3c4ea53c81ac31fe", "name": "Insecure pattern 'local_storage_auth_token' in src/pages/studio/Watch.tsx:56", "shortDescription": {"text": "Insecure pattern 'local_storage_auth_token' in src/pages/studio/Watch.tsx:56"}, "fullDescription": {"text": "Found a known-risky pattern (local_storage_auth_token). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f344c1d2920cb40a", "name": "Insecure pattern 'dangerous_innerhtml' in src/pages/studio/OutputDetail.tsx:812", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/pages/studio/OutputDetail.tsx:812"}, "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-4601e3ad3bb28677", "name": "No CI/CD pipelines detected", "shortDescription": {"text": "No CI/CD pipelines detected"}, "fullDescription": {"text": "No GitHub Actions, GitLab CI, or CircleCI configs found. Without CI you can't gate deploys on tests/lints."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-7b183491054a9cae", "name": "Very large file: api/chat.js (1089 lines)", "shortDescription": {"text": "Very large file: api/chat.js (1089 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-934b8d10eb5227b5", "name": "Very large file: src/pages/OnboardingPage.tsx (1702 lines)", "shortDescription": {"text": "Very large file: src/pages/OnboardingPage.tsx (1702 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4fde45e53f54cbdc", "name": "Very large file: src/pages/studio/WorkSession.tsx (8100 lines)", "shortDescription": {"text": "Very large file: src/pages/studio/WorkSession.tsx (8100 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-75a244f6a453fab8", "name": "Very large file: src/pages/studio/Watch.tsx (4811 lines)", "shortDescription": {"text": "Very large file: src/pages/studio/Watch.tsx (4811 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-726e2b33819c382e", "name": "Very large file: src/pages/studio/OutputDetail.tsx (1077 lines)", "shortDescription": {"text": "Very large file: src/pages/studio/OutputDetail.tsx (1077 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-060a3846eaaab551", "name": "Very large file: src/pages/studio/Wrap.tsx (2521 lines)", "shortDescription": {"text": "Very large file: src/pages/studio/Wrap.tsx (2521 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4698c64021cac86c", "name": "Very large file: src/pages/studio/work/WorkReview.tsx (2506 lines)", "shortDescription": {"text": "Very large file: src/pages/studio/work/WorkReview.tsx (2506 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6893a6c8b0861585", "name": "Very low test-to-source ratio", "shortDescription": {"text": "Very low test-to-source ratio"}, "fullDescription": {"text": "9 test file(s) for 242 source file(s) (ratio 0.04). Consider adding integration or unit tests for critical paths."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "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-faccb9061e9b52a0", "name": "No README detected", "shortDescription": {"text": "No README detected"}, "fullDescription": {"text": "No README file was found. Generated repos without README context are hard to operate, validate, or safely hand off."}, "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 66 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 149 placeholder/mock markers across 42 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, ci, operator-readme. 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": "medium", "confidence": 1.0}}, {"id": "scanner-749d4bc1bd66df5f", "name": "Agent instructions exist but release-hardening basics are missing", "shortDescription": {"text": "Agent instructions exist but release-hardening basics are missing"}, "fullDescription": {"text": "AI-coder instruction files were found, but the repo is missing license, ci, operator-readme. Treat this as a contract gap: the agent is guided, but the generated output is not yet guarded by the controls that make it repeatable."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ea8f3013f588db25", "name": "Shallow git history limits provenance confidence", "shortDescription": {"text": "Shallow git history limits provenance confidence"}, "fullDescription": {"text": "The repository is a shallow clone. Origin/evolution analysis cannot distinguish fresh generation, imported legacy code, or long-lived human code with high confidence."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8424db9c75e04ba4", "name": "Very short observed git history", "shortDescription": {"text": "Very short observed git history"}, "fullDescription": {"text": "The repo has multiple source files but two or fewer visible commits. This is not a failure by itself, but it lowers confidence in evolution-based diagnosis."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6fac23c9331ff88e", "name": "Commented-code block (5 lines) in api/run-sentinel.js:63", "shortDescription": {"text": "Commented-code block (5 lines) in api/run-sentinel.js: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-2198dae6fdc31860", "name": "Commented-code block (7 lines) in api/adapt-format.js:240", "shortDescription": {"text": "Commented-code block (7 lines) in api/adapt-format.js:240"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4904b0fc9ebbeead", "name": "Commented-code block (6 lines) in api/validate-access-code.js:4", "shortDescription": {"text": "Commented-code block (6 lines) in api/validate-access-code.js: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-0d9408ecc4f9900b", "name": "Commented-code block (6 lines) in api/brand-dna-from-url.js:82", "shortDescription": {"text": "Commented-code block (6 lines) in api/brand-dna-from-url.js:82"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3f69cf8959ae95b3", "name": "Commented-code block (7 lines) in api/ingest-url.js:13", "shortDescription": {"text": "Commented-code block (7 lines) in api/ingest-url.js:13"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9d617122e509f8c4", "name": "`fetch()` without try/.catch or AbortSignal \u2014 api/ingest-url.js:68", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 api/ingest-url.js:68"}, "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-98f6d6b55bd5b93a", "name": "Commented-code block (5 lines) in api/chat.js:469", "shortDescription": {"text": "Commented-code block (5 lines) in api/chat.js:469"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-39ec4d83ca51d49b", "name": "Commented-code block (6 lines) in api/watch-council-conversation.ts:5", "shortDescription": {"text": "Commented-code block (6 lines) in api/watch-council-conversation.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-d492b81b76024c6d", "name": "Commented-code block (8 lines) in api/watch-council-answer.ts:13", "shortDescription": {"text": "Commented-code block (8 lines) in api/watch-council-answer.ts:13"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-17509eb1b04a777c", "name": "Commented-code block (5 lines) in api/feedback.ts:6", "shortDescription": {"text": "Commented-code block (5 lines) in api/feedback.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-296fa613d79e8a23", "name": "`fetch()` without try/.catch or AbortSignal \u2014 api/transcribe.js:46", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 api/transcribe.js:46"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-244ad4dc4ee21164", "name": "`fetch()` without try/.catch or AbortSignal \u2014 legacy/api/visual.js:144", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 legacy/api/visual.js:144"}, "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-3176cab39f04f07d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/utils/brandDNAProcessor.ts:41", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/utils/brandDNAProcessor.ts:41"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-075e036084c237df", "name": "Commented-code block (5 lines) in src/utils/voiceDNAProcessor.ts:115", "shortDescription": {"text": "Commented-code block (5 lines) in src/utils/voiceDNAProcessor.ts:115"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e57739e2497a523d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/utils/voiceDNAProcessor.ts:107", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/utils/voiceDNAProcessor.ts:107"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-7d244baafff2c9d7", "name": "Commented-code block (8 lines) in src/components/Logo.tsx:109", "shortDescription": {"text": "Commented-code block (8 lines) in src/components/Logo.tsx:109"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4a769d53154b4611", "name": "Commented-code block (5 lines) in src/components/review/HumanVoiceVerdict.tsx:5", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/review/HumanVoiceVerdict.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-e039076e772790e6", "name": "Commented-code block (6 lines) in src/components/review/AskReedPanel.tsx:7", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/review/AskReedPanel.tsx: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-99b565233dbd1d21", "name": "Commented-code block (5 lines) in src/components/shared/CitationText.tsx:135", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/shared/CitationText.tsx:135"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a62a9cf148af087b", "name": "Commented-code block (6 lines) in src/components/watch/FollowedItems.tsx:3", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/watch/FollowedItems.tsx: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-ad36241f1ac71a64", "name": "Commented-code block (7 lines) in src/components/watch/Brief.tsx:5", "shortDescription": {"text": "Commented-code block (7 lines) in src/components/watch/Brief.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-4af3691a71621fce", "name": "Commented-code block (5 lines) in src/components/onboarding/VoiceDNAReview.tsx:29", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/onboarding/VoiceDNAReview.tsx: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-c8c89cec0a1d7b20", "name": "Commented-code block (5 lines) in src/components/onboarding/VoiceInterviewChat.tsx:451", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/onboarding/VoiceInterviewChat.tsx:451"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4607cc1202635a5f", "name": "Commented-code block (5 lines) in src/components/onboarding/BrandDNAChat.tsx:339", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/onboarding/BrandDNAChat.tsx:339"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b47e218328840a22", "name": "Commented-code block (8 lines) in src/components/studio/StudioTopBar.tsx:199", "shortDescription": {"text": "Commented-code block (8 lines) in src/components/studio/StudioTopBar.tsx:199"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-58c0431316eed042", "name": "Commented-code block (5 lines) in src/components/studio/LoadingAnimation.tsx:13", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/studio/LoadingAnimation.tsx:13"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-532b95d5a62ee949", "name": "Commented-code block (5 lines) in src/components/studio/StudioErrorBoundary.tsx:4", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/studio/StudioErrorBoundary.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-10e8632309ba6381", "name": "Commented-code block (8 lines) in src/components/studio/StudioSidebar.tsx:15", "shortDescription": {"text": "Commented-code block (8 lines) in src/components/studio/StudioSidebar.tsx:15"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0513a5f0b8caed3f", "name": "Commented-code block (5 lines) in src/components/work/EditableDraft.tsx:14", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/work/EditableDraft.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-b272555d24b5dc78", "name": "Commented-code block (5 lines) in src/components/work/SelectionPromptBar.tsx:32", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/work/SelectionPromptBar.tsx:32"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c7e2b8b25ef38085", "name": "Commented-code block (6 lines) in src/lib/sessionPersistence.ts:96", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/sessionPersistence.ts:96"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ef3600a70fd36690", "name": "Commented-code block (6 lines) in src/lib/sessionMoments.ts:3", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/sessionMoments.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-ab1f9a452654a957", "name": "Commented-code block (6 lines) in src/lib/streaming/use-edit-stream.ts:42", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/streaming/use-edit-stream.ts:42"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6e623ac56790ca29", "name": "Commented-code block (5 lines) in src/pages/ExplorePage.tsx:484", "shortDescription": {"text": "Commented-code block (5 lines) in src/pages/ExplorePage.tsx:484"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-941427c3804b743f", "name": "Commented-code block (5 lines) in src/pages/AuthPage.tsx:40", "shortDescription": {"text": "Commented-code block (5 lines) in src/pages/AuthPage.tsx:40"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a43dcc1d2bf17b95", "name": "Commented-code block (5 lines) in src/pages/OnboardingPage.tsx:113", "shortDescription": {"text": "Commented-code block (5 lines) in src/pages/OnboardingPage.tsx:113"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d393940fa913207a", "name": "Commented-code block (6 lines) in src/pages/studio/OutputLibraryPage.tsx:150", "shortDescription": {"text": "Commented-code block (6 lines) in src/pages/studio/OutputLibraryPage.tsx:150"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ca3316a6106efee0", "name": "Commented-code block (15 lines) in src/pages/studio/WorkSession.tsx:1741", "shortDescription": {"text": "Commented-code block (15 lines) in src/pages/studio/WorkSession.tsx:1741"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cf5711648caa344b", "name": "Commented-code block (6 lines) in src/pages/studio/Watch.tsx:143", "shortDescription": {"text": "Commented-code block (6 lines) in src/pages/studio/Watch.tsx:143"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5c116e7261de377f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/pages/studio/Watch.tsx:2306", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/pages/studio/Watch.tsx:2306"}, "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-dd9a10456d07e95b", "name": "Commented-code block (6 lines) in src/pages/studio/OutputDetail.tsx:332", "shortDescription": {"text": "Commented-code block (6 lines) in src/pages/studio/OutputDetail.tsx:332"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0319bb99f03c934d", "name": "Commented-code block (5 lines) in src/pages/studio/ProjectDetail.tsx:108", "shortDescription": {"text": "Commented-code block (5 lines) in src/pages/studio/ProjectDetail.tsx:108"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-73bddad5b4fb5fcd", "name": "Commented-code block (7 lines) in src/pages/studio/Wrap.tsx:920", "shortDescription": {"text": "Commented-code block (7 lines) in src/pages/studio/Wrap.tsx:920"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ade0fb1abeef8177", "name": "Commented-code block (6 lines) in src/pages/studio/LearningSurface.tsx:93", "shortDescription": {"text": "Commented-code block (6 lines) in src/pages/studio/LearningSurface.tsx:93"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-95663804812f84a9", "name": "Commented-code block (5 lines) in src/pages/studio/Resources.tsx:221", "shortDescription": {"text": "Commented-code block (5 lines) in src/pages/studio/Resources.tsx:221"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cdaee9d9ba2f4998", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/pages/studio/Resources.tsx:400", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/pages/studio/Resources.tsx:400"}, "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-ef51ad482e953af3", "name": "Commented-code block (8 lines) in src/pages/studio/Settings.tsx:49", "shortDescription": {"text": "Commented-code block (8 lines) in src/pages/studio/Settings.tsx: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-af3be9123ad9a2ed", "name": "Commented-code block (6 lines) in src/pages/studio/work/WorkReview.tsx:55", "shortDescription": {"text": "Commented-code block (6 lines) in src/pages/studio/work/WorkReview.tsx:55"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-21f2e7422c158fda", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/pages/studio/work/WorkReview.tsx:526", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/pages/studio/work/WorkReview.tsx:526"}, "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-da871c2b096833e7", "name": "Frontend route `/book-a-demo` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `/book-a-demo` has no Link/navigate to it \u2014 src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-44e517fe57ec320f", "name": "Frontend route `/studio` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `/studio` has no Link/navigate to it \u2014 src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-cef386312d50c26d", "name": "Frontend route `dashboard` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `dashboard` has no Link/navigate to it \u2014 src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e81f74136a02f5ff", "name": "Frontend route `work` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `work` has no Link/navigate to it \u2014 src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-fee96fb9c951733f", "name": "Frontend route `work/resume` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `work/resume` has no Link/navigate to it \u2014 src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-65f3d4749f478f7b", "name": "Frontend route `work/:id` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `work/:id` has no Link/navigate to it \u2014 src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f87b1f22abca1180", "name": "Frontend route `work/:sessionId/draft` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `work/:sessionId/draft` has no Link/navigate to it \u2014 src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2dd99c62e6b10bae", "name": "Frontend route `work/:sessionId/review` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `work/:sessionId/review` has no Link/navigate to it \u2014 src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-13369518714f94a8", "name": "Frontend route `watch` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `watch` has no Link/navigate to it \u2014 src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-df13672028ace21e", "name": "Frontend route `outputs` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `outputs` has no Link/navigate to it \u2014 src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-39020a81f6685d91", "name": "Frontend route `learned` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `learned` has no Link/navigate to it \u2014 src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ab8d919138b7ecfc", "name": "Frontend route `outputs/templates` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `outputs/templates` has no Link/navigate to it \u2014 src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-7093c7b25eb953fc", "name": "Frontend route `outputs/:id` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `outputs/:id` has no Link/navigate to it \u2014 src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-096cea40ec3d5ac7", "name": "Frontend route `reference` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `reference` has no Link/navigate to it \u2014 src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-04cc2822c0877567", "name": "Frontend route `wrap` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `wrap` has no Link/navigate to it \u2014 src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-5df65f21ef705c26", "name": "Frontend route `wrap/visual/:outputId` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `wrap/visual/:outputId` has no Link/navigate to it \u2014 src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-7be36735c436327f", "name": "Frontend route `projects` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `projects` has no Link/navigate to it \u2014 src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-94a3f3179d6ac3c0", "name": "Frontend route `projects/:id` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `projects/:id` has no Link/navigate to it \u2014 src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-8ac3d71cce7781d0", "name": "Frontend route `resources` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `resources` has no Link/navigate to it \u2014 src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0626b4c2e4efcb82", "name": "Frontend route `settings` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `settings` has no Link/navigate to it \u2014 src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c90a10e690d14de4", "name": "Frontend route `settings/voice` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `settings/voice` has no Link/navigate to it \u2014 src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-fde651f6fced5718", "name": "Frontend route `settings/brand` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `settings/brand` has no Link/navigate to it \u2014 src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ec1dc453c2abfb33", "name": "Frontend route `settings/method` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `settings/method` has no Link/navigate to it \u2014 src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b78c1069436849e0", "name": "Frontend route `lot` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `lot` has no Link/navigate to it \u2014 src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-bcaf2a449b95a2b8", "name": "Frontend route `workbench` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `workbench` has no Link/navigate to it \u2014 src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-5c5fb8eea6cbc8ba", "name": "Frontend route `admin` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `admin` has no Link/navigate to it \u2014 src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-fba9e34f8b9ba37a", "name": "Frontend route `admin/feedback` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `admin/feedback` has no Link/navigate to it \u2014 src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d68470aba4f8536b", "name": "Dangling fetch: POST https://api.firecrawl.dev/v1/search (api/run-sentinel.js:14)", "shortDescription": {"text": "Dangling fetch: POST https://api.firecrawl.dev/v1/search (api/run-sentinel.js:14)"}, "fullDescription": {"text": "`api/run-sentinel.js:14` calls `POST https://api.firecrawl.dev/v1/search` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.firecrawl.dev/v1/search`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-524571594b65beba", "name": "Dangling fetch: POST https://api.firecrawl.dev/v1/scrape (api/run-sentinel.js:169)", "shortDescription": {"text": "Dangling fetch: POST https://api.firecrawl.dev/v1/scrape (api/run-sentinel.js:169)"}, "fullDescription": {"text": "`api/run-sentinel.js:169` calls `POST https://api.firecrawl.dev/v1/scrape` 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.firecrawl.dev/v1/scrape`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-47e3baab9b1e89a8", "name": "Dangling fetch: POST https://api.firecrawl.dev/v1/scrape (api/ingest-url.js:68)", "shortDescription": {"text": "Dangling fetch: POST https://api.firecrawl.dev/v1/scrape (api/ingest-url.js:68)"}, "fullDescription": {"text": "`api/ingest-url.js:68` calls `POST https://api.firecrawl.dev/v1/scrape` 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.firecrawl.dev/v1/scrape`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b16f54574460339d", "name": "Dangling fetch: POST https://api.firecrawl.dev/v1/search (api/firecrawl-search.js:15)", "shortDescription": {"text": "Dangling fetch: POST https://api.firecrawl.dev/v1/search (api/firecrawl-search.js:15)"}, "fullDescription": {"text": "`api/firecrawl-search.js:15` calls `POST https://api.firecrawl.dev/v1/search` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.firecrawl.dev/v1/search`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0b109bb6e71976d7", "name": "Dangling fetch: POST https://api.firecrawl.dev/v1/search (api/chat.js:614)", "shortDescription": {"text": "Dangling fetch: POST https://api.firecrawl.dev/v1/search (api/chat.js:614)"}, "fullDescription": {"text": "`api/chat.js:614` calls `POST https://api.firecrawl.dev/v1/search` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.firecrawl.dev/v1/search`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9c382f7a5e67eeba", "name": "Dangling fetch: POST https://api.firecrawl.dev/v1/search (api/_firecrawl.js:21)", "shortDescription": {"text": "Dangling fetch: POST https://api.firecrawl.dev/v1/search (api/_firecrawl.js:21)"}, "fullDescription": {"text": "`api/_firecrawl.js:21` calls `POST https://api.firecrawl.dev/v1/search` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.firecrawl.dev/v1/search`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-18c60a1be4020744", "name": "Dangling fetch: POST https://api.firecrawl.dev/v1/scrape (api/_firecrawl.js:63)", "shortDescription": {"text": "Dangling fetch: POST https://api.firecrawl.dev/v1/scrape (api/_firecrawl.js:63)"}, "fullDescription": {"text": "`api/_firecrawl.js:63` calls `POST https://api.firecrawl.dev/v1/scrape` 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.firecrawl.dev/v1/scrape`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-dccf42b6ec931377", "name": "Dangling fetch: POST https://api.openai.com/v1/audio/transcriptions (api/transcribe.js:46)", "shortDescription": {"text": "Dangling fetch: POST https://api.openai.com/v1/audio/transcriptions (api/transcribe.js:46)"}, "fullDescription": {"text": "`api/transcribe.js:46` calls `POST https://api.openai.com/v1/audio/transcriptions` 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/audio/transcriptions`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9a6698b5452b7473", "name": "Dangling fetch: POST https://api.firecrawl.dev/v1/search (legacy/api/chat.js:484)", "shortDescription": {"text": "Dangling fetch: POST https://api.firecrawl.dev/v1/search (legacy/api/chat.js:484)"}, "fullDescription": {"text": "`legacy/api/chat.js:484` calls `POST https://api.firecrawl.dev/v1/search` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.firecrawl.dev/v1/search`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b6bb184d425af77d", "name": "Dangling fetch: POST https://api.resend.com/emails (api/feedback.ts:52)", "shortDescription": {"text": "Dangling fetch: POST https://api.resend.com/emails (api/feedback.ts:52)"}, "fullDescription": {"text": "`api/feedback.ts:52` calls `POST https://api.resend.com/emails` 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.resend.com/emails`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b9ab033a2836d721", "name": "Dangling fetch: POST /api/redeem-access-code (src/components/ProtectedRoute.tsx:61)", "shortDescription": {"text": "Dangling fetch: POST /api/redeem-access-code (src/components/ProtectedRoute.tsx:61)"}, "fullDescription": {"text": "`src/components/ProtectedRoute.tsx:61` calls `POST /api/redeem-access-code` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/redeem-access-code`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-cd24114ae61b4d42", "name": "Dangling fetch: POST /api/validate-access-code (src/components/ProtectedRoute.tsx:81)", "shortDescription": {"text": "Dangling fetch: POST /api/validate-access-code (src/components/ProtectedRoute.tsx:81)"}, "fullDescription": {"text": "`src/components/ProtectedRoute.tsx:81` calls `POST /api/validate-access-code` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/validate-access-code`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1163d03b509af3bb", "name": "Dangling fetch: POST /api/redeem-access-code (src/components/ProtectedRoute.tsx:99)", "shortDescription": {"text": "Dangling fetch: POST /api/redeem-access-code (src/components/ProtectedRoute.tsx:99)"}, "fullDescription": {"text": "`src/components/ProtectedRoute.tsx:99` calls `POST /api/redeem-access-code` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/redeem-access-code`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-dc152bc3b70d2f2b", "name": "Dangling fetch: POST /api/watch-table-takes (src/components/watch/Brief.tsx:307)", "shortDescription": {"text": "Dangling fetch: POST /api/watch-table-takes (src/components/watch/Brief.tsx:307)"}, "fullDescription": {"text": "`src/components/watch/Brief.tsx:307` calls `POST /api/watch-table-takes` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/watch-table-takes`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a9e369b51bad46cc", "name": "Dangling fetch: POST /api/firecrawl-search (src/components/studio/SettingsResearchPanel.tsx:92)", "shortDescription": {"text": "Dangling fetch: POST /api/firecrawl-search (src/components/studio/SettingsResearchPanel.tsx:92)"}, "fullDescription": {"text": "`src/components/studio/SettingsResearchPanel.tsx:92` calls `POST /api/firecrawl-search` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/firecrawl-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-258faa2813cadde7", "name": "Dangling fetch: POST /api/feedback (src/components/feedback/FeedbackWidget.tsx:95)", "shortDescription": {"text": "Dangling fetch: POST /api/feedback (src/components/feedback/FeedbackWidget.tsx:95)"}, "fullDescription": {"text": "`src/components/feedback/FeedbackWidget.tsx:95` calls `POST /api/feedback` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/feedback`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-dda0c7f5527491ef", "name": "Dangling fetch: POST /api/edit-stream (src/lib/streaming/use-edit-stream.ts:56)", "shortDescription": {"text": "Dangling fetch: POST /api/edit-stream (src/lib/streaming/use-edit-stream.ts:56)"}, "fullDescription": {"text": "`src/lib/streaming/use-edit-stream.ts:56` calls `POST /api/edit-stream` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/edit-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-71bd089fb345b807", "name": "Dangling fetch: POST /api/draft-stream (src/lib/streaming/use-draft-stream.ts:41)", "shortDescription": {"text": "Dangling fetch: POST /api/draft-stream (src/lib/streaming/use-draft-stream.ts:41)"}, "fullDescription": {"text": "`src/lib/streaming/use-draft-stream.ts:41` calls `POST /api/draft-stream` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/draft-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-32605b3a9f540dab", "name": "Dangling fetch: POST /api/validate-access-code (src/pages/AuthPage.tsx:96)", "shortDescription": {"text": "Dangling fetch: POST /api/validate-access-code (src/pages/AuthPage.tsx:96)"}, "fullDescription": {"text": "`src/pages/AuthPage.tsx:96` calls `POST /api/validate-access-code` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/validate-access-code`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c33a61e2e3d579ae", "name": "Dangling fetch: POST /api/redeem-access-code (src/pages/AuthPage.tsx:146)", "shortDescription": {"text": "Dangling fetch: POST /api/redeem-access-code (src/pages/AuthPage.tsx:146)"}, "fullDescription": {"text": "`src/pages/AuthPage.tsx:146` calls `POST /api/redeem-access-code` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/redeem-access-code`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7a74a125aba6d165", "name": "Dangling fetch: POST /api/feedback-admin (src/pages/studio/FeedbackInbox.tsx:35)", "shortDescription": {"text": "Dangling fetch: POST /api/feedback-admin (src/pages/studio/FeedbackInbox.tsx:35)"}, "fullDescription": {"text": "`src/pages/studio/FeedbackInbox.tsx:35` calls `POST /api/feedback-admin` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/feedback-admin`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b9667c681b57c280", "name": "Dangling fetch: POST /api/firecrawl-search (src/pages/studio/Watch.tsx:671)", "shortDescription": {"text": "Dangling fetch: POST /api/firecrawl-search (src/pages/studio/Watch.tsx:671)"}, "fullDescription": {"text": "`src/pages/studio/Watch.tsx:671` calls `POST /api/firecrawl-search` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/firecrawl-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-837ae45487c4ebac", "name": "Dangling fetch: POST /api/watch-council-answer (src/pages/studio/Watch.tsx:2306)", "shortDescription": {"text": "Dangling fetch: POST /api/watch-council-answer (src/pages/studio/Watch.tsx:2306)"}, "fullDescription": {"text": "`src/pages/studio/Watch.tsx:2306` calls `POST /api/watch-council-answer` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/watch-council-answer`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-513037538a24fea1", "name": "Dangling fetch: POST /api/watch-council-conversation (src/pages/studio/Watch.tsx:2665)", "shortDescription": {"text": "Dangling fetch: POST /api/watch-council-conversation (src/pages/studio/Watch.tsx:2665)"}, "fullDescription": {"text": "`src/pages/studio/Watch.tsx:2665` calls `POST /api/watch-council-conversation` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/watch-council-conversation`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e0de92fb01c8add7", "name": "Dangling fetch: POST /api/watch-council-answer (src/pages/studio/Watch.tsx:2753)", "shortDescription": {"text": "Dangling fetch: POST /api/watch-council-answer (src/pages/studio/Watch.tsx:2753)"}, "fullDescription": {"text": "`src/pages/studio/Watch.tsx:2753` calls `POST /api/watch-council-answer` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/watch-council-answer`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7127e541a56b8389", "name": "Dangling fetch: POST /api/watch-council-moderate (src/pages/studio/Watch.tsx:2858)", "shortDescription": {"text": "Dangling fetch: POST /api/watch-council-moderate (src/pages/studio/Watch.tsx:2858)"}, "fullDescription": {"text": "`src/pages/studio/Watch.tsx:2858` calls `POST /api/watch-council-moderate` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/watch-council-moderate`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-475e1af22ac6efb1", "name": "Dangling fetch: POST /api/watch-council-answer (src/pages/studio/Watch.tsx:2942)", "shortDescription": {"text": "Dangling fetch: POST /api/watch-council-answer (src/pages/studio/Watch.tsx:2942)"}, "fullDescription": {"text": "`src/pages/studio/Watch.tsx:2942` calls `POST /api/watch-council-answer` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/watch-council-answer`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-187639ab6628c00a", "name": "Dangling fetch: POST /api/method-dna-extract (src/pages/studio/MethodDnaSettings.tsx:118)", "shortDescription": {"text": "Dangling fetch: POST /api/method-dna-extract (src/pages/studio/MethodDnaSettings.tsx:118)"}, "fullDescription": {"text": "`src/pages/studio/MethodDnaSettings.tsx:118` calls `POST /api/method-dna-extract` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/method-dna-extract`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c3b8d9f7bd9d2c8e", "name": "Dangling fetch: POST /api/ingest-url (src/pages/studio/Resources.tsx:400)", "shortDescription": {"text": "Dangling fetch: POST /api/ingest-url (src/pages/studio/Resources.tsx:400)"}, "fullDescription": {"text": "`src/pages/studio/Resources.tsx:400` calls `POST /api/ingest-url` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/ingest-url`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a35447f8786bf7d3", "name": "Dangling fetch: POST /api/admin-data (src/pages/studio/AdminPanel.tsx:31)", "shortDescription": {"text": "Dangling fetch: POST /api/admin-data (src/pages/studio/AdminPanel.tsx:31)"}, "fullDescription": {"text": "`src/pages/studio/AdminPanel.tsx:31` calls `POST /api/admin-data` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin-data`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-fe5e5e8bf06a43bf", "name": "Dangling fetch: POST /api/review-v2 (src/pages/studio/work/WorkReview.tsx:526)", "shortDescription": {"text": "Dangling fetch: POST /api/review-v2 (src/pages/studio/work/WorkReview.tsx:526)"}, "fullDescription": {"text": "`src/pages/studio/work/WorkReview.tsx:526` calls `POST /api/review-v2` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/review-v2`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8cd7a41e1af43ec6", "name": "Dangling fetch: POST /api/reveal (src/pages/studio/work/WorkReview.tsx:1099)", "shortDescription": {"text": "Dangling fetch: POST /api/reveal (src/pages/studio/work/WorkReview.tsx:1099)"}, "fullDescription": {"text": "`src/pages/studio/work/WorkReview.tsx:1099` calls `POST /api/reveal` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/reveal`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5e72000211b3d425", "name": "Dangling fetch: GET /api/watch-chairs (src/pages/studio/work/WorkReview.tsx:1939)", "shortDescription": {"text": "Dangling fetch: GET /api/watch-chairs (src/pages/studio/work/WorkReview.tsx:1939)"}, "fullDescription": {"text": "`src/pages/studio/work/WorkReview.tsx:1939` calls `GET /api/watch-chairs` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/watch-chairs`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0598645978619bf1", "name": "Dangling fetch: POST /api/work-council-critique (src/pages/studio/work/WorkReview.tsx:2007)", "shortDescription": {"text": "Dangling fetch: POST /api/work-council-critique (src/pages/studio/work/WorkReview.tsx:2007)"}, "fullDescription": {"text": "`src/pages/studio/work/WorkReview.tsx:2007` calls `POST /api/work-council-critique` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/work-council-critique`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4756b4c4da7d2088", "name": "Unused endpoint: GET /api/health", "shortDescription": {"text": "Unused endpoint: GET /api/health"}, "fullDescription": {"text": "`server/index.js` declares `GET /api/health` 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-093467ddc6e6a64d", "name": "Unused endpoint: POST /api/generate", "shortDescription": {"text": "Unused endpoint: POST /api/generate"}, "fullDescription": {"text": "`server/index.js` declares `POST /api/generate` 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-39cf145d29a23447", "name": "Unused endpoint: POST /api/voice-dna", "shortDescription": {"text": "Unused endpoint: POST /api/voice-dna"}, "fullDescription": {"text": "`server/index.js` declares `POST /api/voice-dna` 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-aab77b7f2ce9f87e", "name": "Unused endpoint: POST /api/brand-dna", "shortDescription": {"text": "Unused endpoint: POST /api/brand-dna"}, "fullDescription": {"text": "`server/index.js` declares `POST /api/brand-dna` 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-dde3adb27bf7eebe", "name": "Unused endpoint: USE /api", "shortDescription": {"text": "Unused endpoint: USE /api"}, "fullDescription": {"text": "`server/index.js` declares `USE /api` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}]}}, "automationDetails": {"id": "repobility/23339"}, "properties": {"repository": "youngtuck/everywhere-studio-beta", "repoUrl": "https://github.com/youngtuck/everywhere-studio-beta", "branch": "main"}, "results": [{"ruleId": "scanner-9bafb55c7a587702", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 api/run-sentinel.js:179"}, "properties": {"repobilityId": "2ecd3364b0286c8a", "scanner": "scanner-primary", "fingerprint": "9bafb55c7a587702", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-20c93a52a9d30291", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 api/adapt-format.js:483"}, "properties": {"repobilityId": "97443517d5766400", "scanner": "scanner-primary", "fingerprint": "20c93a52a9d30291", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-96365dd6a09c00c6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 api/chat.js:535"}, "properties": {"repobilityId": "635e2ad58725df1a", "scanner": "scanner-primary", "fingerprint": "96365dd6a09c00c6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ae039135cd5f8b2f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 api/_dnaDebugLog.js:23"}, "properties": {"repobilityId": "f8ec2d09bd98bd18", "scanner": "scanner-primary", "fingerprint": "ae039135cd5f8b2f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b6ae2a6c225ce936", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 api/watch-build-persona.ts:202"}, "properties": {"repobilityId": "4a7c24610c68e138", "scanner": "scanner-primary", "fingerprint": "b6ae2a6c225ce936", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-92463f770fbcf499", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/generate-icons.js:29"}, "properties": {"repobilityId": "50ac322bf6978bfe", "scanner": "scanner-primary", "fingerprint": "92463f770fbcf499", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f8a36318defc6fc7", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 legacy/api/kajabi-webhook.js:41"}, "properties": {"repobilityId": "2ccd02d75c915341", "scanner": "scanner-primary", "fingerprint": "f8a36318defc6fc7", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-9b62cc00232c3e60", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 legacy/api/kajabi-webhook.js:39"}, "properties": {"repobilityId": "444affed44c3cdbf", "scanner": "scanner-primary", "fingerprint": "9b62cc00232c3e60", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-22b6bdd720b9f83a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 legacy/api/adapt-format.js:325"}, "properties": {"repobilityId": "e239b847b995f4bc", "scanner": "scanner-primary", "fingerprint": "22b6bdd720b9f83a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e0e47132dfe557c8", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 legacy/api/generate.js:94"}, "properties": {"repobilityId": "441a47ca0a61ef39", "scanner": "scanner-primary", "fingerprint": "e0e47132dfe557c8", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-64f8b74774bd6651", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 legacy/api/chat.js:405"}, "properties": {"repobilityId": "cfce56c55aab2e5b", "scanner": "scanner-primary", "fingerprint": "64f8b74774bd6651", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e7ed811d9cb50f73", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 legacy/api/run-pipeline.js:250"}, "properties": {"repobilityId": "94ac320ab19f1293", "scanner": "scanner-primary", "fingerprint": "e7ed811d9cb50f73", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8f300e3602f542ee", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 legacy/api/visual.js:134"}, "properties": {"repobilityId": "8d747f3079858256", "scanner": "scanner-primary", "fingerprint": "8f300e3602f542ee", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f527b245d473d865", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/index.js:530"}, "properties": {"repobilityId": "21e6b3de2b3dd856", "scanner": "scanner-primary", "fingerprint": "f527b245d473d865", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5d82f47df16eeb7b", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/pages/BookADemoPage.tsx:27"}, "properties": {"repobilityId": "e37050d736b8775e", "scanner": "scanner-primary", "fingerprint": "5d82f47df16eeb7b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-c636b1923e45a9b8", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/pages/studio/BrandDnaSettings.tsx:157"}, "properties": {"repobilityId": "a6c10da7f92880d5", "scanner": "scanner-primary", "fingerprint": "c636b1923e45a9b8", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-0ec82a527a342043", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/pages/studio/OutputDetail.tsx:812"}, "properties": {"repobilityId": "f46fd0e2aa0fc2ce", "scanner": "scanner-primary", "fingerprint": "0ec82a527a342043", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-f0ea4e127f796eba", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/claude-agent/index.ts:9"}, "properties": {"repobilityId": "dbb61ca752b6062d", "scanner": "scanner-primary", "fingerprint": "f0ea4e127f796eba", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/claude-agent/index.ts"}, "region": {"startLine": 9}}}]}, {"ruleId": "scanner-b5fa0fad62eca166", "level": "warning", "message": {"text": "Insecure pattern 'local_storage_auth_token' in src/components/studio/StudioSidebar.tsx:127"}, "properties": {"repobilityId": "475256538249b612", "scanner": "scanner-primary", "fingerprint": "b5fa0fad62eca166", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "local_storage_auth_token"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/studio/StudioSidebar.tsx"}, "region": {"startLine": 127}}}]}, {"ruleId": "scanner-c7c45c943c741ad5", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/pages/studio/BrandDnaSettings.tsx:157"}, "properties": {"repobilityId": "add2a7365b761afc", "scanner": "scanner-primary", "fingerprint": "c7c45c943c741ad5", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/pages/studio/BrandDnaSettings.tsx"}, "region": {"startLine": 157}}}]}, {"ruleId": "scanner-3c4ea53c81ac31fe", "level": "warning", "message": {"text": "Insecure pattern 'local_storage_auth_token' in src/pages/studio/Watch.tsx:56"}, "properties": {"repobilityId": "76e192ee13372b2c", "scanner": "scanner-primary", "fingerprint": "3c4ea53c81ac31fe", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "local_storage_auth_token"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/pages/studio/Watch.tsx"}, "region": {"startLine": 56}}}]}, {"ruleId": "scanner-f344c1d2920cb40a", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/pages/studio/OutputDetail.tsx:812"}, "properties": {"repobilityId": "ddc85b7946f271cb", "scanner": "scanner-primary", "fingerprint": "f344c1d2920cb40a", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/pages/studio/OutputDetail.tsx"}, "region": {"startLine": 812}}}]}, {"ruleId": "scanner-4601e3ad3bb28677", "level": "warning", "message": {"text": "No CI/CD pipelines detected"}, "properties": {"repobilityId": "c3ee439bce2bc51e", "scanner": "scanner-primary", "fingerprint": "4601e3ad3bb28677", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["coverage"]}}, {"ruleId": "scanner-7b183491054a9cae", "level": "note", "message": {"text": "Very large file: api/chat.js (1089 lines)"}, "properties": {"repobilityId": "9daaf761132b7dd3", "scanner": "scanner-primary", "fingerprint": "7b183491054a9cae", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-934b8d10eb5227b5", "level": "note", "message": {"text": "Very large file: src/pages/OnboardingPage.tsx (1702 lines)"}, "properties": {"repobilityId": "ac5cc39ed65fbed2", "scanner": "scanner-primary", "fingerprint": "934b8d10eb5227b5", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-4fde45e53f54cbdc", "level": "note", "message": {"text": "Very large file: src/pages/studio/WorkSession.tsx (8100 lines)"}, "properties": {"repobilityId": "a212ff448f620722", "scanner": "scanner-primary", "fingerprint": "4fde45e53f54cbdc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-75a244f6a453fab8", "level": "note", "message": {"text": "Very large file: src/pages/studio/Watch.tsx (4811 lines)"}, "properties": {"repobilityId": "aebf57c4d148ff93", "scanner": "scanner-primary", "fingerprint": "75a244f6a453fab8", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-726e2b33819c382e", "level": "note", "message": {"text": "Very large file: src/pages/studio/OutputDetail.tsx (1077 lines)"}, "properties": {"repobilityId": "008ee804a053e9e4", "scanner": "scanner-primary", "fingerprint": "726e2b33819c382e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-060a3846eaaab551", "level": "note", "message": {"text": "Very large file: src/pages/studio/Wrap.tsx (2521 lines)"}, "properties": {"repobilityId": "24ac67b512a8c1ab", "scanner": "scanner-primary", "fingerprint": "060a3846eaaab551", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-4698c64021cac86c", "level": "note", "message": {"text": "Very large file: src/pages/studio/work/WorkReview.tsx (2506 lines)"}, "properties": {"repobilityId": "90cc435b4f18a707", "scanner": "scanner-primary", "fingerprint": "4698c64021cac86c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-6893a6c8b0861585", "level": "warning", "message": {"text": "Very low test-to-source ratio"}, "properties": {"repobilityId": "54a7de3f06314bf0", "scanner": "scanner-primary", "fingerprint": "6893a6c8b0861585", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["tests", "coverage"]}}, {"ruleId": "scanner-141b30a41e03817b", "level": "note", "message": {"text": "No license file detected"}, "properties": {"repobilityId": "b449246396c3257b", "scanner": "scanner-primary", "fingerprint": "141b30a41e03817b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["license", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-faccb9061e9b52a0", "level": "note", "message": {"text": "No README detected"}, "properties": {"repobilityId": "1eb4b45e13a2322b", "scanner": "scanner-primary", "fingerprint": "faccb9061e9b52a0", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["docs", "readme", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "f815928ad00b77fc", "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": "f0eb15ab7f6df601", "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": "6ae4f90bba519b32", "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": "warning", "message": {"text": "Composite production-readiness gap"}, "properties": {"repobilityId": "7843e2b1405c51cf", "scanner": "scanner-primary", "fingerprint": "b9088664ace7f748", "layer": "quality", "severity": "medium", "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": "326574d7d0a9fc17", "scanner": "scanner-primary", "fingerprint": "749d4bc1bd66df5f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-ea8f3013f588db25", "level": "note", "message": {"text": "Shallow git history limits provenance confidence"}, "properties": {"repobilityId": "bc83153eab4872cb", "scanner": "scanner-primary", "fingerprint": "ea8f3013f588db25", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-8424db9c75e04ba4", "level": "none", "message": {"text": "Very short observed git history"}, "properties": {"repobilityId": "6e3e95b1a0f8f57b", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-6fac23c9331ff88e", "level": "none", "message": {"text": "Commented-code block (5 lines) in api/run-sentinel.js:63"}, "properties": {"repobilityId": "8a99906b6a3aa803", "scanner": "scanner-primary", "fingerprint": "6fac23c9331ff88e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2198dae6fdc31860", "level": "none", "message": {"text": "Commented-code block (7 lines) in api/adapt-format.js:240"}, "properties": {"repobilityId": "746a7a2a99f310a1", "scanner": "scanner-primary", "fingerprint": "2198dae6fdc31860", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4904b0fc9ebbeead", "level": "none", "message": {"text": "Commented-code block (6 lines) in api/validate-access-code.js:4"}, "properties": {"repobilityId": "3dd99c35a7b1fda6", "scanner": "scanner-primary", "fingerprint": "4904b0fc9ebbeead", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0d9408ecc4f9900b", "level": "none", "message": {"text": "Commented-code block (6 lines) in api/brand-dna-from-url.js:82"}, "properties": {"repobilityId": "9e43c44f9daec6bf", "scanner": "scanner-primary", "fingerprint": "0d9408ecc4f9900b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3f69cf8959ae95b3", "level": "none", "message": {"text": "Commented-code block (7 lines) in api/ingest-url.js:13"}, "properties": {"repobilityId": "c115f5027e197dd1", "scanner": "scanner-primary", "fingerprint": "3f69cf8959ae95b3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9d617122e509f8c4", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 api/ingest-url.js:68"}, "properties": {"repobilityId": "4ffb52d6053cf92f", "scanner": "scanner-primary", "fingerprint": "9d617122e509f8c4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-98f6d6b55bd5b93a", "level": "none", "message": {"text": "Commented-code block (5 lines) in api/chat.js:469"}, "properties": {"repobilityId": "d9fb886443afe5fb", "scanner": "scanner-primary", "fingerprint": "98f6d6b55bd5b93a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-39ec4d83ca51d49b", "level": "none", "message": {"text": "Commented-code block (6 lines) in api/watch-council-conversation.ts:5"}, "properties": {"repobilityId": "10388b18ae4854bf", "scanner": "scanner-primary", "fingerprint": "39ec4d83ca51d49b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d492b81b76024c6d", "level": "none", "message": {"text": "Commented-code block (8 lines) in api/watch-council-answer.ts:13"}, "properties": {"repobilityId": "fafd962e22778115", "scanner": "scanner-primary", "fingerprint": "d492b81b76024c6d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-17509eb1b04a777c", "level": "none", "message": {"text": "Commented-code block (5 lines) in api/feedback.ts:6"}, "properties": {"repobilityId": "1e9c8ef11fbc4fd5", "scanner": "scanner-primary", "fingerprint": "17509eb1b04a777c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-296fa613d79e8a23", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 api/transcribe.js:46"}, "properties": {"repobilityId": "3e3b6799761be985", "scanner": "scanner-primary", "fingerprint": "296fa613d79e8a23", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-244ad4dc4ee21164", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 legacy/api/visual.js:144"}, "properties": {"repobilityId": "1d11b36f78ff6fed", "scanner": "scanner-primary", "fingerprint": "244ad4dc4ee21164", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3176cab39f04f07d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/utils/brandDNAProcessor.ts:41"}, "properties": {"repobilityId": "ecad6e8c54b7f63c", "scanner": "scanner-primary", "fingerprint": "3176cab39f04f07d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-075e036084c237df", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/utils/voiceDNAProcessor.ts:115"}, "properties": {"repobilityId": "e6609f4421c45116", "scanner": "scanner-primary", "fingerprint": "075e036084c237df", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e57739e2497a523d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/utils/voiceDNAProcessor.ts:107"}, "properties": {"repobilityId": "607bc9ac0840aa80", "scanner": "scanner-primary", "fingerprint": "e57739e2497a523d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-7d244baafff2c9d7", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/components/Logo.tsx:109"}, "properties": {"repobilityId": "09ca29c46ed19c99", "scanner": "scanner-primary", "fingerprint": "7d244baafff2c9d7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4a769d53154b4611", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/review/HumanVoiceVerdict.tsx:5"}, "properties": {"repobilityId": "152c92c95aeb22cd", "scanner": "scanner-primary", "fingerprint": "4a769d53154b4611", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e039076e772790e6", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/review/AskReedPanel.tsx:7"}, "properties": {"repobilityId": "e962de8b32cbace4", "scanner": "scanner-primary", "fingerprint": "e039076e772790e6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-99b565233dbd1d21", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/shared/CitationText.tsx:135"}, "properties": {"repobilityId": "67f24e55cf9bcc9a", "scanner": "scanner-primary", "fingerprint": "99b565233dbd1d21", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a62a9cf148af087b", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/watch/FollowedItems.tsx:3"}, "properties": {"repobilityId": "e97e1971ad6f8ebb", "scanner": "scanner-primary", "fingerprint": "a62a9cf148af087b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ad36241f1ac71a64", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/components/watch/Brief.tsx:5"}, "properties": {"repobilityId": "bd0e4ae5ba53c62c", "scanner": "scanner-primary", "fingerprint": "ad36241f1ac71a64", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4af3691a71621fce", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/onboarding/VoiceDNAReview.tsx:29"}, "properties": {"repobilityId": "a1490ee40965ad8e", "scanner": "scanner-primary", "fingerprint": "4af3691a71621fce", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c8c89cec0a1d7b20", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/onboarding/VoiceInterviewChat.tsx:451"}, "properties": {"repobilityId": "7c1d76fdbb4a7251", "scanner": "scanner-primary", "fingerprint": "c8c89cec0a1d7b20", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4607cc1202635a5f", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/onboarding/BrandDNAChat.tsx:339"}, "properties": {"repobilityId": "bb9116216cb116c8", "scanner": "scanner-primary", "fingerprint": "4607cc1202635a5f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b47e218328840a22", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/components/studio/StudioTopBar.tsx:199"}, "properties": {"repobilityId": "a741128b0beb05ba", "scanner": "scanner-primary", "fingerprint": "b47e218328840a22", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-58c0431316eed042", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/studio/LoadingAnimation.tsx:13"}, "properties": {"repobilityId": "a2885bbd20d8cfdf", "scanner": "scanner-primary", "fingerprint": "58c0431316eed042", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-532b95d5a62ee949", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/studio/StudioErrorBoundary.tsx:4"}, "properties": {"repobilityId": "93065da5769388fd", "scanner": "scanner-primary", "fingerprint": "532b95d5a62ee949", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-10e8632309ba6381", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/components/studio/StudioSidebar.tsx:15"}, "properties": {"repobilityId": "d10e687e27576fe0", "scanner": "scanner-primary", "fingerprint": "10e8632309ba6381", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0513a5f0b8caed3f", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/work/EditableDraft.tsx:14"}, "properties": {"repobilityId": "988e32929634dbf8", "scanner": "scanner-primary", "fingerprint": "0513a5f0b8caed3f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b272555d24b5dc78", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/work/SelectionPromptBar.tsx:32"}, "properties": {"repobilityId": "93a56fd2f8c05610", "scanner": "scanner-primary", "fingerprint": "b272555d24b5dc78", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c7e2b8b25ef38085", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/sessionPersistence.ts:96"}, "properties": {"repobilityId": "c02fe4efc1e13e9c", "scanner": "scanner-primary", "fingerprint": "c7e2b8b25ef38085", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ef3600a70fd36690", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/sessionMoments.ts:3"}, "properties": {"repobilityId": "91f18b1f3a16332d", "scanner": "scanner-primary", "fingerprint": "ef3600a70fd36690", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ab1f9a452654a957", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/streaming/use-edit-stream.ts:42"}, "properties": {"repobilityId": "396d623119baa629", "scanner": "scanner-primary", "fingerprint": "ab1f9a452654a957", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6e623ac56790ca29", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/pages/ExplorePage.tsx:484"}, "properties": {"repobilityId": "720060228aa02283", "scanner": "scanner-primary", "fingerprint": "6e623ac56790ca29", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-941427c3804b743f", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/pages/AuthPage.tsx:40"}, "properties": {"repobilityId": "5a5ec57830c87f4d", "scanner": "scanner-primary", "fingerprint": "941427c3804b743f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a43dcc1d2bf17b95", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/pages/OnboardingPage.tsx:113"}, "properties": {"repobilityId": "04018a9339c9a9f9", "scanner": "scanner-primary", "fingerprint": "a43dcc1d2bf17b95", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d393940fa913207a", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/pages/studio/OutputLibraryPage.tsx:150"}, "properties": {"repobilityId": "7d88d8955cdc034f", "scanner": "scanner-primary", "fingerprint": "d393940fa913207a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ca3316a6106efee0", "level": "none", "message": {"text": "Commented-code block (15 lines) in src/pages/studio/WorkSession.tsx:1741"}, "properties": {"repobilityId": "db9647674e9ba50f", "scanner": "scanner-primary", "fingerprint": "ca3316a6106efee0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cf5711648caa344b", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/pages/studio/Watch.tsx:143"}, "properties": {"repobilityId": "3290158574ec4aa9", "scanner": "scanner-primary", "fingerprint": "cf5711648caa344b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5c116e7261de377f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/pages/studio/Watch.tsx:2306"}, "properties": {"repobilityId": "5fc72f44d9f22840", "scanner": "scanner-primary", "fingerprint": "5c116e7261de377f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-dd9a10456d07e95b", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/pages/studio/OutputDetail.tsx:332"}, "properties": {"repobilityId": "7edc50ec7ba6f663", "scanner": "scanner-primary", "fingerprint": "dd9a10456d07e95b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0319bb99f03c934d", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/pages/studio/ProjectDetail.tsx:108"}, "properties": {"repobilityId": "d4c9066d8f276e31", "scanner": "scanner-primary", "fingerprint": "0319bb99f03c934d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-73bddad5b4fb5fcd", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/pages/studio/Wrap.tsx:920"}, "properties": {"repobilityId": "aff480885e237454", "scanner": "scanner-primary", "fingerprint": "73bddad5b4fb5fcd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ade0fb1abeef8177", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/pages/studio/LearningSurface.tsx:93"}, "properties": {"repobilityId": "704578c4be9f8c3c", "scanner": "scanner-primary", "fingerprint": "ade0fb1abeef8177", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-95663804812f84a9", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/pages/studio/Resources.tsx:221"}, "properties": {"repobilityId": "d83e92d33a2aa625", "scanner": "scanner-primary", "fingerprint": "95663804812f84a9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cdaee9d9ba2f4998", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/pages/studio/Resources.tsx:400"}, "properties": {"repobilityId": "15934f669ed33884", "scanner": "scanner-primary", "fingerprint": "cdaee9d9ba2f4998", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ef51ad482e953af3", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/pages/studio/Settings.tsx:49"}, "properties": {"repobilityId": "5a71c3c6caaa7bb9", "scanner": "scanner-primary", "fingerprint": "ef51ad482e953af3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-af3be9123ad9a2ed", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/pages/studio/work/WorkReview.tsx:55"}, "properties": {"repobilityId": "61a96a2ccb9391ec", "scanner": "scanner-primary", "fingerprint": "af3be9123ad9a2ed", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-21f2e7422c158fda", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/pages/studio/work/WorkReview.tsx:526"}, "properties": {"repobilityId": "307af26c3bf8f401", "scanner": "scanner-primary", "fingerprint": "21f2e7422c158fda", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-da871c2b096833e7", "level": "warning", "message": {"text": "Frontend route `/book-a-demo` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "3e5f4186c2755b4d", "scanner": "scanner-primary", "fingerprint": "da871c2b096833e7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-44e517fe57ec320f", "level": "warning", "message": {"text": "Frontend route `/studio` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "49c517670e065fc1", "scanner": "scanner-primary", "fingerprint": "44e517fe57ec320f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-cef386312d50c26d", "level": "warning", "message": {"text": "Frontend route `dashboard` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "7176b9e63e301c9b", "scanner": "scanner-primary", "fingerprint": "cef386312d50c26d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-e81f74136a02f5ff", "level": "warning", "message": {"text": "Frontend route `work` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "a57db88c6cd37c41", "scanner": "scanner-primary", "fingerprint": "e81f74136a02f5ff", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-fee96fb9c951733f", "level": "warning", "message": {"text": "Frontend route `work/resume` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "b598c378c3314f69", "scanner": "scanner-primary", "fingerprint": "fee96fb9c951733f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-65f3d4749f478f7b", "level": "warning", "message": {"text": "Frontend route `work/:id` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "b8be276de3632379", "scanner": "scanner-primary", "fingerprint": "65f3d4749f478f7b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-f87b1f22abca1180", "level": "warning", "message": {"text": "Frontend route `work/:sessionId/draft` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "52ddbdd1042cc86f", "scanner": "scanner-primary", "fingerprint": "f87b1f22abca1180", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-2dd99c62e6b10bae", "level": "warning", "message": {"text": "Frontend route `work/:sessionId/review` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "3055b0ffa91df0a3", "scanner": "scanner-primary", "fingerprint": "2dd99c62e6b10bae", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-13369518714f94a8", "level": "warning", "message": {"text": "Frontend route `watch` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "a94451d4dfa6a9fb", "scanner": "scanner-primary", "fingerprint": "13369518714f94a8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-df13672028ace21e", "level": "warning", "message": {"text": "Frontend route `outputs` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "9e6cea1d35cb94f8", "scanner": "scanner-primary", "fingerprint": "df13672028ace21e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-39020a81f6685d91", "level": "warning", "message": {"text": "Frontend route `learned` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "cdf2bfa869a43331", "scanner": "scanner-primary", "fingerprint": "39020a81f6685d91", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-ab8d919138b7ecfc", "level": "warning", "message": {"text": "Frontend route `outputs/templates` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "10fd775da49f9edf", "scanner": "scanner-primary", "fingerprint": "ab8d919138b7ecfc", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-7093c7b25eb953fc", "level": "warning", "message": {"text": "Frontend route `outputs/:id` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "45f4567affb26a2c", "scanner": "scanner-primary", "fingerprint": "7093c7b25eb953fc", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-096cea40ec3d5ac7", "level": "warning", "message": {"text": "Frontend route `reference` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "eff78f3f0ff4c3d4", "scanner": "scanner-primary", "fingerprint": "096cea40ec3d5ac7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-04cc2822c0877567", "level": "warning", "message": {"text": "Frontend route `wrap` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "6f964412c5107ffd", "scanner": "scanner-primary", "fingerprint": "04cc2822c0877567", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-5df65f21ef705c26", "level": "warning", "message": {"text": "Frontend route `wrap/visual/:outputId` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "a93535a786a0d02a", "scanner": "scanner-primary", "fingerprint": "5df65f21ef705c26", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-7be36735c436327f", "level": "warning", "message": {"text": "Frontend route `projects` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "72edb6d1e2f77246", "scanner": "scanner-primary", "fingerprint": "7be36735c436327f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-94a3f3179d6ac3c0", "level": "warning", "message": {"text": "Frontend route `projects/:id` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "913fb4c0758987a8", "scanner": "scanner-primary", "fingerprint": "94a3f3179d6ac3c0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-8ac3d71cce7781d0", "level": "warning", "message": {"text": "Frontend route `resources` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "48201d1961acda95", "scanner": "scanner-primary", "fingerprint": "8ac3d71cce7781d0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-0626b4c2e4efcb82", "level": "warning", "message": {"text": "Frontend route `settings` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "9badda3b3a471962", "scanner": "scanner-primary", "fingerprint": "0626b4c2e4efcb82", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-c90a10e690d14de4", "level": "warning", "message": {"text": "Frontend route `settings/voice` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "7f931bec45956bb5", "scanner": "scanner-primary", "fingerprint": "c90a10e690d14de4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-fde651f6fced5718", "level": "warning", "message": {"text": "Frontend route `settings/brand` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "2cb0381a04f5dbfe", "scanner": "scanner-primary", "fingerprint": "fde651f6fced5718", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-ec1dc453c2abfb33", "level": "warning", "message": {"text": "Frontend route `settings/method` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "f4b04f910b14ed84", "scanner": "scanner-primary", "fingerprint": "ec1dc453c2abfb33", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-b78c1069436849e0", "level": "warning", "message": {"text": "Frontend route `lot` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "48a4b78d19d3ca4c", "scanner": "scanner-primary", "fingerprint": "b78c1069436849e0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-bcaf2a449b95a2b8", "level": "warning", "message": {"text": "Frontend route `workbench` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "896010b03f31bc98", "scanner": "scanner-primary", "fingerprint": "bcaf2a449b95a2b8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-5c5fb8eea6cbc8ba", "level": "warning", "message": {"text": "Frontend route `admin` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "e4d3d94b837b99bb", "scanner": "scanner-primary", "fingerprint": "5c5fb8eea6cbc8ba", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-fba9e34f8b9ba37a", "level": "warning", "message": {"text": "Frontend route `admin/feedback` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "fa784de16d43b9f0", "scanner": "scanner-primary", "fingerprint": "fba9e34f8b9ba37a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-d68470aba4f8536b", "level": "error", "message": {"text": "Dangling fetch: POST https://api.firecrawl.dev/v1/search (api/run-sentinel.js:14)"}, "properties": {"repobilityId": "c2acc1a8d086c9bf", "scanner": "scanner-primary", "fingerprint": "d68470aba4f8536b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-524571594b65beba", "level": "error", "message": {"text": "Dangling fetch: POST https://api.firecrawl.dev/v1/scrape (api/run-sentinel.js:169)"}, "properties": {"repobilityId": "1774087913ad029b", "scanner": "scanner-primary", "fingerprint": "524571594b65beba", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-47e3baab9b1e89a8", "level": "error", "message": {"text": "Dangling fetch: POST https://api.firecrawl.dev/v1/scrape (api/ingest-url.js:68)"}, "properties": {"repobilityId": "74c74fbeab3b4ca7", "scanner": "scanner-primary", "fingerprint": "47e3baab9b1e89a8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b16f54574460339d", "level": "error", "message": {"text": "Dangling fetch: POST https://api.firecrawl.dev/v1/search (api/firecrawl-search.js:15)"}, "properties": {"repobilityId": "8fc962da267a226e", "scanner": "scanner-primary", "fingerprint": "b16f54574460339d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0b109bb6e71976d7", "level": "error", "message": {"text": "Dangling fetch: POST https://api.firecrawl.dev/v1/search (api/chat.js:614)"}, "properties": {"repobilityId": "13d072e18099e13d", "scanner": "scanner-primary", "fingerprint": "0b109bb6e71976d7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9c382f7a5e67eeba", "level": "error", "message": {"text": "Dangling fetch: POST https://api.firecrawl.dev/v1/search (api/_firecrawl.js:21)"}, "properties": {"repobilityId": "b7ae57cad2ef4388", "scanner": "scanner-primary", "fingerprint": "9c382f7a5e67eeba", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-18c60a1be4020744", "level": "error", "message": {"text": "Dangling fetch: POST https://api.firecrawl.dev/v1/scrape (api/_firecrawl.js:63)"}, "properties": {"repobilityId": "5f049a572b3cc0d2", "scanner": "scanner-primary", "fingerprint": "18c60a1be4020744", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-dccf42b6ec931377", "level": "error", "message": {"text": "Dangling fetch: POST https://api.openai.com/v1/audio/transcriptions (api/transcribe.js:46)"}, "properties": {"repobilityId": "fd9537dd13109906", "scanner": "scanner-primary", "fingerprint": "dccf42b6ec931377", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9a6698b5452b7473", "level": "error", "message": {"text": "Dangling fetch: POST https://api.firecrawl.dev/v1/search (legacy/api/chat.js:484)"}, "properties": {"repobilityId": "e149fca087ce0231", "scanner": "scanner-primary", "fingerprint": "9a6698b5452b7473", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b6bb184d425af77d", "level": "error", "message": {"text": "Dangling fetch: POST https://api.resend.com/emails (api/feedback.ts:52)"}, "properties": {"repobilityId": "068f9ff9a760c1dc", "scanner": "scanner-primary", "fingerprint": "b6bb184d425af77d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b9ab033a2836d721", "level": "error", "message": {"text": "Dangling fetch: POST /api/redeem-access-code (src/components/ProtectedRoute.tsx:61)"}, "properties": {"repobilityId": "1ba9ef0416aff856", "scanner": "scanner-primary", "fingerprint": "b9ab033a2836d721", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-cd24114ae61b4d42", "level": "error", "message": {"text": "Dangling fetch: POST /api/validate-access-code (src/components/ProtectedRoute.tsx:81)"}, "properties": {"repobilityId": "512c158b9ce781ef", "scanner": "scanner-primary", "fingerprint": "cd24114ae61b4d42", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1163d03b509af3bb", "level": "error", "message": {"text": "Dangling fetch: POST /api/redeem-access-code (src/components/ProtectedRoute.tsx:99)"}, "properties": {"repobilityId": "17acbf5a13d4357b", "scanner": "scanner-primary", "fingerprint": "1163d03b509af3bb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-dc152bc3b70d2f2b", "level": "error", "message": {"text": "Dangling fetch: POST /api/watch-table-takes (src/components/watch/Brief.tsx:307)"}, "properties": {"repobilityId": "6e1e1463582b6101", "scanner": "scanner-primary", "fingerprint": "dc152bc3b70d2f2b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a9e369b51bad46cc", "level": "error", "message": {"text": "Dangling fetch: POST /api/firecrawl-search (src/components/studio/SettingsResearchPanel.tsx:92)"}, "properties": {"repobilityId": "1830e3b965955bf6", "scanner": "scanner-primary", "fingerprint": "a9e369b51bad46cc", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-258faa2813cadde7", "level": "error", "message": {"text": "Dangling fetch: POST /api/feedback (src/components/feedback/FeedbackWidget.tsx:95)"}, "properties": {"repobilityId": "352504c9f757cb4b", "scanner": "scanner-primary", "fingerprint": "258faa2813cadde7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-dda0c7f5527491ef", "level": "error", "message": {"text": "Dangling fetch: POST /api/edit-stream (src/lib/streaming/use-edit-stream.ts:56)"}, "properties": {"repobilityId": "fc119b676f293560", "scanner": "scanner-primary", "fingerprint": "dda0c7f5527491ef", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-71bd089fb345b807", "level": "error", "message": {"text": "Dangling fetch: POST /api/draft-stream (src/lib/streaming/use-draft-stream.ts:41)"}, "properties": {"repobilityId": "cdcbe521086985a9", "scanner": "scanner-primary", "fingerprint": "71bd089fb345b807", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-32605b3a9f540dab", "level": "error", "message": {"text": "Dangling fetch: POST /api/validate-access-code (src/pages/AuthPage.tsx:96)"}, "properties": {"repobilityId": "36715aab69813a15", "scanner": "scanner-primary", "fingerprint": "32605b3a9f540dab", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c33a61e2e3d579ae", "level": "error", "message": {"text": "Dangling fetch: POST /api/redeem-access-code (src/pages/AuthPage.tsx:146)"}, "properties": {"repobilityId": "af4b91c839841ca9", "scanner": "scanner-primary", "fingerprint": "c33a61e2e3d579ae", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7a74a125aba6d165", "level": "error", "message": {"text": "Dangling fetch: POST /api/feedback-admin (src/pages/studio/FeedbackInbox.tsx:35)"}, "properties": {"repobilityId": "72fad4dac51361ab", "scanner": "scanner-primary", "fingerprint": "7a74a125aba6d165", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b9667c681b57c280", "level": "error", "message": {"text": "Dangling fetch: POST /api/firecrawl-search (src/pages/studio/Watch.tsx:671)"}, "properties": {"repobilityId": "cf920c5d1b3d8042", "scanner": "scanner-primary", "fingerprint": "b9667c681b57c280", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-837ae45487c4ebac", "level": "error", "message": {"text": "Dangling fetch: POST /api/watch-council-answer (src/pages/studio/Watch.tsx:2306)"}, "properties": {"repobilityId": "fe17eca95d672a99", "scanner": "scanner-primary", "fingerprint": "837ae45487c4ebac", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-513037538a24fea1", "level": "error", "message": {"text": "Dangling fetch: POST /api/watch-council-conversation (src/pages/studio/Watch.tsx:2665)"}, "properties": {"repobilityId": "ff91a452293fbf4e", "scanner": "scanner-primary", "fingerprint": "513037538a24fea1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e0de92fb01c8add7", "level": "error", "message": {"text": "Dangling fetch: POST /api/watch-council-answer (src/pages/studio/Watch.tsx:2753)"}, "properties": {"repobilityId": "09cedc1abcff77bc", "scanner": "scanner-primary", "fingerprint": "e0de92fb01c8add7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7127e541a56b8389", "level": "error", "message": {"text": "Dangling fetch: POST /api/watch-council-moderate (src/pages/studio/Watch.tsx:2858)"}, "properties": {"repobilityId": "0138ebfd5e5a882c", "scanner": "scanner-primary", "fingerprint": "7127e541a56b8389", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-475e1af22ac6efb1", "level": "error", "message": {"text": "Dangling fetch: POST /api/watch-council-answer (src/pages/studio/Watch.tsx:2942)"}, "properties": {"repobilityId": "2a3158de6087d61e", "scanner": "scanner-primary", "fingerprint": "475e1af22ac6efb1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-187639ab6628c00a", "level": "error", "message": {"text": "Dangling fetch: POST /api/method-dna-extract (src/pages/studio/MethodDnaSettings.tsx:118)"}, "properties": {"repobilityId": "6fe9039faa1bfe9c", "scanner": "scanner-primary", "fingerprint": "187639ab6628c00a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c3b8d9f7bd9d2c8e", "level": "error", "message": {"text": "Dangling fetch: POST /api/ingest-url (src/pages/studio/Resources.tsx:400)"}, "properties": {"repobilityId": "78195dd65a5eabab", "scanner": "scanner-primary", "fingerprint": "c3b8d9f7bd9d2c8e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a35447f8786bf7d3", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin-data (src/pages/studio/AdminPanel.tsx:31)"}, "properties": {"repobilityId": "8f8fa401bb362022", "scanner": "scanner-primary", "fingerprint": "a35447f8786bf7d3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-fe5e5e8bf06a43bf", "level": "error", "message": {"text": "Dangling fetch: POST /api/review-v2 (src/pages/studio/work/WorkReview.tsx:526)"}, "properties": {"repobilityId": "a6e273bdca44a0e2", "scanner": "scanner-primary", "fingerprint": "fe5e5e8bf06a43bf", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8cd7a41e1af43ec6", "level": "error", "message": {"text": "Dangling fetch: POST /api/reveal (src/pages/studio/work/WorkReview.tsx:1099)"}, "properties": {"repobilityId": "88cac944d85996f6", "scanner": "scanner-primary", "fingerprint": "8cd7a41e1af43ec6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5e72000211b3d425", "level": "error", "message": {"text": "Dangling fetch: GET /api/watch-chairs (src/pages/studio/work/WorkReview.tsx:1939)"}, "properties": {"repobilityId": "1d469ca5ac52fb84", "scanner": "scanner-primary", "fingerprint": "5e72000211b3d425", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0598645978619bf1", "level": "error", "message": {"text": "Dangling fetch: POST /api/work-council-critique (src/pages/studio/work/WorkReview.tsx:2007)"}, "properties": {"repobilityId": "a08d69bed19f0ab3", "scanner": "scanner-primary", "fingerprint": "0598645978619bf1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4756b4c4da7d2088", "level": "note", "message": {"text": "Unused endpoint: GET /api/health"}, "properties": {"repobilityId": "0d2a6e55cb055de8", "scanner": "scanner-primary", "fingerprint": "4756b4c4da7d2088", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-093467ddc6e6a64d", "level": "note", "message": {"text": "Unused endpoint: POST /api/generate"}, "properties": {"repobilityId": "e64bcf464fdf1cba", "scanner": "scanner-primary", "fingerprint": "093467ddc6e6a64d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-39cf145d29a23447", "level": "note", "message": {"text": "Unused endpoint: POST /api/voice-dna"}, "properties": {"repobilityId": "612258e3a0855ad8", "scanner": "scanner-primary", "fingerprint": "39cf145d29a23447", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-aab77b7f2ce9f87e", "level": "note", "message": {"text": "Unused endpoint: POST /api/brand-dna"}, "properties": {"repobilityId": "08aaee86aa6a28c1", "scanner": "scanner-primary", "fingerprint": "aab77b7f2ce9f87e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-dde3adb27bf7eebe", "level": "note", "message": {"text": "Unused endpoint: USE /api"}, "properties": {"repobilityId": "8428537b70eeca77", "scanner": "scanner-primary", "fingerprint": "dde3adb27bf7eebe", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}