{"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-88e0f736db2f271a", "name": "Possibly dead Python function: serve", "shortDescription": {"text": "Possibly dead Python function: serve"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2f1417398e9d186c", "name": "Possibly dead Python function: sweep", "shortDescription": {"text": "Possibly dead Python function: sweep"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-acf8cc092339b594", "name": "Possibly dead Python function: resolve_conflicts", "shortDescription": {"text": "Possibly dead Python function: resolve_conflicts"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a9f59c583679e381", "name": "Possibly dead Python function: list_archived", "shortDescription": {"text": "Possibly dead Python function: list_archived"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9177f6896a6cbb58", "name": "Possibly dead Python function: count_archived", "shortDescription": {"text": "Possibly dead Python function: count_archived"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-35c3f589a6812a30", "name": "Possibly dead Python function: clear_session", "shortDescription": {"text": "Possibly dead Python function: clear_session"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a15555b8fcdd113c", "name": "Possibly dead Python function: summarise_session", "shortDescription": {"text": "Possibly dead Python function: summarise_session"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d0d17fcd0f8215e1", "name": "Possibly dead Python function: invalidate_agent_cache", "shortDescription": {"text": "Possibly dead Python function: invalidate_agent_cache"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-47d2d8359b0a066e", "name": "Possibly dead Python function: clear_agent_cache", "shortDescription": {"text": "Possibly dead Python function: clear_agent_cache"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-168319f215a5d264", "name": "Possibly dead Python function: model_post_init", "shortDescription": {"text": "Possibly dead Python function: model_post_init"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1e205d55a860b437", "name": "Possibly dead Python function: llm_caller", "shortDescription": {"text": "Possibly dead Python function: llm_caller"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-acb07b45e00e5df6", "name": "Possibly dead Python function: list_example_content", "shortDescription": {"text": "Possibly dead Python function: list_example_content"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6a75884e31164403", "name": "Possibly dead Python function: wait_until_available", "shortDescription": {"text": "Possibly dead Python function: wait_until_available"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0c059bca6dff7e8a", "name": "Possibly dead Python function: estimate_tokens", "shortDescription": {"text": "Possibly dead Python function: estimate_tokens"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-92a83e67dbac4eae", "name": "Possibly dead Python function: run_cli_for_brand", "shortDescription": {"text": "Possibly dead Python function: run_cli_for_brand"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c72c029d1299cc85", "name": "Possibly dead Python function: call", "shortDescription": {"text": "Possibly dead Python function: call"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d66bb076f7e7de97", "name": "Possibly dead Python function: run_health_check", "shortDescription": {"text": "Possibly dead Python function: run_health_check"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c8e029d09eabb4d2", "name": "Possibly dead Python function: format_health_report", "shortDescription": {"text": "Possibly dead Python function: format_health_report"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-74c9e1a1eb7b3c8d", "name": "Possibly dead Python function: run_nightly_optimization", "shortDescription": {"text": "Possibly dead Python function: run_nightly_optimization"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-af82723852ef3a8c", "name": "Possibly dead Python function: send_telegram_alert", "shortDescription": {"text": "Possibly dead Python function: send_telegram_alert"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-519211690282feda", "name": "Possibly dead Python function: delete_post", "shortDescription": {"text": "Possibly dead Python function: delete_post"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-10a1849a5c558efc", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/layout.tsx:102", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/layout.tsx:102"}, "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-241ca36a0820da1a", "name": "TODO/FIXME marker in shipping code \u2014 src/app/sitemap.ts:26", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/app/sitemap.ts:26"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7a02b879d2f221fb", "name": "TODO/FIXME marker in shipping code \u2014 src/app/bootstrap/page.tsx:132", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/app/bootstrap/page.tsx:132"}, "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-14ffe8a67b9d733f", "name": "TODO/FIXME marker in shipping code \u2014 src/app/(dashboard)/_dashboard-data.ts:75", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/app/(dashboard)/_dashboard-data.ts:75"}, "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-4adb2835240b7365", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/memory/page.tsx:688", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/memory/page.tsx:688"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-74d94f12205a2d13", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/setup/page.tsx:980", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/setup/page.tsx:980"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c673db7c341ca31b", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/competitor-watch/page.tsx:154", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/competitor-watch/page.tsx:154"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d53f3edf8238ba5e", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/videos/page.tsx:215", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/videos/page.tsx:215"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e114e3cafb6a24a4", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/settings/page.tsx:141", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/settings/page.tsx:141"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e2b44b43a8d3369c", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/settings/brand-assets/page.tsx:148", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/settings/brand-assets/page.tsx:148"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-65f03cdc0ba5bdcb", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/settings/automations/page.tsx:169", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/settings/automations/page.tsx:169"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-066fa154d4a48457", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/settings/video-templates/page.tsx:154", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/settings/video-templates/page.tsx:154"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b6ba58a9a99d7f96", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/settings/brand-context/page.tsx:544", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/settings/brand-context/page.tsx:544"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-39d7d40bf3c29c13", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/deep-research/page.tsx:209", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/deep-research/page.tsx:209"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5cd2ef8ec051b1f1", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/layout/sidebar.tsx:44", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/layout/sidebar.tsx:44"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-12f26f53a2a0e60b", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/layout/brand-switcher.tsx:68", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/layout/brand-switcher.tsx:68"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-df9d69f44c89abce", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/seo/json-ld.tsx:61", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/seo/json-ld.tsx:61"}, "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-56dc92312c01c8a3", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/llm-provider-hub.tsx:373", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/llm-provider-hub.tsx:373"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0b73c6c4b4aa4681", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/email-provider-card.tsx:323", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/email-provider-card.tsx:323"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d577aa49b53270e9", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/research/volume-report.tsx:26", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/research/volume-report.tsx:26"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ae6915655855150b", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/research/items-table.tsx:118", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/research/items-table.tsx:118"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a9fe24e5c703013b", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/brand-context/context-document-upload.tsx:322", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/brand-context/context-document-upload.tsx:322"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-54aef7bbce0789f5", "name": "Stray `console.log` in TS/JS \u2014 cli/src/commands/migrate.ts:21", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 cli/src/commands/migrate.ts:21"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2a1e020b8cdab99a", "name": "Stray `console.log` in TS/JS \u2014 cli/src/commands/doctor.ts:21", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 cli/src/commands/doctor.ts:21"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3d18fd9be9aaada2", "name": "Stray `console.log` in TS/JS \u2014 cli/src/commands/mcp.ts:36", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 cli/src/commands/mcp.ts:36"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b62908ebe47d708d", "name": "Stray `console.log` in TS/JS \u2014 cli/src/commands/start.ts:33", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 cli/src/commands/start.ts:33"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d463ce8aa16d82ce", "name": "Stray `console.log` in TS/JS \u2014 cli/src/commands/update.ts:47", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 cli/src/commands/update.ts:47"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-bd76112789e682f2", "name": "Stray `console.log` in TS/JS \u2014 cli/src/commands/providers.ts:48", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 cli/src/commands/providers.ts:48"}, "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-1fc3b35e5a6db527", "name": "Stray `console.log` in TS/JS \u2014 cli/src/commands/config.ts:10", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 cli/src/commands/config.ts:10"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-74511dabda3b228b", "name": "Stray `console.log` in TS/JS \u2014 cli/src/commands/brand.ts:77", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 cli/src/commands/brand.ts:77"}, "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-ce85e0d83eef8a1a", "name": "TODO/FIXME marker in shipping code \u2014 cli/src/commands/init.ts:156", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 cli/src/commands/init.ts:156"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1d0d10860aeaae38", "name": "Stray `console.log` in TS/JS \u2014 cli/src/commands/init.ts:132", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 cli/src/commands/init.ts:132"}, "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-adb91252fbde9ebb", "name": "Stray `console.log` in TS/JS \u2014 cli/src/lib/logo.ts:30", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 cli/src/lib/logo.ts:30"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ce6d4b79ab249354", "name": "Dockerfile runs as root: python/Dockerfile", "shortDescription": {"text": "Dockerfile runs as root: python/Dockerfile"}, "fullDescription": {"text": "No non-root USER set. Containers running as root expand the blast radius of any vulnerability inside the image."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-1d05440127c869a9", "name": "Docker base image is tag-pinned but not digest-pinned: python:3.14-slim", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: python:3.14-slim"}, "fullDescription": {"text": "Container tags can be retagged upstream. Pin production base images to a reviewed digest (`image@sha256:...`) when reproducibility and supply-chain integrity matter."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9ab8008389ef7dfc", "name": "Dockerfile runs as root: docker/tts-service/Dockerfile", "shortDescription": {"text": "Dockerfile runs as root: docker/tts-service/Dockerfile"}, "fullDescription": {"text": "No non-root USER set. Containers running as root expand the blast radius of any vulnerability inside the image."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a9e436c42ea248cd", "name": "Docker base image is tag-pinned but not digest-pinned: python:3.11-slim", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: python:3.11-slim"}, "fullDescription": {"text": "Container tags can be retagged upstream. Pin production base images to a reviewed digest (`image@sha256:...`) when reproducibility and supply-chain integrity matter."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0f110b943ae27aff", "name": "Dockerfile runs as root: docker/whisper-service/Dockerfile", "shortDescription": {"text": "Dockerfile runs as root: docker/whisper-service/Dockerfile"}, "fullDescription": {"text": "No non-root USER set. Containers running as root expand the blast radius of any vulnerability inside the image."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-edfd1815ec81f943", "name": "Docker base image is tag-pinned but not digest-pinned: python:3.11-slim", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: python:3.11-slim"}, "fullDescription": {"text": "Container tags can be retagged upstream. Pin production base images to a reviewed digest (`image@sha256:...`) when reproducibility and supply-chain integrity matter."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-21fd7dcfc0aff00c", "name": "Insecure pattern 'dangerous_innerhtml' in src/app/layout.tsx:102", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/layout.tsx:102"}, "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-eb40853d3509801f", "name": "Insecure pattern 'dangerous_innerhtml' in src/components/seo/json-ld.tsx:61", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/components/seo/json-ld.tsx:61"}, "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-14e07bd4e63ad4a2", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/postiz_analytics/index.ts:25", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/postiz_analytics/index.ts:25"}, "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-bfe653d1fb7301f9", "name": "Insecure pattern 'node_child_process' in cli/src/commands/migrate.ts:1", "shortDescription": {"text": "Insecure pattern 'node_child_process' in cli/src/commands/migrate.ts:1"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-7fdbef8936aadb8d", "name": "Insecure pattern 'node_child_process' in cli/src/commands/doctor.ts:6", "shortDescription": {"text": "Insecure pattern 'node_child_process' in cli/src/commands/doctor.ts:6"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ab3772584705addb", "name": "Insecure pattern 'node_child_process' in cli/src/commands/start.ts:1", "shortDescription": {"text": "Insecure pattern 'node_child_process' in cli/src/commands/start.ts:1"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a48ce61eacc2f0b4", "name": "Insecure pattern 'node_child_process' in cli/src/commands/update.ts:1", "shortDescription": {"text": "Insecure pattern 'node_child_process' in cli/src/commands/update.ts:1"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-797185602802316d", "name": "Insecure pattern 'node_child_process' in cli/src/commands/seed.ts:1", "shortDescription": {"text": "Insecure pattern 'node_child_process' in cli/src/commands/seed.ts:1"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6d80c78e3dc32f8f", "name": "Insecure pattern 'node_child_process' in cli/src/commands/init.ts:17", "shortDescription": {"text": "Insecure pattern 'node_child_process' in cli/src/commands/init.ts:17"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e8947fd1959bfc80", "name": "Insecure pattern 'node_child_process' in cli/src/lib/health.ts:5", "shortDescription": {"text": "Insecure pattern 'node_child_process' in cli/src/lib/health.ts:5"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f138c9fb1fc3ef35", "name": "Insecure pattern 'direct_innerhtml_assignment' in compositions/automated-shorts/index.html:362", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in compositions/automated-shorts/index.html:362"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ff48b98c402f510c", "name": "Insecure pattern 'direct_innerhtml_assignment' in compositions/weekly-recap/index.html:186", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in compositions/weekly-recap/index.html:186"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e0662b204e97cff6", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "astral-sh/setup-uv@v5 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9e24899e7a113c9c", "name": "Very large file: python/src/content_engine/api/routes.py (1869 lines)", "shortDescription": {"text": "Very large file: python/src/content_engine/api/routes.py (1869 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-05f09467b7e0c406", "name": "Very large file: src/app/(dashboard)/setup/page.tsx (997 lines)", "shortDescription": {"text": "Very large file: src/app/(dashboard)/setup/page.tsx (997 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-8e3a29fbd8196794", "name": "Very large file: src/lib/types/database.types.ts (2631 lines)", "shortDescription": {"text": "Very large file: src/lib/types/database.types.ts (2631 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ea3b5e389d8c9c0f", "name": "Low test-to-source ratio", "shortDescription": {"text": "Low test-to-source ratio"}, "fullDescription": {"text": "38 tests / 360 src (ratio 0.11)."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4c3728641a0d9039", "name": "Node manifest has dependencies but no lockfile: cli/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: cli/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3ab5d313dda8e5f9", "name": "Debug logging residue appears in source files", "shortDescription": {"text": "Debug logging residue appears in source files"}, "fullDescription": {"text": "Found 166 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 128 placeholder/mock markers across 50 source files. This often means the repo looks complete while core flows still use generated scaffolding or fake data."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9d79c4077342a7d0", "name": "Runtime service client appears to use placeholder configuration", "shortDescription": {"text": "Runtime service client appears to use placeholder configuration"}, "fullDescription": {"text": "A runtime source file appears to wire Supabase/Firebase/AI/payment-style clients to placeholder URLs, keys, or fallback values. In the Fable corpus this often means the UI/API shape is present while the backend service is not actually configured."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2d0c7b7ab8f8aacf", "name": "Critical user flow still appears backed by mock or placeholder data", "shortDescription": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "fullDescription": {"text": "A payment/auth/admin/order/billing-style flow contains mock, fake, TODO, dummy, or placeholder markers in runtime source. In the Fable corpus this is a high-leverage completeness smell: the app can look finished while the money, identity, or tenant flow is still scaffolded."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-749d4bc1bd66df5f", "name": "Agent instructions exist but release-hardening basics are missing", "shortDescription": {"text": "Agent instructions exist but release-hardening basics are missing"}, "fullDescription": {"text": "AI-coder instruction files were found, but the repo is missing lockfile. Treat this as a contract gap: the agent is guided, but the generated output is not yet guarded by the controls that make it repeatable."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-8a03c21e4752ce8d", "name": "Legacy-named symbol `_call_anthropic_direct_legacy` in python/src/content_engine/utils/llm_client.py:691", "shortDescription": {"text": "Legacy-named symbol `_call_anthropic_direct_legacy` in python/src/content_engine/utils/llm_client.py:691"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c0083e4842b76065", "name": "Legacy-named symbol `eleven_multilingual_v2` in python/src/content_engine/services/tts_provider.py:54", "shortDescription": {"text": "Legacy-named symbol `eleven_multilingual_v2` in python/src/content_engine/services/tts_provider.py:54"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3142636f804607e3", "name": "Commented-code block (8 lines) in src/app/layout.tsx:84", "shortDescription": {"text": "Commented-code block (8 lines) in src/app/layout.tsx:84"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-09b3c8f255da9a20", "name": "Commented-code block (8 lines) in src/app/sitemap.ts:16", "shortDescription": {"text": "Commented-code block (8 lines) in src/app/sitemap.ts:16"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9b26e601ce735314", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/memory/upload/route.ts:34", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/memory/upload/route.ts:34"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2a40dc79e3000a85", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/writing-lab/page.tsx:133", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/writing-lab/page.tsx:133"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-5e466e65e959be76", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/memory/page.tsx:368", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/memory/page.tsx:368"}, "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-46b2ef4c20ffb3c8", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/setup/page.tsx:185", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/setup/page.tsx:185"}, "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-d63133d3b1a200a0", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/content-hub/page.tsx:111", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/content-hub/page.tsx:111"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-5b25e6c5855f45f3", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/brands/page.tsx:95", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/brands/page.tsx:95"}, "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-fd124815ff6794a1", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/metrics/page.tsx:48", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/metrics/page.tsx:48"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-015c7cfc582d436a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/settings/page.tsx:587", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/settings/page.tsx:587"}, "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-613fc8f660831b70", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/settings/brand-assets/page.tsx:49", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/settings/brand-assets/page.tsx:49"}, "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-f366456333fd78ef", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/settings/social-connections/page.tsx:177", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/settings/social-connections/page.tsx:177"}, "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-a02be430d82561bf", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/settings/audience/page.tsx:93", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/settings/audience/page.tsx:93"}, "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-89d69bf4a98ab71b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/settings/image-generation/page.tsx:59", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/settings/image-generation/page.tsx:59"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f19ccfe4e31655d5", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/research/page.tsx:55", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/research/page.tsx:55"}, "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-13dfff6a318cc6cf", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/dashboard/getting-started.tsx:19", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/dashboard/getting-started.tsx:19"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0f078605307d95b7", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/brand-assets/palette-editor.tsx:13", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/brand-assets/palette-editor.tsx:13"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f7de4661060c9c06", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/content-hub/publish-button.tsx:27", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/content-hub/publish-button.tsx:27"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d85c701ccf4e11cb", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/content-hub/generate-visual-button.tsx:63", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/content-hub/generate-visual-button.tsx:63"}, "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-cbf90589ff8d8cf3", "name": "Commented-code block (6 lines) in src/components/layout/brand-switcher.tsx:28", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/layout/brand-switcher.tsx:28"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ddc8e899a74a0994", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/settings/llm-provider-hub.tsx:514", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/settings/llm-provider-hub.tsx:514"}, "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-bfd6f00817d03c87", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/settings/email-provider-card.tsx:62", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/settings/email-provider-card.tsx:62"}, "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-11b0ad02954b1d65", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/brand-context/context-document-upload.tsx:126", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/brand-context/context-document-upload.tsx:126"}, "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-1db5cb05ed530bab", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/brand-secrets.ts:32", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/brand-secrets.ts:32"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0943749b83aa766a", "name": "Legacy-named symbol `eleven_multilingual_v2` in docker/tts-service/main.py:52", "shortDescription": {"text": "Legacy-named symbol `eleven_multilingual_v2` in docker/tts-service/main.py:52"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-70fcae2d13c708b6", "name": "17 env vars used in code but missing from .env.example", "shortDescription": {"text": "17 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `BREVO_WEBHOOK_SECRET`, `DEBUG`, `DOCKER_BUILD`, `GMAIL_CREDENTIALS_JSON`, `GMAIL_TOKEN_JSON`, `HYPERFRAMES_BIN`, `NEXT_PUBLIC_STAGING_BAR`, `NODE_ENV` + 9 more. Add them (with a placeholder/comment) to .env.example so onboarding doesn't break."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2c04133e54348533", "name": "Near-duplicate function bodies in 2 places", "shortDescription": {"text": "Near-duplicate function bodies in 2 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\npython/src/content_engine/config.py:supabase_url, python/src/content_engine/config/settings.py:supabase_url\n\nThis is *the* AI-coder failure mode (4\u00d7 more duplication in vibe-coded repos \u2014 see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-49c98f7cedd9c977", "name": "Near-duplicate function bodies in 4 places", "shortDescription": {"text": "Near-duplicate function bodies in 4 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\npython/src/content_engine/agents/writer.py:generate_draft, python/src/content_engine/orchestrator/content.py:generate_content, python/src/content_engine/orchestrator/content.py:generate_and_god, python/src/content_engine/orchestrator/content.py:generate_and_god_and_humanize\n\nThis is *the* AI-coder failure mode (4\u00d7 more duplication in vibe-coded repos \u2014 see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-be46ea126aa5d8dc", "name": "Near-duplicate function bodies in 3 places", "shortDescription": {"text": "Near-duplicate function bodies in 3 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\npython/src/content_engine/retrievers/serper.py:fetch, python/src/content_engine/retrievers/serper.py:fetch, python/src/content_engine/retrievers/serper.py:fetch\n\nThis is *the* AI-coder failure mode (4\u00d7 more duplication in vibe-coded repos \u2014 see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9675f89071d157d1", "name": "FastAPI POST `trigger_research` without auth dependency \u2014 python/src/content_engine/api/routes.py:220", "shortDescription": {"text": "FastAPI POST `trigger_research` without auth dependency \u2014 python/src/content_engine/api/routes.py:220"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-47986f7bab10b0cb", "name": "FastAPI PATCH `update_item_status` without auth dependency \u2014 python/src/content_engine/api/routes.py:307", "shortDescription": {"text": "FastAPI PATCH `update_item_status` without auth dependency \u2014 python/src/content_engine/api/routes.py:307"}, "fullDescription": {"text": "`@router.patch` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5aae4e9c4006fd7f", "name": "FastAPI POST `trigger_scoring` without auth dependency \u2014 python/src/content_engine/api/routes.py:326", "shortDescription": {"text": "FastAPI POST `trigger_scoring` without auth dependency \u2014 python/src/content_engine/api/routes.py:326"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-dd887fb0b88f8f32", "name": "FastAPI POST `api_generate_content` without auth dependency \u2014 python/src/content_engine/api/routes.py:351", "shortDescription": {"text": "FastAPI POST `api_generate_content` without auth dependency \u2014 python/src/content_engine/api/routes.py:351"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3e0a96a7e91cb030", "name": "FastAPI POST `api_god_mode` without auth dependency \u2014 python/src/content_engine/api/routes.py:375", "shortDescription": {"text": "FastAPI POST `api_god_mode` without auth dependency \u2014 python/src/content_engine/api/routes.py:375"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a97e5cc61a3cfca6", "name": "FastAPI POST `api_adapt_content` without auth dependency \u2014 python/src/content_engine/api/routes.py:382", "shortDescription": {"text": "FastAPI POST `api_adapt_content` without auth dependency \u2014 python/src/content_engine/api/routes.py:382"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9e89f94cd1dab007", "name": "FastAPI POST `api_humanize_draft` without auth dependency \u2014 python/src/content_engine/api/routes.py:389", "shortDescription": {"text": "FastAPI POST `api_humanize_draft` without auth dependency \u2014 python/src/content_engine/api/routes.py:389"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8e7fc5f3ce9887b1", "name": "FastAPI PATCH `update_draft` without auth dependency \u2014 python/src/content_engine/api/routes.py:472", "shortDescription": {"text": "FastAPI PATCH `update_draft` without auth dependency \u2014 python/src/content_engine/api/routes.py:472"}, "fullDescription": {"text": "`@router.patch` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9000969f339f3a8c", "name": "FastAPI POST `api_create_session` without auth dependency \u2014 python/src/content_engine/api/routes.py:540", "shortDescription": {"text": "FastAPI POST `api_create_session` without auth dependency \u2014 python/src/content_engine/api/routes.py:540"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9a1953d5aee7e9b7", "name": "FastAPI POST `api_vote` without auth dependency \u2014 python/src/content_engine/api/routes.py:590", "shortDescription": {"text": "FastAPI POST `api_vote` without auth dependency \u2014 python/src/content_engine/api/routes.py:590"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-48bb050050660072", "name": "FastAPI POST `api_send_newsletter` without auth dependency \u2014 python/src/content_engine/api/routes.py:663", "shortDescription": {"text": "FastAPI POST `api_send_newsletter` without auth dependency \u2014 python/src/content_engine/api/routes.py:663"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e7aeac4be18403a5", "name": "FastAPI POST `api_upsert_email_provider_config` without auth dependency \u2014 python/src/content_engine/api/routes.py:963", "shortDescription": {"text": "FastAPI POST `api_upsert_email_provider_config` without auth dependency \u2014 python/src/content_engine/api/routes.py:963"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c898e798d6dac065", "name": "FastAPI POST `api_validate_email_provider` without auth dependency \u2014 python/src/content_engine/api/routes.py:982", "shortDescription": {"text": "FastAPI POST `api_validate_email_provider` without auth dependency \u2014 python/src/content_engine/api/routes.py:982"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-cc34f3bbf77b1e1c", "name": "FastAPI POST `api_publish_social` without auth dependency \u2014 python/src/content_engine/api/routes.py:1056", "shortDescription": {"text": "FastAPI POST `api_publish_social` without auth dependency \u2014 python/src/content_engine/api/routes.py:1056"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9ef034511c91c0d9", "name": "FastAPI POST `api_publish_linkedin` without auth dependency \u2014 python/src/content_engine/api/routes.py:1065", "shortDescription": {"text": "FastAPI POST `api_publish_linkedin` without auth dependency \u2014 python/src/content_engine/api/routes.py:1065"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0ff1344d3c9f8b26", "name": "FastAPI POST `api_publish_twitter` without auth dependency \u2014 python/src/content_engine/api/routes.py:1073", "shortDescription": {"text": "FastAPI POST `api_publish_twitter` without auth dependency \u2014 python/src/content_engine/api/routes.py:1073"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4db0672e8825a997", "name": "FastAPI POST `api_schedule_post` without auth dependency \u2014 python/src/content_engine/api/routes.py:1081", "shortDescription": {"text": "FastAPI POST `api_schedule_post` without auth dependency \u2014 python/src/content_engine/api/routes.py:1081"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-958df0ab23d68ca2", "name": "FastAPI POST `api_record_metrics` without auth dependency \u2014 python/src/content_engine/api/routes.py:1102", "shortDescription": {"text": "FastAPI POST `api_record_metrics` without auth dependency \u2014 python/src/content_engine/api/routes.py:1102"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-97cfa5735b55998c", "name": "FastAPI POST `api_memory_consolidate_user` without auth dependency \u2014 python/src/content_engine/api/routes.py:1321", "shortDescription": {"text": "FastAPI POST `api_memory_consolidate_user` without auth dependency \u2014 python/src/content_engine/api/routes.py:1321"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-53f73e4e7435366d", "name": "FastAPI POST `api_memory_recall` without auth dependency \u2014 python/src/content_engine/api/routes.py:1364", "shortDescription": {"text": "FastAPI POST `api_memory_recall` without auth dependency \u2014 python/src/content_engine/api/routes.py:1364"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f81e94eee4150e2f", "name": "FastAPI PATCH `api_memory_patch_fact` without auth dependency \u2014 python/src/content_engine/api/routes.py:1428", "shortDescription": {"text": "FastAPI PATCH `api_memory_patch_fact` without auth dependency \u2014 python/src/content_engine/api/routes.py:1428"}, "fullDescription": {"text": "`@router.patch` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1edd4ddbb5744e05", "name": "FastAPI DELETE `api_memory_delete_fact` without auth dependency \u2014 python/src/content_engine/api/routes.py:1462", "shortDescription": {"text": "FastAPI DELETE `api_memory_delete_fact` without auth dependency \u2014 python/src/content_engine/api/routes.py:1462"}, "fullDescription": {"text": "`@router.delete` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-426f6a1890a889a3", "name": "FastAPI POST `api_memory_supersede_fact` without auth dependency \u2014 python/src/content_engine/api/routes.py:1484", "shortDescription": {"text": "FastAPI POST `api_memory_supersede_fact` without auth dependency \u2014 python/src/content_engine/api/routes.py:1484"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3bdf677f9a1ffa74", "name": "FastAPI POST `api_memory_discover` without auth dependency \u2014 python/src/content_engine/api/routes.py:1528", "shortDescription": {"text": "FastAPI POST `api_memory_discover` without auth dependency \u2014 python/src/content_engine/api/routes.py:1528"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b17273c348e2a61a", "name": "FastAPI POST `api_memory_upload_source` without auth dependency \u2014 python/src/content_engine/api/routes.py:1605", "shortDescription": {"text": "FastAPI POST `api_memory_upload_source` without auth dependency \u2014 python/src/content_engine/api/routes.py:1605"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-83963424aa20c065", "name": "FastAPI PUT `api_set_credentials` without auth dependency \u2014 python/src/content_engine/api/routes.py:1717", "shortDescription": {"text": "FastAPI PUT `api_set_credentials` without auth dependency \u2014 python/src/content_engine/api/routes.py:1717"}, "fullDescription": {"text": "`@router.put` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e1e54ed453789246", "name": "FastAPI DELETE `api_delete_credentials` without auth dependency \u2014 python/src/content_engine/api/routes.py:1738", "shortDescription": {"text": "FastAPI DELETE `api_delete_credentials` without auth dependency \u2014 python/src/content_engine/api/routes.py:1738"}, "fullDescription": {"text": "`@router.delete` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0f36e5031db97e4d", "name": "FastAPI POST `create_template` without auth dependency \u2014 python/src/content_engine/api/routes_video.py:57", "shortDescription": {"text": "FastAPI POST `create_template` without auth dependency \u2014 python/src/content_engine/api/routes_video.py:57"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e49be99deaef9be4", "name": "FastAPI POST `start_render` without auth dependency \u2014 python/src/content_engine/api/routes_video.py:85", "shortDescription": {"text": "FastAPI POST `start_render` without auth dependency \u2014 python/src/content_engine/api/routes_video.py:85"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-212241b2dd92547b", "name": "FastAPI POST `generate_video` without auth dependency \u2014 python/src/content_engine/api/routes_video.py:156", "shortDescription": {"text": "FastAPI POST `generate_video` without auth dependency \u2014 python/src/content_engine/api/routes_video.py:156"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-cbc7f71960ec1a4c", "name": "FastAPI POST `generate_shorts` without auth dependency \u2014 python/src/content_engine/api/routes_video.py:177", "shortDescription": {"text": "FastAPI POST `generate_shorts` without auth dependency \u2014 python/src/content_engine/api/routes_video.py:177"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2ac4a3ff8ae205ae", "name": "FastAPI POST `poll_heygen` without auth dependency \u2014 python/src/content_engine/api/routes_video.py:207", "shortDescription": {"text": "FastAPI POST `poll_heygen` without auth dependency \u2014 python/src/content_engine/api/routes_video.py:207"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ef982e8de6a59ee8", "name": "FastAPI POST `save_provider_key` without auth dependency \u2014 python/src/content_engine/api/routes_llm_providers.py:99", "shortDescription": {"text": "FastAPI POST `save_provider_key` without auth dependency \u2014 python/src/content_engine/api/routes_llm_providers.py:99"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4276a1998df9f7b2", "name": "FastAPI DELETE `delete_provider_key` without auth dependency \u2014 python/src/content_engine/api/routes_llm_providers.py:128", "shortDescription": {"text": "FastAPI DELETE `delete_provider_key` without auth dependency \u2014 python/src/content_engine/api/routes_llm_providers.py:128"}, "fullDescription": {"text": "`@router.delete` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e590c19f5d08bba4", "name": "FastAPI POST `validate_provider_key` without auth dependency \u2014 python/src/content_engine/api/routes_llm_providers.py:139", "shortDescription": {"text": "FastAPI POST `validate_provider_key` without auth dependency \u2014 python/src/content_engine/api/routes_llm_providers.py:139"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-dae79b17a9700406", "name": "FastAPI POST `probe_gateway` without auth dependency \u2014 python/src/content_engine/api/routes_llm_providers.py:160", "shortDescription": {"text": "FastAPI POST `probe_gateway` without auth dependency \u2014 python/src/content_engine/api/routes_llm_providers.py:160"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9bc7302a03f68ba3", "name": "FastAPI POST `save_gateway_url` without auth dependency \u2014 python/src/content_engine/api/routes_llm_providers.py:231", "shortDescription": {"text": "FastAPI POST `save_gateway_url` without auth dependency \u2014 python/src/content_engine/api/routes_llm_providers.py:231"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2efc1eb2e1bce792", "name": "FastAPI POST `upsert_brand_secret` without auth dependency \u2014 python/src/content_engine/api/routes_internal.py:38", "shortDescription": {"text": "FastAPI POST `upsert_brand_secret` without auth dependency \u2014 python/src/content_engine/api/routes_internal.py:38"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-992a7110f6a523e1", "name": "FastAPI DELETE `remove_brand_secret` without auth dependency \u2014 python/src/content_engine/api/routes_internal.py:68", "shortDescription": {"text": "FastAPI DELETE `remove_brand_secret` without auth dependency \u2014 python/src/content_engine/api/routes_internal.py:68"}, "fullDescription": {"text": "`@router.delete` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4656f354d920d1ab", "name": "FastAPI POST `sync_contacts` without auth dependency \u2014 python/src/content_engine/api/routes_email_marketing.py:70", "shortDescription": {"text": "FastAPI POST `sync_contacts` without auth dependency \u2014 python/src/content_engine/api/routes_email_marketing.py:70"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f125b88e8830cb89", "name": "FastAPI POST `create_list` without auth dependency \u2014 python/src/content_engine/api/routes_email_marketing.py:128", "shortDescription": {"text": "FastAPI POST `create_list` without auth dependency \u2014 python/src/content_engine/api/routes_email_marketing.py:128"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-63cb24c9944b82b1", "name": "FastAPI POST `create_campaign` without auth dependency \u2014 python/src/content_engine/api/routes_campaigns.py:47", "shortDescription": {"text": "FastAPI POST `create_campaign` without auth dependency \u2014 python/src/content_engine/api/routes_campaigns.py:47"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-26cefd7e94126938", "name": "FastAPI POST `create_automation` without auth dependency \u2014 python/src/content_engine/api/routes_automations.py:127", "shortDescription": {"text": "FastAPI POST `create_automation` without auth dependency \u2014 python/src/content_engine/api/routes_automations.py:127"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a4e9cdc5631aa44e", "name": "FastAPI PATCH `update_automation` without auth dependency \u2014 python/src/content_engine/api/routes_automations.py:153", "shortDescription": {"text": "FastAPI PATCH `update_automation` without auth dependency \u2014 python/src/content_engine/api/routes_automations.py:153"}, "fullDescription": {"text": "`@router.patch` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-33c6e148a93450a7", "name": "FastAPI POST `create_agent_config` without auth dependency \u2014 python/src/content_engine/api/routes_agents.py:100", "shortDescription": {"text": "FastAPI POST `create_agent_config` without auth dependency \u2014 python/src/content_engine/api/routes_agents.py:100"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-405fc4b55e1ee476", "name": "FastAPI PUT `update_agent_config` without auth dependency \u2014 python/src/content_engine/api/routes_agents.py:188", "shortDescription": {"text": "FastAPI PUT `update_agent_config` without auth dependency \u2014 python/src/content_engine/api/routes_agents.py:188"}, "fullDescription": {"text": "`@router.put` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-06df1a6c50abfd1c", "name": "FastAPI DELETE `delete_agent_config` without auth dependency \u2014 python/src/content_engine/api/routes_agents.py:224", "shortDescription": {"text": "FastAPI DELETE `delete_agent_config` without auth dependency \u2014 python/src/content_engine/api/routes_agents.py:224"}, "fullDescription": {"text": "`@router.delete` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ae98f6b178c3bcb4", "name": "FastAPI POST `create_agent_skill` without auth dependency \u2014 python/src/content_engine/api/routes_agents.py:294", "shortDescription": {"text": "FastAPI POST `create_agent_skill` without auth dependency \u2014 python/src/content_engine/api/routes_agents.py:294"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-88af92a2b27b99d0", "name": "FastAPI PUT `update_agent_skill` without auth dependency \u2014 python/src/content_engine/api/routes_agents.py:361", "shortDescription": {"text": "FastAPI PUT `update_agent_skill` without auth dependency \u2014 python/src/content_engine/api/routes_agents.py:361"}, "fullDescription": {"text": "`@router.put` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-79f12b8faf36b4a7", "name": "FastAPI DELETE `delete_agent_skill` without auth dependency \u2014 python/src/content_engine/api/routes_agents.py:404", "shortDescription": {"text": "FastAPI DELETE `delete_agent_skill` without auth dependency \u2014 python/src/content_engine/api/routes_agents.py:404"}, "fullDescription": {"text": "`@router.delete` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d1f816875fdb2a91", "name": "FastAPI POST `generate` without auth dependency \u2014 python/src/content_engine/api/routes_images.py:39", "shortDescription": {"text": "FastAPI POST `generate` without auth dependency \u2014 python/src/content_engine/api/routes_images.py:39"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1b8d323172677689", "name": "FastAPI POST `carousel` without auth dependency \u2014 python/src/content_engine/api/routes_images.py:47", "shortDescription": {"text": "FastAPI POST `carousel` without auth dependency \u2014 python/src/content_engine/api/routes_images.py:47"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a1a7e5d9217c1005", "name": "FastAPI POST `upsert_integration` without auth dependency \u2014 python/src/content_engine/api/routes_postiz.py:122", "shortDescription": {"text": "FastAPI POST `upsert_integration` without auth dependency \u2014 python/src/content_engine/api/routes_postiz.py:122"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4e6effbbbd336364", "name": "FastAPI DELETE `delete_integration` without auth dependency \u2014 python/src/content_engine/api/routes_postiz.py:164", "shortDescription": {"text": "FastAPI DELETE `delete_integration` without auth dependency \u2014 python/src/content_engine/api/routes_postiz.py:164"}, "fullDescription": {"text": "`@router.delete` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-bcadf68b3f7711db", "name": "FastAPI PATCH `patch_progress` without auth dependency \u2014 python/src/content_engine/api/routes_setup.py:61", "shortDescription": {"text": "FastAPI PATCH `patch_progress` without auth dependency \u2014 python/src/content_engine/api/routes_setup.py:61"}, "fullDescription": {"text": "`@router.patch` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-020a95fd962cf91c", "name": "FastAPI POST `discover_brand` without auth dependency \u2014 python/src/content_engine/api/routes_brand_discovery.py:140", "shortDescription": {"text": "FastAPI POST `discover_brand` without auth dependency \u2014 python/src/content_engine/api/routes_brand_discovery.py:140"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ab3023debb2492f7", "name": "FastAPI POST `start_deep_research` without auth dependency \u2014 python/src/content_engine/api/routes_research.py:49", "shortDescription": {"text": "FastAPI POST `start_deep_research` without auth dependency \u2014 python/src/content_engine/api/routes_research.py:49"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c8c311d31eee76bb", "name": "FastAPI POST `generate_ideas_from_job` without auth dependency \u2014 python/src/content_engine/api/routes_research.py:111", "shortDescription": {"text": "FastAPI POST `generate_ideas_from_job` without auth dependency \u2014 python/src/content_engine/api/routes_research.py:111"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c2e162f049bf668a", "name": "FastAPI POST `start_competitor_spider` without auth dependency \u2014 python/src/content_engine/api/routes_research.py:132", "shortDescription": {"text": "FastAPI POST `start_competitor_spider` without auth dependency \u2014 python/src/content_engine/api/routes_research.py:132"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-83fcc62c5308473f", "name": "FastAPI POST `tts` without auth dependency \u2014 docker/tts-service/main.py:111", "shortDescription": {"text": "FastAPI POST `tts` without auth dependency \u2014 docker/tts-service/main.py:111"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2497c0f483b51d5f", "name": "FastAPI POST `transcribe` without auth dependency \u2014 docker/whisper-service/main.py:28", "shortDescription": {"text": "FastAPI POST `transcribe` without auth dependency \u2014 docker/whisper-service/main.py:28"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a241da051695f8a4", "name": "Dangling fetch: POST /api/bootstrap/test-connection (src/app/bootstrap/page.tsx:64)", "shortDescription": {"text": "Dangling fetch: POST /api/bootstrap/test-connection (src/app/bootstrap/page.tsx:64)"}, "fullDescription": {"text": "`src/app/bootstrap/page.tsx:64` calls `POST /api/bootstrap/test-connection` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/bootstrap/test-connection`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e1c84f68034c8387", "name": "Dangling fetch: POST /api/bootstrap/save-config (src/app/bootstrap/page.tsx:87)", "shortDescription": {"text": "Dangling fetch: POST /api/bootstrap/save-config (src/app/bootstrap/page.tsx:87)"}, "fullDescription": {"text": "`src/app/bootstrap/page.tsx:87` calls `POST /api/bootstrap/save-config` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/bootstrap/save-config`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4d1a8b9442b85a2d", "name": "Dangling fetch: GET /api/god-mode-reviews?draft_id=${draftId} (src/app/(dashboard)/writing-lab/page.tsx:135)", "shortDescription": {"text": "Dangling fetch: GET /api/god-mode-reviews?draft_id=${draftId} (src/app/(dashboard)/writing-lab/page.tsx:135)"}, "fullDescription": {"text": "`src/app/(dashboard)/writing-lab/page.tsx:135` calls `GET /api/god-mode-reviews?draft_id=${draftId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/god-mode-reviews`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7bd1b92f1df562c1", "name": "Dangling fetch: POST /api/email-marketing/campaigns (src/app/(dashboard)/writing-lab/page.tsx:149)", "shortDescription": {"text": "Dangling fetch: POST /api/email-marketing/campaigns (src/app/(dashboard)/writing-lab/page.tsx:149)"}, "fullDescription": {"text": "`src/app/(dashboard)/writing-lab/page.tsx:149` calls `POST /api/email-marketing/campaigns` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/email-marketing/campaigns`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4aa06371649b9687", "name": "Dangling fetch: GET /api/video/heygen/avatars (src/app/(dashboard)/writing-lab/page.tsx:169)", "shortDescription": {"text": "Dangling fetch: GET /api/video/heygen/avatars (src/app/(dashboard)/writing-lab/page.tsx:169)"}, "fullDescription": {"text": "`src/app/(dashboard)/writing-lab/page.tsx:169` calls `GET /api/video/heygen/avatars` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/video/heygen/avatars`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-74a89d6277dee6e4", "name": "Dangling fetch: POST /api/video/generate (src/app/(dashboard)/writing-lab/page.tsx:176)", "shortDescription": {"text": "Dangling fetch: POST /api/video/generate (src/app/(dashboard)/writing-lab/page.tsx:176)"}, "fullDescription": {"text": "`src/app/(dashboard)/writing-lab/page.tsx:176` calls `POST /api/video/generate` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/video/generate`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-230f42d00cade45e", "name": "Dangling fetch: GET /api/god-mode-reviews (src/app/(dashboard)/writing-lab/page.tsx:196)", "shortDescription": {"text": "Dangling fetch: GET /api/god-mode-reviews (src/app/(dashboard)/writing-lab/page.tsx:196)"}, "fullDescription": {"text": "`src/app/(dashboard)/writing-lab/page.tsx:196` calls `GET /api/god-mode-reviews` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/god-mode-reviews`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-afc6950a660aeb09", "name": "Dangling fetch: GET /api/system/config (src/app/(dashboard)/setup/page.tsx:145)", "shortDescription": {"text": "Dangling fetch: GET /api/system/config (src/app/(dashboard)/setup/page.tsx:145)"}, "fullDescription": {"text": "`src/app/(dashboard)/setup/page.tsx:145` calls `GET /api/system/config` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/system/config`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3d6b2073bf6d0225", "name": "Dangling fetch: GET /api/setup/progress (src/app/(dashboard)/setup/page.tsx:155)", "shortDescription": {"text": "Dangling fetch: GET /api/setup/progress (src/app/(dashboard)/setup/page.tsx:155)"}, "fullDescription": {"text": "`src/app/(dashboard)/setup/page.tsx:155` calls `GET /api/setup/progress` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/setup/progress`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-fbe652bf1629ca77", "name": "Dangling fetch: PATCH /api/setup/progress (src/app/(dashboard)/setup/page.tsx:185)", "shortDescription": {"text": "Dangling fetch: PATCH /api/setup/progress (src/app/(dashboard)/setup/page.tsx:185)"}, "fullDescription": {"text": "`src/app/(dashboard)/setup/page.tsx:185` calls `PATCH /api/setup/progress` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/setup/progress`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7ba57221f2c2dbc1", "name": "Dangling fetch: POST /api/brands (src/app/(dashboard)/setup/page.tsx:217)", "shortDescription": {"text": "Dangling fetch: POST /api/brands (src/app/(dashboard)/setup/page.tsx:217)"}, "fullDescription": {"text": "`src/app/(dashboard)/setup/page.tsx:217` calls `POST /api/brands` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/brands`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-41e9f7a5a39172b5", "name": "Dangling fetch: PATCH /api/brands/${brandId} (src/app/(dashboard)/setup/page.tsx:227)", "shortDescription": {"text": "Dangling fetch: PATCH /api/brands/${brandId} (src/app/(dashboard)/setup/page.tsx:227)"}, "fullDescription": {"text": "`src/app/(dashboard)/setup/page.tsx:227` calls `PATCH /api/brands/${brandId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/brands/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-793d1cbf5ecafb54", "name": "Dangling fetch: POST /api/brands/${brandId}/assets (src/app/(dashboard)/setup/page.tsx:234)", "shortDescription": {"text": "Dangling fetch: POST /api/brands/${brandId}/assets (src/app/(dashboard)/setup/page.tsx:234)"}, "fullDescription": {"text": "`src/app/(dashboard)/setup/page.tsx:234` calls `POST /api/brands/${brandId}/assets` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/brands/<p>/assets`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1c20b89b1eff3a64", "name": "Dangling fetch: GET /api/system/health (src/app/(dashboard)/setup/page.tsx:335)", "shortDescription": {"text": "Dangling fetch: GET /api/system/health (src/app/(dashboard)/setup/page.tsx:335)"}, "fullDescription": {"text": "`src/app/(dashboard)/setup/page.tsx:335` calls `GET /api/system/health` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/system/health`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ae7e9d7b2f90295b", "name": "Dangling fetch: GET /api/system/health (src/app/(dashboard)/setup/page.tsx:345)", "shortDescription": {"text": "Dangling fetch: GET /api/system/health (src/app/(dashboard)/setup/page.tsx:345)"}, "fullDescription": {"text": "`src/app/(dashboard)/setup/page.tsx:345` calls `GET /api/system/health` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/system/health`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ef9634b9e6411659", "name": "Dangling fetch: GET /api/llm/providers/configured (src/app/(dashboard)/setup/page.tsx:414)", "shortDescription": {"text": "Dangling fetch: GET /api/llm/providers/configured (src/app/(dashboard)/setup/page.tsx:414)"}, "fullDescription": {"text": "`src/app/(dashboard)/setup/page.tsx:414` calls `GET /api/llm/providers/configured` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/llm/providers/configured`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1e2207c2624dc125", "name": "Dangling fetch: PATCH /api/system/config (src/app/(dashboard)/setup/page.tsx:635)", "shortDescription": {"text": "Dangling fetch: PATCH /api/system/config (src/app/(dashboard)/setup/page.tsx:635)"}, "fullDescription": {"text": "`src/app/(dashboard)/setup/page.tsx:635` calls `PATCH /api/system/config` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/system/config`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-48ba42ecc861e38c", "name": "Dangling fetch: GET /api/social/health (src/app/(dashboard)/setup/page.tsx:786)", "shortDescription": {"text": "Dangling fetch: GET /api/social/health (src/app/(dashboard)/setup/page.tsx:786)"}, "fullDescription": {"text": "`src/app/(dashboard)/setup/page.tsx:786` calls `GET /api/social/health` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/social/health`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-01410112e5abc7a5", "name": "Dangling fetch: GET /api/mcp/detect (src/app/(dashboard)/setup/page.tsx:845)", "shortDescription": {"text": "Dangling fetch: GET /api/mcp/detect (src/app/(dashboard)/setup/page.tsx:845)"}, "fullDescription": {"text": "`src/app/(dashboard)/setup/page.tsx:845` calls `GET /api/mcp/detect` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/mcp/detect`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f16302231014486a", "name": "Dangling fetch: POST /api/content/from-url (src/app/(dashboard)/content-hub/page.tsx:70)", "shortDescription": {"text": "Dangling fetch: POST /api/content/from-url (src/app/(dashboard)/content-hub/page.tsx:70)"}, "fullDescription": {"text": "`src/app/(dashboard)/content-hub/page.tsx:70` calls `POST /api/content/from-url` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/content/from-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-253694ad82a30a09", "name": "Dangling fetch: POST /api/video/render (src/app/(dashboard)/content-hub/[id]/page.tsx:54)", "shortDescription": {"text": "Dangling fetch: POST /api/video/render (src/app/(dashboard)/content-hub/[id]/page.tsx:54)"}, "fullDescription": {"text": "`src/app/(dashboard)/content-hub/[id]/page.tsx:54` calls `POST /api/video/render` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/video/render`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-00a762745beea2d8", "name": "Dangling fetch: GET /api/brands (src/app/(dashboard)/brands/page.tsx:49)", "shortDescription": {"text": "Dangling fetch: GET /api/brands (src/app/(dashboard)/brands/page.tsx:49)"}, "fullDescription": {"text": "`src/app/(dashboard)/brands/page.tsx:49` calls `GET /api/brands` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/brands`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5581a15cc67e55c2", "name": "Dangling fetch: PATCH /api/brands/${editId} (src/app/(dashboard)/brands/page.tsx:95)", "shortDescription": {"text": "Dangling fetch: PATCH /api/brands/${editId} (src/app/(dashboard)/brands/page.tsx:95)"}, "fullDescription": {"text": "`src/app/(dashboard)/brands/page.tsx:95` calls `PATCH /api/brands/${editId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/brands/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7093f335ac2cd0b2", "name": "Dangling fetch: POST /api/brands (src/app/(dashboard)/brands/page.tsx:101)", "shortDescription": {"text": "Dangling fetch: POST /api/brands (src/app/(dashboard)/brands/page.tsx:101)"}, "fullDescription": {"text": "`src/app/(dashboard)/brands/page.tsx:101` calls `POST /api/brands` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/brands`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e71aaa8960b0cb89", "name": "Dangling fetch: PATCH /api/brands/${newId} (src/app/(dashboard)/brands/page.tsx:117)", "shortDescription": {"text": "Dangling fetch: PATCH /api/brands/${newId} (src/app/(dashboard)/brands/page.tsx:117)"}, "fullDescription": {"text": "`src/app/(dashboard)/brands/page.tsx:117` calls `PATCH /api/brands/${newId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/brands/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d01e94d922d8ff5f", "name": "Dangling fetch: DELETE /api/brands/${brandToDelete.id} (src/app/(dashboard)/brands/page.tsx:146)", "shortDescription": {"text": "Dangling fetch: DELETE /api/brands/${brandToDelete.id} (src/app/(dashboard)/brands/page.tsx:146)"}, "fullDescription": {"text": "`src/app/(dashboard)/brands/page.tsx:146` calls `DELETE /api/brands/${brandToDelete.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/brands/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7a2ccf92f43951d1", "name": "Dangling fetch: GET /api/research/competitor/snapshots?limit=50 (src/app/(dashboard)/competitor-watch/page.tsx:37)", "shortDescription": {"text": "Dangling fetch: GET /api/research/competitor/snapshots?limit=50 (src/app/(dashboard)/competitor-watch/page.tsx:37)"}, "fullDescription": {"text": "`src/app/(dashboard)/competitor-watch/page.tsx:37` calls `GET /api/research/competitor/snapshots?limit=50` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/research/competitor/snapshots`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a068ac82bf95af6e", "name": "Dangling fetch: POST /api/research/competitor (src/app/(dashboard)/competitor-watch/page.tsx:59)", "shortDescription": {"text": "Dangling fetch: POST /api/research/competitor (src/app/(dashboard)/competitor-watch/page.tsx:59)"}, "fullDescription": {"text": "`src/app/(dashboard)/competitor-watch/page.tsx:59` calls `POST /api/research/competitor` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/research/competitor`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-450ea7ff759dd3c7", "name": "Dangling fetch: GET /api/video/templates (src/app/(dashboard)/videos/page.tsx:51)", "shortDescription": {"text": "Dangling fetch: GET /api/video/templates (src/app/(dashboard)/videos/page.tsx:51)"}, "fullDescription": {"text": "`src/app/(dashboard)/videos/page.tsx:51` calls `GET /api/video/templates` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/video/templates`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e0d872b70d8ca449", "name": "Dangling fetch: GET /api/video (src/app/(dashboard)/videos/page.tsx:52)", "shortDescription": {"text": "Dangling fetch: GET /api/video (src/app/(dashboard)/videos/page.tsx:52)"}, "fullDescription": {"text": "`src/app/(dashboard)/videos/page.tsx:52` calls `GET /api/video` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/video`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-476efbcc0b1bc0ec", "name": "Dangling fetch: POST /api/video/render (src/app/(dashboard)/videos/page.tsx:99)", "shortDescription": {"text": "Dangling fetch: POST /api/video/render (src/app/(dashboard)/videos/page.tsx:99)"}, "fullDescription": {"text": "`src/app/(dashboard)/videos/page.tsx:99` calls `POST /api/video/render` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/video/render`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1abff8f877962a1d", "name": "Dangling fetch: GET /api/newsletter?per_page=1 (src/app/(dashboard)/metrics/page.tsx:48)", "shortDescription": {"text": "Dangling fetch: GET /api/newsletter?per_page=1 (src/app/(dashboard)/metrics/page.tsx:48)"}, "fullDescription": {"text": "`src/app/(dashboard)/metrics/page.tsx:48` calls `GET /api/newsletter?per_page=1` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/newsletter`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ffee85aab7911df5", "name": "Dangling fetch: GET /api/system/costs?period=today (src/app/(dashboard)/metrics/page.tsx:50)", "shortDescription": {"text": "Dangling fetch: GET /api/system/costs?period=today (src/app/(dashboard)/metrics/page.tsx:50)"}, "fullDescription": {"text": "`src/app/(dashboard)/metrics/page.tsx:50` calls `GET /api/system/costs?period=today` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/system/costs`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f435b9330a3cc40c", "name": "Dangling fetch: GET /api/newsletter?per_page=50 (src/app/(dashboard)/newsletter/page.tsx:51)", "shortDescription": {"text": "Dangling fetch: GET /api/newsletter?per_page=50 (src/app/(dashboard)/newsletter/page.tsx:51)"}, "fullDescription": {"text": "`src/app/(dashboard)/newsletter/page.tsx:51` calls `GET /api/newsletter?per_page=50` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/newsletter`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2887bbe991854331", "name": "Dangling fetch: PATCH /api/newsletter/${id} (src/app/(dashboard)/newsletter/page.tsx:90)", "shortDescription": {"text": "Dangling fetch: PATCH /api/newsletter/${id} (src/app/(dashboard)/newsletter/page.tsx:90)"}, "fullDescription": {"text": "`src/app/(dashboard)/newsletter/page.tsx:90` calls `PATCH /api/newsletter/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/newsletter/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-32c5fa1ccdaf1a5d", "name": "Dangling fetch: GET /api/newsletter/${id} (src/app/(dashboard)/newsletter/[id]/page.tsx:55)", "shortDescription": {"text": "Dangling fetch: GET /api/newsletter/${id} (src/app/(dashboard)/newsletter/[id]/page.tsx:55)"}, "fullDescription": {"text": "`src/app/(dashboard)/newsletter/[id]/page.tsx:55` calls `GET /api/newsletter/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/newsletter/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8282550d770c94c6", "name": "Dangling fetch: PATCH /api/newsletter/${id} (src/app/(dashboard)/newsletter/[id]/page.tsx:71)", "shortDescription": {"text": "Dangling fetch: PATCH /api/newsletter/${id} (src/app/(dashboard)/newsletter/[id]/page.tsx:71)"}, "fullDescription": {"text": "`src/app/(dashboard)/newsletter/[id]/page.tsx:71` calls `PATCH /api/newsletter/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/newsletter/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6451d5c6921afaa3", "name": "Dangling fetch: PATCH /api/newsletter/${id} (src/app/(dashboard)/newsletter/[id]/page.tsx:99)", "shortDescription": {"text": "Dangling fetch: PATCH /api/newsletter/${id} (src/app/(dashboard)/newsletter/[id]/page.tsx:99)"}, "fullDescription": {"text": "`src/app/(dashboard)/newsletter/[id]/page.tsx:99` calls `PATCH /api/newsletter/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/newsletter/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-df4b839fa147668a", "name": "Dangling fetch: GET /api/system/health (src/app/(dashboard)/revenue/page.tsx:47)", "shortDescription": {"text": "Dangling fetch: GET /api/system/health (src/app/(dashboard)/revenue/page.tsx:47)"}, "fullDescription": {"text": "`src/app/(dashboard)/revenue/page.tsx:47` calls `GET /api/system/health` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/system/health`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e3329fb5cac11910", "name": "Dangling fetch: GET /api/system/costs?period=month (src/app/(dashboard)/revenue/page.tsx:48)", "shortDescription": {"text": "Dangling fetch: GET /api/system/costs?period=month (src/app/(dashboard)/revenue/page.tsx:48)"}, "fullDescription": {"text": "`src/app/(dashboard)/revenue/page.tsx:48` calls `GET /api/system/costs?period=month` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/system/costs`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e1bcd2691dcab040", "name": "Dangling fetch: GET /api/system/costs?period=today (src/app/(dashboard)/costi-api/page.tsx:37)", "shortDescription": {"text": "Dangling fetch: GET /api/system/costs?period=today (src/app/(dashboard)/costi-api/page.tsx:37)"}, "fullDescription": {"text": "`src/app/(dashboard)/costi-api/page.tsx:37` calls `GET /api/system/costs?period=today` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/system/costs`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a013efbeab3db959", "name": "Dangling fetch: GET /api/feature-flags?key=llm_provider_openclaw_share (src/app/(dashboard)/settings/page.tsx:290)", "shortDescription": {"text": "Dangling fetch: GET /api/feature-flags?key=llm_provider_openclaw_share (src/app/(dashboard)/settings/page.tsx:290)"}, "fullDescription": {"text": "`src/app/(dashboard)/settings/page.tsx:290` calls `GET /api/feature-flags?key=llm_provider_openclaw_share` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/feature-flags`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6b9b8aa0755b15d3", "name": "Dangling fetch: POST /api/feature-flags (src/app/(dashboard)/settings/page.tsx:301)", "shortDescription": {"text": "Dangling fetch: POST /api/feature-flags (src/app/(dashboard)/settings/page.tsx:301)"}, "fullDescription": {"text": "`src/app/(dashboard)/settings/page.tsx:301` calls `POST /api/feature-flags` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/feature-flags`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2d25bc6a166c5890", "name": "Dangling fetch: GET /api/llm/providers/metrics?window=${window} (src/app/(dashboard)/settings/page.tsx:360)", "shortDescription": {"text": "Dangling fetch: GET /api/llm/providers/metrics?window=${window} (src/app/(dashboard)/settings/page.tsx:360)"}, "fullDescription": {"text": "`src/app/(dashboard)/settings/page.tsx:360` calls `GET /api/llm/providers/metrics?window=${window}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/llm/providers/metrics`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-84758fed8f0b7166", "name": "Dangling fetch: POST /api/brands (src/app/(dashboard)/settings/page.tsx:572)", "shortDescription": {"text": "Dangling fetch: POST /api/brands (src/app/(dashboard)/settings/page.tsx:572)"}, "fullDescription": {"text": "`src/app/(dashboard)/settings/page.tsx:572` calls `POST /api/brands` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/brands`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ffae8488bc033d33", "name": "Dangling fetch: PATCH /api/brands/${json.data.id} (src/app/(dashboard)/settings/page.tsx:587)", "shortDescription": {"text": "Dangling fetch: PATCH /api/brands/${json.data.id} (src/app/(dashboard)/settings/page.tsx:587)"}, "fullDescription": {"text": "`src/app/(dashboard)/settings/page.tsx:587` calls `PATCH /api/brands/${json.data.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/brands/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8af47ef54be92274", "name": "Dangling fetch: GET /api/system/config (src/app/(dashboard)/settings/page.tsx:687)", "shortDescription": {"text": "Dangling fetch: GET /api/system/config (src/app/(dashboard)/settings/page.tsx:687)"}, "fullDescription": {"text": "`src/app/(dashboard)/settings/page.tsx:687` calls `GET /api/system/config` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/system/config`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-908daaa68394b059", "name": "Dangling fetch: GET /api/brands/${activeBrand.id}/assets (src/app/(dashboard)/settings/brand-assets/page.tsx:39)", "shortDescription": {"text": "Dangling fetch: GET /api/brands/${activeBrand.id}/assets (src/app/(dashboard)/settings/brand-assets/page.tsx:39)"}, "fullDescription": {"text": "`src/app/(dashboard)/settings/brand-assets/page.tsx:39` calls `GET /api/brands/${activeBrand.id}/assets` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/brands/<p>/assets`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-61576f23706fd665", "name": "Dangling fetch: GET /api/brands/${activeBrand.id}/assets/${a.id}/preview (src/app/(dashboard)/settings/brand-assets/page", "shortDescription": {"text": "Dangling fetch: GET /api/brands/${activeBrand.id}/assets/${a.id}/preview (src/app/(dashboard)/settings/brand-assets/page.tsx:49)"}, "fullDescription": {"text": "`src/app/(dashboard)/settings/brand-assets/page.tsx:49` calls `GET /api/brands/${activeBrand.id}/assets/${a.id}/preview` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/brands/<p>/assets/<p>/preview`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-07157531f3e6c3a2", "name": "Dangling fetch: DELETE /api/brands/${activeBrand.id}/assets/${assetToDelete.id} (src/app/(dashboard)/settings/brand-asse", "shortDescription": {"text": "Dangling fetch: DELETE /api/brands/${activeBrand.id}/assets/${assetToDelete.id} (src/app/(dashboard)/settings/brand-assets/page.tsx:75)"}, "fullDescription": {"text": "`src/app/(dashboard)/settings/brand-assets/page.tsx:75` calls `DELETE /api/brands/${activeBrand.id}/assets/${assetToDelete.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/brands/<p>/assets/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7291edc53b33c1af", "name": "Dangling fetch: GET /api/social/health (src/app/(dashboard)/settings/social-connections/page.tsx:135)", "shortDescription": {"text": "Dangling fetch: GET /api/social/health (src/app/(dashboard)/settings/social-connections/page.tsx:135)"}, "fullDescription": {"text": "`src/app/(dashboard)/settings/social-connections/page.tsx:135` calls `GET /api/social/health` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/social/health`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e378fba2feb146c4", "name": "Dangling fetch: GET /api/social/integrations/mine (src/app/(dashboard)/settings/social-connections/page.tsx:140)", "shortDescription": {"text": "Dangling fetch: GET /api/social/integrations/mine (src/app/(dashboard)/settings/social-connections/page.tsx:140)"}, "fullDescription": {"text": "`src/app/(dashboard)/settings/social-connections/page.tsx:140` calls `GET /api/social/integrations/mine` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/social/integrations/mine`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8c5447f36bdeaae2", "name": "Dangling fetch: POST /api/social/integrations/mine (src/app/(dashboard)/settings/social-connections/page.tsx:151)", "shortDescription": {"text": "Dangling fetch: POST /api/social/integrations/mine (src/app/(dashboard)/settings/social-connections/page.tsx:151)"}, "fullDescription": {"text": "`src/app/(dashboard)/settings/social-connections/page.tsx:151` calls `POST /api/social/integrations/mine` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/social/integrations/mine`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1349a9a137ed9565", "name": "Dangling fetch: DELETE /api/social/integrations/mine/${platform} (src/app/(dashboard)/settings/social-connections/page.t", "shortDescription": {"text": "Dangling fetch: DELETE /api/social/integrations/mine/${platform} (src/app/(dashboard)/settings/social-connections/page.tsx:177)"}, "fullDescription": {"text": "`src/app/(dashboard)/settings/social-connections/page.tsx:177` calls `DELETE /api/social/integrations/mine/${platform}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/social/integrations/mine/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9271088944454014", "name": "Dangling fetch: GET /api/v1/agent-configs (src/app/(dashboard)/settings/agenti/page.tsx:102)", "shortDescription": {"text": "Dangling fetch: GET /api/v1/agent-configs (src/app/(dashboard)/settings/agenti/page.tsx:102)"}, "fullDescription": {"text": "`src/app/(dashboard)/settings/agenti/page.tsx:102` calls `GET /api/v1/agent-configs` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/agent-configs`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0f254cb625e93bb4", "name": "Dangling fetch: GET /api/v1/agent-skills (src/app/(dashboard)/settings/agenti/page.tsx:103)", "shortDescription": {"text": "Dangling fetch: GET /api/v1/agent-skills (src/app/(dashboard)/settings/agenti/page.tsx:103)"}, "fullDescription": {"text": "`src/app/(dashboard)/settings/agenti/page.tsx:103` calls `GET /api/v1/agent-skills` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/agent-skills`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-03f6e4c359bd3726", "name": "Dangling fetch: POST /api/v1/agent-configs (src/app/(dashboard)/settings/agenti/page.tsx:133)", "shortDescription": {"text": "Dangling fetch: POST /api/v1/agent-configs (src/app/(dashboard)/settings/agenti/page.tsx:133)"}, "fullDescription": {"text": "`src/app/(dashboard)/settings/agenti/page.tsx:133` calls `POST /api/v1/agent-configs` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/agent-configs`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e1166141420a2344", "name": "Dangling fetch: POST /api/v1/agent-skills (src/app/(dashboard)/settings/agenti/page.tsx:160)", "shortDescription": {"text": "Dangling fetch: POST /api/v1/agent-skills (src/app/(dashboard)/settings/agenti/page.tsx:160)"}, "fullDescription": {"text": "`src/app/(dashboard)/settings/agenti/page.tsx:160` calls `POST /api/v1/agent-skills` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/agent-skills`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c1bd42bdf26f2151", "name": "Dangling fetch: PUT /api/v1/agent-configs/${configId} (src/app/(dashboard)/settings/agenti/page.tsx:186)", "shortDescription": {"text": "Dangling fetch: PUT /api/v1/agent-configs/${configId} (src/app/(dashboard)/settings/agenti/page.tsx:186)"}, "fullDescription": {"text": "`src/app/(dashboard)/settings/agenti/page.tsx:186` calls `PUT /api/v1/agent-configs/${configId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/agent-configs/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7a49c0ca669f5170", "name": "Dangling fetch: DELETE /api/v1/agent-configs/${configId} (src/app/(dashboard)/settings/agenti/page.tsx:206)", "shortDescription": {"text": "Dangling fetch: DELETE /api/v1/agent-configs/${configId} (src/app/(dashboard)/settings/agenti/page.tsx:206)"}, "fullDescription": {"text": "`src/app/(dashboard)/settings/agenti/page.tsx:206` calls `DELETE /api/v1/agent-configs/${configId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/agent-configs/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-77e880faa3ed02e3", "name": "Dangling fetch: PUT /api/v1/agent-skills/${skillId} (src/app/(dashboard)/settings/agenti/page.tsx:222)", "shortDescription": {"text": "Dangling fetch: PUT /api/v1/agent-skills/${skillId} (src/app/(dashboard)/settings/agenti/page.tsx:222)"}, "fullDescription": {"text": "`src/app/(dashboard)/settings/agenti/page.tsx:222` calls `PUT /api/v1/agent-skills/${skillId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/agent-skills/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0b76bf32429f0cd8", "name": "Dangling fetch: DELETE /api/v1/agent-skills/${skillId} (src/app/(dashboard)/settings/agenti/page.tsx:245)", "shortDescription": {"text": "Dangling fetch: DELETE /api/v1/agent-skills/${skillId} (src/app/(dashboard)/settings/agenti/page.tsx:245)"}, "fullDescription": {"text": "`src/app/(dashboard)/settings/agenti/page.tsx:245` calls `DELETE /api/v1/agent-skills/${skillId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/agent-skills/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-46f96fb1a8b20652", "name": "Dangling fetch: GET /api/email-marketing/automations (src/app/(dashboard)/settings/automations/page.tsx:38)", "shortDescription": {"text": "Dangling fetch: GET /api/email-marketing/automations (src/app/(dashboard)/settings/automations/page.tsx:38)"}, "fullDescription": {"text": "`src/app/(dashboard)/settings/automations/page.tsx:38` calls `GET /api/email-marketing/automations` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/email-marketing/automations`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-39cad17097aa2ca3", "name": "Dangling fetch: POST /api/email-marketing/automations (src/app/(dashboard)/settings/automations/page.tsx:48)", "shortDescription": {"text": "Dangling fetch: POST /api/email-marketing/automations (src/app/(dashboard)/settings/automations/page.tsx:48)"}, "fullDescription": {"text": "`src/app/(dashboard)/settings/automations/page.tsx:48` calls `POST /api/email-marketing/automations` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/email-marketing/automations`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-935521728287b426", "name": "Dangling fetch: PATCH /api/email-marketing/automations/${automation.id} (src/app/(dashboard)/settings/automations/page.t", "shortDescription": {"text": "Dangling fetch: PATCH /api/email-marketing/automations/${automation.id} (src/app/(dashboard)/settings/automations/page.tsx:62)"}, "fullDescription": {"text": "`src/app/(dashboard)/settings/automations/page.tsx:62` calls `PATCH /api/email-marketing/automations/${automation.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/email-marketing/automations/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f952b7b5dec1d8e2", "name": "Dangling fetch: GET /api/video/templates (src/app/(dashboard)/settings/video-templates/page.tsx:40)", "shortDescription": {"text": "Dangling fetch: GET /api/video/templates (src/app/(dashboard)/settings/video-templates/page.tsx:40)"}, "fullDescription": {"text": "`src/app/(dashboard)/settings/video-templates/page.tsx:40` calls `GET /api/video/templates` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/video/templates`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5a8363eb77893fa2", "name": "Dangling fetch: POST /api/video/templates (src/app/(dashboard)/settings/video-templates/page.tsx:51)", "shortDescription": {"text": "Dangling fetch: POST /api/video/templates (src/app/(dashboard)/settings/video-templates/page.tsx:51)"}, "fullDescription": {"text": "`src/app/(dashboard)/settings/video-templates/page.tsx:51` calls `POST /api/video/templates` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/video/templates`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b073f4a5692937f4", "name": "Dangling fetch: POST /api/feature-flags (src/app/(dashboard)/settings/feature-flags/page.tsx:76)", "shortDescription": {"text": "Dangling fetch: POST /api/feature-flags (src/app/(dashboard)/settings/feature-flags/page.tsx:76)"}, "fullDescription": {"text": "`src/app/(dashboard)/settings/feature-flags/page.tsx:76` calls `POST /api/feature-flags` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/feature-flags`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0656e21c3e6e88b0", "name": "Dangling fetch: GET /api/email-marketing/lists (src/app/(dashboard)/settings/audience/page.tsx:50)", "shortDescription": {"text": "Dangling fetch: GET /api/email-marketing/lists (src/app/(dashboard)/settings/audience/page.tsx:50)"}, "fullDescription": {"text": "`src/app/(dashboard)/settings/audience/page.tsx:50` calls `GET /api/email-marketing/lists` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/email-marketing/lists`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e1b2a8a4dbd52c09", "name": "Dangling fetch: POST /api/internal/brand-secrets (src/app/(dashboard)/settings/audience/page.tsx:68)", "shortDescription": {"text": "Dangling fetch: POST /api/internal/brand-secrets (src/app/(dashboard)/settings/audience/page.tsx:68)"}, "fullDescription": {"text": "`src/app/(dashboard)/settings/audience/page.tsx:68` calls `POST /api/internal/brand-secrets` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/internal/brand-secrets`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7f1349344f623a50", "name": "Dangling fetch: GET /api/brands (src/app/(dashboard)/settings/image-generation/page.tsx:59)", "shortDescription": {"text": "Dangling fetch: GET /api/brands (src/app/(dashboard)/settings/image-generation/page.tsx:59)"}, "fullDescription": {"text": "`src/app/(dashboard)/settings/image-generation/page.tsx:59` calls `GET /api/brands` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/brands`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d63da42bb91c1b1d", "name": "Dangling fetch: GET /api/images/stats (src/app/(dashboard)/settings/image-generation/page.tsx:68)", "shortDescription": {"text": "Dangling fetch: GET /api/images/stats (src/app/(dashboard)/settings/image-generation/page.tsx:68)"}, "fullDescription": {"text": "`src/app/(dashboard)/settings/image-generation/page.tsx:68` calls `GET /api/images/stats` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/images/stats`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-72f9f2404099bbb4", "name": "Dangling fetch: PATCH /api/brands/${activeBrand.id} (src/app/(dashboard)/settings/image-generation/page.tsx:82)", "shortDescription": {"text": "Dangling fetch: PATCH /api/brands/${activeBrand.id} (src/app/(dashboard)/settings/image-generation/page.tsx:82)"}, "fullDescription": {"text": "`src/app/(dashboard)/settings/image-generation/page.tsx:82` calls `PATCH /api/brands/${activeBrand.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/brands/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-261947c61c7fa549", "name": "Dangling fetch: POST /api/images/generate (src/app/(dashboard)/settings/image-generation/page.tsx:99)", "shortDescription": {"text": "Dangling fetch: POST /api/images/generate (src/app/(dashboard)/settings/image-generation/page.tsx:99)"}, "fullDescription": {"text": "`src/app/(dashboard)/settings/image-generation/page.tsx:99` calls `POST /api/images/generate` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/images/generate`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b6c9de5a737dfe50", "name": "Dangling fetch: GET /api/brands (src/app/(dashboard)/settings/brand-context/page.tsx:415)", "shortDescription": {"text": "Dangling fetch: GET /api/brands (src/app/(dashboard)/settings/brand-context/page.tsx:415)"}, "fullDescription": {"text": "`src/app/(dashboard)/settings/brand-context/page.tsx:415` calls `GET /api/brands` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/brands`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2f2e81042567afa2", "name": "Dangling fetch: PATCH /api/brands/${brandId} (src/app/(dashboard)/settings/brand-context/page.tsx:452)", "shortDescription": {"text": "Dangling fetch: PATCH /api/brands/${brandId} (src/app/(dashboard)/settings/brand-context/page.tsx:452)"}, "fullDescription": {"text": "`src/app/(dashboard)/settings/brand-context/page.tsx:452` calls `PATCH /api/brands/${brandId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/brands/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-02ef72130d038522", "name": "Dangling fetch: GET /api/calendar/events?year=${year}&month=${month} (src/app/(dashboard)/calendario/page.tsx:82)", "shortDescription": {"text": "Dangling fetch: GET /api/calendar/events?year=${year}&month=${month} (src/app/(dashboard)/calendario/page.tsx:82)"}, "fullDescription": {"text": "`src/app/(dashboard)/calendario/page.tsx:82` calls `GET /api/calendar/events?year=${year}&month=${month}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/calendar/events`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1a6c308d5b4b638a", "name": "Dangling fetch: POST /api/calendar/events (src/app/(dashboard)/calendario/page.tsx:139)", "shortDescription": {"text": "Dangling fetch: POST /api/calendar/events (src/app/(dashboard)/calendario/page.tsx:139)"}, "fullDescription": {"text": "`src/app/(dashboard)/calendario/page.tsx:139` calls `POST /api/calendar/events` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/calendar/events`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-51447f0478e97316", "name": "Dangling fetch: GET /api/research/deep (src/app/(dashboard)/deep-research/page.tsx:59)", "shortDescription": {"text": "Dangling fetch: GET /api/research/deep (src/app/(dashboard)/deep-research/page.tsx:59)"}, "fullDescription": {"text": "`src/app/(dashboard)/deep-research/page.tsx:59` calls `GET /api/research/deep` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/research/deep`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2a271e9f235268d1", "name": "Dangling fetch: POST /api/research/deep (src/app/(dashboard)/deep-research/page.tsx:80)", "shortDescription": {"text": "Dangling fetch: POST /api/research/deep (src/app/(dashboard)/deep-research/page.tsx:80)"}, "fullDescription": {"text": "`src/app/(dashboard)/deep-research/page.tsx:80` calls `POST /api/research/deep` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/research/deep`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f0fd3ef05af7699b", "name": "Dangling fetch: GET /api/research/deep/${jobId}/results (src/app/(dashboard)/deep-research/page.tsx:101)", "shortDescription": {"text": "Dangling fetch: GET /api/research/deep/${jobId}/results (src/app/(dashboard)/deep-research/page.tsx:101)"}, "fullDescription": {"text": "`src/app/(dashboard)/deep-research/page.tsx:101` calls `GET /api/research/deep/${jobId}/results` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/research/deep/<p>/results`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-51ef2718399b440a", "name": "Dangling fetch: POST /api/research/deep/${jobId}/generate-ideas (src/app/(dashboard)/deep-research/page.tsx:113)", "shortDescription": {"text": "Dangling fetch: POST /api/research/deep/${jobId}/generate-ideas (src/app/(dashboard)/deep-research/page.tsx:113)"}, "fullDescription": {"text": "`src/app/(dashboard)/deep-research/page.tsx:113` calls `POST /api/research/deep/${jobId}/generate-ideas` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/research/deep/<p>/generate-ideas`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ba3998dd5d8ffe47", "name": "Dangling fetch: GET /api/system/config (src/components/dashboard/getting-started.tsx:19)", "shortDescription": {"text": "Dangling fetch: GET /api/system/config (src/components/dashboard/getting-started.tsx:19)"}, "fullDescription": {"text": "`src/components/dashboard/getting-started.tsx:19` calls `GET /api/system/config` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/system/config`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c0b69ed6e4b335d4", "name": "Dangling fetch: GET /api/brands (src/components/dashboard/getting-started.tsx:20)", "shortDescription": {"text": "Dangling fetch: GET /api/brands (src/components/dashboard/getting-started.tsx:20)"}, "fullDescription": {"text": "`src/components/dashboard/getting-started.tsx:20` calls `GET /api/brands` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/brands`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f2b9ef5ee5d96c48", "name": "Dangling fetch: GET /api/research?limit=1&status=approved (src/components/dashboard/getting-started.tsx:22)", "shortDescription": {"text": "Dangling fetch: GET /api/research?limit=1&status=approved (src/components/dashboard/getting-started.tsx:22)"}, "fullDescription": {"text": "`src/components/dashboard/getting-started.tsx:22` calls `GET /api/research?limit=1&status=approved` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/research`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-03ba2c6cbfa1fd57", "name": "Dangling fetch: GET /api/content?limit=1 (src/components/dashboard/getting-started.tsx:23)", "shortDescription": {"text": "Dangling fetch: GET /api/content?limit=1 (src/components/dashboard/getting-started.tsx:23)"}, "fullDescription": {"text": "`src/components/dashboard/getting-started.tsx:23` calls `GET /api/content?limit=1` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/content`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2542bcf272cd9205", "name": "Dangling fetch: GET /api/setup/progress (src/components/dashboard/getting-started.tsx:48)", "shortDescription": {"text": "Dangling fetch: GET /api/setup/progress (src/components/dashboard/getting-started.tsx:48)"}, "fullDescription": {"text": "`src/components/dashboard/getting-started.tsx:48` calls `GET /api/setup/progress` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/setup/progress`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8c7c35257ce4dc32", "name": "Dangling fetch: PATCH /api/setup/progress (src/components/dashboard/getting-started.tsx:59)", "shortDescription": {"text": "Dangling fetch: PATCH /api/setup/progress (src/components/dashboard/getting-started.tsx:59)"}, "fullDescription": {"text": "`src/components/dashboard/getting-started.tsx:59` calls `PATCH /api/setup/progress` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/setup/progress`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c21018b38a80f448", "name": "Dangling fetch: PATCH /api/setup/progress (src/components/dashboard/getting-started.tsx:98)", "shortDescription": {"text": "Dangling fetch: PATCH /api/setup/progress (src/components/dashboard/getting-started.tsx:98)"}, "fullDescription": {"text": "`src/components/dashboard/getting-started.tsx:98` calls `PATCH /api/setup/progress` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/setup/progress`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c84382526c1ab143", "name": "Dangling fetch: PATCH /api/brands/${brandId}/assets/${assetId} (src/components/brand-assets/palette-editor.tsx:13)", "shortDescription": {"text": "Dangling fetch: PATCH /api/brands/${brandId}/assets/${assetId} (src/components/brand-assets/palette-editor.tsx:13)"}, "fullDescription": {"text": "`src/components/brand-assets/palette-editor.tsx:13` calls `PATCH /api/brands/${brandId}/assets/${assetId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/brands/<p>/assets/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-14c7f495662245a5", "name": "Dangling fetch: POST /api/brands/${brandId}/assets/upload-url (src/components/brand-assets/asset-upload-card.tsx:23)", "shortDescription": {"text": "Dangling fetch: POST /api/brands/${brandId}/assets/upload-url (src/components/brand-assets/asset-upload-card.tsx:23)"}, "fullDescription": {"text": "`src/components/brand-assets/asset-upload-card.tsx:23` calls `POST /api/brands/${brandId}/assets/upload-url` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/brands/<p>/assets/upload-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-69072da1297b3ac5", "name": "Dangling fetch: POST /api/brands/${brandId}/assets (src/components/brand-assets/asset-upload-card.tsx:47)", "shortDescription": {"text": "Dangling fetch: POST /api/brands/${brandId}/assets (src/components/brand-assets/asset-upload-card.tsx:47)"}, "fullDescription": {"text": "`src/components/brand-assets/asset-upload-card.tsx:47` calls `POST /api/brands/${brandId}/assets` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/brands/<p>/assets`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ac810a893ada1ac6", "name": "Dangling fetch: GET /api/social/integrations/mine (src/components/content-hub/publish-button.tsx:27)", "shortDescription": {"text": "Dangling fetch: GET /api/social/integrations/mine (src/components/content-hub/publish-button.tsx:27)"}, "fullDescription": {"text": "`src/components/content-hub/publish-button.tsx:27` calls `GET /api/social/integrations/mine` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/social/integrations/mine`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5031f02a3b7602d3", "name": "Dangling fetch: GET /api/images/jobs/${id} (src/components/content-hub/generate-visual-button.tsx:21)", "shortDescription": {"text": "Dangling fetch: GET /api/images/jobs/${id} (src/components/content-hub/generate-visual-button.tsx:21)"}, "fullDescription": {"text": "`src/components/content-hub/generate-visual-button.tsx:21` calls `GET /api/images/jobs/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/images/jobs/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-594986fe572977d1", "name": "Dangling fetch: GET /api/system/costs?period=today (src/components/layout/api-spend-row.tsx:18)", "shortDescription": {"text": "Dangling fetch: GET /api/system/costs?period=today (src/components/layout/api-spend-row.tsx:18)"}, "fullDescription": {"text": "`src/components/layout/api-spend-row.tsx:18` calls `GET /api/system/costs?period=today` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/system/costs`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-cb83b8f00233e7f5", "name": "Dangling fetch: POST /api/llm/providers/${provider.id}/validate (src/components/settings/llm-provider-hub.tsx:125)", "shortDescription": {"text": "Dangling fetch: POST /api/llm/providers/${provider.id}/validate (src/components/settings/llm-provider-hub.tsx:125)"}, "fullDescription": {"text": "`src/components/settings/llm-provider-hub.tsx:125` calls `POST /api/llm/providers/${provider.id}/validate` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/llm/providers/<p>/validate`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-dacc5f96e12915f5", "name": "Dangling fetch: POST /api/llm/providers/${provider.id}/key (src/components/settings/llm-provider-hub.tsx:152)", "shortDescription": {"text": "Dangling fetch: POST /api/llm/providers/${provider.id}/key (src/components/settings/llm-provider-hub.tsx:152)"}, "fullDescription": {"text": "`src/components/settings/llm-provider-hub.tsx:152` calls `POST /api/llm/providers/${provider.id}/key` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/llm/providers/<p>/key`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-bb2dcba3ac2aea7d", "name": "Dangling fetch: DELETE /api/llm/providers/${provider.id}/key (src/components/settings/llm-provider-hub.tsx:181)", "shortDescription": {"text": "Dangling fetch: DELETE /api/llm/providers/${provider.id}/key (src/components/settings/llm-provider-hub.tsx:181)"}, "fullDescription": {"text": "`src/components/settings/llm-provider-hub.tsx:181` calls `DELETE /api/llm/providers/${provider.id}/key` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/llm/providers/<p>/key`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-eb142604e2e64338", "name": "Dangling fetch: POST /api/llm/gateways/${provider.id}/url (src/components/settings/llm-provider-hub.tsx:332)", "shortDescription": {"text": "Dangling fetch: POST /api/llm/gateways/${provider.id}/url (src/components/settings/llm-provider-hub.tsx:332)"}, "fullDescription": {"text": "`src/components/settings/llm-provider-hub.tsx:332` calls `POST /api/llm/gateways/${provider.id}/url` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/llm/gateways/<p>/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-aac1ff061f9920aa", "name": "Dangling fetch: POST /api/llm/gateways/probe (src/components/settings/llm-provider-hub.tsx:345)", "shortDescription": {"text": "Dangling fetch: POST /api/llm/gateways/probe (src/components/settings/llm-provider-hub.tsx:345)"}, "fullDescription": {"text": "`src/components/settings/llm-provider-hub.tsx:345` calls `POST /api/llm/gateways/probe` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/llm/gateways/probe`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4f757957fe9c1982", "name": "Dangling fetch: GET /api/llm/gateways/auto-discover (src/components/settings/llm-provider-hub.tsx:474)", "shortDescription": {"text": "Dangling fetch: GET /api/llm/gateways/auto-discover (src/components/settings/llm-provider-hub.tsx:474)"}, "fullDescription": {"text": "`src/components/settings/llm-provider-hub.tsx:474` calls `GET /api/llm/gateways/auto-discover` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/llm/gateways/auto-discover`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0129b774f4c87fb7", "name": "Dangling fetch: GET /api/llm/providers/catalog (src/components/settings/llm-provider-hub.tsx:514)", "shortDescription": {"text": "Dangling fetch: GET /api/llm/providers/catalog (src/components/settings/llm-provider-hub.tsx:514)"}, "fullDescription": {"text": "`src/components/settings/llm-provider-hub.tsx:514` calls `GET /api/llm/providers/catalog` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/llm/providers/catalog`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-21fef303df1e055a", "name": "Dangling fetch: GET /api/llm/providers/configured (src/components/settings/llm-provider-hub.tsx:515)", "shortDescription": {"text": "Dangling fetch: GET /api/llm/providers/configured (src/components/settings/llm-provider-hub.tsx:515)"}, "fullDescription": {"text": "`src/components/settings/llm-provider-hub.tsx:515` calls `GET /api/llm/providers/configured` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/llm/providers/configured`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-fc9460eac37624d4", "name": "Dangling fetch: GET /api/brand-templates (src/components/brand-context/brand-discovery.tsx:78)", "shortDescription": {"text": "Dangling fetch: GET /api/brand-templates (src/components/brand-context/brand-discovery.tsx:78)"}, "fullDescription": {"text": "`src/components/brand-context/brand-discovery.tsx:78` calls `GET /api/brand-templates` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/brand-templates`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e4531ad4799436b3", "name": "Dangling fetch: POST /api/brand-discovery (src/components/brand-context/brand-discovery.tsx:133)", "shortDescription": {"text": "Dangling fetch: POST /api/brand-discovery (src/components/brand-context/brand-discovery.tsx:133)"}, "fullDescription": {"text": "`src/components/brand-context/brand-discovery.tsx:133` calls `POST /api/brand-discovery` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/brand-discovery`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-045425b1a238d22b", "name": "Dangling fetch: POST /api/memory/upload (src/components/brand-context/context-document-upload.tsx:126)", "shortDescription": {"text": "Dangling fetch: POST /api/memory/upload (src/components/brand-context/context-document-upload.tsx:126)"}, "fullDescription": {"text": "`src/components/brand-context/context-document-upload.tsx:126` calls `POST /api/memory/upload` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/memory/upload`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b057a02510b947df", "name": "Dangling fetch: GET /api/brands (src/lib/brand-context.tsx:117)", "shortDescription": {"text": "Dangling fetch: GET /api/brands (src/lib/brand-context.tsx:117)"}, "fullDescription": {"text": "`src/lib/brand-context.tsx:117` calls `GET /api/brands` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/brands`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-131c74a6dd405b97", "name": "Dangling fetch: GET https://api.anthropic.com/v1/models (cli/src/commands/init.ts:58)", "shortDescription": {"text": "Dangling fetch: GET https://api.anthropic.com/v1/models (cli/src/commands/init.ts:58)"}, "fullDescription": {"text": "`cli/src/commands/init.ts:58` calls `GET https://api.anthropic.com/v1/models` 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.anthropic.com/v1/models`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-74c1698a30c204b5", "name": "Unused endpoint: GET /research/runs", "shortDescription": {"text": "Unused endpoint: GET /research/runs"}, "fullDescription": {"text": "`python/src/content_engine/api/routes.py` declares `GET /research/runs` 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-ca601f5fb6554e54", "name": "Unused endpoint: POST /scoring/run", "shortDescription": {"text": "Unused endpoint: POST /scoring/run"}, "fullDescription": {"text": "`python/src/content_engine/api/routes.py` declares `POST /scoring/run` 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-90cfc703e38d0f7a", "name": "Unused endpoint: POST /content/generate", "shortDescription": {"text": "Unused endpoint: POST /content/generate"}, "fullDescription": {"text": "`python/src/content_engine/api/routes.py` declares `POST /content/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-77ebec7e79190d4f", "name": "Unused endpoint: POST /content/drafts/{draft_id}/adapt", "shortDescription": {"text": "Unused endpoint: POST /content/drafts/{draft_id}/adapt"}, "fullDescription": {"text": "`python/src/content_engine/api/routes.py` declares `POST /content/drafts/{draft_id}/adapt` 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-5c445e7d8b0a3e1e", "name": "Unused endpoint: POST /content/drafts/{draft_id}/humanize", "shortDescription": {"text": "Unused endpoint: POST /content/drafts/{draft_id}/humanize"}, "fullDescription": {"text": "`python/src/content_engine/api/routes.py` declares `POST /content/drafts/{draft_id}/humanize` 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-9ea1eb595df82ad9", "name": "Unused endpoint: GET /writing-lab/sessions", "shortDescription": {"text": "Unused endpoint: GET /writing-lab/sessions"}, "fullDescription": {"text": "`python/src/content_engine/api/routes.py` declares `GET /writing-lab/sessions` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-285fd643dba28eaf", "name": "Unused endpoint: GET /writing-lab/sessions/{session_id}", "shortDescription": {"text": "Unused endpoint: GET /writing-lab/sessions/{session_id}"}, "fullDescription": {"text": "`python/src/content_engine/api/routes.py` declares `GET /writing-lab/sessions/{session_id}` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f4da3c43e62e0617", "name": "Unused endpoint: POST /scheduler/weekly-newsletter", "shortDescription": {"text": "Unused endpoint: POST /scheduler/weekly-newsletter"}, "fullDescription": {"text": "`python/src/content_engine/api/routes.py` declares `POST /scheduler/weekly-newsletter` 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-c194971b901a1efd", "name": "Unused endpoint: POST /webhooks/telegram", "shortDescription": {"text": "Unused endpoint: POST /webhooks/telegram"}, "fullDescription": {"text": "`python/src/content_engine/api/routes.py` declares `POST /webhooks/telegram` 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-99ba870b3f6b2638", "name": "Unused endpoint: POST /webhooks/email/brevo", "shortDescription": {"text": "Unused endpoint: POST /webhooks/email/brevo"}, "fullDescription": {"text": "`python/src/content_engine/api/routes.py` declares `POST /webhooks/email/brevo` 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-0cef91573912a7b7", "name": "Unused endpoint: POST /webhooks/email/mailchimp", "shortDescription": {"text": "Unused endpoint: POST /webhooks/email/mailchimp"}, "fullDescription": {"text": "`python/src/content_engine/api/routes.py` declares `POST /webhooks/email/mailchimp` 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-c1348edc48c2b88b", "name": "Unused endpoint: POST /social/publish/twitter", "shortDescription": {"text": "Unused endpoint: POST /social/publish/twitter"}, "fullDescription": {"text": "`python/src/content_engine/api/routes.py` declares `POST /social/publish/twitter` 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-17dc4f175616f946", "name": "Unused endpoint: POST /social/schedule", "shortDescription": {"text": "Unused endpoint: POST /social/schedule"}, "fullDescription": {"text": "`python/src/content_engine/api/routes.py` declares `POST /social/schedule` 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-a8861bb8c4ee0205", "name": "Unused endpoint: POST /analytics/metrics", "shortDescription": {"text": "Unused endpoint: POST /analytics/metrics"}, "fullDescription": {"text": "`python/src/content_engine/api/routes.py` declares `POST /analytics/metrics` 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-e0c453683f3d892b", "name": "Unused endpoint: POST /analytics/feedback-loop", "shortDescription": {"text": "Unused endpoint: POST /analytics/feedback-loop"}, "fullDescription": {"text": "`python/src/content_engine/api/routes.py` declares `POST /analytics/feedback-loop` 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-e402c04a4236c91f", "name": "Unused endpoint: POST /analytics/pull-metrics", "shortDescription": {"text": "Unused endpoint: POST /analytics/pull-metrics"}, "fullDescription": {"text": "`python/src/content_engine/api/routes.py` declares `POST /analytics/pull-metrics` 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-3fc532a6f33b7d97", "name": "Unused endpoint: POST /scheduler/daily-pipeline", "shortDescription": {"text": "Unused endpoint: POST /scheduler/daily-pipeline"}, "fullDescription": {"text": "`python/src/content_engine/api/routes.py` declares `POST /scheduler/daily-pipeline` 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-aea61dbb656eacfb", "name": "Unused endpoint: POST /scheduler/publish-scheduled", "shortDescription": {"text": "Unused endpoint: POST /scheduler/publish-scheduled"}, "fullDescription": {"text": "`python/src/content_engine/api/routes.py` declares `POST /scheduler/publish-scheduled` 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-7a795b95a3a97c2c", "name": "Unused endpoint: POST /auth/cache-invalidate", "shortDescription": {"text": "Unused endpoint: POST /auth/cache-invalidate"}, "fullDescription": {"text": "`python/src/content_engine/api/routes.py` declares `POST /auth/cache-invalidate` 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-6da1902774de05a5", "name": "Unused endpoint: GET /llm/fallback-stats", "shortDescription": {"text": "Unused endpoint: GET /llm/fallback-stats"}, "fullDescription": {"text": "`python/src/content_engine/api/routes.py` declares `GET /llm/fallback-stats` 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-94566b5e9418bebd", "name": "Unused endpoint: GET /llm/fallback-log", "shortDescription": {"text": "Unused endpoint: GET /llm/fallback-log"}, "fullDescription": {"text": "`python/src/content_engine/api/routes.py` declares `GET /llm/fallback-log` 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-9293077dc9d55a2d", "name": "Unused endpoint: POST /memory/consolidate-user", "shortDescription": {"text": "Unused endpoint: POST /memory/consolidate-user"}, "fullDescription": {"text": "`python/src/content_engine/api/routes.py` declares `POST /memory/consolidate-user` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8e97ba0cecfe52b7", "name": "Unused endpoint: POST /memory/recall", "shortDescription": {"text": "Unused endpoint: POST /memory/recall"}, "fullDescription": {"text": "`python/src/content_engine/api/routes.py` declares `POST /memory/recall` 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-578da48a36ca4073", "name": "Unused endpoint: GET /memory/expiring", "shortDescription": {"text": "Unused endpoint: GET /memory/expiring"}, "fullDescription": {"text": "`python/src/content_engine/api/routes.py` declares `GET /memory/expiring` 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-01fab25a146fcce3", "name": "Unused endpoint: POST /memory/facts/{fact_id}/supersede", "shortDescription": {"text": "Unused endpoint: POST /memory/facts/{fact_id}/supersede"}, "fullDescription": {"text": "`python/src/content_engine/api/routes.py` declares `POST /memory/facts/{fact_id}/supersede` 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-5b23723b348d08a4", "name": "Unused endpoint: POST /memory/upload-source", "shortDescription": {"text": "Unused endpoint: POST /memory/upload-source"}, "fullDescription": {"text": "`python/src/content_engine/api/routes.py` declares `POST /memory/upload-source` 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-891b681572b0e018", "name": "Unused endpoint: GET /brands/credentials", "shortDescription": {"text": "Unused endpoint: GET /brands/credentials"}, "fullDescription": {"text": "`python/src/content_engine/api/routes.py` declares `GET /brands/credentials` 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-6185d148abece36c", "name": "Unused endpoint: PUT /brands/credentials/{service_name}", "shortDescription": {"text": "Unused endpoint: PUT /brands/credentials/{service_name}"}, "fullDescription": {"text": "`python/src/content_engine/api/routes.py` declares `PUT /brands/credentials/{service_name}` 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-faa4612b04c15800", "name": "Unused endpoint: DELETE /brands/credentials/{service_name}", "shortDescription": {"text": "Unused endpoint: DELETE /brands/credentials/{service_name}"}, "fullDescription": {"text": "`python/src/content_engine/api/routes.py` declares `DELETE /brands/credentials/{service_name}` 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-08c18b0c15f8c335", "name": "Unused endpoint: GET /brands/credentials/{service_name}/status", "shortDescription": {"text": "Unused endpoint: GET /brands/credentials/{service_name}/status"}, "fullDescription": {"text": "`python/src/content_engine/api/routes.py` declares `GET /brands/credentials/{service_name}/status` 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-c9dc3f78ac9e1cc2", "name": "Unused endpoint: POST /llm/fallback-monitor/reset", "shortDescription": {"text": "Unused endpoint: POST /llm/fallback-monitor/reset"}, "fullDescription": {"text": "`python/src/content_engine/api/routes.py` declares `POST /llm/fallback-monitor/reset` 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-2d44b212ec9a75e7", "name": "Unused endpoint: POST /newsletter/{newsletter_id}/resolve-ab", "shortDescription": {"text": "Unused endpoint: POST /newsletter/{newsletter_id}/resolve-ab"}, "fullDescription": {"text": "`python/src/content_engine/api/routes.py` declares `POST /newsletter/{newsletter_id}/resolve-ab` 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-2a366262a6be358f", "name": "Unused endpoint: GET /activity", "shortDescription": {"text": "Unused endpoint: GET /activity"}, "fullDescription": {"text": "`python/src/content_engine/api/routes.py` declares `GET /activity` 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-2b73958ead43e47d", "name": "Unused endpoint: POST /templates", "shortDescription": {"text": "Unused endpoint: POST /templates"}, "fullDescription": {"text": "`python/src/content_engine/api/routes_video.py` declares `POST /templates` 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-0f05b18a4041916f", "name": "Unused endpoint: POST /render", "shortDescription": {"text": "Unused endpoint: POST /render"}, "fullDescription": {"text": "`python/src/content_engine/api/routes_video.py` declares `POST /render` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-71bf45f3efda8170", "name": "Unused endpoint: GET /{video_id}/status", "shortDescription": {"text": "Unused endpoint: GET /{video_id}/status"}, "fullDescription": {"text": "`python/src/content_engine/api/routes_video.py` declares `GET /{video_id}/status` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5baa8971ebe192a1", "name": "Unused endpoint: GET /", "shortDescription": {"text": "Unused endpoint: GET /"}, "fullDescription": {"text": "`python/src/content_engine/api/routes_video.py` declares `GET /` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-017394171548a2b2", "name": "Unused endpoint: GET /templates", "shortDescription": {"text": "Unused endpoint: GET /templates"}, "fullDescription": {"text": "`python/src/content_engine/api/routes_video.py` declares `GET /templates` 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-164d6a7f98a79771", "name": "Unused endpoint: GET /heygen/avatars", "shortDescription": {"text": "Unused endpoint: GET /heygen/avatars"}, "fullDescription": {"text": "`python/src/content_engine/api/routes_video.py` declares `GET /heygen/avatars` 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-970eb92d6ec2bfaa", "name": "Unused endpoint: POST /generate", "shortDescription": {"text": "Unused endpoint: POST /generate"}, "fullDescription": {"text": "`python/src/content_engine/api/routes_video.py` declares `POST /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-635d931a5e0766b0", "name": "Unused endpoint: POST /shorts/generate", "shortDescription": {"text": "Unused endpoint: POST /shorts/generate"}, "fullDescription": {"text": "`python/src/content_engine/api/routes_video.py` declares `POST /shorts/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-f0009b85e788448f", "name": "Unused endpoint: GET /shorts/{video_id}/status", "shortDescription": {"text": "Unused endpoint: GET /shorts/{video_id}/status"}, "fullDescription": {"text": "`python/src/content_engine/api/routes_video.py` declares `GET /shorts/{video_id}/status` 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-5a53cf6d14234a6f", "name": "Unused endpoint: POST /{video_id}/poll-heygen", "shortDescription": {"text": "Unused endpoint: POST /{video_id}/poll-heygen"}, "fullDescription": {"text": "`python/src/content_engine/api/routes_video.py` declares `POST /{video_id}/poll-heygen` 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-696c1c3378de88c3", "name": "Unused endpoint: GET /providers/catalog", "shortDescription": {"text": "Unused endpoint: GET /providers/catalog"}, "fullDescription": {"text": "`python/src/content_engine/api/routes_llm_providers.py` declares `GET /providers/catalog` 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-d7e9cf0198938c83", "name": "Unused endpoint: GET /providers/configured", "shortDescription": {"text": "Unused endpoint: GET /providers/configured"}, "fullDescription": {"text": "`python/src/content_engine/api/routes_llm_providers.py` declares `GET /providers/configured` 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-81b3be31042d88c0", "name": "Unused endpoint: POST /providers/{provider_id}/key", "shortDescription": {"text": "Unused endpoint: POST /providers/{provider_id}/key"}, "fullDescription": {"text": "`python/src/content_engine/api/routes_llm_providers.py` declares `POST /providers/{provider_id}/key` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f23435ba1f2e8d25", "name": "Unused endpoint: DELETE /providers/{provider_id}/key", "shortDescription": {"text": "Unused endpoint: DELETE /providers/{provider_id}/key"}, "fullDescription": {"text": "`python/src/content_engine/api/routes_llm_providers.py` declares `DELETE /providers/{provider_id}/key` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1387fa0581a9b717", "name": "Unused endpoint: POST /providers/{provider_id}/validate", "shortDescription": {"text": "Unused endpoint: POST /providers/{provider_id}/validate"}, "fullDescription": {"text": "`python/src/content_engine/api/routes_llm_providers.py` declares `POST /providers/{provider_id}/validate` 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-8e11a29d8fbc4f99", "name": "Unused endpoint: POST /gateways/probe", "shortDescription": {"text": "Unused endpoint: POST /gateways/probe"}, "fullDescription": {"text": "`python/src/content_engine/api/routes_llm_providers.py` declares `POST /gateways/probe` 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-cc9f55e0e7416dcb", "name": "Unused endpoint: GET /gateways/auto-discover", "shortDescription": {"text": "Unused endpoint: GET /gateways/auto-discover"}, "fullDescription": {"text": "`python/src/content_engine/api/routes_llm_providers.py` declares `GET /gateways/auto-discover` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}]}}, "automationDetails": {"id": "repobility/25274"}, "properties": {"repository": "davidesilver/ZeroHuman-Agency", "repoUrl": "https://github.com/davidesilver/ZeroHuman-Agency", "branch": "main"}, "results": [{"ruleId": "scanner-88e0f736db2f271a", "level": "note", "message": {"text": "Possibly dead Python function: serve"}, "properties": {"repobilityId": "14ba9a32ffb07e31", "scanner": "scanner-primary", "fingerprint": "88e0f736db2f271a", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "python/src/content_engine/main.py:121"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-2f1417398e9d186c", "level": "note", "message": {"text": "Possibly dead Python function: sweep"}, "properties": {"repobilityId": "f9a1954828cce24b", "scanner": "scanner-primary", "fingerprint": "2f1417398e9d186c", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "python/src/content_engine/memory/decay.py:37"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-acf8cc092339b594", "level": "note", "message": {"text": "Possibly dead Python function: resolve_conflicts"}, "properties": {"repobilityId": "ce2fd577656ae9f9", "scanner": "scanner-primary", "fingerprint": "acf8cc092339b594", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "python/src/content_engine/memory/arbiter.py:117"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-a9f59c583679e381", "level": "note", "message": {"text": "Possibly dead Python function: list_archived"}, "properties": {"repobilityId": "53251687e056e344", "scanner": "scanner-primary", "fingerprint": "a9f59c583679e381", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "python/src/content_engine/memory/stores/archive.py:18"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-9177f6896a6cbb58", "level": "note", "message": {"text": "Possibly dead Python function: count_archived"}, "properties": {"repobilityId": "d628683b1c1e1de7", "scanner": "scanner-primary", "fingerprint": "9177f6896a6cbb58", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "python/src/content_engine/memory/stores/archive.py:58"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-35c3f589a6812a30", "level": "note", "message": {"text": "Possibly dead Python function: clear_session"}, "properties": {"repobilityId": "c905505582b707e7", "scanner": "scanner-primary", "fingerprint": "35c3f589a6812a30", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "python/src/content_engine/memory/stores/hot.py:96"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-a15555b8fcdd113c", "level": "note", "message": {"text": "Possibly dead Python function: summarise_session"}, "properties": {"repobilityId": "e107c6bc99afdf85", "scanner": "scanner-primary", "fingerprint": "a15555b8fcdd113c", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "python/src/content_engine/memory/consolidation/synthesizer.py:64"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-d0d17fcd0f8215e1", "level": "note", "message": {"text": "Possibly dead Python function: invalidate_agent_cache"}, "properties": {"repobilityId": "d53126bc1839aa18", "scanner": "scanner-primary", "fingerprint": "d0d17fcd0f8215e1", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "python/src/content_engine/agents/agent_loader.py:247"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-47d2d8359b0a066e", "level": "note", "message": {"text": "Possibly dead Python function: clear_agent_cache"}, "properties": {"repobilityId": "0d6627853acd1221", "scanner": "scanner-primary", "fingerprint": "47d2d8359b0a066e", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "python/src/content_engine/agents/agent_loader.py:260"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-168319f215a5d264", "level": "note", "message": {"text": "Possibly dead Python function: model_post_init"}, "properties": {"repobilityId": "92fde611a57364a6", "scanner": "scanner-primary", "fingerprint": "168319f215a5d264", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "python/src/content_engine/api/routes.py:1052"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-1e205d55a860b437", "level": "note", "message": {"text": "Possibly dead Python function: llm_caller"}, "properties": {"repobilityId": "1fdda2f88ab9d8c4", "scanner": "scanner-primary", "fingerprint": "1e205d55a860b437", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "python/src/content_engine/utils/llm_client.py:394"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-acb07b45e00e5df6", "level": "note", "message": {"text": "Possibly dead Python function: list_example_content"}, "properties": {"repobilityId": "cad8e74abd66bf8e", "scanner": "scanner-primary", "fingerprint": "acb07b45e00e5df6", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "python/src/content_engine/utils/brand_assets.py:53"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-6a75884e31164403", "level": "note", "message": {"text": "Possibly dead Python function: wait_until_available"}, "properties": {"repobilityId": "c4483cf611a5918d", "scanner": "scanner-primary", "fingerprint": "6a75884e31164403", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "python/src/content_engine/utils/llm_rate_limiter.py:202"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-0c059bca6dff7e8a", "level": "note", "message": {"text": "Possibly dead Python function: estimate_tokens"}, "properties": {"repobilityId": "2f3c83692bdba83e", "scanner": "scanner-primary", "fingerprint": "0c059bca6dff7e8a", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "python/src/content_engine/utils/cost_tracker.py:24"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-92a83e67dbac4eae", "level": "note", "message": {"text": "Possibly dead Python function: run_cli_for_brand"}, "properties": {"repobilityId": "9e2599854c839a18", "scanner": "scanner-primary", "fingerprint": "92a83e67dbac4eae", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "python/src/content_engine/utils/cli_runner.py:50"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-c72c029d1299cc85", "level": "note", "message": {"text": "Possibly dead Python function: call"}, "properties": {"repobilityId": "cf6e1a33b1245f9d", "scanner": "scanner-primary", "fingerprint": "c72c029d1299cc85", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "python/src/content_engine/utils/security_utils.py:140"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-d66bb076f7e7de97", "level": "note", "message": {"text": "Possibly dead Python function: run_health_check"}, "properties": {"repobilityId": "57fd30b68722f507", "scanner": "scanner-primary", "fingerprint": "d66bb076f7e7de97", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "python/src/content_engine/monitoring/pipeline_health.py:213"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-c8e029d09eabb4d2", "level": "note", "message": {"text": "Possibly dead Python function: format_health_report"}, "properties": {"repobilityId": "395801c6056c1001", "scanner": "scanner-primary", "fingerprint": "c8e029d09eabb4d2", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "python/src/content_engine/monitoring/pipeline_health.py:234"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-74c9e1a1eb7b3c8d", "level": "note", "message": {"text": "Possibly dead Python function: run_nightly_optimization"}, "properties": {"repobilityId": "324231212ca5557f", "scanner": "scanner-primary", "fingerprint": "74c9e1a1eb7b3c8d", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "python/src/content_engine/services/auto_optimizer.py:32"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-af82723852ef3a8c", "level": "note", "message": {"text": "Possibly dead Python function: send_telegram_alert"}, "properties": {"repobilityId": "4c697aad4b2804a8", "scanner": "scanner-primary", "fingerprint": "af82723852ef3a8c", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "python/src/content_engine/services/notification.py:214"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-519211690282feda", "level": "note", "message": {"text": "Possibly dead Python function: delete_post"}, "properties": {"repobilityId": "a49ed0c3bd044a06", "scanner": "scanner-primary", "fingerprint": "519211690282feda", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "python/src/content_engine/services/postiz_client.py:210"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-10a1849a5c558efc", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/layout.tsx:102"}, "properties": {"repobilityId": "0d72350965068f5b", "scanner": "scanner-primary", "fingerprint": "10a1849a5c558efc", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-241ca36a0820da1a", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/app/sitemap.ts:26"}, "properties": {"repobilityId": "aa5b3606086690ef", "scanner": "scanner-primary", "fingerprint": "241ca36a0820da1a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-7a02b879d2f221fb", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/app/bootstrap/page.tsx:132"}, "properties": {"repobilityId": "dc07c6346e170e47", "scanner": "scanner-primary", "fingerprint": "7a02b879d2f221fb", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-14ffe8a67b9d733f", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/app/(dashboard)/_dashboard-data.ts:75"}, "properties": {"repobilityId": "8e77ccec3a534b92", "scanner": "scanner-primary", "fingerprint": "14ffe8a67b9d733f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-4adb2835240b7365", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/memory/page.tsx:688"}, "properties": {"repobilityId": "a3474af69a145423", "scanner": "scanner-primary", "fingerprint": "4adb2835240b7365", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-74d94f12205a2d13", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/setup/page.tsx:980"}, "properties": {"repobilityId": "9147e46561461f33", "scanner": "scanner-primary", "fingerprint": "74d94f12205a2d13", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c673db7c341ca31b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/competitor-watch/page.tsx:154"}, "properties": {"repobilityId": "5f038662ae630d68", "scanner": "scanner-primary", "fingerprint": "c673db7c341ca31b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d53f3edf8238ba5e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/videos/page.tsx:215"}, "properties": {"repobilityId": "fef16f5cfbc892bf", "scanner": "scanner-primary", "fingerprint": "d53f3edf8238ba5e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e114e3cafb6a24a4", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/settings/page.tsx:141"}, "properties": {"repobilityId": "7d023a7add1edcf2", "scanner": "scanner-primary", "fingerprint": "e114e3cafb6a24a4", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e2b44b43a8d3369c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/settings/brand-assets/page.tsx:148"}, "properties": {"repobilityId": "ea3f737bff17b106", "scanner": "scanner-primary", "fingerprint": "e2b44b43a8d3369c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-65f03cdc0ba5bdcb", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/settings/automations/page.tsx:169"}, "properties": {"repobilityId": "acec9d9b981269e4", "scanner": "scanner-primary", "fingerprint": "65f03cdc0ba5bdcb", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-066fa154d4a48457", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/settings/video-templates/page.tsx:154"}, "properties": {"repobilityId": "5d64a9e1ed47c3ad", "scanner": "scanner-primary", "fingerprint": "066fa154d4a48457", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b6ba58a9a99d7f96", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/settings/brand-context/page.tsx:544"}, "properties": {"repobilityId": "0618c108730bf168", "scanner": "scanner-primary", "fingerprint": "b6ba58a9a99d7f96", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-39d7d40bf3c29c13", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/deep-research/page.tsx:209"}, "properties": {"repobilityId": "ac420063c6fe3ea5", "scanner": "scanner-primary", "fingerprint": "39d7d40bf3c29c13", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-5cd2ef8ec051b1f1", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/layout/sidebar.tsx:44"}, "properties": {"repobilityId": "71d53859fbb6eed7", "scanner": "scanner-primary", "fingerprint": "5cd2ef8ec051b1f1", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-12f26f53a2a0e60b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/layout/brand-switcher.tsx:68"}, "properties": {"repobilityId": "c8f2a4ecfdb999f1", "scanner": "scanner-primary", "fingerprint": "12f26f53a2a0e60b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-df9d69f44c89abce", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/seo/json-ld.tsx:61"}, "properties": {"repobilityId": "55764ea7310258e2", "scanner": "scanner-primary", "fingerprint": "df9d69f44c89abce", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-56dc92312c01c8a3", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/llm-provider-hub.tsx:373"}, "properties": {"repobilityId": "ae635ed00fe6cbbe", "scanner": "scanner-primary", "fingerprint": "56dc92312c01c8a3", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0b73c6c4b4aa4681", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/email-provider-card.tsx:323"}, "properties": {"repobilityId": "62f7eb12b9497ccb", "scanner": "scanner-primary", "fingerprint": "0b73c6c4b4aa4681", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d577aa49b53270e9", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/research/volume-report.tsx:26"}, "properties": {"repobilityId": "6eb018b2d2f62d9b", "scanner": "scanner-primary", "fingerprint": "d577aa49b53270e9", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ae6915655855150b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/research/items-table.tsx:118"}, "properties": {"repobilityId": "e0082105561b9711", "scanner": "scanner-primary", "fingerprint": "ae6915655855150b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a9fe24e5c703013b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/brand-context/context-document-upload.tsx:322"}, "properties": {"repobilityId": "a31511cfd8f9ae4e", "scanner": "scanner-primary", "fingerprint": "a9fe24e5c703013b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-54aef7bbce0789f5", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 cli/src/commands/migrate.ts:21"}, "properties": {"repobilityId": "ffd8dbd9188c7e6c", "scanner": "scanner-primary", "fingerprint": "54aef7bbce0789f5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2a1e020b8cdab99a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 cli/src/commands/doctor.ts:21"}, "properties": {"repobilityId": "190f0c0722ce8531", "scanner": "scanner-primary", "fingerprint": "2a1e020b8cdab99a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3d18fd9be9aaada2", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 cli/src/commands/mcp.ts:36"}, "properties": {"repobilityId": "f2e284bbd6a919b2", "scanner": "scanner-primary", "fingerprint": "3d18fd9be9aaada2", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b62908ebe47d708d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 cli/src/commands/start.ts:33"}, "properties": {"repobilityId": "f3612afe9e97855d", "scanner": "scanner-primary", "fingerprint": "b62908ebe47d708d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d463ce8aa16d82ce", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 cli/src/commands/update.ts:47"}, "properties": {"repobilityId": "5e2611902f9b73f0", "scanner": "scanner-primary", "fingerprint": "d463ce8aa16d82ce", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-bd76112789e682f2", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 cli/src/commands/providers.ts:48"}, "properties": {"repobilityId": "4330e683d35c092b", "scanner": "scanner-primary", "fingerprint": "bd76112789e682f2", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1fc3b35e5a6db527", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 cli/src/commands/config.ts:10"}, "properties": {"repobilityId": "20d94e47f6c69d4f", "scanner": "scanner-primary", "fingerprint": "1fc3b35e5a6db527", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-74511dabda3b228b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 cli/src/commands/brand.ts:77"}, "properties": {"repobilityId": "c9daa2e2ec3036fa", "scanner": "scanner-primary", "fingerprint": "74511dabda3b228b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ce85e0d83eef8a1a", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 cli/src/commands/init.ts:156"}, "properties": {"repobilityId": "36031483d13fb990", "scanner": "scanner-primary", "fingerprint": "ce85e0d83eef8a1a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-1d0d10860aeaae38", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 cli/src/commands/init.ts:132"}, "properties": {"repobilityId": "2bbb05e60bcf7460", "scanner": "scanner-primary", "fingerprint": "1d0d10860aeaae38", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-adb91252fbde9ebb", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 cli/src/lib/logo.ts:30"}, "properties": {"repobilityId": "7be18bdc02d75b78", "scanner": "scanner-primary", "fingerprint": "adb91252fbde9ebb", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ce6d4b79ab249354", "level": "warning", "message": {"text": "Dockerfile runs as root: python/Dockerfile"}, "properties": {"repobilityId": "22c95f7276919818", "scanner": "scanner-primary", "fingerprint": "ce6d4b79ab249354", "layer": "hardware", "severity": "medium", "confidence": 1.0, "tags": ["security", "container"]}}, {"ruleId": "scanner-1d05440127c869a9", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: python:3.14-slim"}, "properties": {"repobilityId": "cec8d4f857f18c6a", "scanner": "scanner-primary", "fingerprint": "1d05440127c869a9", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "python/Dockerfile"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-9ab8008389ef7dfc", "level": "warning", "message": {"text": "Dockerfile runs as root: docker/tts-service/Dockerfile"}, "properties": {"repobilityId": "b826e6bf718ff1ce", "scanner": "scanner-primary", "fingerprint": "9ab8008389ef7dfc", "layer": "hardware", "severity": "medium", "confidence": 1.0, "tags": ["security", "container"]}}, {"ruleId": "scanner-a9e436c42ea248cd", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: python:3.11-slim"}, "properties": {"repobilityId": "4e6750e7f31e5aea", "scanner": "scanner-primary", "fingerprint": "a9e436c42ea248cd", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "docker/tts-service/Dockerfile"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-0f110b943ae27aff", "level": "warning", "message": {"text": "Dockerfile runs as root: docker/whisper-service/Dockerfile"}, "properties": {"repobilityId": "7dfc6fa97f89e23f", "scanner": "scanner-primary", "fingerprint": "0f110b943ae27aff", "layer": "hardware", "severity": "medium", "confidence": 1.0, "tags": ["security", "container"]}}, {"ruleId": "scanner-edfd1815ec81f943", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: python:3.11-slim"}, "properties": {"repobilityId": "e0a35a6e31151008", "scanner": "scanner-primary", "fingerprint": "edfd1815ec81f943", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "docker/whisper-service/Dockerfile"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-21fd7dcfc0aff00c", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/layout.tsx:102"}, "properties": {"repobilityId": "0bca654fa2052eb0", "scanner": "scanner-primary", "fingerprint": "21fd7dcfc0aff00c", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/layout.tsx"}, "region": {"startLine": 102}}}]}, {"ruleId": "scanner-eb40853d3509801f", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/components/seo/json-ld.tsx:61"}, "properties": {"repobilityId": "66802a6a4855f316", "scanner": "scanner-primary", "fingerprint": "eb40853d3509801f", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/seo/json-ld.tsx"}, "region": {"startLine": 61}}}]}, {"ruleId": "scanner-14e07bd4e63ad4a2", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/postiz_analytics/index.ts:25"}, "properties": {"repobilityId": "41ad78944eaaf4b5", "scanner": "scanner-primary", "fingerprint": "14e07bd4e63ad4a2", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/postiz_analytics/index.ts"}, "region": {"startLine": 25}}}]}, {"ruleId": "scanner-bfe653d1fb7301f9", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in cli/src/commands/migrate.ts:1"}, "properties": {"repobilityId": "5fd06acf181374eb", "scanner": "scanner-primary", "fingerprint": "bfe653d1fb7301f9", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "cli/src/commands/migrate.ts"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-7fdbef8936aadb8d", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in cli/src/commands/doctor.ts:6"}, "properties": {"repobilityId": "58c4e7ee2559c75b", "scanner": "scanner-primary", "fingerprint": "7fdbef8936aadb8d", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "cli/src/commands/doctor.ts"}, "region": {"startLine": 6}}}]}, {"ruleId": "scanner-ab3772584705addb", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in cli/src/commands/start.ts:1"}, "properties": {"repobilityId": "f044c8a38519e90d", "scanner": "scanner-primary", "fingerprint": "ab3772584705addb", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "cli/src/commands/start.ts"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-a48ce61eacc2f0b4", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in cli/src/commands/update.ts:1"}, "properties": {"repobilityId": "8b080be6c0059a9c", "scanner": "scanner-primary", "fingerprint": "a48ce61eacc2f0b4", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "cli/src/commands/update.ts"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-797185602802316d", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in cli/src/commands/seed.ts:1"}, "properties": {"repobilityId": "b0a81f9cbcae23b8", "scanner": "scanner-primary", "fingerprint": "797185602802316d", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "cli/src/commands/seed.ts"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-6d80c78e3dc32f8f", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in cli/src/commands/init.ts:17"}, "properties": {"repobilityId": "7fa39a2fd24ffd9a", "scanner": "scanner-primary", "fingerprint": "6d80c78e3dc32f8f", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "cli/src/commands/init.ts"}, "region": {"startLine": 17}}}]}, {"ruleId": "scanner-e8947fd1959bfc80", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in cli/src/lib/health.ts:5"}, "properties": {"repobilityId": "426a17ad2add2c3b", "scanner": "scanner-primary", "fingerprint": "e8947fd1959bfc80", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "cli/src/lib/health.ts"}, "region": {"startLine": 5}}}]}, {"ruleId": "scanner-f138c9fb1fc3ef35", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in compositions/automated-shorts/index.html:362"}, "properties": {"repobilityId": "ef590cd41a786912", "scanner": "scanner-primary", "fingerprint": "f138c9fb1fc3ef35", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "compositions/automated-shorts/index.html"}, "region": {"startLine": 362}}}]}, {"ruleId": "scanner-ff48b98c402f510c", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in compositions/weekly-recap/index.html:186"}, "properties": {"repobilityId": "fd792a69248b9c2f", "scanner": "scanner-primary", "fingerprint": "ff48b98c402f510c", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "compositions/weekly-recap/index.html"}, "region": {"startLine": 186}}}]}, {"ruleId": "scanner-e0662b204e97cff6", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "6e51db8e7d9d8c3c", "scanner": "scanner-primary", "fingerprint": "e0662b204e97cff6", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/security-scan.yml"}, "region": {"startLine": 30}}}]}, {"ruleId": "scanner-e0662b204e97cff6", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "f0309821c66cc5c7", "scanner": "scanner-primary", "fingerprint": "e0662b204e97cff6", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/security-scan.yml"}, "region": {"startLine": 66}}}]}, {"ruleId": "scanner-e0662b204e97cff6", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "bd992aa9c96def55", "scanner": "scanner-primary", "fingerprint": "e0662b204e97cff6", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/security-scan.yml"}, "region": {"startLine": 82}}}]}, {"ruleId": "scanner-e0662b204e97cff6", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "f0309821c66cc5c7", "scanner": "scanner-primary", "fingerprint": "e0662b204e97cff6", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/security-scan.yml"}, "region": {"startLine": 99}}}]}, {"ruleId": "scanner-9e24899e7a113c9c", "level": "note", "message": {"text": "Very large file: python/src/content_engine/api/routes.py (1869 lines)"}, "properties": {"repobilityId": "bee770d549a4e2e2", "scanner": "scanner-primary", "fingerprint": "9e24899e7a113c9c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-05f09467b7e0c406", "level": "note", "message": {"text": "Very large file: src/app/(dashboard)/setup/page.tsx (997 lines)"}, "properties": {"repobilityId": "f1067068232d954a", "scanner": "scanner-primary", "fingerprint": "05f09467b7e0c406", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-8e3a29fbd8196794", "level": "note", "message": {"text": "Very large file: src/lib/types/database.types.ts (2631 lines)"}, "properties": {"repobilityId": "f571a4925ae133f2", "scanner": "scanner-primary", "fingerprint": "8e3a29fbd8196794", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-ea3b5e389d8c9c0f", "level": "note", "message": {"text": "Low test-to-source ratio"}, "properties": {"repobilityId": "ef7b2552cc00a375", "scanner": "scanner-primary", "fingerprint": "ea3b5e389d8c9c0f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["tests"]}}, {"ruleId": "scanner-4c3728641a0d9039", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: cli/package.json"}, "properties": {"repobilityId": "58fe435f7c288c56", "scanner": "scanner-primary", "fingerprint": "4c3728641a0d9039", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "cli/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "cc0fa498ee08a6eb", "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": "26a2b418490aaefc", "scanner": "scanner-primary", "fingerprint": "72b2a6250083a784", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "incomplete", "generated-repo-pattern"]}}, {"ruleId": "scanner-9d79c4077342a7d0", "level": "warning", "message": {"text": "Runtime service client appears to use placeholder configuration"}, "properties": {"repobilityId": "1df364244f37e4d6", "scanner": "scanner-primary", "fingerprint": "9d79c4077342a7d0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "runtime-config", "service-client", "generated-repo-pattern"]}}, {"ruleId": "scanner-2d0c7b7ab8f8aacf", "level": "warning", "message": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "properties": {"repobilityId": "cd7010038b09931f", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-749d4bc1bd66df5f", "level": "warning", "message": {"text": "Agent instructions exist but release-hardening basics are missing"}, "properties": {"repobilityId": "cbfb8bd0e0147041", "scanner": "scanner-primary", "fingerprint": "749d4bc1bd66df5f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-8a03c21e4752ce8d", "level": "note", "message": {"text": "Legacy-named symbol `_call_anthropic_direct_legacy` in python/src/content_engine/utils/llm_client.py:691"}, "properties": {"repobilityId": "c3d4db8fc25a0557", "scanner": "scanner-primary", "fingerprint": "8a03c21e4752ce8d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-c0083e4842b76065", "level": "note", "message": {"text": "Legacy-named symbol `eleven_multilingual_v2` in python/src/content_engine/services/tts_provider.py:54"}, "properties": {"repobilityId": "cfc5a199572d8e61", "scanner": "scanner-primary", "fingerprint": "c0083e4842b76065", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-3142636f804607e3", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/app/layout.tsx:84"}, "properties": {"repobilityId": "017a7eb4351bc775", "scanner": "scanner-primary", "fingerprint": "3142636f804607e3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-09b3c8f255da9a20", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/app/sitemap.ts:16"}, "properties": {"repobilityId": "662d98064b0f023f", "scanner": "scanner-primary", "fingerprint": "09b3c8f255da9a20", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9b26e601ce735314", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/memory/upload/route.ts:34"}, "properties": {"repobilityId": "bbdbe3d35e3ed98a", "scanner": "scanner-primary", "fingerprint": "9b26e601ce735314", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2a40dc79e3000a85", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/writing-lab/page.tsx:133"}, "properties": {"repobilityId": "00f8cf05939abcee", "scanner": "scanner-primary", "fingerprint": "2a40dc79e3000a85", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-5e466e65e959be76", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/memory/page.tsx:368"}, "properties": {"repobilityId": "e791c45887c91399", "scanner": "scanner-primary", "fingerprint": "5e466e65e959be76", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-46b2ef4c20ffb3c8", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/setup/page.tsx:185"}, "properties": {"repobilityId": "d362a7b501043bf4", "scanner": "scanner-primary", "fingerprint": "46b2ef4c20ffb3c8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d63133d3b1a200a0", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/content-hub/page.tsx:111"}, "properties": {"repobilityId": "2cb45e7d242a0154", "scanner": "scanner-primary", "fingerprint": "d63133d3b1a200a0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-5b25e6c5855f45f3", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/brands/page.tsx:95"}, "properties": {"repobilityId": "9b83eaa1e2e9afef", "scanner": "scanner-primary", "fingerprint": "5b25e6c5855f45f3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-fd124815ff6794a1", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/metrics/page.tsx:48"}, "properties": {"repobilityId": "257f278b468699ce", "scanner": "scanner-primary", "fingerprint": "fd124815ff6794a1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-015c7cfc582d436a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/settings/page.tsx:587"}, "properties": {"repobilityId": "41ec56a0f9b21325", "scanner": "scanner-primary", "fingerprint": "015c7cfc582d436a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-613fc8f660831b70", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/settings/brand-assets/page.tsx:49"}, "properties": {"repobilityId": "0bc238c6b4645ed2", "scanner": "scanner-primary", "fingerprint": "613fc8f660831b70", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f366456333fd78ef", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/settings/social-connections/page.tsx:177"}, "properties": {"repobilityId": "894b4de9b32ea0c4", "scanner": "scanner-primary", "fingerprint": "f366456333fd78ef", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a02be430d82561bf", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/settings/audience/page.tsx:93"}, "properties": {"repobilityId": "e80b1bbd4b36d6ac", "scanner": "scanner-primary", "fingerprint": "a02be430d82561bf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-89d69bf4a98ab71b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/settings/image-generation/page.tsx:59"}, "properties": {"repobilityId": "9190408520cd570b", "scanner": "scanner-primary", "fingerprint": "89d69bf4a98ab71b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f19ccfe4e31655d5", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/research/page.tsx:55"}, "properties": {"repobilityId": "fd22db9a83a94cc9", "scanner": "scanner-primary", "fingerprint": "f19ccfe4e31655d5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-13dfff6a318cc6cf", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/dashboard/getting-started.tsx:19"}, "properties": {"repobilityId": "cd6f23d3de09a75d", "scanner": "scanner-primary", "fingerprint": "13dfff6a318cc6cf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-0f078605307d95b7", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/brand-assets/palette-editor.tsx:13"}, "properties": {"repobilityId": "d94504f12414eb33", "scanner": "scanner-primary", "fingerprint": "0f078605307d95b7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f7de4661060c9c06", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/content-hub/publish-button.tsx:27"}, "properties": {"repobilityId": "67294d071c1cb5eb", "scanner": "scanner-primary", "fingerprint": "f7de4661060c9c06", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d85c701ccf4e11cb", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/content-hub/generate-visual-button.tsx:63"}, "properties": {"repobilityId": "deea37a497844d74", "scanner": "scanner-primary", "fingerprint": "d85c701ccf4e11cb", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-cbf90589ff8d8cf3", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/layout/brand-switcher.tsx:28"}, "properties": {"repobilityId": "d7728406e41a2442", "scanner": "scanner-primary", "fingerprint": "cbf90589ff8d8cf3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ddc8e899a74a0994", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/settings/llm-provider-hub.tsx:514"}, "properties": {"repobilityId": "ec0d959c9a31f8df", "scanner": "scanner-primary", "fingerprint": "ddc8e899a74a0994", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-bfd6f00817d03c87", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/settings/email-provider-card.tsx:62"}, "properties": {"repobilityId": "7f458b0b5b86dfcb", "scanner": "scanner-primary", "fingerprint": "bfd6f00817d03c87", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-11b0ad02954b1d65", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/brand-context/context-document-upload.tsx:126"}, "properties": {"repobilityId": "0df13e85a5b7bc7a", "scanner": "scanner-primary", "fingerprint": "11b0ad02954b1d65", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-1db5cb05ed530bab", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/brand-secrets.ts:32"}, "properties": {"repobilityId": "c003255c08939128", "scanner": "scanner-primary", "fingerprint": "1db5cb05ed530bab", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-0943749b83aa766a", "level": "note", "message": {"text": "Legacy-named symbol `eleven_multilingual_v2` in docker/tts-service/main.py:52"}, "properties": {"repobilityId": "b11455b11ff62ac8", "scanner": "scanner-primary", "fingerprint": "0943749b83aa766a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-70fcae2d13c708b6", "level": "note", "message": {"text": "17 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "f21675bed249619c", "scanner": "scanner-primary", "fingerprint": "70fcae2d13c708b6", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "config-drift"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "a99e8e0d506c6423", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-49c98f7cedd9c977", "level": "note", "message": {"text": "Near-duplicate function bodies in 4 places"}, "properties": {"repobilityId": "bdc0f0c395d47d5c", "scanner": "scanner-primary", "fingerprint": "49c98f7cedd9c977", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "416d4eed91b4eab3", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "a0011f12759ea86a", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "7d32c15bf1505cee", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "c890a4a485bc498f", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "353a50adc62a8ea9", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "98409b465a3f8c51", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "e0fad3661796f068", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-be46ea126aa5d8dc", "level": "note", "message": {"text": "Near-duplicate function bodies in 3 places"}, "properties": {"repobilityId": "9920b17b017d1253", "scanner": "scanner-primary", "fingerprint": "be46ea126aa5d8dc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-49c98f7cedd9c977", "level": "note", "message": {"text": "Near-duplicate function bodies in 4 places"}, "properties": {"repobilityId": "ebe59cc4d657300b", "scanner": "scanner-primary", "fingerprint": "49c98f7cedd9c977", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-49c98f7cedd9c977", "level": "note", "message": {"text": "Near-duplicate function bodies in 4 places"}, "properties": {"repobilityId": "60e9ab9545acc4f0", "scanner": "scanner-primary", "fingerprint": "49c98f7cedd9c977", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-49c98f7cedd9c977", "level": "note", "message": {"text": "Near-duplicate function bodies in 4 places"}, "properties": {"repobilityId": "3a90387e1770d861", "scanner": "scanner-primary", "fingerprint": "49c98f7cedd9c977", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-49c98f7cedd9c977", "level": "note", "message": {"text": "Near-duplicate function bodies in 4 places"}, "properties": {"repobilityId": "df82d3ecea8379b4", "scanner": "scanner-primary", "fingerprint": "49c98f7cedd9c977", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-49c98f7cedd9c977", "level": "note", "message": {"text": "Near-duplicate function bodies in 4 places"}, "properties": {"repobilityId": "f8a566df06725baf", "scanner": "scanner-primary", "fingerprint": "49c98f7cedd9c977", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-49c98f7cedd9c977", "level": "note", "message": {"text": "Near-duplicate function bodies in 4 places"}, "properties": {"repobilityId": "af039092b970d933", "scanner": "scanner-primary", "fingerprint": "49c98f7cedd9c977", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-9675f89071d157d1", "level": "error", "message": {"text": "FastAPI POST `trigger_research` without auth dependency \u2014 python/src/content_engine/api/routes.py:220"}, "properties": {"repobilityId": "0618cbbec33ebdf3", "scanner": "scanner-primary", "fingerprint": "9675f89071d157d1", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "python/src/content_engine/api/routes.py"}, "region": {"startLine": 220}}}]}, {"ruleId": "scanner-47986f7bab10b0cb", "level": "error", "message": {"text": "FastAPI PATCH `update_item_status` without auth dependency \u2014 python/src/content_engine/api/routes.py:307"}, "properties": {"repobilityId": "c872082c84739cb9", "scanner": "scanner-primary", "fingerprint": "47986f7bab10b0cb", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "python/src/content_engine/api/routes.py"}, "region": {"startLine": 307}}}]}, {"ruleId": "scanner-5aae4e9c4006fd7f", "level": "error", "message": {"text": "FastAPI POST `trigger_scoring` without auth dependency \u2014 python/src/content_engine/api/routes.py:326"}, "properties": {"repobilityId": "b512ca89986e8629", "scanner": "scanner-primary", "fingerprint": "5aae4e9c4006fd7f", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "python/src/content_engine/api/routes.py"}, "region": {"startLine": 326}}}]}, {"ruleId": "scanner-dd887fb0b88f8f32", "level": "error", "message": {"text": "FastAPI POST `api_generate_content` without auth dependency \u2014 python/src/content_engine/api/routes.py:351"}, "properties": {"repobilityId": "573b38ac248c9d77", "scanner": "scanner-primary", "fingerprint": "dd887fb0b88f8f32", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "python/src/content_engine/api/routes.py"}, "region": {"startLine": 351}}}]}, {"ruleId": "scanner-3e0a96a7e91cb030", "level": "error", "message": {"text": "FastAPI POST `api_god_mode` without auth dependency \u2014 python/src/content_engine/api/routes.py:375"}, "properties": {"repobilityId": "22765a135d826a72", "scanner": "scanner-primary", "fingerprint": "3e0a96a7e91cb030", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "python/src/content_engine/api/routes.py"}, "region": {"startLine": 375}}}]}, {"ruleId": "scanner-a97e5cc61a3cfca6", "level": "error", "message": {"text": "FastAPI POST `api_adapt_content` without auth dependency \u2014 python/src/content_engine/api/routes.py:382"}, "properties": {"repobilityId": "2fe27e3bde7580a8", "scanner": "scanner-primary", "fingerprint": "a97e5cc61a3cfca6", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "python/src/content_engine/api/routes.py"}, "region": {"startLine": 382}}}]}, {"ruleId": "scanner-9e89f94cd1dab007", "level": "error", "message": {"text": "FastAPI POST `api_humanize_draft` without auth dependency \u2014 python/src/content_engine/api/routes.py:389"}, "properties": {"repobilityId": "9e772357fcf5ecb1", "scanner": "scanner-primary", "fingerprint": "9e89f94cd1dab007", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "python/src/content_engine/api/routes.py"}, "region": {"startLine": 389}}}]}, {"ruleId": "scanner-8e7fc5f3ce9887b1", "level": "error", "message": {"text": "FastAPI PATCH `update_draft` without auth dependency \u2014 python/src/content_engine/api/routes.py:472"}, "properties": {"repobilityId": "82da13adf4a921e1", "scanner": "scanner-primary", "fingerprint": "8e7fc5f3ce9887b1", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "python/src/content_engine/api/routes.py"}, "region": {"startLine": 472}}}]}, {"ruleId": "scanner-9000969f339f3a8c", "level": "error", "message": {"text": "FastAPI POST `api_create_session` without auth dependency \u2014 python/src/content_engine/api/routes.py:540"}, "properties": {"repobilityId": "7704e08fda218fef", "scanner": "scanner-primary", "fingerprint": "9000969f339f3a8c", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "python/src/content_engine/api/routes.py"}, "region": {"startLine": 540}}}]}, {"ruleId": "scanner-9a1953d5aee7e9b7", "level": "error", "message": {"text": "FastAPI POST `api_vote` without auth dependency \u2014 python/src/content_engine/api/routes.py:590"}, "properties": {"repobilityId": "06727b0eb75e9042", "scanner": "scanner-primary", "fingerprint": "9a1953d5aee7e9b7", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "python/src/content_engine/api/routes.py"}, "region": {"startLine": 590}}}]}, {"ruleId": "scanner-48bb050050660072", "level": "error", "message": {"text": "FastAPI POST `api_send_newsletter` without auth dependency \u2014 python/src/content_engine/api/routes.py:663"}, "properties": {"repobilityId": "66150a30aeb76530", "scanner": "scanner-primary", "fingerprint": "48bb050050660072", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "python/src/content_engine/api/routes.py"}, "region": {"startLine": 663}}}]}, {"ruleId": "scanner-e7aeac4be18403a5", "level": "error", "message": {"text": "FastAPI POST `api_upsert_email_provider_config` without auth dependency \u2014 python/src/content_engine/api/routes.py:963"}, "properties": {"repobilityId": "904fdbc302ee725a", "scanner": "scanner-primary", "fingerprint": "e7aeac4be18403a5", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "python/src/content_engine/api/routes.py"}, "region": {"startLine": 963}}}]}, {"ruleId": "scanner-c898e798d6dac065", "level": "error", "message": {"text": "FastAPI POST `api_validate_email_provider` without auth dependency \u2014 python/src/content_engine/api/routes.py:982"}, "properties": {"repobilityId": "e08779d4241a6512", "scanner": "scanner-primary", "fingerprint": "c898e798d6dac065", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "python/src/content_engine/api/routes.py"}, "region": {"startLine": 982}}}]}, {"ruleId": "scanner-cc34f3bbf77b1e1c", "level": "error", "message": {"text": "FastAPI POST `api_publish_social` without auth dependency \u2014 python/src/content_engine/api/routes.py:1056"}, "properties": {"repobilityId": "2df9f016fa19ac62", "scanner": "scanner-primary", "fingerprint": "cc34f3bbf77b1e1c", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "python/src/content_engine/api/routes.py"}, "region": {"startLine": 1056}}}]}, {"ruleId": "scanner-9ef034511c91c0d9", "level": "error", "message": {"text": "FastAPI POST `api_publish_linkedin` without auth dependency \u2014 python/src/content_engine/api/routes.py:1065"}, "properties": {"repobilityId": "11f30b74b5cd40c7", "scanner": "scanner-primary", "fingerprint": "9ef034511c91c0d9", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "python/src/content_engine/api/routes.py"}, "region": {"startLine": 1065}}}]}, {"ruleId": "scanner-0ff1344d3c9f8b26", "level": "error", "message": {"text": "FastAPI POST `api_publish_twitter` without auth dependency \u2014 python/src/content_engine/api/routes.py:1073"}, "properties": {"repobilityId": "12579c6cbd8135cc", "scanner": "scanner-primary", "fingerprint": "0ff1344d3c9f8b26", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "python/src/content_engine/api/routes.py"}, "region": {"startLine": 1073}}}]}, {"ruleId": "scanner-4db0672e8825a997", "level": "error", "message": {"text": "FastAPI POST `api_schedule_post` without auth dependency \u2014 python/src/content_engine/api/routes.py:1081"}, "properties": {"repobilityId": "fb4f518759ff7b0c", "scanner": "scanner-primary", "fingerprint": "4db0672e8825a997", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "python/src/content_engine/api/routes.py"}, "region": {"startLine": 1081}}}]}, {"ruleId": "scanner-958df0ab23d68ca2", "level": "error", "message": {"text": "FastAPI POST `api_record_metrics` without auth dependency \u2014 python/src/content_engine/api/routes.py:1102"}, "properties": {"repobilityId": "b22a21f99cd4eace", "scanner": "scanner-primary", "fingerprint": "958df0ab23d68ca2", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "python/src/content_engine/api/routes.py"}, "region": {"startLine": 1102}}}]}, {"ruleId": "scanner-97cfa5735b55998c", "level": "error", "message": {"text": "FastAPI POST `api_memory_consolidate_user` without auth dependency \u2014 python/src/content_engine/api/routes.py:1321"}, "properties": {"repobilityId": "abb31dde65e698c4", "scanner": "scanner-primary", "fingerprint": "97cfa5735b55998c", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "python/src/content_engine/api/routes.py"}, "region": {"startLine": 1321}}}]}, {"ruleId": "scanner-53f73e4e7435366d", "level": "error", "message": {"text": "FastAPI POST `api_memory_recall` without auth dependency \u2014 python/src/content_engine/api/routes.py:1364"}, "properties": {"repobilityId": "2367fdf962a83a8c", "scanner": "scanner-primary", "fingerprint": "53f73e4e7435366d", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "python/src/content_engine/api/routes.py"}, "region": {"startLine": 1364}}}]}, {"ruleId": "scanner-f81e94eee4150e2f", "level": "error", "message": {"text": "FastAPI PATCH `api_memory_patch_fact` without auth dependency \u2014 python/src/content_engine/api/routes.py:1428"}, "properties": {"repobilityId": "765546d4a516c5aa", "scanner": "scanner-primary", "fingerprint": "f81e94eee4150e2f", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "python/src/content_engine/api/routes.py"}, "region": {"startLine": 1428}}}]}, {"ruleId": "scanner-1edd4ddbb5744e05", "level": "error", "message": {"text": "FastAPI DELETE `api_memory_delete_fact` without auth dependency \u2014 python/src/content_engine/api/routes.py:1462"}, "properties": {"repobilityId": "42b9ccc071562d07", "scanner": "scanner-primary", "fingerprint": "1edd4ddbb5744e05", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "python/src/content_engine/api/routes.py"}, "region": {"startLine": 1462}}}]}, {"ruleId": "scanner-426f6a1890a889a3", "level": "error", "message": {"text": "FastAPI POST `api_memory_supersede_fact` without auth dependency \u2014 python/src/content_engine/api/routes.py:1484"}, "properties": {"repobilityId": "31d4e00baffaa580", "scanner": "scanner-primary", "fingerprint": "426f6a1890a889a3", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "python/src/content_engine/api/routes.py"}, "region": {"startLine": 1484}}}]}, {"ruleId": "scanner-3bdf677f9a1ffa74", "level": "error", "message": {"text": "FastAPI POST `api_memory_discover` without auth dependency \u2014 python/src/content_engine/api/routes.py:1528"}, "properties": {"repobilityId": "6fbb7eb471e6d674", "scanner": "scanner-primary", "fingerprint": "3bdf677f9a1ffa74", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "python/src/content_engine/api/routes.py"}, "region": {"startLine": 1528}}}]}, {"ruleId": "scanner-b17273c348e2a61a", "level": "error", "message": {"text": "FastAPI POST `api_memory_upload_source` without auth dependency \u2014 python/src/content_engine/api/routes.py:1605"}, "properties": {"repobilityId": "6ee8bd76e904117e", "scanner": "scanner-primary", "fingerprint": "b17273c348e2a61a", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "python/src/content_engine/api/routes.py"}, "region": {"startLine": 1605}}}]}, {"ruleId": "scanner-83963424aa20c065", "level": "error", "message": {"text": "FastAPI PUT `api_set_credentials` without auth dependency \u2014 python/src/content_engine/api/routes.py:1717"}, "properties": {"repobilityId": "3bfa727bf4b9c683", "scanner": "scanner-primary", "fingerprint": "83963424aa20c065", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "python/src/content_engine/api/routes.py"}, "region": {"startLine": 1717}}}]}, {"ruleId": "scanner-e1e54ed453789246", "level": "error", "message": {"text": "FastAPI DELETE `api_delete_credentials` without auth dependency \u2014 python/src/content_engine/api/routes.py:1738"}, "properties": {"repobilityId": "9f7a1d020acb58b2", "scanner": "scanner-primary", "fingerprint": "e1e54ed453789246", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "python/src/content_engine/api/routes.py"}, "region": {"startLine": 1738}}}]}, {"ruleId": "scanner-0f36e5031db97e4d", "level": "error", "message": {"text": "FastAPI POST `create_template` without auth dependency \u2014 python/src/content_engine/api/routes_video.py:57"}, "properties": {"repobilityId": "c2971a4c8dd52a51", "scanner": "scanner-primary", "fingerprint": "0f36e5031db97e4d", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "python/src/content_engine/api/routes_video.py"}, "region": {"startLine": 57}}}]}, {"ruleId": "scanner-e49be99deaef9be4", "level": "error", "message": {"text": "FastAPI POST `start_render` without auth dependency \u2014 python/src/content_engine/api/routes_video.py:85"}, "properties": {"repobilityId": "ec837e1f4ee635ad", "scanner": "scanner-primary", "fingerprint": "e49be99deaef9be4", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "python/src/content_engine/api/routes_video.py"}, "region": {"startLine": 85}}}]}, {"ruleId": "scanner-212241b2dd92547b", "level": "error", "message": {"text": "FastAPI POST `generate_video` without auth dependency \u2014 python/src/content_engine/api/routes_video.py:156"}, "properties": {"repobilityId": "ec1fda133e1b179f", "scanner": "scanner-primary", "fingerprint": "212241b2dd92547b", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "python/src/content_engine/api/routes_video.py"}, "region": {"startLine": 156}}}]}, {"ruleId": "scanner-cbc7f71960ec1a4c", "level": "error", "message": {"text": "FastAPI POST `generate_shorts` without auth dependency \u2014 python/src/content_engine/api/routes_video.py:177"}, "properties": {"repobilityId": "b1efa33d4ffc6a84", "scanner": "scanner-primary", "fingerprint": "cbc7f71960ec1a4c", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "python/src/content_engine/api/routes_video.py"}, "region": {"startLine": 177}}}]}, {"ruleId": "scanner-2ac4a3ff8ae205ae", "level": "error", "message": {"text": "FastAPI POST `poll_heygen` without auth dependency \u2014 python/src/content_engine/api/routes_video.py:207"}, "properties": {"repobilityId": "c1decf05ed4b87b7", "scanner": "scanner-primary", "fingerprint": "2ac4a3ff8ae205ae", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "python/src/content_engine/api/routes_video.py"}, "region": {"startLine": 207}}}]}, {"ruleId": "scanner-ef982e8de6a59ee8", "level": "error", "message": {"text": "FastAPI POST `save_provider_key` without auth dependency \u2014 python/src/content_engine/api/routes_llm_providers.py:99"}, "properties": {"repobilityId": "f6955af765f9e7bf", "scanner": "scanner-primary", "fingerprint": "ef982e8de6a59ee8", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "python/src/content_engine/api/routes_llm_providers.py"}, "region": {"startLine": 99}}}]}, {"ruleId": "scanner-4276a1998df9f7b2", "level": "error", "message": {"text": "FastAPI DELETE `delete_provider_key` without auth dependency \u2014 python/src/content_engine/api/routes_llm_providers.py:128"}, "properties": {"repobilityId": "1b602df09dc7f51d", "scanner": "scanner-primary", "fingerprint": "4276a1998df9f7b2", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "python/src/content_engine/api/routes_llm_providers.py"}, "region": {"startLine": 128}}}]}, {"ruleId": "scanner-e590c19f5d08bba4", "level": "error", "message": {"text": "FastAPI POST `validate_provider_key` without auth dependency \u2014 python/src/content_engine/api/routes_llm_providers.py:139"}, "properties": {"repobilityId": "825f809b51d0dd5f", "scanner": "scanner-primary", "fingerprint": "e590c19f5d08bba4", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "python/src/content_engine/api/routes_llm_providers.py"}, "region": {"startLine": 139}}}]}, {"ruleId": "scanner-dae79b17a9700406", "level": "error", "message": {"text": "FastAPI POST `probe_gateway` without auth dependency \u2014 python/src/content_engine/api/routes_llm_providers.py:160"}, "properties": {"repobilityId": "368f74260ec2c87e", "scanner": "scanner-primary", "fingerprint": "dae79b17a9700406", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "python/src/content_engine/api/routes_llm_providers.py"}, "region": {"startLine": 160}}}]}, {"ruleId": "scanner-9bc7302a03f68ba3", "level": "error", "message": {"text": "FastAPI POST `save_gateway_url` without auth dependency \u2014 python/src/content_engine/api/routes_llm_providers.py:231"}, "properties": {"repobilityId": "89f6e35189f611ea", "scanner": "scanner-primary", "fingerprint": "9bc7302a03f68ba3", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "python/src/content_engine/api/routes_llm_providers.py"}, "region": {"startLine": 231}}}]}, {"ruleId": "scanner-2efc1eb2e1bce792", "level": "error", "message": {"text": "FastAPI POST `upsert_brand_secret` without auth dependency \u2014 python/src/content_engine/api/routes_internal.py:38"}, "properties": {"repobilityId": "e1d2f85e54cff245", "scanner": "scanner-primary", "fingerprint": "2efc1eb2e1bce792", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "python/src/content_engine/api/routes_internal.py"}, "region": {"startLine": 38}}}]}, {"ruleId": "scanner-992a7110f6a523e1", "level": "error", "message": {"text": "FastAPI DELETE `remove_brand_secret` without auth dependency \u2014 python/src/content_engine/api/routes_internal.py:68"}, "properties": {"repobilityId": "d40470e317c33e05", "scanner": "scanner-primary", "fingerprint": "992a7110f6a523e1", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "python/src/content_engine/api/routes_internal.py"}, "region": {"startLine": 68}}}]}, {"ruleId": "scanner-4656f354d920d1ab", "level": "error", "message": {"text": "FastAPI POST `sync_contacts` without auth dependency \u2014 python/src/content_engine/api/routes_email_marketing.py:70"}, "properties": {"repobilityId": "2cb3e08f1d33c8ea", "scanner": "scanner-primary", "fingerprint": "4656f354d920d1ab", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "python/src/content_engine/api/routes_email_marketing.py"}, "region": {"startLine": 70}}}]}, {"ruleId": "scanner-f125b88e8830cb89", "level": "error", "message": {"text": "FastAPI POST `create_list` without auth dependency \u2014 python/src/content_engine/api/routes_email_marketing.py:128"}, "properties": {"repobilityId": "bed207817a23920e", "scanner": "scanner-primary", "fingerprint": "f125b88e8830cb89", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "python/src/content_engine/api/routes_email_marketing.py"}, "region": {"startLine": 128}}}]}, {"ruleId": "scanner-63cb24c9944b82b1", "level": "error", "message": {"text": "FastAPI POST `create_campaign` without auth dependency \u2014 python/src/content_engine/api/routes_campaigns.py:47"}, "properties": {"repobilityId": "da9bcc7bde646850", "scanner": "scanner-primary", "fingerprint": "63cb24c9944b82b1", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "python/src/content_engine/api/routes_campaigns.py"}, "region": {"startLine": 47}}}]}, {"ruleId": "scanner-26cefd7e94126938", "level": "error", "message": {"text": "FastAPI POST `create_automation` without auth dependency \u2014 python/src/content_engine/api/routes_automations.py:127"}, "properties": {"repobilityId": "be0e25f9a9371216", "scanner": "scanner-primary", "fingerprint": "26cefd7e94126938", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "python/src/content_engine/api/routes_automations.py"}, "region": {"startLine": 127}}}]}, {"ruleId": "scanner-a4e9cdc5631aa44e", "level": "error", "message": {"text": "FastAPI PATCH `update_automation` without auth dependency \u2014 python/src/content_engine/api/routes_automations.py:153"}, "properties": {"repobilityId": "69e82b6cd19f8514", "scanner": "scanner-primary", "fingerprint": "a4e9cdc5631aa44e", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "python/src/content_engine/api/routes_automations.py"}, "region": {"startLine": 153}}}]}, {"ruleId": "scanner-33c6e148a93450a7", "level": "error", "message": {"text": "FastAPI POST `create_agent_config` without auth dependency \u2014 python/src/content_engine/api/routes_agents.py:100"}, "properties": {"repobilityId": "e7ad51ba906c1e2a", "scanner": "scanner-primary", "fingerprint": "33c6e148a93450a7", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "python/src/content_engine/api/routes_agents.py"}, "region": {"startLine": 100}}}]}, {"ruleId": "scanner-405fc4b55e1ee476", "level": "error", "message": {"text": "FastAPI PUT `update_agent_config` without auth dependency \u2014 python/src/content_engine/api/routes_agents.py:188"}, "properties": {"repobilityId": "06ce08c4fb9faccd", "scanner": "scanner-primary", "fingerprint": "405fc4b55e1ee476", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "python/src/content_engine/api/routes_agents.py"}, "region": {"startLine": 188}}}]}, {"ruleId": "scanner-06df1a6c50abfd1c", "level": "error", "message": {"text": "FastAPI DELETE `delete_agent_config` without auth dependency \u2014 python/src/content_engine/api/routes_agents.py:224"}, "properties": {"repobilityId": "bd3f08bef6f5a24b", "scanner": "scanner-primary", "fingerprint": "06df1a6c50abfd1c", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "python/src/content_engine/api/routes_agents.py"}, "region": {"startLine": 224}}}]}, {"ruleId": "scanner-ae98f6b178c3bcb4", "level": "error", "message": {"text": "FastAPI POST `create_agent_skill` without auth dependency \u2014 python/src/content_engine/api/routes_agents.py:294"}, "properties": {"repobilityId": "93b759d7c3be03d7", "scanner": "scanner-primary", "fingerprint": "ae98f6b178c3bcb4", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "python/src/content_engine/api/routes_agents.py"}, "region": {"startLine": 294}}}]}, {"ruleId": "scanner-88af92a2b27b99d0", "level": "error", "message": {"text": "FastAPI PUT `update_agent_skill` without auth dependency \u2014 python/src/content_engine/api/routes_agents.py:361"}, "properties": {"repobilityId": "2b946237dc42a7b2", "scanner": "scanner-primary", "fingerprint": "88af92a2b27b99d0", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "python/src/content_engine/api/routes_agents.py"}, "region": {"startLine": 361}}}]}, {"ruleId": "scanner-79f12b8faf36b4a7", "level": "error", "message": {"text": "FastAPI DELETE `delete_agent_skill` without auth dependency \u2014 python/src/content_engine/api/routes_agents.py:404"}, "properties": {"repobilityId": "d3fe7b9acff44854", "scanner": "scanner-primary", "fingerprint": "79f12b8faf36b4a7", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "python/src/content_engine/api/routes_agents.py"}, "region": {"startLine": 404}}}]}, {"ruleId": "scanner-d1f816875fdb2a91", "level": "error", "message": {"text": "FastAPI POST `generate` without auth dependency \u2014 python/src/content_engine/api/routes_images.py:39"}, "properties": {"repobilityId": "f1ccfd48feaa6f55", "scanner": "scanner-primary", "fingerprint": "d1f816875fdb2a91", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "python/src/content_engine/api/routes_images.py"}, "region": {"startLine": 39}}}]}, {"ruleId": "scanner-1b8d323172677689", "level": "error", "message": {"text": "FastAPI POST `carousel` without auth dependency \u2014 python/src/content_engine/api/routes_images.py:47"}, "properties": {"repobilityId": "efdac9b5c8f23a7c", "scanner": "scanner-primary", "fingerprint": "1b8d323172677689", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "python/src/content_engine/api/routes_images.py"}, "region": {"startLine": 47}}}]}, {"ruleId": "scanner-a1a7e5d9217c1005", "level": "error", "message": {"text": "FastAPI POST `upsert_integration` without auth dependency \u2014 python/src/content_engine/api/routes_postiz.py:122"}, "properties": {"repobilityId": "bce5d28cfe54cd9c", "scanner": "scanner-primary", "fingerprint": "a1a7e5d9217c1005", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "python/src/content_engine/api/routes_postiz.py"}, "region": {"startLine": 122}}}]}, {"ruleId": "scanner-4e6effbbbd336364", "level": "error", "message": {"text": "FastAPI DELETE `delete_integration` without auth dependency \u2014 python/src/content_engine/api/routes_postiz.py:164"}, "properties": {"repobilityId": "417ad636a47726ae", "scanner": "scanner-primary", "fingerprint": "4e6effbbbd336364", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "python/src/content_engine/api/routes_postiz.py"}, "region": {"startLine": 164}}}]}, {"ruleId": "scanner-bcadf68b3f7711db", "level": "error", "message": {"text": "FastAPI PATCH `patch_progress` without auth dependency \u2014 python/src/content_engine/api/routes_setup.py:61"}, "properties": {"repobilityId": "f431fc2b364d2c52", "scanner": "scanner-primary", "fingerprint": "bcadf68b3f7711db", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "python/src/content_engine/api/routes_setup.py"}, "region": {"startLine": 61}}}]}, {"ruleId": "scanner-020a95fd962cf91c", "level": "error", "message": {"text": "FastAPI POST `discover_brand` without auth dependency \u2014 python/src/content_engine/api/routes_brand_discovery.py:140"}, "properties": {"repobilityId": "123475cb5405afb0", "scanner": "scanner-primary", "fingerprint": "020a95fd962cf91c", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "python/src/content_engine/api/routes_brand_discovery.py"}, "region": {"startLine": 140}}}]}, {"ruleId": "scanner-ab3023debb2492f7", "level": "error", "message": {"text": "FastAPI POST `start_deep_research` without auth dependency \u2014 python/src/content_engine/api/routes_research.py:49"}, "properties": {"repobilityId": "4f58ddd8c72f1d58", "scanner": "scanner-primary", "fingerprint": "ab3023debb2492f7", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "python/src/content_engine/api/routes_research.py"}, "region": {"startLine": 49}}}]}, {"ruleId": "scanner-c8c311d31eee76bb", "level": "error", "message": {"text": "FastAPI POST `generate_ideas_from_job` without auth dependency \u2014 python/src/content_engine/api/routes_research.py:111"}, "properties": {"repobilityId": "d5df2189493f2a9d", "scanner": "scanner-primary", "fingerprint": "c8c311d31eee76bb", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "python/src/content_engine/api/routes_research.py"}, "region": {"startLine": 111}}}]}, {"ruleId": "scanner-c2e162f049bf668a", "level": "error", "message": {"text": "FastAPI POST `start_competitor_spider` without auth dependency \u2014 python/src/content_engine/api/routes_research.py:132"}, "properties": {"repobilityId": "c9c592d8ad15e941", "scanner": "scanner-primary", "fingerprint": "c2e162f049bf668a", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "python/src/content_engine/api/routes_research.py"}, "region": {"startLine": 132}}}]}, {"ruleId": "scanner-83fcc62c5308473f", "level": "error", "message": {"text": "FastAPI POST `tts` without auth dependency \u2014 docker/tts-service/main.py:111"}, "properties": {"repobilityId": "f3cbbf15be3ab735", "scanner": "scanner-primary", "fingerprint": "83fcc62c5308473f", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "docker/tts-service/main.py"}, "region": {"startLine": 111}}}]}, {"ruleId": "scanner-2497c0f483b51d5f", "level": "error", "message": {"text": "FastAPI POST `transcribe` without auth dependency \u2014 docker/whisper-service/main.py:28"}, "properties": {"repobilityId": "d3a07537ace79878", "scanner": "scanner-primary", "fingerprint": "2497c0f483b51d5f", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "docker/whisper-service/main.py"}, "region": {"startLine": 28}}}]}, {"ruleId": "scanner-a241da051695f8a4", "level": "error", "message": {"text": "Dangling fetch: POST /api/bootstrap/test-connection (src/app/bootstrap/page.tsx:64)"}, "properties": {"repobilityId": "5b618257f141e78e", "scanner": "scanner-primary", "fingerprint": "a241da051695f8a4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e1c84f68034c8387", "level": "error", "message": {"text": "Dangling fetch: POST /api/bootstrap/save-config (src/app/bootstrap/page.tsx:87)"}, "properties": {"repobilityId": "cf1b496f4aae3d20", "scanner": "scanner-primary", "fingerprint": "e1c84f68034c8387", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4d1a8b9442b85a2d", "level": "error", "message": {"text": "Dangling fetch: GET /api/god-mode-reviews?draft_id=${draftId} (src/app/(dashboard)/writing-lab/page.tsx:135)"}, "properties": {"repobilityId": "4f40b6232bfe5d49", "scanner": "scanner-primary", "fingerprint": "4d1a8b9442b85a2d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7bd1b92f1df562c1", "level": "error", "message": {"text": "Dangling fetch: POST /api/email-marketing/campaigns (src/app/(dashboard)/writing-lab/page.tsx:149)"}, "properties": {"repobilityId": "a97c4722af97158e", "scanner": "scanner-primary", "fingerprint": "7bd1b92f1df562c1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4aa06371649b9687", "level": "error", "message": {"text": "Dangling fetch: GET /api/video/heygen/avatars (src/app/(dashboard)/writing-lab/page.tsx:169)"}, "properties": {"repobilityId": "c1608f6066485a5c", "scanner": "scanner-primary", "fingerprint": "4aa06371649b9687", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-74a89d6277dee6e4", "level": "error", "message": {"text": "Dangling fetch: POST /api/video/generate (src/app/(dashboard)/writing-lab/page.tsx:176)"}, "properties": {"repobilityId": "e135e1638dc7106b", "scanner": "scanner-primary", "fingerprint": "74a89d6277dee6e4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-230f42d00cade45e", "level": "error", "message": {"text": "Dangling fetch: GET /api/god-mode-reviews (src/app/(dashboard)/writing-lab/page.tsx:196)"}, "properties": {"repobilityId": "a64e53fba7d04717", "scanner": "scanner-primary", "fingerprint": "230f42d00cade45e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-afc6950a660aeb09", "level": "error", "message": {"text": "Dangling fetch: GET /api/system/config (src/app/(dashboard)/setup/page.tsx:145)"}, "properties": {"repobilityId": "50d24757700963c6", "scanner": "scanner-primary", "fingerprint": "afc6950a660aeb09", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3d6b2073bf6d0225", "level": "error", "message": {"text": "Dangling fetch: GET /api/setup/progress (src/app/(dashboard)/setup/page.tsx:155)"}, "properties": {"repobilityId": "c91cc32fd1255c4b", "scanner": "scanner-primary", "fingerprint": "3d6b2073bf6d0225", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-fbe652bf1629ca77", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/setup/progress (src/app/(dashboard)/setup/page.tsx:185)"}, "properties": {"repobilityId": "22d416c80cbdbc11", "scanner": "scanner-primary", "fingerprint": "fbe652bf1629ca77", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7ba57221f2c2dbc1", "level": "error", "message": {"text": "Dangling fetch: POST /api/brands (src/app/(dashboard)/setup/page.tsx:217)"}, "properties": {"repobilityId": "12121a171ebceb64", "scanner": "scanner-primary", "fingerprint": "7ba57221f2c2dbc1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-41e9f7a5a39172b5", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/brands/${brandId} (src/app/(dashboard)/setup/page.tsx:227)"}, "properties": {"repobilityId": "7ed2c5a5dcd573b5", "scanner": "scanner-primary", "fingerprint": "41e9f7a5a39172b5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-793d1cbf5ecafb54", "level": "error", "message": {"text": "Dangling fetch: POST /api/brands/${brandId}/assets (src/app/(dashboard)/setup/page.tsx:234)"}, "properties": {"repobilityId": "95085bdc48493976", "scanner": "scanner-primary", "fingerprint": "793d1cbf5ecafb54", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1c20b89b1eff3a64", "level": "error", "message": {"text": "Dangling fetch: GET /api/system/health (src/app/(dashboard)/setup/page.tsx:335)"}, "properties": {"repobilityId": "5c3c0f5560061fa8", "scanner": "scanner-primary", "fingerprint": "1c20b89b1eff3a64", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ae7e9d7b2f90295b", "level": "error", "message": {"text": "Dangling fetch: GET /api/system/health (src/app/(dashboard)/setup/page.tsx:345)"}, "properties": {"repobilityId": "f7e001a287bf3967", "scanner": "scanner-primary", "fingerprint": "ae7e9d7b2f90295b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ef9634b9e6411659", "level": "error", "message": {"text": "Dangling fetch: GET /api/llm/providers/configured (src/app/(dashboard)/setup/page.tsx:414)"}, "properties": {"repobilityId": "0ef24fea747a8523", "scanner": "scanner-primary", "fingerprint": "ef9634b9e6411659", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1e2207c2624dc125", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/system/config (src/app/(dashboard)/setup/page.tsx:635)"}, "properties": {"repobilityId": "97c1992732d88b31", "scanner": "scanner-primary", "fingerprint": "1e2207c2624dc125", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-48ba42ecc861e38c", "level": "error", "message": {"text": "Dangling fetch: GET /api/social/health (src/app/(dashboard)/setup/page.tsx:786)"}, "properties": {"repobilityId": "29483c5ba892cd24", "scanner": "scanner-primary", "fingerprint": "48ba42ecc861e38c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-01410112e5abc7a5", "level": "error", "message": {"text": "Dangling fetch: GET /api/mcp/detect (src/app/(dashboard)/setup/page.tsx:845)"}, "properties": {"repobilityId": "195b4b3aa43210b3", "scanner": "scanner-primary", "fingerprint": "01410112e5abc7a5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f16302231014486a", "level": "error", "message": {"text": "Dangling fetch: POST /api/content/from-url (src/app/(dashboard)/content-hub/page.tsx:70)"}, "properties": {"repobilityId": "0ffc4f608111a109", "scanner": "scanner-primary", "fingerprint": "f16302231014486a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-253694ad82a30a09", "level": "error", "message": {"text": "Dangling fetch: POST /api/video/render (src/app/(dashboard)/content-hub/[id]/page.tsx:54)"}, "properties": {"repobilityId": "7598ddd314e0c8c6", "scanner": "scanner-primary", "fingerprint": "253694ad82a30a09", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-00a762745beea2d8", "level": "error", "message": {"text": "Dangling fetch: GET /api/brands (src/app/(dashboard)/brands/page.tsx:49)"}, "properties": {"repobilityId": "6bea8696652eadbd", "scanner": "scanner-primary", "fingerprint": "00a762745beea2d8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5581a15cc67e55c2", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/brands/${editId} (src/app/(dashboard)/brands/page.tsx:95)"}, "properties": {"repobilityId": "99b0c8bf270fef46", "scanner": "scanner-primary", "fingerprint": "5581a15cc67e55c2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7093f335ac2cd0b2", "level": "error", "message": {"text": "Dangling fetch: POST /api/brands (src/app/(dashboard)/brands/page.tsx:101)"}, "properties": {"repobilityId": "a5184eda5bf0ae49", "scanner": "scanner-primary", "fingerprint": "7093f335ac2cd0b2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e71aaa8960b0cb89", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/brands/${newId} (src/app/(dashboard)/brands/page.tsx:117)"}, "properties": {"repobilityId": "4a092c504a2f5ba2", "scanner": "scanner-primary", "fingerprint": "e71aaa8960b0cb89", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d01e94d922d8ff5f", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/brands/${brandToDelete.id} (src/app/(dashboard)/brands/page.tsx:146)"}, "properties": {"repobilityId": "fce4c1ff63aab8df", "scanner": "scanner-primary", "fingerprint": "d01e94d922d8ff5f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7a2ccf92f43951d1", "level": "error", "message": {"text": "Dangling fetch: GET /api/research/competitor/snapshots?limit=50 (src/app/(dashboard)/competitor-watch/page.tsx:37)"}, "properties": {"repobilityId": "25d57c585273e060", "scanner": "scanner-primary", "fingerprint": "7a2ccf92f43951d1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a068ac82bf95af6e", "level": "error", "message": {"text": "Dangling fetch: POST /api/research/competitor (src/app/(dashboard)/competitor-watch/page.tsx:59)"}, "properties": {"repobilityId": "c0d1d372c06d5bcf", "scanner": "scanner-primary", "fingerprint": "a068ac82bf95af6e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-450ea7ff759dd3c7", "level": "error", "message": {"text": "Dangling fetch: GET /api/video/templates (src/app/(dashboard)/videos/page.tsx:51)"}, "properties": {"repobilityId": "7809371ea84abacf", "scanner": "scanner-primary", "fingerprint": "450ea7ff759dd3c7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e0d872b70d8ca449", "level": "error", "message": {"text": "Dangling fetch: GET /api/video (src/app/(dashboard)/videos/page.tsx:52)"}, "properties": {"repobilityId": "c5c3de088bac345a", "scanner": "scanner-primary", "fingerprint": "e0d872b70d8ca449", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-476efbcc0b1bc0ec", "level": "error", "message": {"text": "Dangling fetch: POST /api/video/render (src/app/(dashboard)/videos/page.tsx:99)"}, "properties": {"repobilityId": "34e3d49633c997cb", "scanner": "scanner-primary", "fingerprint": "476efbcc0b1bc0ec", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1abff8f877962a1d", "level": "error", "message": {"text": "Dangling fetch: GET /api/newsletter?per_page=1 (src/app/(dashboard)/metrics/page.tsx:48)"}, "properties": {"repobilityId": "414eb153cd8fc9a5", "scanner": "scanner-primary", "fingerprint": "1abff8f877962a1d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ffee85aab7911df5", "level": "error", "message": {"text": "Dangling fetch: GET /api/system/costs?period=today (src/app/(dashboard)/metrics/page.tsx:50)"}, "properties": {"repobilityId": "61d7aac50f1aa00d", "scanner": "scanner-primary", "fingerprint": "ffee85aab7911df5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f435b9330a3cc40c", "level": "error", "message": {"text": "Dangling fetch: GET /api/newsletter?per_page=50 (src/app/(dashboard)/newsletter/page.tsx:51)"}, "properties": {"repobilityId": "c64b2cdca7187d07", "scanner": "scanner-primary", "fingerprint": "f435b9330a3cc40c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2887bbe991854331", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/newsletter/${id} (src/app/(dashboard)/newsletter/page.tsx:90)"}, "properties": {"repobilityId": "a14313b9b841a222", "scanner": "scanner-primary", "fingerprint": "2887bbe991854331", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-32c5fa1ccdaf1a5d", "level": "error", "message": {"text": "Dangling fetch: GET /api/newsletter/${id} (src/app/(dashboard)/newsletter/[id]/page.tsx:55)"}, "properties": {"repobilityId": "14f5c4c93b59388f", "scanner": "scanner-primary", "fingerprint": "32c5fa1ccdaf1a5d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8282550d770c94c6", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/newsletter/${id} (src/app/(dashboard)/newsletter/[id]/page.tsx:71)"}, "properties": {"repobilityId": "f8b78a61c77c222b", "scanner": "scanner-primary", "fingerprint": "8282550d770c94c6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6451d5c6921afaa3", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/newsletter/${id} (src/app/(dashboard)/newsletter/[id]/page.tsx:99)"}, "properties": {"repobilityId": "7e5e5901582d9f7c", "scanner": "scanner-primary", "fingerprint": "6451d5c6921afaa3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-df4b839fa147668a", "level": "error", "message": {"text": "Dangling fetch: GET /api/system/health (src/app/(dashboard)/revenue/page.tsx:47)"}, "properties": {"repobilityId": "7e652bfb054fadef", "scanner": "scanner-primary", "fingerprint": "df4b839fa147668a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e3329fb5cac11910", "level": "error", "message": {"text": "Dangling fetch: GET /api/system/costs?period=month (src/app/(dashboard)/revenue/page.tsx:48)"}, "properties": {"repobilityId": "259601899dd66b8b", "scanner": "scanner-primary", "fingerprint": "e3329fb5cac11910", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e1bcd2691dcab040", "level": "error", "message": {"text": "Dangling fetch: GET /api/system/costs?period=today (src/app/(dashboard)/costi-api/page.tsx:37)"}, "properties": {"repobilityId": "84363df8e4749498", "scanner": "scanner-primary", "fingerprint": "e1bcd2691dcab040", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a013efbeab3db959", "level": "error", "message": {"text": "Dangling fetch: GET /api/feature-flags?key=llm_provider_openclaw_share (src/app/(dashboard)/settings/page.tsx:290)"}, "properties": {"repobilityId": "a9f397fdf6ec9c36", "scanner": "scanner-primary", "fingerprint": "a013efbeab3db959", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6b9b8aa0755b15d3", "level": "error", "message": {"text": "Dangling fetch: POST /api/feature-flags (src/app/(dashboard)/settings/page.tsx:301)"}, "properties": {"repobilityId": "0d2fd161f32077d8", "scanner": "scanner-primary", "fingerprint": "6b9b8aa0755b15d3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2d25bc6a166c5890", "level": "error", "message": {"text": "Dangling fetch: GET /api/llm/providers/metrics?window=${window} (src/app/(dashboard)/settings/page.tsx:360)"}, "properties": {"repobilityId": "edcfdeda5e4af4f0", "scanner": "scanner-primary", "fingerprint": "2d25bc6a166c5890", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-84758fed8f0b7166", "level": "error", "message": {"text": "Dangling fetch: POST /api/brands (src/app/(dashboard)/settings/page.tsx:572)"}, "properties": {"repobilityId": "cfea6a2ae52a8335", "scanner": "scanner-primary", "fingerprint": "84758fed8f0b7166", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ffae8488bc033d33", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/brands/${json.data.id} (src/app/(dashboard)/settings/page.tsx:587)"}, "properties": {"repobilityId": "216c4e82f79513ac", "scanner": "scanner-primary", "fingerprint": "ffae8488bc033d33", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8af47ef54be92274", "level": "error", "message": {"text": "Dangling fetch: GET /api/system/config (src/app/(dashboard)/settings/page.tsx:687)"}, "properties": {"repobilityId": "ecc700fc35981c8c", "scanner": "scanner-primary", "fingerprint": "8af47ef54be92274", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-908daaa68394b059", "level": "error", "message": {"text": "Dangling fetch: GET /api/brands/${activeBrand.id}/assets (src/app/(dashboard)/settings/brand-assets/page.tsx:39)"}, "properties": {"repobilityId": "6d0784e761bea618", "scanner": "scanner-primary", "fingerprint": "908daaa68394b059", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-61576f23706fd665", "level": "error", "message": {"text": "Dangling fetch: GET /api/brands/${activeBrand.id}/assets/${a.id}/preview (src/app/(dashboard)/settings/brand-assets/page.tsx:49)"}, "properties": {"repobilityId": "e2cf170095f1e7cf", "scanner": "scanner-primary", "fingerprint": "61576f23706fd665", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-07157531f3e6c3a2", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/brands/${activeBrand.id}/assets/${assetToDelete.id} (src/app/(dashboard)/settings/brand-assets/page.tsx:75)"}, "properties": {"repobilityId": "ce6ec016e7cb25b1", "scanner": "scanner-primary", "fingerprint": "07157531f3e6c3a2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7291edc53b33c1af", "level": "error", "message": {"text": "Dangling fetch: GET /api/social/health (src/app/(dashboard)/settings/social-connections/page.tsx:135)"}, "properties": {"repobilityId": "be9eb285bc969614", "scanner": "scanner-primary", "fingerprint": "7291edc53b33c1af", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e378fba2feb146c4", "level": "error", "message": {"text": "Dangling fetch: GET /api/social/integrations/mine (src/app/(dashboard)/settings/social-connections/page.tsx:140)"}, "properties": {"repobilityId": "ee6a0bd3412055ac", "scanner": "scanner-primary", "fingerprint": "e378fba2feb146c4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8c5447f36bdeaae2", "level": "error", "message": {"text": "Dangling fetch: POST /api/social/integrations/mine (src/app/(dashboard)/settings/social-connections/page.tsx:151)"}, "properties": {"repobilityId": "fdf7a8b58dd45a51", "scanner": "scanner-primary", "fingerprint": "8c5447f36bdeaae2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1349a9a137ed9565", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/social/integrations/mine/${platform} (src/app/(dashboard)/settings/social-connections/page.tsx:177)"}, "properties": {"repobilityId": "c4ce54486670e199", "scanner": "scanner-primary", "fingerprint": "1349a9a137ed9565", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9271088944454014", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/agent-configs (src/app/(dashboard)/settings/agenti/page.tsx:102)"}, "properties": {"repobilityId": "0d0566e29730e2de", "scanner": "scanner-primary", "fingerprint": "9271088944454014", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0f254cb625e93bb4", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/agent-skills (src/app/(dashboard)/settings/agenti/page.tsx:103)"}, "properties": {"repobilityId": "ab4e8541fb951ec8", "scanner": "scanner-primary", "fingerprint": "0f254cb625e93bb4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-03f6e4c359bd3726", "level": "error", "message": {"text": "Dangling fetch: POST /api/v1/agent-configs (src/app/(dashboard)/settings/agenti/page.tsx:133)"}, "properties": {"repobilityId": "cdb448839b2976de", "scanner": "scanner-primary", "fingerprint": "03f6e4c359bd3726", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e1166141420a2344", "level": "error", "message": {"text": "Dangling fetch: POST /api/v1/agent-skills (src/app/(dashboard)/settings/agenti/page.tsx:160)"}, "properties": {"repobilityId": "43e194eb20c37e9a", "scanner": "scanner-primary", "fingerprint": "e1166141420a2344", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c1bd42bdf26f2151", "level": "error", "message": {"text": "Dangling fetch: PUT /api/v1/agent-configs/${configId} (src/app/(dashboard)/settings/agenti/page.tsx:186)"}, "properties": {"repobilityId": "5eb4d43636e56204", "scanner": "scanner-primary", "fingerprint": "c1bd42bdf26f2151", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7a49c0ca669f5170", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/v1/agent-configs/${configId} (src/app/(dashboard)/settings/agenti/page.tsx:206)"}, "properties": {"repobilityId": "563f5ed66b354444", "scanner": "scanner-primary", "fingerprint": "7a49c0ca669f5170", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-77e880faa3ed02e3", "level": "error", "message": {"text": "Dangling fetch: PUT /api/v1/agent-skills/${skillId} (src/app/(dashboard)/settings/agenti/page.tsx:222)"}, "properties": {"repobilityId": "923b1a3832c818ee", "scanner": "scanner-primary", "fingerprint": "77e880faa3ed02e3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0b76bf32429f0cd8", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/v1/agent-skills/${skillId} (src/app/(dashboard)/settings/agenti/page.tsx:245)"}, "properties": {"repobilityId": "96378eb78041c871", "scanner": "scanner-primary", "fingerprint": "0b76bf32429f0cd8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-46f96fb1a8b20652", "level": "error", "message": {"text": "Dangling fetch: GET /api/email-marketing/automations (src/app/(dashboard)/settings/automations/page.tsx:38)"}, "properties": {"repobilityId": "ea45ce85f333a80c", "scanner": "scanner-primary", "fingerprint": "46f96fb1a8b20652", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-39cad17097aa2ca3", "level": "error", "message": {"text": "Dangling fetch: POST /api/email-marketing/automations (src/app/(dashboard)/settings/automations/page.tsx:48)"}, "properties": {"repobilityId": "695943cb81a6409c", "scanner": "scanner-primary", "fingerprint": "39cad17097aa2ca3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-935521728287b426", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/email-marketing/automations/${automation.id} (src/app/(dashboard)/settings/automations/page.tsx:62)"}, "properties": {"repobilityId": "d4258ab5fa52e6ae", "scanner": "scanner-primary", "fingerprint": "935521728287b426", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f952b7b5dec1d8e2", "level": "error", "message": {"text": "Dangling fetch: GET /api/video/templates (src/app/(dashboard)/settings/video-templates/page.tsx:40)"}, "properties": {"repobilityId": "265324f61b31ea91", "scanner": "scanner-primary", "fingerprint": "f952b7b5dec1d8e2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5a8363eb77893fa2", "level": "error", "message": {"text": "Dangling fetch: POST /api/video/templates (src/app/(dashboard)/settings/video-templates/page.tsx:51)"}, "properties": {"repobilityId": "bf48c16640a23c1f", "scanner": "scanner-primary", "fingerprint": "5a8363eb77893fa2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b073f4a5692937f4", "level": "error", "message": {"text": "Dangling fetch: POST /api/feature-flags (src/app/(dashboard)/settings/feature-flags/page.tsx:76)"}, "properties": {"repobilityId": "6d67e23914217d35", "scanner": "scanner-primary", "fingerprint": "b073f4a5692937f4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0656e21c3e6e88b0", "level": "error", "message": {"text": "Dangling fetch: GET /api/email-marketing/lists (src/app/(dashboard)/settings/audience/page.tsx:50)"}, "properties": {"repobilityId": "be176596cd7d2b07", "scanner": "scanner-primary", "fingerprint": "0656e21c3e6e88b0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e1b2a8a4dbd52c09", "level": "error", "message": {"text": "Dangling fetch: POST /api/internal/brand-secrets (src/app/(dashboard)/settings/audience/page.tsx:68)"}, "properties": {"repobilityId": "b0445615310b1345", "scanner": "scanner-primary", "fingerprint": "e1b2a8a4dbd52c09", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7f1349344f623a50", "level": "error", "message": {"text": "Dangling fetch: GET /api/brands (src/app/(dashboard)/settings/image-generation/page.tsx:59)"}, "properties": {"repobilityId": "6bd56c5d30f7383b", "scanner": "scanner-primary", "fingerprint": "7f1349344f623a50", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d63da42bb91c1b1d", "level": "error", "message": {"text": "Dangling fetch: GET /api/images/stats (src/app/(dashboard)/settings/image-generation/page.tsx:68)"}, "properties": {"repobilityId": "b11e6324c0e85d2a", "scanner": "scanner-primary", "fingerprint": "d63da42bb91c1b1d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-72f9f2404099bbb4", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/brands/${activeBrand.id} (src/app/(dashboard)/settings/image-generation/page.tsx:82)"}, "properties": {"repobilityId": "e6e6922b354d1c6f", "scanner": "scanner-primary", "fingerprint": "72f9f2404099bbb4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-261947c61c7fa549", "level": "error", "message": {"text": "Dangling fetch: POST /api/images/generate (src/app/(dashboard)/settings/image-generation/page.tsx:99)"}, "properties": {"repobilityId": "e440c5b3d92c32d5", "scanner": "scanner-primary", "fingerprint": "261947c61c7fa549", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b6c9de5a737dfe50", "level": "error", "message": {"text": "Dangling fetch: GET /api/brands (src/app/(dashboard)/settings/brand-context/page.tsx:415)"}, "properties": {"repobilityId": "f44d1197a8a4f711", "scanner": "scanner-primary", "fingerprint": "b6c9de5a737dfe50", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2f2e81042567afa2", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/brands/${brandId} (src/app/(dashboard)/settings/brand-context/page.tsx:452)"}, "properties": {"repobilityId": "ad4badb16f6f6afb", "scanner": "scanner-primary", "fingerprint": "2f2e81042567afa2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-02ef72130d038522", "level": "error", "message": {"text": "Dangling fetch: GET /api/calendar/events?year=${year}&month=${month} (src/app/(dashboard)/calendario/page.tsx:82)"}, "properties": {"repobilityId": "85f718add5fa70a0", "scanner": "scanner-primary", "fingerprint": "02ef72130d038522", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1a6c308d5b4b638a", "level": "error", "message": {"text": "Dangling fetch: POST /api/calendar/events (src/app/(dashboard)/calendario/page.tsx:139)"}, "properties": {"repobilityId": "c2920ba167e5532f", "scanner": "scanner-primary", "fingerprint": "1a6c308d5b4b638a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-51447f0478e97316", "level": "error", "message": {"text": "Dangling fetch: GET /api/research/deep (src/app/(dashboard)/deep-research/page.tsx:59)"}, "properties": {"repobilityId": "99bb0587fe482ced", "scanner": "scanner-primary", "fingerprint": "51447f0478e97316", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2a271e9f235268d1", "level": "error", "message": {"text": "Dangling fetch: POST /api/research/deep (src/app/(dashboard)/deep-research/page.tsx:80)"}, "properties": {"repobilityId": "3b2a807afcb5458d", "scanner": "scanner-primary", "fingerprint": "2a271e9f235268d1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f0fd3ef05af7699b", "level": "error", "message": {"text": "Dangling fetch: GET /api/research/deep/${jobId}/results (src/app/(dashboard)/deep-research/page.tsx:101)"}, "properties": {"repobilityId": "abaf155a82674de8", "scanner": "scanner-primary", "fingerprint": "f0fd3ef05af7699b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-51ef2718399b440a", "level": "error", "message": {"text": "Dangling fetch: POST /api/research/deep/${jobId}/generate-ideas (src/app/(dashboard)/deep-research/page.tsx:113)"}, "properties": {"repobilityId": "8fe156d39ab6ad91", "scanner": "scanner-primary", "fingerprint": "51ef2718399b440a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ba3998dd5d8ffe47", "level": "error", "message": {"text": "Dangling fetch: GET /api/system/config (src/components/dashboard/getting-started.tsx:19)"}, "properties": {"repobilityId": "d8823d5d8f06823f", "scanner": "scanner-primary", "fingerprint": "ba3998dd5d8ffe47", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c0b69ed6e4b335d4", "level": "error", "message": {"text": "Dangling fetch: GET /api/brands (src/components/dashboard/getting-started.tsx:20)"}, "properties": {"repobilityId": "f58f3eaf9b1b8ff6", "scanner": "scanner-primary", "fingerprint": "c0b69ed6e4b335d4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f2b9ef5ee5d96c48", "level": "error", "message": {"text": "Dangling fetch: GET /api/research?limit=1&status=approved (src/components/dashboard/getting-started.tsx:22)"}, "properties": {"repobilityId": "259d4010f6b52f2a", "scanner": "scanner-primary", "fingerprint": "f2b9ef5ee5d96c48", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-03ba2c6cbfa1fd57", "level": "error", "message": {"text": "Dangling fetch: GET /api/content?limit=1 (src/components/dashboard/getting-started.tsx:23)"}, "properties": {"repobilityId": "12fcdcafc1aaad58", "scanner": "scanner-primary", "fingerprint": "03ba2c6cbfa1fd57", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2542bcf272cd9205", "level": "error", "message": {"text": "Dangling fetch: GET /api/setup/progress (src/components/dashboard/getting-started.tsx:48)"}, "properties": {"repobilityId": "163aeb2c44fdfb72", "scanner": "scanner-primary", "fingerprint": "2542bcf272cd9205", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8c7c35257ce4dc32", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/setup/progress (src/components/dashboard/getting-started.tsx:59)"}, "properties": {"repobilityId": "776a2c036a5db2d8", "scanner": "scanner-primary", "fingerprint": "8c7c35257ce4dc32", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c21018b38a80f448", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/setup/progress (src/components/dashboard/getting-started.tsx:98)"}, "properties": {"repobilityId": "cb20330a483374a2", "scanner": "scanner-primary", "fingerprint": "c21018b38a80f448", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c84382526c1ab143", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/brands/${brandId}/assets/${assetId} (src/components/brand-assets/palette-editor.tsx:13)"}, "properties": {"repobilityId": "f83d53281b7f86a4", "scanner": "scanner-primary", "fingerprint": "c84382526c1ab143", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-14c7f495662245a5", "level": "error", "message": {"text": "Dangling fetch: POST /api/brands/${brandId}/assets/upload-url (src/components/brand-assets/asset-upload-card.tsx:23)"}, "properties": {"repobilityId": "5f7653eff95173cd", "scanner": "scanner-primary", "fingerprint": "14c7f495662245a5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-69072da1297b3ac5", "level": "error", "message": {"text": "Dangling fetch: POST /api/brands/${brandId}/assets (src/components/brand-assets/asset-upload-card.tsx:47)"}, "properties": {"repobilityId": "d72db2c565998a5d", "scanner": "scanner-primary", "fingerprint": "69072da1297b3ac5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ac810a893ada1ac6", "level": "error", "message": {"text": "Dangling fetch: GET /api/social/integrations/mine (src/components/content-hub/publish-button.tsx:27)"}, "properties": {"repobilityId": "381c8587defd9778", "scanner": "scanner-primary", "fingerprint": "ac810a893ada1ac6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5031f02a3b7602d3", "level": "error", "message": {"text": "Dangling fetch: GET /api/images/jobs/${id} (src/components/content-hub/generate-visual-button.tsx:21)"}, "properties": {"repobilityId": "7fdf4530ee20060c", "scanner": "scanner-primary", "fingerprint": "5031f02a3b7602d3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-594986fe572977d1", "level": "error", "message": {"text": "Dangling fetch: GET /api/system/costs?period=today (src/components/layout/api-spend-row.tsx:18)"}, "properties": {"repobilityId": "31b47b8ad62b09f5", "scanner": "scanner-primary", "fingerprint": "594986fe572977d1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-cb83b8f00233e7f5", "level": "error", "message": {"text": "Dangling fetch: POST /api/llm/providers/${provider.id}/validate (src/components/settings/llm-provider-hub.tsx:125)"}, "properties": {"repobilityId": "d36751c4b0b5946f", "scanner": "scanner-primary", "fingerprint": "cb83b8f00233e7f5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-dacc5f96e12915f5", "level": "error", "message": {"text": "Dangling fetch: POST /api/llm/providers/${provider.id}/key (src/components/settings/llm-provider-hub.tsx:152)"}, "properties": {"repobilityId": "68b081d6ab2b6184", "scanner": "scanner-primary", "fingerprint": "dacc5f96e12915f5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-bb2dcba3ac2aea7d", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/llm/providers/${provider.id}/key (src/components/settings/llm-provider-hub.tsx:181)"}, "properties": {"repobilityId": "a2d9261a80b61d48", "scanner": "scanner-primary", "fingerprint": "bb2dcba3ac2aea7d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-eb142604e2e64338", "level": "error", "message": {"text": "Dangling fetch: POST /api/llm/gateways/${provider.id}/url (src/components/settings/llm-provider-hub.tsx:332)"}, "properties": {"repobilityId": "b4257d8c12cad2c9", "scanner": "scanner-primary", "fingerprint": "eb142604e2e64338", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-aac1ff061f9920aa", "level": "error", "message": {"text": "Dangling fetch: POST /api/llm/gateways/probe (src/components/settings/llm-provider-hub.tsx:345)"}, "properties": {"repobilityId": "868cd8e28bd6db75", "scanner": "scanner-primary", "fingerprint": "aac1ff061f9920aa", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4f757957fe9c1982", "level": "error", "message": {"text": "Dangling fetch: GET /api/llm/gateways/auto-discover (src/components/settings/llm-provider-hub.tsx:474)"}, "properties": {"repobilityId": "a422b0ef220756a6", "scanner": "scanner-primary", "fingerprint": "4f757957fe9c1982", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0129b774f4c87fb7", "level": "error", "message": {"text": "Dangling fetch: GET /api/llm/providers/catalog (src/components/settings/llm-provider-hub.tsx:514)"}, "properties": {"repobilityId": "0aa606b1912ca5e5", "scanner": "scanner-primary", "fingerprint": "0129b774f4c87fb7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-21fef303df1e055a", "level": "error", "message": {"text": "Dangling fetch: GET /api/llm/providers/configured (src/components/settings/llm-provider-hub.tsx:515)"}, "properties": {"repobilityId": "96dfb376d6548162", "scanner": "scanner-primary", "fingerprint": "21fef303df1e055a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-fc9460eac37624d4", "level": "error", "message": {"text": "Dangling fetch: GET /api/brand-templates (src/components/brand-context/brand-discovery.tsx:78)"}, "properties": {"repobilityId": "7c00c412918bb7b9", "scanner": "scanner-primary", "fingerprint": "fc9460eac37624d4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e4531ad4799436b3", "level": "error", "message": {"text": "Dangling fetch: POST /api/brand-discovery (src/components/brand-context/brand-discovery.tsx:133)"}, "properties": {"repobilityId": "4df405b9507cc939", "scanner": "scanner-primary", "fingerprint": "e4531ad4799436b3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-045425b1a238d22b", "level": "error", "message": {"text": "Dangling fetch: POST /api/memory/upload (src/components/brand-context/context-document-upload.tsx:126)"}, "properties": {"repobilityId": "a3f5d1cd0413f12d", "scanner": "scanner-primary", "fingerprint": "045425b1a238d22b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b057a02510b947df", "level": "error", "message": {"text": "Dangling fetch: GET /api/brands (src/lib/brand-context.tsx:117)"}, "properties": {"repobilityId": "9176cb93543a13af", "scanner": "scanner-primary", "fingerprint": "b057a02510b947df", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-131c74a6dd405b97", "level": "error", "message": {"text": "Dangling fetch: GET https://api.anthropic.com/v1/models (cli/src/commands/init.ts:58)"}, "properties": {"repobilityId": "06f6dfe8de0f8ae9", "scanner": "scanner-primary", "fingerprint": "131c74a6dd405b97", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-74c1698a30c204b5", "level": "note", "message": {"text": "Unused endpoint: GET /research/runs"}, "properties": {"repobilityId": "4a560883f4e95a30", "scanner": "scanner-primary", "fingerprint": "74c1698a30c204b5", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ca601f5fb6554e54", "level": "note", "message": {"text": "Unused endpoint: POST /scoring/run"}, "properties": {"repobilityId": "d69f15ede1c62938", "scanner": "scanner-primary", "fingerprint": "ca601f5fb6554e54", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-90cfc703e38d0f7a", "level": "note", "message": {"text": "Unused endpoint: POST /content/generate"}, "properties": {"repobilityId": "e31814b970a99a46", "scanner": "scanner-primary", "fingerprint": "90cfc703e38d0f7a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-77ebec7e79190d4f", "level": "note", "message": {"text": "Unused endpoint: POST /content/drafts/{draft_id}/adapt"}, "properties": {"repobilityId": "2e0b8e3d4a63e570", "scanner": "scanner-primary", "fingerprint": "77ebec7e79190d4f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5c445e7d8b0a3e1e", "level": "note", "message": {"text": "Unused endpoint: POST /content/drafts/{draft_id}/humanize"}, "properties": {"repobilityId": "f1381895fdd48172", "scanner": "scanner-primary", "fingerprint": "5c445e7d8b0a3e1e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-9ea1eb595df82ad9", "level": "note", "message": {"text": "Unused endpoint: GET /writing-lab/sessions"}, "properties": {"repobilityId": "951ca4c244f21a98", "scanner": "scanner-primary", "fingerprint": "9ea1eb595df82ad9", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-285fd643dba28eaf", "level": "note", "message": {"text": "Unused endpoint: GET /writing-lab/sessions/{session_id}"}, "properties": {"repobilityId": "2e0fedc26ed69db6", "scanner": "scanner-primary", "fingerprint": "285fd643dba28eaf", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f4da3c43e62e0617", "level": "note", "message": {"text": "Unused endpoint: POST /scheduler/weekly-newsletter"}, "properties": {"repobilityId": "0cf64edf13cef812", "scanner": "scanner-primary", "fingerprint": "f4da3c43e62e0617", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c194971b901a1efd", "level": "note", "message": {"text": "Unused endpoint: POST /webhooks/telegram"}, "properties": {"repobilityId": "637b747641fa9999", "scanner": "scanner-primary", "fingerprint": "c194971b901a1efd", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-99ba870b3f6b2638", "level": "note", "message": {"text": "Unused endpoint: POST /webhooks/email/brevo"}, "properties": {"repobilityId": "80021c1499d7204c", "scanner": "scanner-primary", "fingerprint": "99ba870b3f6b2638", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-0cef91573912a7b7", "level": "note", "message": {"text": "Unused endpoint: POST /webhooks/email/mailchimp"}, "properties": {"repobilityId": "bb0313773f366f0a", "scanner": "scanner-primary", "fingerprint": "0cef91573912a7b7", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c1348edc48c2b88b", "level": "note", "message": {"text": "Unused endpoint: POST /social/publish/twitter"}, "properties": {"repobilityId": "db345c45f5478e45", "scanner": "scanner-primary", "fingerprint": "c1348edc48c2b88b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-17dc4f175616f946", "level": "note", "message": {"text": "Unused endpoint: POST /social/schedule"}, "properties": {"repobilityId": "d82fa1e644b0cb4f", "scanner": "scanner-primary", "fingerprint": "17dc4f175616f946", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a8861bb8c4ee0205", "level": "note", "message": {"text": "Unused endpoint: POST /analytics/metrics"}, "properties": {"repobilityId": "e972e7c8251afd15", "scanner": "scanner-primary", "fingerprint": "a8861bb8c4ee0205", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e0c453683f3d892b", "level": "note", "message": {"text": "Unused endpoint: POST /analytics/feedback-loop"}, "properties": {"repobilityId": "127288f73c07ed46", "scanner": "scanner-primary", "fingerprint": "e0c453683f3d892b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e402c04a4236c91f", "level": "note", "message": {"text": "Unused endpoint: POST /analytics/pull-metrics"}, "properties": {"repobilityId": "1ad3d72d2d9e0406", "scanner": "scanner-primary", "fingerprint": "e402c04a4236c91f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3fc532a6f33b7d97", "level": "note", "message": {"text": "Unused endpoint: POST /scheduler/daily-pipeline"}, "properties": {"repobilityId": "1369f9bcdbe69a15", "scanner": "scanner-primary", "fingerprint": "3fc532a6f33b7d97", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-aea61dbb656eacfb", "level": "note", "message": {"text": "Unused endpoint: POST /scheduler/publish-scheduled"}, "properties": {"repobilityId": "2455c82636a72e39", "scanner": "scanner-primary", "fingerprint": "aea61dbb656eacfb", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7a795b95a3a97c2c", "level": "note", "message": {"text": "Unused endpoint: POST /auth/cache-invalidate"}, "properties": {"repobilityId": "6d9d415757a083f9", "scanner": "scanner-primary", "fingerprint": "7a795b95a3a97c2c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6da1902774de05a5", "level": "note", "message": {"text": "Unused endpoint: GET /llm/fallback-stats"}, "properties": {"repobilityId": "acfccde6a7487e76", "scanner": "scanner-primary", "fingerprint": "6da1902774de05a5", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-94566b5e9418bebd", "level": "note", "message": {"text": "Unused endpoint: GET /llm/fallback-log"}, "properties": {"repobilityId": "1f3c7c0216a84177", "scanner": "scanner-primary", "fingerprint": "94566b5e9418bebd", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-9293077dc9d55a2d", "level": "note", "message": {"text": "Unused endpoint: POST /memory/consolidate-user"}, "properties": {"repobilityId": "2fa758649226063f", "scanner": "scanner-primary", "fingerprint": "9293077dc9d55a2d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8e97ba0cecfe52b7", "level": "note", "message": {"text": "Unused endpoint: POST /memory/recall"}, "properties": {"repobilityId": "1fcbf9bba5ff1b08", "scanner": "scanner-primary", "fingerprint": "8e97ba0cecfe52b7", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-578da48a36ca4073", "level": "note", "message": {"text": "Unused endpoint: GET /memory/expiring"}, "properties": {"repobilityId": "c9b31bd0cc635f78", "scanner": "scanner-primary", "fingerprint": "578da48a36ca4073", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-01fab25a146fcce3", "level": "note", "message": {"text": "Unused endpoint: POST /memory/facts/{fact_id}/supersede"}, "properties": {"repobilityId": "315da5174af8d93e", "scanner": "scanner-primary", "fingerprint": "01fab25a146fcce3", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5b23723b348d08a4", "level": "note", "message": {"text": "Unused endpoint: POST /memory/upload-source"}, "properties": {"repobilityId": "2a1d2c0243b24fb5", "scanner": "scanner-primary", "fingerprint": "5b23723b348d08a4", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-891b681572b0e018", "level": "note", "message": {"text": "Unused endpoint: GET /brands/credentials"}, "properties": {"repobilityId": "54c4c3b70b214ec5", "scanner": "scanner-primary", "fingerprint": "891b681572b0e018", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6185d148abece36c", "level": "note", "message": {"text": "Unused endpoint: PUT /brands/credentials/{service_name}"}, "properties": {"repobilityId": "181f47bb92fcee61", "scanner": "scanner-primary", "fingerprint": "6185d148abece36c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-faa4612b04c15800", "level": "note", "message": {"text": "Unused endpoint: DELETE /brands/credentials/{service_name}"}, "properties": {"repobilityId": "e314e1f429e954dc", "scanner": "scanner-primary", "fingerprint": "faa4612b04c15800", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-08c18b0c15f8c335", "level": "note", "message": {"text": "Unused endpoint: GET /brands/credentials/{service_name}/status"}, "properties": {"repobilityId": "161ad078b2e93373", "scanner": "scanner-primary", "fingerprint": "08c18b0c15f8c335", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c9dc3f78ac9e1cc2", "level": "note", "message": {"text": "Unused endpoint: POST /llm/fallback-monitor/reset"}, "properties": {"repobilityId": "4832d720a7c636c9", "scanner": "scanner-primary", "fingerprint": "c9dc3f78ac9e1cc2", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2d44b212ec9a75e7", "level": "note", "message": {"text": "Unused endpoint: POST /newsletter/{newsletter_id}/resolve-ab"}, "properties": {"repobilityId": "4998c83656025627", "scanner": "scanner-primary", "fingerprint": "2d44b212ec9a75e7", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2a366262a6be358f", "level": "note", "message": {"text": "Unused endpoint: GET /activity"}, "properties": {"repobilityId": "d2b44ef76b5d81df", "scanner": "scanner-primary", "fingerprint": "2a366262a6be358f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2b73958ead43e47d", "level": "note", "message": {"text": "Unused endpoint: POST /templates"}, "properties": {"repobilityId": "9e1efbe4cc8d27cf", "scanner": "scanner-primary", "fingerprint": "2b73958ead43e47d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-0f05b18a4041916f", "level": "note", "message": {"text": "Unused endpoint: POST /render"}, "properties": {"repobilityId": "8f3d10b35377ad41", "scanner": "scanner-primary", "fingerprint": "0f05b18a4041916f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-71bf45f3efda8170", "level": "note", "message": {"text": "Unused endpoint: GET /{video_id}/status"}, "properties": {"repobilityId": "b5616b30dd0b2a89", "scanner": "scanner-primary", "fingerprint": "71bf45f3efda8170", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5baa8971ebe192a1", "level": "note", "message": {"text": "Unused endpoint: GET /"}, "properties": {"repobilityId": "e05bfd2033fb7d61", "scanner": "scanner-primary", "fingerprint": "5baa8971ebe192a1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-017394171548a2b2", "level": "note", "message": {"text": "Unused endpoint: GET /templates"}, "properties": {"repobilityId": "9ae994f4fbbb5d5f", "scanner": "scanner-primary", "fingerprint": "017394171548a2b2", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-164d6a7f98a79771", "level": "note", "message": {"text": "Unused endpoint: GET /heygen/avatars"}, "properties": {"repobilityId": "cf6188fdf6ce06ab", "scanner": "scanner-primary", "fingerprint": "164d6a7f98a79771", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-970eb92d6ec2bfaa", "level": "note", "message": {"text": "Unused endpoint: POST /generate"}, "properties": {"repobilityId": "585baef17ae04894", "scanner": "scanner-primary", "fingerprint": "970eb92d6ec2bfaa", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-635d931a5e0766b0", "level": "note", "message": {"text": "Unused endpoint: POST /shorts/generate"}, "properties": {"repobilityId": "6daa4afc31e906b1", "scanner": "scanner-primary", "fingerprint": "635d931a5e0766b0", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f0009b85e788448f", "level": "note", "message": {"text": "Unused endpoint: GET /shorts/{video_id}/status"}, "properties": {"repobilityId": "56fcc094d8585394", "scanner": "scanner-primary", "fingerprint": "f0009b85e788448f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5a53cf6d14234a6f", "level": "note", "message": {"text": "Unused endpoint: POST /{video_id}/poll-heygen"}, "properties": {"repobilityId": "a74b5fbc8ddfae35", "scanner": "scanner-primary", "fingerprint": "5a53cf6d14234a6f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-696c1c3378de88c3", "level": "note", "message": {"text": "Unused endpoint: GET /providers/catalog"}, "properties": {"repobilityId": "75a3fb773d9d5d52", "scanner": "scanner-primary", "fingerprint": "696c1c3378de88c3", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d7e9cf0198938c83", "level": "note", "message": {"text": "Unused endpoint: GET /providers/configured"}, "properties": {"repobilityId": "f7a9e8d1c4a3cb8e", "scanner": "scanner-primary", "fingerprint": "d7e9cf0198938c83", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-81b3be31042d88c0", "level": "note", "message": {"text": "Unused endpoint: POST /providers/{provider_id}/key"}, "properties": {"repobilityId": "bc16edaa15985044", "scanner": "scanner-primary", "fingerprint": "81b3be31042d88c0", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f23435ba1f2e8d25", "level": "note", "message": {"text": "Unused endpoint: DELETE /providers/{provider_id}/key"}, "properties": {"repobilityId": "75bef30817264767", "scanner": "scanner-primary", "fingerprint": "f23435ba1f2e8d25", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1387fa0581a9b717", "level": "note", "message": {"text": "Unused endpoint: POST /providers/{provider_id}/validate"}, "properties": {"repobilityId": "751decb52ca77b03", "scanner": "scanner-primary", "fingerprint": "1387fa0581a9b717", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8e11a29d8fbc4f99", "level": "note", "message": {"text": "Unused endpoint: POST /gateways/probe"}, "properties": {"repobilityId": "4c8e9c671cfcdacf", "scanner": "scanner-primary", "fingerprint": "8e11a29d8fbc4f99", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-cc9f55e0e7416dcb", "level": "note", "message": {"text": "Unused endpoint: GET /gateways/auto-discover"}, "properties": {"repobilityId": "0922534a4c8a9001", "scanner": "scanner-primary", "fingerprint": "cc9f55e0e7416dcb", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}