{"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-24047514c0410825", "name": "TODO/FIXME marker in shipping code \u2014 project-manager-app/apps/api/src/modules/ops/simulation-engine.service.ts:96", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 project-manager-app/apps/api/src/modules/ops/simulation-engine.service.ts:96"}, "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-e7ab456b7ecee9b8", "name": "TODO/FIXME marker in shipping code \u2014 project-manager-app/apps/api/src/modules/ops/apply-engine.service.ts:68", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 project-manager-app/apps/api/src/modules/ops/apply-engine.service.ts:68"}, "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-fdd671f912d27c83", "name": "Icon-only button without accessible name \u2014 project-manager-app/apps/web/components/semse/PatchDiffViewer.tsx:62", "shortDescription": {"text": "Icon-only button without accessible name \u2014 project-manager-app/apps/web/components/semse/PatchDiffViewer.tsx:62"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f6285a8ac38d1b35", "name": "`truncate` class without `title=` for hover reveal \u2014 project-manager-app/apps/web/components/landing/agents-simulator.ts", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 project-manager-app/apps/web/components/landing/agents-simulator.tsx:384"}, "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-df718c83ffbff392", "name": "`truncate` class without `title=` for hover reveal \u2014 project-manager-app/apps/web/app/sprint-1-dashboard.tsx:157", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 project-manager-app/apps/web/app/sprint-1-dashboard.tsx:157"}, "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-bda63f1a3cf55b0c", "name": "`truncate` class without `title=` for hover reveal \u2014 project-manager-app/apps/web/app/dashboard/dashboard-client.tsx:279", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 project-manager-app/apps/web/app/dashboard/dashboard-client.tsx:279"}, "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-1b1d6e399882ffa9", "name": "Icon-only button without accessible name \u2014 project-manager-app/apps/web/app/field-ops/page.tsx:133", "shortDescription": {"text": "Icon-only button without accessible name \u2014 project-manager-app/apps/web/app/field-ops/page.tsx:133"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-35b6ae1973c2fb6e", "name": "`truncate` class without `title=` for hover reveal \u2014 project-manager-app/apps/web/app/field-ops/page.tsx:310", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 project-manager-app/apps/web/app/field-ops/page.tsx:310"}, "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-4208fdd8dbc4b62a", "name": "`truncate` class without `title=` for hover reveal \u2014 project-manager-app/apps/web/app/(app)/layout.tsx:465", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 project-manager-app/apps/web/app/(app)/layout.tsx:465"}, "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-e800cc7256fdfafb", "name": "\"active\" state uses light bg in a dark theme \u2014 project-manager-app/apps/web/app/(app)/layout.tsx:459", "shortDescription": {"text": "\"active\" state uses light bg in a dark theme \u2014 project-manager-app/apps/web/app/(app)/layout.tsx:459"}, "fullDescription": {"text": "A ternary like `active ? 'bg-white' : '...'` (or bg-gray-100/200) on a dark theme produces jarring white pills. Use a dark-emphasized active state instead \u2014 border + ring or slightly brighter dark bg. Example: `active ? 'bg-gray-800 border-gray-500 ring-1 ring-blue-500/30' : '\u2026'`.\n\nWhy: P-E in CHECKLIST.md \u2014 light bg in a dark theme is a class of regression.\nRule id: fq.active-light-bg"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-06e6cff60c812c84", "name": "Icon-only button without accessible name \u2014 project-manager-app/apps/web/app/(app)/client/leads/page.tsx:508", "shortDescription": {"text": "Icon-only button without accessible name \u2014 project-manager-app/apps/web/app/(app)/client/leads/page.tsx:508"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f92f876363469317", "name": "Icon-only button without accessible name \u2014 project-manager-app/apps/web/app/(app)/client/projects/[projectId]/copilot/co", "shortDescription": {"text": "Icon-only button without accessible name \u2014 project-manager-app/apps/web/app/(app)/client/projects/[projectId]/copilot/components/plan-task-graph.tsx:227"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a6c8f3c977903fef", "name": "Icon-only button without accessible name \u2014 project-manager-app/apps/web/app/(app)/worker/field-ops/page.tsx:133", "shortDescription": {"text": "Icon-only button without accessible name \u2014 project-manager-app/apps/web/app/(app)/worker/field-ops/page.tsx:133"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8e7fa859fdbca9ea", "name": "`truncate` class without `title=` for hover reveal \u2014 project-manager-app/apps/web/app/(app)/worker/field-ops/page.tsx:31", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 project-manager-app/apps/web/app/(app)/worker/field-ops/page.tsx:310"}, "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-0e0e67a5c25f0b96", "name": "`truncate` class without `title=` for hover reveal \u2014 project-manager-app/apps/web/app/(app)/worker/travel/[travelId]/pag", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 project-manager-app/apps/web/app/(app)/worker/travel/[travelId]/page.tsx:455"}, "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-86e25892e4eb9877", "name": "Icon-only button without accessible name \u2014 project-manager-app/apps/web/app/(app)/admin/governance/page.tsx:298", "shortDescription": {"text": "Icon-only button without accessible name \u2014 project-manager-app/apps/web/app/(app)/admin/governance/page.tsx:298"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-dbee684068f777fc", "name": "`truncate` class without `title=` for hover reveal \u2014 project-manager-app/apps/web/app/(app)/admin/browser-agent/page.tsx", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 project-manager-app/apps/web/app/(app)/admin/browser-agent/page.tsx:321"}, "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-d556916c096286fa", "name": "Stray `console.log` in TS/JS \u2014 project-manager-app/apps/web/app/(app)/tools/painting/painting-tool-client.tsx:232", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 project-manager-app/apps/web/app/(app)/tools/painting/painting-tool-client.tsx:232"}, "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-e2c06ea05f8bd463", "name": "`truncate` class without `title=` for hover reveal \u2014 project-manager-app/apps/web/app/(app)/tools/dashboard/page.tsx:186", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 project-manager-app/apps/web/app/(app)/tools/dashboard/page.tsx:186"}, "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-08ce7d285f8750b1", "name": "`truncate` class without `title=` for hover reveal \u2014 project-manager-app/apps/web/app/(app)/tools/electrical/electrical-", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 project-manager-app/apps/web/app/(app)/tools/electrical/electrical-tool-client.tsx:624"}, "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-39efc91d613de3a4", "name": "TODO/FIXME marker in shipping code \u2014 project-manager-app/apps/web/app/jobs/new/page.tsx:162", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 project-manager-app/apps/web/app/jobs/new/page.tsx:162"}, "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-0340ae9ad601ddd5", "name": "`truncate` class without `title=` for hover reveal \u2014 project-manager-app/apps/web/app/jobs/[jobId]/page.tsx:301", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 project-manager-app/apps/web/app/jobs/[jobId]/page.tsx:301"}, "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-d8ffce1bf9a1da01", "name": "`truncate` class without `title=` for hover reveal \u2014 project-manager-app/apps/web/app/jobs/[jobId]/evidence/page.tsx:413", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 project-manager-app/apps/web/app/jobs/[jobId]/evidence/page.tsx:413"}, "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-a1ba56a09fb8eb28", "name": "Stray `console.log` in TS/JS \u2014 project-manager-app/packages/shared/src/observability/logger.ts:141", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 project-manager-app/packages/shared/src/observability/logger.ts:141"}, "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-3afbc01508c1bf15", "name": "`truncate` class without `title=` for hover reveal \u2014 project-manager-app/packages/ui/src/layout/AppShell.tsx:91", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 project-manager-app/packages/ui/src/layout/AppShell.tsx:91"}, "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-16924efe5836143b", "name": "\"active\" state uses light bg in a dark theme \u2014 project-manager-app/packages/ui/src/layout/AppShell.tsx:87", "shortDescription": {"text": "\"active\" state uses light bg in a dark theme \u2014 project-manager-app/packages/ui/src/layout/AppShell.tsx:87"}, "fullDescription": {"text": "A ternary like `active ? 'bg-white' : '...'` (or bg-gray-100/200) on a dark theme produces jarring white pills. Use a dark-emphasized active state instead \u2014 border + ring or slightly brighter dark bg. Example: `active ? 'bg-gray-800 border-gray-500 ring-1 ring-blue-500/30' : '\u2026'`.\n\nWhy: P-E in CHECKLIST.md \u2014 light bg in a dark theme is a class of regression.\nRule id: fq.active-light-bg"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9596d76005cd7311", "name": "`truncate` class without `title=` for hover reveal \u2014 project-manager-app/packages/ui/src/components/JobCard.tsx:77", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 project-manager-app/packages/ui/src/components/JobCard.tsx:77"}, "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-cb97cc8438bcd248", "name": "`truncate` class without `title=` for hover reveal \u2014 project-manager-app/packages/ui/src/components/AgentChatPanel.tsx:7", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 project-manager-app/packages/ui/src/components/AgentChatPanel.tsx:70"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-683e914c5b23781d", "name": "\"active\" state uses light bg in a dark theme \u2014 project-manager-app/packages/ui/src/components/AgentChatPanel.tsx:84", "shortDescription": {"text": "\"active\" state uses light bg in a dark theme \u2014 project-manager-app/packages/ui/src/components/AgentChatPanel.tsx:84"}, "fullDescription": {"text": "A ternary like `active ? 'bg-white' : '...'` (or bg-gray-100/200) on a dark theme produces jarring white pills. Use a dark-emphasized active state instead \u2014 border + ring or slightly brighter dark bg. Example: `active ? 'bg-gray-800 border-gray-500 ring-1 ring-blue-500/30' : '\u2026'`.\n\nWhy: P-E in CHECKLIST.md \u2014 light bg in a dark theme is a class of regression.\nRule id: fq.active-light-bg"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-20ee1c48296bb77c", "name": "`truncate` class without `title=` for hover reveal \u2014 project-manager-app/packages/ui/src/components/EscrowTimeline.tsx:2", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 project-manager-app/packages/ui/src/components/EscrowTimeline.tsx:237"}, "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-279108ab18ed242a", "name": "Stray `console.log` in TS/JS \u2014 project-manager-app/packages/db/scripts/repair-soft-delete-drift.ts:47", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 project-manager-app/packages/db/scripts/repair-soft-delete-drift.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-fa1befef85e588b6", "name": "Stray `console.log` in TS/JS \u2014 project-manager-app/packages/db/prisma/seed.ts:128", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 project-manager-app/packages/db/prisma/seed.ts:128"}, "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-7b088e48ea6345a9", "name": "Dockerfile runs as root: project-manager-app/apps/vision-service/Dockerfile", "shortDescription": {"text": "Dockerfile runs as root: project-manager-app/apps/vision-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-f35ac44d03028729", "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-aa5acaa49eb8315b", "name": "Containers defined but no K8s/orchestration manifest found", "shortDescription": {"text": "Containers defined but no K8s/orchestration manifest found"}, "fullDescription": {"text": "Repo has Dockerfiles/compose but no Kubernetes/Nomad manifests. If the target deployment is K8s, the manifests may live in a separate ops repo."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e92e1f8669ae1c84", "name": "Insecure pattern 'node_child_process' in project-manager-app/tmp-semse-visible-smoke.mjs:2", "shortDescription": {"text": "Insecure pattern 'node_child_process' in project-manager-app/tmp-semse-visible-smoke.mjs:2"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-1dad084ee4593271", "name": "Insecure pattern 'node_child_process' in project-manager-app/tmp-semse-visible-smoke-prod.mjs:2", "shortDescription": {"text": "Insecure pattern 'node_child_process' in project-manager-app/tmp-semse-visible-smoke-prod.mjs:2"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a02da24805c2e5dc", "name": "Insecure pattern 'direct_innerhtml_assignment' in project-manager-app/app.js:362", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in project-manager-app/app.js: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-5df0812db5891754", "name": "Insecure pattern 'node_child_process' in project-manager-app/apps/api/src/modules/autonomy/autonomy.service.ts:2", "shortDescription": {"text": "Insecure pattern 'node_child_process' in project-manager-app/apps/api/src/modules/autonomy/autonomy.service.ts:2"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9f275c760689deea", "name": "Insecure pattern 'node_child_process' in project-manager-app/apps/api/src/modules/agents/technical-runtime.service.ts:2", "shortDescription": {"text": "Insecure pattern 'node_child_process' in project-manager-app/apps/api/src/modules/agents/technical-runtime.service.ts:2"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0ca1a4677d1cf4cf", "name": "Insecure pattern 'exec_used' in project-manager-app/apps/api/src/modules/graphify/graphify.service.ts:57", "shortDescription": {"text": "Insecure pattern 'exec_used' in project-manager-app/apps/api/src/modules/graphify/graphify.service.ts:57"}, "fullDescription": {"text": "Found a known-risky pattern (exec_used). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1bbe5ce751a37bb7", "name": "Insecure pattern 'node_child_process' in project-manager-app/apps/api/src/modules/graphify/graphify.service.ts:2", "shortDescription": {"text": "Insecure pattern 'node_child_process' in project-manager-app/apps/api/src/modules/graphify/graphify.service.ts:2"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d5741b86d9cb5483", "name": "Insecure pattern 'node_child_process' in project-manager-app/apps/api/src/modules/developer-runtime/developer-runtime.sh", "shortDescription": {"text": "Insecure pattern 'node_child_process' in project-manager-app/apps/api/src/modules/developer-runtime/developer-runtime.shell.service.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-e00fc7b184b5e5ab", "name": "Insecure pattern 'direct_innerhtml_assignment' in project-manager-app/apps/autonomy-server/src/server.mjs:128", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in project-manager-app/apps/autonomy-server/src/server.mjs:128"}, "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-74a689b985de9715", "name": "Insecure pattern 'cors_wildcard' in project-manager-app/apps/autonomy-server/src/server.mjs:46", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in project-manager-app/apps/autonomy-server/src/server.mjs:46"}, "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-e3ac5cee7e93d076", "name": "Insecure pattern 'node_child_process' in project-manager-app/apps/worker/src/modules/developer-runtime/runtime.executor.", "shortDescription": {"text": "Insecure pattern 'node_child_process' in project-manager-app/apps/worker/src/modules/developer-runtime/runtime.executor.mjs:2"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-11d4a25c3427d0de", "name": "Insecure pattern 'cors_wildcard' in project-manager-app/apps/vision-service/app/main.py:15", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in project-manager-app/apps/vision-service/app/main.py:15"}, "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-3738eec6d83fc943", "name": "Insecure pattern 'node_child_process' in project-manager-app/apps/web/scripts/railway-start.mjs:2", "shortDescription": {"text": "Insecure pattern 'node_child_process' in project-manager-app/apps/web/scripts/railway-start.mjs:2"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-441208efb7ed8e85", "name": "Possible secret in project-manager-app/apps/angular/src/app/features/auth/login.page.ts", "shortDescription": {"text": "Possible secret in project-manager-app/apps/angular/src/app/features/auth/login.page.ts"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-0f58d2c7008fd79d", "name": "Insecure pattern 'node_child_process' in project-manager-app/scripts/operacion-asistida-api-drill-runner.mjs:2", "shortDescription": {"text": "Insecure pattern 'node_child_process' in project-manager-app/scripts/operacion-asistida-api-drill-runner.mjs:2"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-794ef3c67ef55284", "name": "Insecure pattern 'node_child_process' in project-manager-app/scripts/pull-local-llm.mjs:4", "shortDescription": {"text": "Insecure pattern 'node_child_process' in project-manager-app/scripts/pull-local-llm.mjs:4"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-30a596a1e93cf60e", "name": "Insecure pattern 'node_child_process' in project-manager-app/scripts/smoke-browser-agent.mjs:2", "shortDescription": {"text": "Insecure pattern 'node_child_process' in project-manager-app/scripts/smoke-browser-agent.mjs:2"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-281818285892921a", "name": "Insecure pattern 'node_child_process' in project-manager-app/scripts/demo-web-runtime.mjs:1", "shortDescription": {"text": "Insecure pattern 'node_child_process' in project-manager-app/scripts/demo-web-runtime.mjs: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-df373318683cdf16", "name": "Insecure pattern 'node_child_process' in project-manager-app/scripts/start-local-llm.mjs:4", "shortDescription": {"text": "Insecure pattern 'node_child_process' in project-manager-app/scripts/start-local-llm.mjs:4"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-bf7148c552e4a8b7", "name": "Insecure pattern 'node_child_process' in project-manager-app/scripts/semse-health-check.mjs:25", "shortDescription": {"text": "Insecure pattern 'node_child_process' in project-manager-app/scripts/semse-health-check.mjs:25"}, "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-2f69bc0f1c62af64", "name": "Insecure pattern 'node_child_process' in project-manager-app/scripts/operacion-asistida-restore-multienv-runner.mjs:2", "shortDescription": {"text": "Insecure pattern 'node_child_process' in project-manager-app/scripts/operacion-asistida-restore-multienv-runner.mjs:2"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-560248b98beab2a1", "name": "Insecure pattern 'node_child_process' in project-manager-app/scripts/demo-smoke.mjs:1", "shortDescription": {"text": "Insecure pattern 'node_child_process' in project-manager-app/scripts/demo-smoke.mjs: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-1131ea54a0c6b674", "name": "Insecure pattern 'node_child_process' in project-manager-app/scripts/web-sprint15-smoke.mjs:1", "shortDescription": {"text": "Insecure pattern 'node_child_process' in project-manager-app/scripts/web-sprint15-smoke.mjs: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-699bc25bf8e4d318", "name": "Insecure pattern 'node_child_process' in project-manager-app/scripts/pre-migrate.mjs:15", "shortDescription": {"text": "Insecure pattern 'node_child_process' in project-manager-app/scripts/pre-migrate.mjs:15"}, "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-d33e6716c6a96975", "name": "Insecure pattern 'node_child_process' in project-manager-app/packages/autonomy/src/git.ts:1", "shortDescription": {"text": "Insecure pattern 'node_child_process' in project-manager-app/packages/autonomy/src/git.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-bee3a348ceab9c31", "name": "Insecure pattern 'node_child_process' in project-manager-app/packages/autonomy/src/validator.ts:2", "shortDescription": {"text": "Insecure pattern 'node_child_process' in project-manager-app/packages/autonomy/src/validator.ts:2"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4c8d7218b9e5cf83", "name": "Insecure pattern 'direct_innerhtml_assignment' in SEMSE Pro Tools v2/herramientas_html/semse_herramienta_roofing.html:20", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in SEMSE Pro Tools v2/herramientas_html/semse_herramienta_roofing.html:200"}, "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-5669ad031f14a8ac", "name": "Insecure pattern 'direct_innerhtml_assignment' in SEMSE Pro Tools v2/herramientas_html/semse_herramienta_hvac.html:200", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in SEMSE Pro Tools v2/herramientas_html/semse_herramienta_hvac.html:200"}, "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-67169dceb5117a84", "name": "Insecure pattern 'direct_innerhtml_assignment' in SEMSE Pro Tools v2/herramientas_html/semse_herramienta_pintura.html:20", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in SEMSE Pro Tools v2/herramientas_html/semse_herramienta_pintura.html:200"}, "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-6bd123c9b915052e", "name": "Insecure pattern 'direct_innerhtml_assignment' in SEMSE Pro Tools v2/herramientas_html/semse_pro_tools_suite.html:200", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in SEMSE Pro Tools v2/herramientas_html/semse_pro_tools_suite.html:200"}, "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-f5c98c7902efd22f", "name": "Insecure pattern 'direct_innerhtml_assignment' in SEMSE Pro Tools v2/herramientas_html/semse_herramienta_drywall.html:20", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in SEMSE Pro Tools v2/herramientas_html/semse_herramienta_drywall.html:200"}, "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-52770aab510dbde5", "name": "Insecure pattern 'direct_innerhtml_assignment' in SEMSE Pro Tools v2/herramientas_html/semse_herramienta_concreto.html:7", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in SEMSE Pro Tools v2/herramientas_html/semse_herramienta_concreto.html:79"}, "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-e7b9156c97661de4", "name": "Insecure pattern 'direct_innerhtml_assignment' in SEMSE Pro Tools v2/herramientas_html/semse_herramienta_cotizador_escro", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in SEMSE Pro Tools v2/herramientas_html/semse_herramienta_cotizador_escrow.html:200"}, "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-cff25bb3457a0277", "name": "Insecure pattern 'direct_innerhtml_assignment' in SEMSE Pro Tools v2/herramientas_html/semse_herramienta_pisos.html:200", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in SEMSE Pro Tools v2/herramientas_html/semse_herramienta_pisos.html:200"}, "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-2f7a57e9c9da91f5", "name": "Insecure pattern 'direct_innerhtml_assignment' in SEMSE Pro Tools v2/herramientas_html/semse_herramienta_electricista.ht", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in SEMSE Pro Tools v2/herramientas_html/semse_herramienta_electricista.html:193"}, "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-28b3f776c114fb75", "name": "Insecure pattern 'direct_innerhtml_assignment' in SEMSE Pro Tools v2/herramientas_html/semse_herramienta_carpinteria.htm", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in SEMSE Pro Tools v2/herramientas_html/semse_herramienta_carpinteria.html:37"}, "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-4a1c7db9326672df", "name": "Insecure pattern 'direct_innerhtml_assignment' in SEMSE Pro Tools v2/herramientas_html/semse_herramienta_inspeccion.html", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in SEMSE Pro Tools v2/herramientas_html/semse_herramienta_inspeccion.html:200"}, "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-9ada27e997913795", "name": "Insecure pattern 'direct_innerhtml_assignment' in SEMSE Pro Tools v2/herramientas_html/semse_herramienta_plomeria.html:2", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in SEMSE Pro Tools v2/herramientas_html/semse_herramienta_plomeria.html:200"}, "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-4d20512a9dc3ffc1", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@v6 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-770a65addddf1210", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@v6 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-27924aa79fa4a517", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@v6 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ed4f033c4b1ec65b", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@v6 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-46c644c6227e4d4a", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@v6 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1838a141491ce38c", "name": "GitHub Actions workflow grants broad write permissions", "shortDescription": {"text": "GitHub Actions workflow grants broad write permissions"}, "fullDescription": {"text": "CI tokens with write permissions increase blast radius when an action, dependency, or PR workflow is compromised. Prefer job-level least-privilege permissions."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-73a3b21b710b0c4a", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@v6 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d19fa9e3d128a1b0", "name": "Very large file: project-manager-app/apps/api/src/modules/agents/harnesses/project-copilot.harness.ts (1417 lines)", "shortDescription": {"text": "Very large file: project-manager-app/apps/api/src/modules/agents/harnesses/project-copilot.harness.ts (1417 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-f449403c352614c4", "name": "Very large file: project-manager-app/apps/api/src/modules/intake-operations-bridge/intake-operations-bridge.service.ts (", "shortDescription": {"text": "Very large file: project-manager-app/apps/api/src/modules/intake-operations-bridge/intake-operations-bridge.service.ts (1516 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-fedf5d30d3e3cdf2", "name": "Very large file: project-manager-app/apps/web/app/semse-api.ts (2495 lines)", "shortDescription": {"text": "Very large file: project-manager-app/apps/web/app/semse-api.ts (2495 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-76d30060f1e5bc8d", "name": "Very large file: project-manager-app/apps/web/app/components/disputes/DisputeResolutionWorkspace.tsx (1170 lines)", "shortDescription": {"text": "Very large file: project-manager-app/apps/web/app/components/disputes/DisputeResolutionWorkspace.tsx (1170 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-caa27de3857f57ea", "name": "Very large file: project-manager-app/apps/web/app/(app)/client/projects/[projectId]/copilot/page.tsx (1790 lines)", "shortDescription": {"text": "Very large file: project-manager-app/apps/web/app/(app)/client/projects/[projectId]/copilot/page.tsx (1790 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-7d582c19c544220e", "name": "Very large file: project-manager-app/apps/web/app/(app)/client/jobs/[jobId]/page.tsx (1215 lines)", "shortDescription": {"text": "Very large file: project-manager-app/apps/web/app/(app)/client/jobs/[jobId]/page.tsx (1215 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-97771ad38fedc431", "name": "Very large file: project-manager-app/apps/web/app/(app)/worker/travel/[travelId]/page.tsx (1304 lines)", "shortDescription": {"text": "Very large file: project-manager-app/apps/web/app/(app)/worker/travel/[travelId]/page.tsx (1304 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-75a314a260b8b01f", "name": "Very large file: project-manager-app/apps/web/app/(app)/admin/ops/page.tsx (1421 lines)", "shortDescription": {"text": "Very large file: project-manager-app/apps/web/app/(app)/admin/ops/page.tsx (1421 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-abb69035e4b36ffa", "name": "Very large file: project-manager-app/apps/web/app/(app)/admin/developer-runtime/page.tsx (1104 lines)", "shortDescription": {"text": "Very large file: project-manager-app/apps/web/app/(app)/admin/developer-runtime/page.tsx (1104 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-4df039ce19c48f6b", "name": "Very large file: project-manager-app/apps/web/app/(app)/tools/electrical/electrical-tool-client.tsx (1925 lines)", "shortDescription": {"text": "Very large file: project-manager-app/apps/web/app/(app)/tools/electrical/electrical-tool-client.tsx (1925 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-72a0ccce57398b96", "name": "Very large file: project-manager-app/apps/web/lib/language-context.tsx (1343 lines)", "shortDescription": {"text": "Very large file: project-manager-app/apps/web/lib/language-context.tsx (1343 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": "186 tests / 1357 src (ratio 0.14)."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-141b30a41e03817b", "name": "No license file detected", "shortDescription": {"text": "No license file detected"}, "fullDescription": {"text": "No LICENSE/COPYING/NOTICE file was found. Generated repositories often omit licensing, which blocks reuse and automated intake."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ea8cc6adf02a1ccf", "name": "Node manifest has dependencies but no lockfile: project-manager-app/apps/api/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: project-manager-app/apps/api/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-fcec851976861c29", "name": "Node manifest has dependencies but no lockfile: project-manager-app/apps/autonomy-server/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: project-manager-app/apps/autonomy-server/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-648d68cc83a5fca7", "name": "Node manifest has dependencies but no lockfile: project-manager-app/apps/worker/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: project-manager-app/apps/worker/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b52a468b187f2dae", "name": "Node manifest has dependencies but no lockfile: project-manager-app/apps/web/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: project-manager-app/apps/web/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6f0c26175ecf0e4d", "name": "Node manifest has dependencies but no lockfile: project-manager-app/apps/angular/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: project-manager-app/apps/angular/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-7e1abba01524a75b", "name": "Node manifest has dependencies but no lockfile: project-manager-app/packages/auth/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: project-manager-app/packages/auth/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-14b5526b691a2826", "name": "Node manifest has dependencies but no lockfile: project-manager-app/packages/autonomy/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: project-manager-app/packages/autonomy/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-319b81649c5a2a7b", "name": "Node manifest has dependencies but no lockfile: project-manager-app/packages/shared/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: project-manager-app/packages/shared/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-db6e9204f4a7dee3", "name": "Node manifest has dependencies but no lockfile: project-manager-app/packages/ui/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: project-manager-app/packages/ui/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e99a1b153b8737ee", "name": "Node manifest has dependencies but no lockfile: project-manager-app/packages/agents/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: project-manager-app/packages/agents/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-3543b70ad5112ce2", "name": "Node manifest has dependencies but no lockfile: project-manager-app/packages/tools/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: project-manager-app/packages/tools/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-5f2ed49e1734a76c", "name": "Node manifest has dependencies but no lockfile: project-manager-app/packages/db/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: project-manager-app/packages/db/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-5d95db954bdf1ef2", "name": "Node manifest has dependencies but no lockfile: project-manager-app/packages/schemas/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: project-manager-app/packages/schemas/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a100c2638c4a43df", "name": "Node manifest has dependencies but no lockfile: project-manager-app/packages/knowledge/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: project-manager-app/packages/knowledge/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 520 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 292 placeholder/mock markers across 126 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-b9088664ace7f748", "name": "Composite production-readiness gap", "shortDescription": {"text": "Composite production-readiness gap"}, "fullDescription": {"text": "Multiple low-cost hardening controls are missing together: license, lockfile. Opus verification showed these co-occurring gaps are a better readiness signal than reading each flag in isolation."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-749d4bc1bd66df5f", "name": "Agent instructions exist but release-hardening basics are missing", "shortDescription": {"text": "Agent instructions exist but release-hardening basics are missing"}, "fullDescription": {"text": "AI-coder instruction files were found, but the repo is missing license, lockfile. Treat this as a contract gap: the agent is guided, but the generated output is not yet guarded by the controls that make it repeatable."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ea8f3013f588db25", "name": "Shallow git history limits provenance confidence", "shortDescription": {"text": "Shallow git history limits provenance confidence"}, "fullDescription": {"text": "The repository is a shallow clone. Origin/evolution analysis cannot distinguish fresh generation, imported legacy code, or long-lived human code with high confidence."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8424db9c75e04ba4", "name": "Very short observed git history", "shortDescription": {"text": "Very short observed git history"}, "fullDescription": {"text": "The repo has multiple source files but two or fewer visible commits. This is not a failure by itself, but it lowers confidence in evolution-based diagnosis."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-bc28ca33498500f7", "name": "Legacy-named symbol `isLegacy` in project-manager-app/logic.mjs:184", "shortDescription": {"text": "Legacy-named symbol `isLegacy` in project-manager-app/logic.mjs:184"}, "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-49c97b120efe6df2", "name": "Legacy-named symbol `project_manager_projects_v2` in project-manager-app/app.js:19", "shortDescription": {"text": "Legacy-named symbol `project_manager_projects_v2` in project-manager-app/app.js:19"}, "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-52ecb81f8ab1d8e4", "name": "Legacy-named symbol `isLegacy` in project-manager-app/tests/unit/logic.test.mjs:394", "shortDescription": {"text": "Legacy-named symbol `isLegacy` in project-manager-app/tests/unit/logic.test.mjs:394"}, "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-585094048d6bea8a", "name": "Legacy-named symbol `nodesWithLegacy` in project-manager-app/tests/unit/navigation-registry.test.ts:84", "shortDescription": {"text": "Legacy-named symbol `nodesWithLegacy` in project-manager-app/tests/unit/navigation-registry.test.ts:84"}, "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-acf534bb5146cb88", "name": "Legacy-named symbol `promoteApprovedPlanToLegacy` in project-manager-app/apps/api/test/buildops.controller.test.ts:77", "shortDescription": {"text": "Legacy-named symbol `promoteApprovedPlanToLegacy` in project-manager-app/apps/api/test/buildops.controller.test.ts:77"}, "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-6deb464bf891bf26", "name": "Legacy-named symbol `promoteApprovedPlanToLegacy` in project-manager-app/apps/api/test/buildops-plan-rerun-integration.t", "shortDescription": {"text": "Legacy-named symbol `promoteApprovedPlanToLegacy` in project-manager-app/apps/api/test/buildops-plan-rerun-integration.test.ts:649"}, "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-e1eb5907df4a9b8d", "name": "Legacy-named symbol `promoted_to_legacy` in project-manager-app/apps/api/test/fsm-lifecycles.test.ts:36", "shortDescription": {"text": "Legacy-named symbol `promoted_to_legacy` in project-manager-app/apps/api/test/fsm-lifecycles.test.ts:36"}, "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-1ea32a67b9a61d84", "name": "Legacy-named symbol `tenant_legacy` in project-manager-app/apps/api/test/buildops-legacy-promotion-integration.test.ts:1", "shortDescription": {"text": "Legacy-named symbol `tenant_legacy` in project-manager-app/apps/api/test/buildops-legacy-promotion-integration.test.ts:136"}, "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-a0ad478887df1ea5", "name": "Legacy-named symbol `promoteApprovedPlanToLegacy` in project-manager-app/apps/api/test/buildops-legacy-promotion.service", "shortDescription": {"text": "Legacy-named symbol `promoteApprovedPlanToLegacy` in project-manager-app/apps/api/test/buildops-legacy-promotion.service.test.ts:213"}, "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-093116e40f7d35c0", "name": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/apps/api/src/modules/communications/providers/whatsapp", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/apps/api/src/modules/communications/providers/whatsapp-cloud.adapter.ts:163"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-274c67bbc935889f", "name": "Legacy-named symbol `promoteApprovedPlanToLegacy` in project-manager-app/apps/api/src/modules/buildops/buildops-legacy-p", "shortDescription": {"text": "Legacy-named symbol `promoteApprovedPlanToLegacy` in project-manager-app/apps/api/src/modules/buildops/buildops-legacy-promotion.service.ts:85"}, "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-6b993715a98e7985", "name": "Legacy-named symbol `promoteLegacy` in project-manager-app/apps/api/src/modules/buildops/buildops.controller.ts:307", "shortDescription": {"text": "Legacy-named symbol `promoteLegacy` in project-manager-app/apps/api/src/modules/buildops/buildops.controller.ts:307"}, "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-3e8e18db9938dc88", "name": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/apps/api/src/modules/ai-models/providers/deepseek.prov", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/apps/api/src/modules/ai-models/providers/deepseek.provider.ts:30"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ae7537122bb79ea2", "name": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/apps/api/src/modules/ai-models/providers/kimi.provider", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/apps/api/src/modules/ai-models/providers/kimi.provider.ts:30"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-958c8e591e78513e", "name": "Commented-code block (5 lines) in project-manager-app/apps/api/src/modules/change-orders/change-orders.service.ts:37", "shortDescription": {"text": "Commented-code block (5 lines) in project-manager-app/apps/api/src/modules/change-orders/change-orders.service.ts:37"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e2ce01cfbf4269e8", "name": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/apps/autonomy-server/src/server.mjs:126", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/apps/autonomy-server/src/server.mjs: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-0c83e78bd73ad5cc", "name": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/apps/worker/src/main.mjs:514", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/apps/worker/src/main.mjs: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-bcfed13cde8d3513", "name": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/apps/web/components/semse/TrustPassportCard.tsx:63", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/apps/web/components/semse/TrustPassportCard.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-44ed63506e211fb6", "name": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/apps/web/components/semse/ObserverPanel.tsx:133", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/apps/web/components/semse/ObserverPanel.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-8be4b424f356fa09", "name": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/apps/web/components/milestones/EvidenceItemDetailPanel", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/apps/web/components/milestones/EvidenceItemDetailPanel.tsx:145"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-da845a33596c438d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/apps/web/components/milestones/MilestoneEvidenceUpload", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/apps/web/components/milestones/MilestoneEvidenceUploader.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-490b4c7670878eea", "name": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/apps/web/components/landing/landing-intake.tsx:180", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/apps/web/components/landing/landing-intake.tsx:180"}, "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-61bc72743e37866f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/apps/web/components/tools/ToolAIPanel.tsx:62", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/apps/web/components/tools/ToolAIPanel.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-e371b4f20c2d87f9", "name": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/apps/web/components/change-orders/ChangeOrderImpactCar", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/apps/web/components/change-orders/ChangeOrderImpactCard.tsx:64"}, "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-50d831ca300777d0", "name": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/apps/web/app/semse-api.ts:112", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/apps/web/app/semse-api.ts:112"}, "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-dc9186bddbc010ff", "name": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/apps/web/app/anatomy/anatomy-client.tsx:30", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/apps/web/app/anatomy/anatomy-client.tsx:30"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-5601bb3201534cbf", "name": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/apps/web/app/api/semse/_server.ts:267", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/apps/web/app/api/semse/_server.ts:267"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-42f59e688118da49", "name": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/apps/web/app/api/semse/ops/backfill-embeddings/route.t", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/apps/web/app/api/semse/ops/backfill-embeddings/route.ts:17"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-29dba5c9a967c090", "name": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/apps/web/app/api/semse/cortex/context/stream/route.ts:", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/apps/web/app/api/semse/cortex/context/stream/route.ts:15"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d73bfc4b99884dc1", "name": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/apps/web/app/api/semse/uploads/files/[...key]/route.ts", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/apps/web/app/api/semse/uploads/files/[...key]/route.ts:26"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4da137961724e141", "name": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/apps/web/app/api/semse/vision/route.ts:17", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/apps/web/app/api/semse/vision/route.ts:17"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-14a1c934de1201d0", "name": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/apps/web/app/api/semse/finance/invoices/[id]/pdf/route", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/apps/web/app/api/semse/finance/invoices/[id]/pdf/route.ts:17"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c020e108534639d2", "name": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/apps/web/app/api/semse/my-bids/route.ts:14", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/apps/web/app/api/semse/my-bids/route.ts:14"}, "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-7359183b1d518a2d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/apps/web/app/api/semse/agents/delegations/stream/route", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/apps/web/app/api/semse/agents/delegations/stream/route.ts:15"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-32a85e9334eaf34b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/apps/web/app/api/semse/agents/evidence-checklist/route", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/apps/web/app/api/semse/agents/evidence-checklist/route.ts:12"}, "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-49c55466070cf485", "name": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/apps/web/app/api/semse/tools/painting/research/route.t", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/apps/web/app/api/semse/tools/painting/research/route.ts:121"}, "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-46fa3297a0a067ee", "name": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/apps/web/app/api/semse/tools/electrical/research/route", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/apps/web/app/api/semse/tools/electrical/research/route.ts:122"}, "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-9c563e9088ff27d0", "name": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/apps/web/app/api/semse/public/intake/_shared.ts:48", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/apps/web/app/api/semse/public/intake/_shared.ts: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-5f0d9f24bbdb2072", "name": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/apps/web/app/api/semse/public/intake/[id]/images/route", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/apps/web/app/api/semse/public/intake/[id]/images/route.ts:24"}, "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-fe27cc1bf4367bb3", "name": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/apps/web/app/api/semse/travel/_google.ts:60", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/apps/web/app/api/semse/travel/_google.ts:60"}, "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-12ae74c6ac5f5837", "name": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/apps/web/app/repo-map/repo-map-client.tsx:31", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/apps/web/app/repo-map/repo-map-client.tsx:31"}, "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-15da4b201962af5e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/apps/web/app/lib/buildops-api.ts:122", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/apps/web/app/lib/buildops-api.ts:122"}, "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-97811eaf37fb31c8", "name": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/apps/web/app/lib/semse-tools-api.ts:257", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/apps/web/app/lib/semse-tools-api.ts:257"}, "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-7064b2ffe412bec9", "name": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/apps/web/app/field-ops/page.tsx:91", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/apps/web/app/field-ops/page.tsx:91"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f11e1b61b52bfccc", "name": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/apps/web/app/(app)/client/marketplace/page.tsx:226", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/apps/web/app/(app)/client/marketplace/page.tsx:226"}, "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-b15498b7da8d5457", "name": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/apps/web/app/(app)/client/dashboard/page.tsx:53", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/apps/web/app/(app)/client/dashboard/page.tsx:53"}, "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-f67492f2d9076a71", "name": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/apps/web/app/(app)/client/jobs/new/page.tsx:179", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/apps/web/app/(app)/client/jobs/new/page.tsx:179"}, "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-1011e7ce16e4222b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/apps/web/app/(app)/worker/field-ops/page.tsx:93", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/apps/web/app/(app)/worker/field-ops/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-edd38001effc1560", "name": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/apps/web/app/(app)/admin/prometeo/page.tsx:49", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/apps/web/app/(app)/admin/prometeo/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-baaa6fb8a41c063f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/apps/web/app/(app)/admin/marketplace/page.tsx:79", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/apps/web/app/(app)/admin/marketplace/page.tsx:79"}, "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-636a92c57e972a77", "name": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/apps/web/app/(app)/admin/algorithm-engine/page.tsx:78", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/apps/web/app/(app)/admin/algorithm-engine/page.tsx:78"}, "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-e53840ab742d4137", "name": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/apps/web/app/(app)/admin/contractors/page.tsx:99", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/apps/web/app/(app)/admin/contractors/page.tsx:99"}, "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-34b35733ac985646", "name": "Legacy-named symbol `battery_backup` in project-manager-app/apps/web/app/(app)/tools/electrical-subsystems/electrical-su", "shortDescription": {"text": "Legacy-named symbol `battery_backup` in project-manager-app/apps/web/app/(app)/tools/electrical-subsystems/electrical-subsystems-tool-client.tsx:11"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2c553b4524712974", "name": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/apps/web/app/runtime-map/runtime-map-client.tsx:40", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/apps/web/app/runtime-map/runtime-map-client.tsx:40"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-8bff7e12f4028ee7", "name": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/apps/web/app/knowledge/knowledge-client.tsx:20", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/apps/web/app/knowledge/knowledge-client.tsx:20"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-65fc810ce019e371", "name": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/apps/web/hooks/use-intake.ts:141", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/apps/web/hooks/use-intake.ts:141"}, "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-475847b8af0f85a0", "name": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/apps/web/hooks/usePushNotifications.ts:44", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/apps/web/hooks/usePushNotifications.ts:44"}, "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-c670652b3acaa20a", "name": "Legacy-named symbol `review__copy` in project-manager-app/apps/angular/src/app/features/client/client-job-builder.page.t", "shortDescription": {"text": "Legacy-named symbol `review__copy` in project-manager-app/apps/angular/src/app/features/client/client-job-builder.page.ts:194"}, "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-5c523ed541124a41", "name": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/scripts/api-contracts-smoke.mjs:86", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/scripts/api-contracts-smoke.mjs:86"}, "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-3071640c1c8ad3b2", "name": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/scripts/api-operacion-asistida-smoke.mjs:100", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/scripts/api-operacion-asistida-smoke.mjs:100"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-07e1768acafd3cd6", "name": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/scripts/local-llm-smoke.mjs:18", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/scripts/local-llm-smoke.mjs:18"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-7465fe70c35323c3", "name": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/scripts/smart-intake-e2e-smoke.mjs:36", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/scripts/smart-intake-e2e-smoke.mjs:36"}, "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-0ae5bbd0f2a91f0d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/scripts/api-copilot-actions-smoke.mjs:15", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/scripts/api-copilot-actions-smoke.mjs:15"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c71b5e5386e0745f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/scripts/api-marketplace-smoke.mjs:74", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/scripts/api-marketplace-smoke.mjs:74"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-19802fd6e8a5aca3", "name": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/scripts/smoke-browser-agent-remote.mjs:46", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/scripts/smoke-browser-agent-remote.mjs:46"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-115c1b1b261bc90f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/scripts/api-travel-smoke.mjs:22", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/scripts/api-travel-smoke.mjs:22"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a0e98a6ddb47a2be", "name": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/scripts/prometeo-rag-embeddings-smoke.mjs:33", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/scripts/prometeo-rag-embeddings-smoke.mjs:33"}, "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-dd1ad4972748b84b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/scripts/api-autonomy-staged-smoke.mjs:107", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/scripts/api-autonomy-staged-smoke.mjs:107"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4cf26988f204193e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/scripts/smoke-browser-agent.mjs:213", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/scripts/smoke-browser-agent.mjs:213"}, "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-28a24684b7bcc1f3", "name": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/scripts/prometeo-backfill-embeddings.mjs:33", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/scripts/prometeo-backfill-embeddings.mjs:33"}, "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-000f9acd6336e0af", "name": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/scripts/multi-category-intake-smoke.mjs:141", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/scripts/multi-category-intake-smoke.mjs:141"}, "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-85718916b98582f1", "name": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/scripts/operacion-asistida-bcp-drill.mjs:317", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/scripts/operacion-asistida-bcp-drill.mjs:317"}, "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-fb9808779bd5afe3", "name": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/scripts/api-integration.mjs:271", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/scripts/api-integration.mjs:271"}, "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-9e305aac7c1cd059", "name": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/scripts/api-autonomy-local-llm-smoke.mjs:128", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/scripts/api-autonomy-local-llm-smoke.mjs:128"}, "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-2b9013d3a1012b93", "name": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/scripts/api-disputes-smoke.mjs:112", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/scripts/api-disputes-smoke.mjs:112"}, "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-cba41562b691a086", "name": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/scripts/buildops-legacy-promotion-smoke.mjs:46", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/scripts/buildops-legacy-promotion-smoke.mjs:46"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-00dd65780acb8d17", "name": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/scripts/api-projects-smoke.mjs:157", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/scripts/api-projects-smoke.mjs:157"}, "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-3bfd11735615c4a0", "name": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/scripts/api-agents-smoke.mjs:96", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/scripts/api-agents-smoke.mjs:96"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b0993b24939ae2e8", "name": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/scripts/api-milestones-smoke.mjs:90", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/scripts/api-milestones-smoke.mjs:90"}, "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-4e371f3144fcdf9e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/scripts/buildops-rerun-bridge-smoke.mjs:64", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/scripts/buildops-rerun-bridge-smoke.mjs:64"}, "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-b1f2e0b1126b932a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/scripts/api-domain-events-smoke.mjs:147", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/scripts/api-domain-events-smoke.mjs:147"}, "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-0dd015576f84f4a2", "name": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/scripts/api-persistence-smoke.mjs:43", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/scripts/api-persistence-smoke.mjs:43"}, "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-82c60272c17b3f69", "name": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/scripts/web-travel-bff-smoke.mjs:8", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/scripts/web-travel-bff-smoke.mjs:8"}, "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-2736782877eb6f39", "name": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/scripts/api-reservations-smoke.mjs:80", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/scripts/api-reservations-smoke.mjs:80"}, "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-b98dc63f1f446284", "name": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/scripts/api-escrow-contract-smoke.mjs:120", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/scripts/api-escrow-contract-smoke.mjs:120"}, "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-4f61e73e75eef799", "name": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/scripts/intake-operations-bridge-smoke.mjs:35", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/scripts/intake-operations-bridge-smoke.mjs:35"}, "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-8eb796185b9538cb", "name": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/scripts/demo-smoke.mjs:29", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/scripts/demo-smoke.mjs:29"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d9bbf5a1887cffce", "name": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/scripts/api-evidence-smoke.mjs:95", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/scripts/api-evidence-smoke.mjs: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-c5f84bf4361bebf6", "name": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/packages/autonomy/src/index.ts:102", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/packages/autonomy/src/index.ts:102"}, "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-4da2a52ef12d515e", "name": "Legacy-named symbol `agt_pricing_v1` in project-manager-app/packages/agents/src/governance.ts:311", "shortDescription": {"text": "Legacy-named symbol `agt_pricing_v1` in project-manager-app/packages/agents/src/governance.ts:311"}, "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-efe5ca4050f86428", "name": "Legacy-named symbol `remove_old` in project-manager-app/packages/tools/src/trades/flooring.engine.ts:92", "shortDescription": {"text": "Legacy-named symbol `remove_old` in project-manager-app/packages/tools/src/trades/flooring.engine.ts:92"}, "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-2153571a4d5dd99f", "name": "78 env vars used in code but missing from .env.example", "shortDescription": {"text": "78 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `API_URL`, `AUTONOMY_PORT`, `BRAVE_SEARCH_API_KEY`, `CI`, `DEBUG_HOME_URL`, `DEBUG_JOB_URL`, `EMBEDDINGS_BATCH_SIZE`, `EMBEDDINGS_DIMENSIONS` + 70 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:\nutils/logging.py:debug, utils/logging.py:debug\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-17ccfdcd19cd325a", "name": "FastAPI POST `analyze_evidence_endpoint` without auth dependency \u2014 project-manager-app/apps/vision-service/app/routes/ev", "shortDescription": {"text": "FastAPI POST `analyze_evidence_endpoint` without auth dependency \u2014 project-manager-app/apps/vision-service/app/routes/evidence.py:59"}, "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-b3e5a11936d416c2", "name": "FastAPI POST `compare_before_after_endpoint` without auth dependency \u2014 project-manager-app/apps/vision-service/app/route", "shortDescription": {"text": "FastAPI POST `compare_before_after_endpoint` without auth dependency \u2014 project-manager-app/apps/vision-service/app/routes/evidence.py:159"}, "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-ba581e8a7acd3bd1", "name": "FastAPI POST `check_duplicate_endpoint` without auth dependency \u2014 project-manager-app/apps/vision-service/app/routes/evi", "shortDescription": {"text": "FastAPI POST `check_duplicate_endpoint` without auth dependency \u2014 project-manager-app/apps/vision-service/app/routes/evidence.py:173"}, "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-a0335dfb72cf41c4", "name": "FastAPI POST `blueprint_endpoint` without auth dependency \u2014 project-manager-app/apps/vision-service/app/routes/evidence.", "shortDescription": {"text": "FastAPI POST `blueprint_endpoint` without auth dependency \u2014 project-manager-app/apps/vision-service/app/routes/evidence.py:186"}, "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-677d5223da1eb171", "name": "FastAPI POST `perspective_correct_endpoint` without auth dependency \u2014 project-manager-app/apps/vision-service/app/routes", "shortDescription": {"text": "FastAPI POST `perspective_correct_endpoint` without auth dependency \u2014 project-manager-app/apps/vision-service/app/routes/evidence.py:197"}, "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-f4977cb5b3f9dbe9", "name": "FastAPI POST `document_binarize_endpoint` without auth dependency \u2014 project-manager-app/apps/vision-service/app/routes/e", "shortDescription": {"text": "FastAPI POST `document_binarize_endpoint` without auth dependency \u2014 project-manager-app/apps/vision-service/app/routes/evidence.py:214"}, "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-54379b87b0b5d021", "name": "FastAPI POST `estimate_area_endpoint` without auth dependency \u2014 project-manager-app/apps/vision-service/app/routes/evide", "shortDescription": {"text": "FastAPI POST `estimate_area_endpoint` without auth dependency \u2014 project-manager-app/apps/vision-service/app/routes/evidence.py:223"}, "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-b5022c78a0f5eb03", "name": "FastAPI POST `check_consistency_endpoint` without auth dependency \u2014 project-manager-app/apps/vision-service/app/routes/e", "shortDescription": {"text": "FastAPI POST `check_consistency_endpoint` without auth dependency \u2014 project-manager-app/apps/vision-service/app/routes/evidence.py:233"}, "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-ff46c0ec0bea2d3b", "name": "FastAPI POST `progress_timeline_endpoint` without auth dependency \u2014 project-manager-app/apps/vision-service/app/routes/e", "shortDescription": {"text": "FastAPI POST `progress_timeline_endpoint` without auth dependency \u2014 project-manager-app/apps/vision-service/app/routes/evidence.py:243"}, "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-eeb86d7d5764001f", "name": "FastAPI POST `safety_check_endpoint` without auth dependency \u2014 project-manager-app/apps/vision-service/app/routes/eviden", "shortDescription": {"text": "FastAPI POST `safety_check_endpoint` without auth dependency \u2014 project-manager-app/apps/vision-service/app/routes/evidence.py:262"}, "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-c23ab1e507b71440", "name": "FastAPI POST `match_reference_endpoint` without auth dependency \u2014 project-manager-app/apps/vision-service/app/routes/evi", "shortDescription": {"text": "FastAPI POST `match_reference_endpoint` without auth dependency \u2014 project-manager-app/apps/vision-service/app/routes/evidence.py:268"}, "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-4f93124b7a1a1e2d", "name": "FastAPI POST `detect_trade_endpoint` without auth dependency \u2014 project-manager-app/apps/vision-service/app/routes/eviden", "shortDescription": {"text": "FastAPI POST `detect_trade_endpoint` without auth dependency \u2014 project-manager-app/apps/vision-service/app/routes/evidence.py:275"}, "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-b9bfea72c9780087", "name": "FastAPI POST `batch_analyze_endpoint` without auth dependency \u2014 project-manager-app/apps/vision-service/app/routes/evide", "shortDescription": {"text": "FastAPI POST `batch_analyze_endpoint` without auth dependency \u2014 project-manager-app/apps/vision-service/app/routes/evidence.py:295"}, "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-953c16770c88d061", "name": "Dangling fetch: POST /api/semse/tracker/bootstrap (project-manager-app/tests/e2e-semse/worker-tracker.spec.js:21)", "shortDescription": {"text": "Dangling fetch: POST /api/semse/tracker/bootstrap (project-manager-app/tests/e2e-semse/worker-tracker.spec.js:21)"}, "fullDescription": {"text": "`project-manager-app/tests/e2e-semse/worker-tracker.spec.js:21` calls `POST /api/semse/tracker/bootstrap` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/tracker/bootstrap`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6aa7a4744e083d43", "name": "Dangling fetch: GET /api/provider (project-manager-app/apps/autonomy-server/src/server.mjs:119)", "shortDescription": {"text": "Dangling fetch: GET /api/provider (project-manager-app/apps/autonomy-server/src/server.mjs:119)"}, "fullDescription": {"text": "`project-manager-app/apps/autonomy-server/src/server.mjs:119` calls `GET /api/provider` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/provider`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9d1d1f219d0350b6", "name": "Dangling fetch: GET /api/runs (project-manager-app/apps/autonomy-server/src/server.mjs:126)", "shortDescription": {"text": "Dangling fetch: GET /api/runs (project-manager-app/apps/autonomy-server/src/server.mjs:126)"}, "fullDescription": {"text": "`project-manager-app/apps/autonomy-server/src/server.mjs:126` calls `GET /api/runs` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/runs`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ceff3c830374893b", "name": "Dangling fetch: POST /api/run (project-manager-app/apps/autonomy-server/src/server.mjs:146)", "shortDescription": {"text": "Dangling fetch: POST /api/run (project-manager-app/apps/autonomy-server/src/server.mjs:146)"}, "fullDescription": {"text": "`project-manager-app/apps/autonomy-server/src/server.mjs:146` calls `POST /api/run` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/run`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b5a24196b43aed7d", "name": "Dangling fetch: POST https://api.openai.com/v1/embeddings (project-manager-app/scripts/prometeo-backfill-embeddings.mjs:", "shortDescription": {"text": "Dangling fetch: POST https://api.openai.com/v1/embeddings (project-manager-app/scripts/prometeo-backfill-embeddings.mjs:33)"}, "fullDescription": {"text": "`project-manager-app/scripts/prometeo-backfill-embeddings.mjs:33` calls `POST https://api.openai.com/v1/embeddings` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.openai.com/v1/embeddings`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3fc89afc491727ce", "name": "Dangling fetch: POST https://api.openai.com/v1/embeddings (project-manager-app/apps/api/src/modules/prometeo/embedding.s", "shortDescription": {"text": "Dangling fetch: POST https://api.openai.com/v1/embeddings (project-manager-app/apps/api/src/modules/prometeo/embedding.service.ts:121)"}, "fullDescription": {"text": "`project-manager-app/apps/api/src/modules/prometeo/embedding.service.ts:121` calls `POST https://api.openai.com/v1/embeddings` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.openai.com/v1/embeddings`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-cfcd109e7944605c", "name": "Dangling fetch: POST https://graph.facebook.com/${version}/${phoneNumberId}/messages (project-manager-app/apps/api/src/m", "shortDescription": {"text": "Dangling fetch: POST https://graph.facebook.com/${version}/${phoneNumberId}/messages (project-manager-app/apps/api/src/modules/communications/providers/whatsapp-cloud.adapter.ts:163)"}, "fullDescription": {"text": "`project-manager-app/apps/api/src/modules/communications/providers/whatsapp-cloud.adapter.ts:163` calls `POST https://graph.facebook.com/${version}/${phoneNumberId}/messages` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/graph.facebook.com/<p>/<p>/messages`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-05f3547c1fb663ef", "name": "Dangling fetch: GET /api/semse/${moduleSlug} (project-manager-app/apps/api/src/modules/ops/apply-engine.service.ts:93)", "shortDescription": {"text": "Dangling fetch: GET /api/semse/${moduleSlug} (project-manager-app/apps/api/src/modules/ops/apply-engine.service.ts:93)"}, "fullDescription": {"text": "`project-manager-app/apps/api/src/modules/ops/apply-engine.service.ts:93` calls `GET /api/semse/${moduleSlug}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/<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-60a53b4d100bb5ff", "name": "Dangling fetch: POST /api/semse/buildops/projects/${projectId}/rag-query (project-manager-app/apps/web/components/buildo", "shortDescription": {"text": "Dangling fetch: POST /api/semse/buildops/projects/${projectId}/rag-query (project-manager-app/apps/web/components/buildops/OperationalRagQueryPanel.tsx:46)"}, "fullDescription": {"text": "`project-manager-app/apps/web/components/buildops/OperationalRagQueryPanel.tsx:46` calls `POST /api/semse/buildops/projects/${projectId}/rag-query` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/buildops/projects/<p>/rag-query`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b546e85853834974", "name": "Dangling fetch: GET /api/semse/buildops/projects/${projectId}/health (project-manager-app/apps/web/components/buildops/B", "shortDescription": {"text": "Dangling fetch: GET /api/semse/buildops/projects/${projectId}/health (project-manager-app/apps/web/components/buildops/BuildOpsProjectHealthPanel.tsx:43)"}, "fullDescription": {"text": "`project-manager-app/apps/web/components/buildops/BuildOpsProjectHealthPanel.tsx:43` calls `GET /api/semse/buildops/projects/${projectId}/health` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/buildops/projects/<p>/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-60c8f5b91f942fb9", "name": "Dangling fetch: GET /api/semse/worker/evidence-summary (project-manager-app/apps/web/components/semse/WorkerEvidenceSumm", "shortDescription": {"text": "Dangling fetch: GET /api/semse/worker/evidence-summary (project-manager-app/apps/web/components/semse/WorkerEvidenceSummary.tsx:15)"}, "fullDescription": {"text": "`project-manager-app/apps/web/components/semse/WorkerEvidenceSummary.tsx:15` calls `GET /api/semse/worker/evidence-summary` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/worker/evidence-summary`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-87c467064f7c70e7", "name": "Dangling fetch: POST /api/semse/agents/plan (project-manager-app/apps/web/components/semse/BuildOpsPlanCard.tsx:30)", "shortDescription": {"text": "Dangling fetch: POST /api/semse/agents/plan (project-manager-app/apps/web/components/semse/BuildOpsPlanCard.tsx:30)"}, "fullDescription": {"text": "`project-manager-app/apps/web/components/semse/BuildOpsPlanCard.tsx:30` calls `POST /api/semse/agents/plan` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/agents/plan`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b1e7abdc2792aec1", "name": "Dangling fetch: POST /api/semse/agents/payment-readiness (project-manager-app/apps/web/components/semse/CrowdDecisionBad", "shortDescription": {"text": "Dangling fetch: POST /api/semse/agents/payment-readiness (project-manager-app/apps/web/components/semse/CrowdDecisionBadge.tsx:30)"}, "fullDescription": {"text": "`project-manager-app/apps/web/components/semse/CrowdDecisionBadge.tsx:30` calls `POST /api/semse/agents/payment-readiness` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/agents/payment-readiness`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0f59461e6b03fc33", "name": "Dangling fetch: POST /api/semse/ops/apply (project-manager-app/apps/web/components/semse/SimulationPanel.tsx:76)", "shortDescription": {"text": "Dangling fetch: POST /api/semse/ops/apply (project-manager-app/apps/web/components/semse/SimulationPanel.tsx:76)"}, "fullDescription": {"text": "`project-manager-app/apps/web/components/semse/SimulationPanel.tsx:76` calls `POST /api/semse/ops/apply` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/ops/apply`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2cecdeae56b0d447", "name": "Dangling fetch: GET /api/semse/ops/simulation?limit=6 (project-manager-app/apps/web/components/semse/SimulationPanel.tsx", "shortDescription": {"text": "Dangling fetch: GET /api/semse/ops/simulation?limit=6 (project-manager-app/apps/web/components/semse/SimulationPanel.tsx:222)"}, "fullDescription": {"text": "`project-manager-app/apps/web/components/semse/SimulationPanel.tsx:222` calls `GET /api/semse/ops/simulation?limit=6` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/ops/simulation`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0c9b33a57473895b", "name": "Dangling fetch: POST /api/semse/notifications/${notificationId}/read (project-manager-app/apps/web/components/semse/Noti", "shortDescription": {"text": "Dangling fetch: POST /api/semse/notifications/${notificationId}/read (project-manager-app/apps/web/components/semse/NotificationBell.tsx:68)"}, "fullDescription": {"text": "`project-manager-app/apps/web/components/semse/NotificationBell.tsx:68` calls `POST /api/semse/notifications/${notificationId}/read` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/notifications/<p>/read`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-532abba95a31c348", "name": "Dangling fetch: POST /api/semse/notifications/read-all (project-manager-app/apps/web/components/semse/NotificationBell.t", "shortDescription": {"text": "Dangling fetch: POST /api/semse/notifications/read-all (project-manager-app/apps/web/components/semse/NotificationBell.tsx:72)"}, "fullDescription": {"text": "`project-manager-app/apps/web/components/semse/NotificationBell.tsx:72` calls `POST /api/semse/notifications/read-all` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/notifications/read-all`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-286a6f283dcb1a84", "name": "Dangling fetch: GET /api/semse/notifications?limit=15 (project-manager-app/apps/web/components/semse/NotificationBell.ts", "shortDescription": {"text": "Dangling fetch: GET /api/semse/notifications?limit=15 (project-manager-app/apps/web/components/semse/NotificationBell.tsx:89)"}, "fullDescription": {"text": "`project-manager-app/apps/web/components/semse/NotificationBell.tsx:89` calls `GET /api/semse/notifications?limit=15` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/notifications`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-70be30d77180f963", "name": "Dangling fetch: GET /api/semse/trust/${encodeURIComponent(userId)}/passport (project-manager-app/apps/web/components/sem", "shortDescription": {"text": "Dangling fetch: GET /api/semse/trust/${encodeURIComponent(userId)}/passport (project-manager-app/apps/web/components/semse/TrustPassportCard.tsx:63)"}, "fullDescription": {"text": "`project-manager-app/apps/web/components/semse/TrustPassportCard.tsx:63` calls `GET /api/semse/trust/${encodeURIComponent(userId)}/passport` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/trust/<p>/passport`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-251971f1b5f496b0", "name": "Dangling fetch: GET /api/semse/governance/credits/${encodeURIComponent(userId)}?tenantId=${encodeURIComponent(tenantId)}", "shortDescription": {"text": "Dangling fetch: GET /api/semse/governance/credits/${encodeURIComponent(userId)}?tenantId=${encodeURIComponent(tenantId)} (project-manager-app/apps/web/components/semse/TrustPassportCard.tsx:64)"}, "fullDescription": {"text": "`project-manager-app/apps/web/components/semse/TrustPassportCard.tsx:64` calls `GET /api/semse/governance/credits/${encodeURIComponent(userId)}?tenantId=${encodeURIComponent(tenantId)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/governance/credits/<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-0a0ef6b788be049d", "name": "Dangling fetch: GET /api/semse/consciousness/simulations (project-manager-app/apps/web/components/semse/SimulationHistor", "shortDescription": {"text": "Dangling fetch: GET /api/semse/consciousness/simulations (project-manager-app/apps/web/components/semse/SimulationHistoryPanel.tsx:54)"}, "fullDescription": {"text": "`project-manager-app/apps/web/components/semse/SimulationHistoryPanel.tsx:54` calls `GET /api/semse/consciousness/simulations` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/consciousness/simulations`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8675b3ac45921e40", "name": "Dangling fetch: GET /api/semse/ops/recommendations (project-manager-app/apps/web/components/semse/RecommendationsPanel.t", "shortDescription": {"text": "Dangling fetch: GET /api/semse/ops/recommendations (project-manager-app/apps/web/components/semse/RecommendationsPanel.tsx:148)"}, "fullDescription": {"text": "`project-manager-app/apps/web/components/semse/RecommendationsPanel.tsx:148` calls `GET /api/semse/ops/recommendations` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/ops/recommendations`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8b59b3b33d12535c", "name": "Dangling fetch: POST /api/semse/agents/evidence-checklist (project-manager-app/apps/web/components/semse/EvidenceCheckli", "shortDescription": {"text": "Dangling fetch: POST /api/semse/agents/evidence-checklist (project-manager-app/apps/web/components/semse/EvidenceChecklistCard.tsx:35)"}, "fullDescription": {"text": "`project-manager-app/apps/web/components/semse/EvidenceChecklistCard.tsx:35` calls `POST /api/semse/agents/evidence-checklist` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/agents/evidence-checklist`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-70992995539f3f56", "name": "Dangling fetch: GET /api/semse/milestones/${milestoneId}/vision-summary (project-manager-app/apps/web/components/milesto", "shortDescription": {"text": "Dangling fetch: GET /api/semse/milestones/${milestoneId}/vision-summary (project-manager-app/apps/web/components/milestones/MilestoneVisionSummaryCard.tsx:39)"}, "fullDescription": {"text": "`project-manager-app/apps/web/components/milestones/MilestoneVisionSummaryCard.tsx:39` calls `GET /api/semse/milestones/${milestoneId}/vision-summary` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/milestones/<p>/vision-summary`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8bd434ce8cdfaa53", "name": "Dangling fetch: GET /api/semse/milestones/${milestoneId}/evidence-items (project-manager-app/apps/web/components/milesto", "shortDescription": {"text": "Dangling fetch: GET /api/semse/milestones/${milestoneId}/evidence-items (project-manager-app/apps/web/components/milestones/EvidenceReviewAdminCard.tsx:129)"}, "fullDescription": {"text": "`project-manager-app/apps/web/components/milestones/EvidenceReviewAdminCard.tsx:129` calls `GET /api/semse/milestones/${milestoneId}/evidence-items` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/milestones/<p>/evidence-items`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3752fcb8c8120ab8", "name": "Dangling fetch: PATCH /api/semse/milestones/${milestoneId}/evidence-items/${item.id} (project-manager-app/apps/web/compo", "shortDescription": {"text": "Dangling fetch: PATCH /api/semse/milestones/${milestoneId}/evidence-items/${item.id} (project-manager-app/apps/web/components/milestones/EvidenceReviewAdminCard.tsx:154)"}, "fullDescription": {"text": "`project-manager-app/apps/web/components/milestones/EvidenceReviewAdminCard.tsx:154` calls `PATCH /api/semse/milestones/${milestoneId}/evidence-items/${item.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/milestones/<p>/evidence-items/<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-55d4b8aec2f9b8d6", "name": "Dangling fetch: POST /api/semse/milestones/${milestoneId}/evidence-items/${item.id}/review (project-manager-app/apps/web", "shortDescription": {"text": "Dangling fetch: POST /api/semse/milestones/${milestoneId}/evidence-items/${item.id}/review (project-manager-app/apps/web/components/milestones/EvidenceReviewAdminCard.tsx:180)"}, "fullDescription": {"text": "`project-manager-app/apps/web/components/milestones/EvidenceReviewAdminCard.tsx:180` calls `POST /api/semse/milestones/${milestoneId}/evidence-items/${item.id}/review` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/milestones/<p>/evidence-items/<p>/review`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d9eb98569ffd4220", "name": "Dangling fetch: POST /api/semse/milestones/${milestoneId}/evidence-items/${item.id}/archive (project-manager-app/apps/we", "shortDescription": {"text": "Dangling fetch: POST /api/semse/milestones/${milestoneId}/evidence-items/${item.id}/archive (project-manager-app/apps/web/components/milestones/EvidenceReviewAdminCard.tsx:431)"}, "fullDescription": {"text": "`project-manager-app/apps/web/components/milestones/EvidenceReviewAdminCard.tsx:431` calls `POST /api/semse/milestones/${milestoneId}/evidence-items/${item.id}/archive` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/milestones/<p>/evidence-items/<p>/archive`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-867d0ac34c90cb6a", "name": "Dangling fetch: GET /api/semse/milestones/${milestoneId}/evidence-items/${itemId} (project-manager-app/apps/web/componen", "shortDescription": {"text": "Dangling fetch: GET /api/semse/milestones/${milestoneId}/evidence-items/${itemId} (project-manager-app/apps/web/components/milestones/EvidenceItemDetailPanel.tsx:108)"}, "fullDescription": {"text": "`project-manager-app/apps/web/components/milestones/EvidenceItemDetailPanel.tsx:108` calls `GET /api/semse/milestones/${milestoneId}/evidence-items/${itemId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/milestones/<p>/evidence-items/<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-2a365389646dc6c4", "name": "Dangling fetch: GET /api/semse/milestones/${milestoneId}/evidence-items/${itemId}/history (project-manager-app/apps/web/", "shortDescription": {"text": "Dangling fetch: GET /api/semse/milestones/${milestoneId}/evidence-items/${itemId}/history (project-manager-app/apps/web/components/milestones/EvidenceItemDetailPanel.tsx:109)"}, "fullDescription": {"text": "`project-manager-app/apps/web/components/milestones/EvidenceItemDetailPanel.tsx:109` calls `GET /api/semse/milestones/${milestoneId}/evidence-items/${itemId}/history` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/milestones/<p>/evidence-items/<p>/history`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-bb3dde11764ce10d", "name": "Dangling fetch: POST /api/semse/evidence/presign (project-manager-app/apps/web/components/milestones/EvidenceItemDetailP", "shortDescription": {"text": "Dangling fetch: POST /api/semse/evidence/presign (project-manager-app/apps/web/components/milestones/EvidenceItemDetailPanel.tsx:134)"}, "fullDescription": {"text": "`project-manager-app/apps/web/components/milestones/EvidenceItemDetailPanel.tsx:134` calls `POST /api/semse/evidence/presign` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/evidence/presign`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f98a18f1a343f10b", "name": "Dangling fetch: PUT /api/semse/uploads/files/${encodeURIComponent(key)} (project-manager-app/apps/web/components/milesto", "shortDescription": {"text": "Dangling fetch: PUT /api/semse/uploads/files/${encodeURIComponent(key)} (project-manager-app/apps/web/components/milestones/EvidenceItemDetailPanel.tsx:145)"}, "fullDescription": {"text": "`project-manager-app/apps/web/components/milestones/EvidenceItemDetailPanel.tsx:145` calls `PUT /api/semse/uploads/files/${encodeURIComponent(key)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/uploads/files/<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-3d925fdf4eb7f025", "name": "Dangling fetch: POST /api/semse/evidence (project-manager-app/apps/web/components/milestones/EvidenceItemDetailPanel.tsx", "shortDescription": {"text": "Dangling fetch: POST /api/semse/evidence (project-manager-app/apps/web/components/milestones/EvidenceItemDetailPanel.tsx:151)"}, "fullDescription": {"text": "`project-manager-app/apps/web/components/milestones/EvidenceItemDetailPanel.tsx:151` calls `POST /api/semse/evidence` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/evidence`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-636a6461d97338e0", "name": "Dangling fetch: POST /api/semse/milestones/${milestoneId}/evidence-items/${itemId}/replace (project-manager-app/apps/web", "shortDescription": {"text": "Dangling fetch: POST /api/semse/milestones/${milestoneId}/evidence-items/${itemId}/replace (project-manager-app/apps/web/components/milestones/EvidenceItemDetailPanel.tsx:160)"}, "fullDescription": {"text": "`project-manager-app/apps/web/components/milestones/EvidenceItemDetailPanel.tsx:160` calls `POST /api/semse/milestones/${milestoneId}/evidence-items/${itemId}/replace` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/milestones/<p>/evidence-items/<p>/replace`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-870cce13a2662d7d", "name": "Dangling fetch: GET /api/semse/milestones/${milestoneId}/payment-governance (project-manager-app/apps/web/components/mil", "shortDescription": {"text": "Dangling fetch: GET /api/semse/milestones/${milestoneId}/payment-governance (project-manager-app/apps/web/components/milestones/MilestoneGovernancePanel.tsx:97)"}, "fullDescription": {"text": "`project-manager-app/apps/web/components/milestones/MilestoneGovernancePanel.tsx:97` calls `GET /api/semse/milestones/${milestoneId}/payment-governance` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/milestones/<p>/payment-governance`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-44c7f58d282a0702", "name": "Dangling fetch: POST /api/semse/evidence/presign (project-manager-app/apps/web/components/milestones/MilestoneEvidenceUp", "shortDescription": {"text": "Dangling fetch: POST /api/semse/evidence/presign (project-manager-app/apps/web/components/milestones/MilestoneEvidenceUploader.tsx:81)"}, "fullDescription": {"text": "`project-manager-app/apps/web/components/milestones/MilestoneEvidenceUploader.tsx:81` calls `POST /api/semse/evidence/presign` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/evidence/presign`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9f40add950f23910", "name": "Dangling fetch: POST /api/semse/evidence (project-manager-app/apps/web/components/milestones/MilestoneEvidenceUploader.t", "shortDescription": {"text": "Dangling fetch: POST /api/semse/evidence (project-manager-app/apps/web/components/milestones/MilestoneEvidenceUploader.tsx:102)"}, "fullDescription": {"text": "`project-manager-app/apps/web/components/milestones/MilestoneEvidenceUploader.tsx:102` calls `POST /api/semse/evidence` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/evidence`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-27a816e025247430", "name": "Dangling fetch: PATCH /api/semse/milestones/${milestoneId}/evidence-items/${itemId} (project-manager-app/apps/web/compon", "shortDescription": {"text": "Dangling fetch: PATCH /api/semse/milestones/${milestoneId}/evidence-items/${itemId} (project-manager-app/apps/web/components/milestones/MilestoneEvidenceUploader.tsx:112)"}, "fullDescription": {"text": "`project-manager-app/apps/web/components/milestones/MilestoneEvidenceUploader.tsx:112` calls `PATCH /api/semse/milestones/${milestoneId}/evidence-items/${itemId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/milestones/<p>/evidence-items/<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-27cefc94221dc3d5", "name": "Dangling fetch: POST /api/semse/milestones/${milestoneId}/evidence-items/${itemId}/review (project-manager-app/apps/web/", "shortDescription": {"text": "Dangling fetch: POST /api/semse/milestones/${milestoneId}/evidence-items/${itemId}/review (project-manager-app/apps/web/components/milestones/MilestoneEvidenceUploader.tsx:122)"}, "fullDescription": {"text": "`project-manager-app/apps/web/components/milestones/MilestoneEvidenceUploader.tsx:122` calls `POST /api/semse/milestones/${milestoneId}/evidence-items/${itemId}/review` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/milestones/<p>/evidence-items/<p>/review`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-76ecebab9f8c7291", "name": "Dangling fetch: GET /api/semse/milestones/${milestoneId}/evidence-items (project-manager-app/apps/web/components/milesto", "shortDescription": {"text": "Dangling fetch: GET /api/semse/milestones/${milestoneId}/evidence-items (project-manager-app/apps/web/components/milestones/MilestoneEvidenceUploader.tsx:164)"}, "fullDescription": {"text": "`project-manager-app/apps/web/components/milestones/MilestoneEvidenceUploader.tsx:164` calls `GET /api/semse/milestones/${milestoneId}/evidence-items` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/milestones/<p>/evidence-items`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-01cdd59397c4d859", "name": "Dangling fetch: POST /api/semse/public/professionals/preview (project-manager-app/apps/web/components/landing/landing-in", "shortDescription": {"text": "Dangling fetch: POST /api/semse/public/professionals/preview (project-manager-app/apps/web/components/landing/landing-intake.tsx:180)"}, "fullDescription": {"text": "`project-manager-app/apps/web/components/landing/landing-intake.tsx:180` calls `POST /api/semse/public/professionals/preview` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/public/professionals/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-b8aa97c9f7cdb938", "name": "Dangling fetch: POST /api/semse/public/budget/suggest (project-manager-app/apps/web/components/landing/landing-intake.ts", "shortDescription": {"text": "Dangling fetch: POST /api/semse/public/budget/suggest (project-manager-app/apps/web/components/landing/landing-intake.tsx:213)"}, "fullDescription": {"text": "`project-manager-app/apps/web/components/landing/landing-intake.tsx:213` calls `POST /api/semse/public/budget/suggest` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/public/budget/suggest`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-03a3d7b32e0c1e01", "name": "Dangling fetch: POST /api/semse/tools/ai-assist (project-manager-app/apps/web/components/tools/ToolAIPanel.tsx:62)", "shortDescription": {"text": "Dangling fetch: POST /api/semse/tools/ai-assist (project-manager-app/apps/web/components/tools/ToolAIPanel.tsx:62)"}, "fullDescription": {"text": "`project-manager-app/apps/web/components/tools/ToolAIPanel.tsx:62` calls `POST /api/semse/tools/ai-assist` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/tools/ai-assist`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-fb9589ad9fdb5dbe", "name": "Dangling fetch: GET /api/semse/change-orders/${changeOrderId}/impact (project-manager-app/apps/web/components/change-ord", "shortDescription": {"text": "Dangling fetch: GET /api/semse/change-orders/${changeOrderId}/impact (project-manager-app/apps/web/components/change-orders/ChangeOrderImpactCard.tsx:49)"}, "fullDescription": {"text": "`project-manager-app/apps/web/components/change-orders/ChangeOrderImpactCard.tsx:49` calls `GET /api/semse/change-orders/${changeOrderId}/impact` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/change-orders/<p>/impact`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e48d01c56d040709", "name": "Dangling fetch: POST /api/semse/change-orders/${changeOrderId}/apply-to-buildops (project-manager-app/apps/web/component", "shortDescription": {"text": "Dangling fetch: POST /api/semse/change-orders/${changeOrderId}/apply-to-buildops (project-manager-app/apps/web/components/change-orders/ChangeOrderImpactCard.tsx:59)"}, "fullDescription": {"text": "`project-manager-app/apps/web/components/change-orders/ChangeOrderImpactCard.tsx:59` calls `POST /api/semse/change-orders/${changeOrderId}/apply-to-buildops` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/change-orders/<p>/apply-to-buildops`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3a9a1d0624e72caa", "name": "Dangling fetch: GET /api/semse/change-orders/${changeOrderId}/impact (project-manager-app/apps/web/components/change-ord", "shortDescription": {"text": "Dangling fetch: GET /api/semse/change-orders/${changeOrderId}/impact (project-manager-app/apps/web/components/change-orders/ChangeOrderImpactCard.tsx:64)"}, "fullDescription": {"text": "`project-manager-app/apps/web/components/change-orders/ChangeOrderImpactCard.tsx:64` calls `GET /api/semse/change-orders/${changeOrderId}/impact` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/change-orders/<p>/impact`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-fa2c262e4d9da817", "name": "Dangling fetch: PATCH /api/semse/agents/plans/${encodeURIComponent(planId)}/approve (project-manager-app/apps/web/app/se", "shortDescription": {"text": "Dangling fetch: PATCH /api/semse/agents/plans/${encodeURIComponent(planId)}/approve (project-manager-app/apps/web/app/semse-api.ts:1193)"}, "fullDescription": {"text": "`project-manager-app/apps/web/app/semse-api.ts:1193` calls `PATCH /api/semse/agents/plans/${encodeURIComponent(planId)}/approve` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/agents/plans/<p>/approve`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5b4c630b131ac9be", "name": "Dangling fetch: PATCH /api/semse/agents/plans/${encodeURIComponent(planId)}/reject (project-manager-app/apps/web/app/sem", "shortDescription": {"text": "Dangling fetch: PATCH /api/semse/agents/plans/${encodeURIComponent(planId)}/reject (project-manager-app/apps/web/app/semse-api.ts:1211)"}, "fullDescription": {"text": "`project-manager-app/apps/web/app/semse-api.ts:1211` calls `PATCH /api/semse/agents/plans/${encodeURIComponent(planId)}/reject` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/agents/plans/<p>/reject`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a6a501d92ec17300", "name": "Dangling fetch: PATCH /api/semse/agents/plans/${encodeURIComponent(planId)}/cancel (project-manager-app/apps/web/app/sem", "shortDescription": {"text": "Dangling fetch: PATCH /api/semse/agents/plans/${encodeURIComponent(planId)}/cancel (project-manager-app/apps/web/app/semse-api.ts:1229)"}, "fullDescription": {"text": "`project-manager-app/apps/web/app/semse-api.ts:1229` calls `PATCH /api/semse/agents/plans/${encodeURIComponent(planId)}/cancel` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/agents/plans/<p>/cancel`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-06f05af764b278e1", "name": "Dangling fetch: PATCH /api/semse/agents/plans/${encodeURIComponent(planId)}/steps/${encodeURIComponent(stepId)}/${action", "shortDescription": {"text": "Dangling fetch: PATCH /api/semse/agents/plans/${encodeURIComponent(planId)}/steps/${encodeURIComponent(stepId)}/${action} (project-manager-app/apps/web/app/semse-api.ts:1252)"}, "fullDescription": {"text": "`project-manager-app/apps/web/app/semse-api.ts:1252` calls `PATCH /api/semse/agents/plans/${encodeURIComponent(planId)}/steps/${encodeURIComponent(stepId)}/${action}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/agents/plans/<p>/steps/<p>/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-cdefc49a11fec695", "name": "Dangling fetch: POST /api/semse/prometeo/chunks/${encodeURIComponent(input.chunkId)}/feedback (project-manager-app/apps/", "shortDescription": {"text": "Dangling fetch: POST /api/semse/prometeo/chunks/${encodeURIComponent(input.chunkId)}/feedback (project-manager-app/apps/web/app/semse-api.ts:1627)"}, "fullDescription": {"text": "`project-manager-app/apps/web/app/semse-api.ts:1627` calls `POST /api/semse/prometeo/chunks/${encodeURIComponent(input.chunkId)}/feedback` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/prometeo/chunks/<p>/feedback`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-14d821936109bdea", "name": "Dangling fetch: GET /api/pro/${encodeURIComponent(slug)} (project-manager-app/apps/web/app/pro/[slug]/page.tsx:47)", "shortDescription": {"text": "Dangling fetch: GET /api/pro/${encodeURIComponent(slug)} (project-manager-app/apps/web/app/pro/[slug]/page.tsx:47)"}, "fullDescription": {"text": "`project-manager-app/apps/web/app/pro/[slug]/page.tsx:47` calls `GET /api/pro/${encodeURIComponent(slug)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/pro/<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-ee7c439d42fc5f06", "name": "Dangling fetch: POST /api/semse/auth/reset-password (project-manager-app/apps/web/app/reset-password/page.tsx:127)", "shortDescription": {"text": "Dangling fetch: POST /api/semse/auth/reset-password (project-manager-app/apps/web/app/reset-password/page.tsx:127)"}, "fullDescription": {"text": "`project-manager-app/apps/web/app/reset-password/page.tsx:127` calls `POST /api/semse/auth/reset-password` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/auth/reset-password`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-37f96086ea7c1133", "name": "Dangling fetch: GET /api/semse/anatomy/tree (project-manager-app/apps/web/app/anatomy/anatomy-client.tsx:30)", "shortDescription": {"text": "Dangling fetch: GET /api/semse/anatomy/tree (project-manager-app/apps/web/app/anatomy/anatomy-client.tsx:30)"}, "fullDescription": {"text": "`project-manager-app/apps/web/app/anatomy/anatomy-client.tsx:30` calls `GET /api/semse/anatomy/tree` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/anatomy/tree`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7710f6271044666e", "name": "Dangling fetch: GET /api/semse/anatomy/node/${selectedNodeId} (project-manager-app/apps/web/app/anatomy/anatomy-client.t", "shortDescription": {"text": "Dangling fetch: GET /api/semse/anatomy/node/${selectedNodeId} (project-manager-app/apps/web/app/anatomy/anatomy-client.tsx:44)"}, "fullDescription": {"text": "`project-manager-app/apps/web/app/anatomy/anatomy-client.tsx:44` calls `GET /api/semse/anatomy/node/${selectedNodeId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/anatomy/node/<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-99be6cc167db00d4", "name": "Dangling fetch: GET /api/semse/anatomy/children/${selectedNodeId} (project-manager-app/apps/web/app/anatomy/anatomy-clie", "shortDescription": {"text": "Dangling fetch: GET /api/semse/anatomy/children/${selectedNodeId} (project-manager-app/apps/web/app/anatomy/anatomy-client.tsx:45)"}, "fullDescription": {"text": "`project-manager-app/apps/web/app/anatomy/anatomy-client.tsx:45` calls `GET /api/semse/anatomy/children/${selectedNodeId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/anatomy/children/<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-cf47d98f0dd87290", "name": "Dangling fetch: GET /api/semse/anatomy/relations/${selectedNodeId} (project-manager-app/apps/web/app/anatomy/anatomy-cli", "shortDescription": {"text": "Dangling fetch: GET /api/semse/anatomy/relations/${selectedNodeId} (project-manager-app/apps/web/app/anatomy/anatomy-client.tsx:46)"}, "fullDescription": {"text": "`project-manager-app/apps/web/app/anatomy/anatomy-client.tsx:46` calls `GET /api/semse/anatomy/relations/${selectedNodeId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/anatomy/relations/<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-9b696a5fc668678c", "name": "Dangling fetch: POST /api/semse/anatomy/query (project-manager-app/apps/web/app/anatomy/anatomy-client.tsx:72)", "shortDescription": {"text": "Dangling fetch: POST /api/semse/anatomy/query (project-manager-app/apps/web/app/anatomy/anatomy-client.tsx:72)"}, "fullDescription": {"text": "`project-manager-app/apps/web/app/anatomy/anatomy-client.tsx:72` calls `POST /api/semse/anatomy/query` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/anatomy/query`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6c5b7c4337b88b4a", "name": "Dangling fetch: POST /api/semse/auth/token (project-manager-app/apps/web/app/login/page.tsx:57)", "shortDescription": {"text": "Dangling fetch: POST /api/semse/auth/token (project-manager-app/apps/web/app/login/page.tsx:57)"}, "fullDescription": {"text": "`project-manager-app/apps/web/app/login/page.tsx:57` calls `POST /api/semse/auth/token` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/auth/token`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f0cd93377d40cfd6", "name": "Dangling fetch: POST https://api.tavily.com/search (project-manager-app/apps/web/app/api/semse/tools/painting/research/r", "shortDescription": {"text": "Dangling fetch: POST https://api.tavily.com/search (project-manager-app/apps/web/app/api/semse/tools/painting/research/route.ts:178)"}, "fullDescription": {"text": "`project-manager-app/apps/web/app/api/semse/tools/painting/research/route.ts:178` calls `POST https://api.tavily.com/search` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.tavily.com/search`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c4e3dc0c7ab009cf", "name": "Dangling fetch: POST https://api.tavily.com/search (project-manager-app/apps/web/app/api/semse/tools/electrical/research", "shortDescription": {"text": "Dangling fetch: POST https://api.tavily.com/search (project-manager-app/apps/web/app/api/semse/tools/electrical/research/route.ts:179)"}, "fullDescription": {"text": "`project-manager-app/apps/web/app/api/semse/tools/electrical/research/route.ts:179` calls `POST https://api.tavily.com/search` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.tavily.com/search`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e0041b9facb90dc6", "name": "Dangling fetch: GET /api/semse/repo-knowledge/tree (project-manager-app/apps/web/app/repo-map/repo-map-client.tsx:31)", "shortDescription": {"text": "Dangling fetch: GET /api/semse/repo-knowledge/tree (project-manager-app/apps/web/app/repo-map/repo-map-client.tsx:31)"}, "fullDescription": {"text": "`project-manager-app/apps/web/app/repo-map/repo-map-client.tsx:31` calls `GET /api/semse/repo-knowledge/tree` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/repo-knowledge/tree`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-48166eef89975966", "name": "Dangling fetch: GET /api/semse/repo-knowledge/node/${selectedNodeId} (project-manager-app/apps/web/app/repo-map/repo-map", "shortDescription": {"text": "Dangling fetch: GET /api/semse/repo-knowledge/node/${selectedNodeId} (project-manager-app/apps/web/app/repo-map/repo-map-client.tsx:45)"}, "fullDescription": {"text": "`project-manager-app/apps/web/app/repo-map/repo-map-client.tsx:45` calls `GET /api/semse/repo-knowledge/node/${selectedNodeId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/repo-knowledge/node/<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-099ba02a18ea8ef2", "name": "Dangling fetch: GET /api/semse/repo-knowledge/children/${selectedNodeId} (project-manager-app/apps/web/app/repo-map/repo", "shortDescription": {"text": "Dangling fetch: GET /api/semse/repo-knowledge/children/${selectedNodeId} (project-manager-app/apps/web/app/repo-map/repo-map-client.tsx:46)"}, "fullDescription": {"text": "`project-manager-app/apps/web/app/repo-map/repo-map-client.tsx:46` calls `GET /api/semse/repo-knowledge/children/${selectedNodeId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/repo-knowledge/children/<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-9828fad0dec77b93", "name": "Dangling fetch: GET /api/semse/repo-knowledge/relations/${selectedNodeId} (project-manager-app/apps/web/app/repo-map/rep", "shortDescription": {"text": "Dangling fetch: GET /api/semse/repo-knowledge/relations/${selectedNodeId} (project-manager-app/apps/web/app/repo-map/repo-map-client.tsx:47)"}, "fullDescription": {"text": "`project-manager-app/apps/web/app/repo-map/repo-map-client.tsx:47` calls `GET /api/semse/repo-knowledge/relations/${selectedNodeId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/repo-knowledge/relations/<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-95feb59580442684", "name": "Dangling fetch: POST /api/semse/repo-knowledge/query (project-manager-app/apps/web/app/repo-map/repo-map-client.tsx:73)", "shortDescription": {"text": "Dangling fetch: POST /api/semse/repo-knowledge/query (project-manager-app/apps/web/app/repo-map/repo-map-client.tsx:73)"}, "fullDescription": {"text": "`project-manager-app/apps/web/app/repo-map/repo-map-client.tsx:73` calls `POST /api/semse/repo-knowledge/query` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/repo-knowledge/query`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9533fad1f697db4d", "name": "Dangling fetch: POST /api/semse/jobs/${jobId}/escrow (project-manager-app/apps/web/app/components/payments/EscrowFundMod", "shortDescription": {"text": "Dangling fetch: POST /api/semse/jobs/${jobId}/escrow (project-manager-app/apps/web/app/components/payments/EscrowFundModal.tsx:62)"}, "fullDescription": {"text": "`project-manager-app/apps/web/app/components/payments/EscrowFundModal.tsx:62` calls `POST /api/semse/jobs/${jobId}/escrow` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/jobs/<p>/escrow`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3601ea69b8d9340e", "name": "Dangling fetch: POST /api/semse/workers/payout-method (project-manager-app/apps/web/app/components/payments/PayoutMethod", "shortDescription": {"text": "Dangling fetch: POST /api/semse/workers/payout-method (project-manager-app/apps/web/app/components/payments/PayoutMethodForm.tsx:80)"}, "fullDescription": {"text": "`project-manager-app/apps/web/app/components/payments/PayoutMethodForm.tsx:80` calls `POST /api/semse/workers/payout-method` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/workers/payout-method`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-84290a918d9e5c81", "name": "Dangling fetch: POST /api/semse/auth/forgot-password (project-manager-app/apps/web/app/forgot-password/page.tsx:18)", "shortDescription": {"text": "Dangling fetch: POST /api/semse/auth/forgot-password (project-manager-app/apps/web/app/forgot-password/page.tsx:18)"}, "fullDescription": {"text": "`project-manager-app/apps/web/app/forgot-password/page.tsx:18` calls `POST /api/semse/auth/forgot-password` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/auth/forgot-password`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2117c6b32c416f9b", "name": "Dangling fetch: GET /api/semse/buildops/overview (project-manager-app/apps/web/app/lib/buildops-api.ts:122)", "shortDescription": {"text": "Dangling fetch: GET /api/semse/buildops/overview (project-manager-app/apps/web/app/lib/buildops-api.ts:122)"}, "fullDescription": {"text": "`project-manager-app/apps/web/app/lib/buildops-api.ts:122` calls `GET /api/semse/buildops/overview` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/buildops/overview`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c9d26c9f1e838df0", "name": "Dangling fetch: GET /api/semse/buildops/projects (project-manager-app/apps/web/app/lib/buildops-api.ts:127)", "shortDescription": {"text": "Dangling fetch: GET /api/semse/buildops/projects (project-manager-app/apps/web/app/lib/buildops-api.ts:127)"}, "fullDescription": {"text": "`project-manager-app/apps/web/app/lib/buildops-api.ts:127` calls `GET /api/semse/buildops/projects` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/buildops/projects`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2cd4561173adc72d", "name": "Dangling fetch: GET /api/semse/buildops/projects/${encodeURIComponent(projectId)} (project-manager-app/apps/web/app/lib/", "shortDescription": {"text": "Dangling fetch: GET /api/semse/buildops/projects/${encodeURIComponent(projectId)} (project-manager-app/apps/web/app/lib/buildops-api.ts:132)"}, "fullDescription": {"text": "`project-manager-app/apps/web/app/lib/buildops-api.ts:132` calls `GET /api/semse/buildops/projects/${encodeURIComponent(projectId)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/buildops/projects/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b5901d3b8d381397", "name": "Dangling fetch: GET /api/semse/buildops/tasks (project-manager-app/apps/web/app/lib/buildops-api.ts:137)", "shortDescription": {"text": "Dangling fetch: GET /api/semse/buildops/tasks (project-manager-app/apps/web/app/lib/buildops-api.ts:137)"}, "fullDescription": {"text": "`project-manager-app/apps/web/app/lib/buildops-api.ts:137` calls `GET /api/semse/buildops/tasks` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/buildops/tasks`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0d759557591cb9c5", "name": "Dangling fetch: GET /api/semse/buildops/tasks/${encodeURIComponent(taskId)} (project-manager-app/apps/web/app/lib/buildo", "shortDescription": {"text": "Dangling fetch: GET /api/semse/buildops/tasks/${encodeURIComponent(taskId)} (project-manager-app/apps/web/app/lib/buildops-api.ts:142)"}, "fullDescription": {"text": "`project-manager-app/apps/web/app/lib/buildops-api.ts:142` calls `GET /api/semse/buildops/tasks/${encodeURIComponent(taskId)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/buildops/tasks/<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-8eed20f1808c8958", "name": "Dangling fetch: GET /api/semse/buildops/milestones (project-manager-app/apps/web/app/lib/buildops-api.ts:147)", "shortDescription": {"text": "Dangling fetch: GET /api/semse/buildops/milestones (project-manager-app/apps/web/app/lib/buildops-api.ts:147)"}, "fullDescription": {"text": "`project-manager-app/apps/web/app/lib/buildops-api.ts:147` calls `GET /api/semse/buildops/milestones` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/buildops/milestones`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6fdd164322452693", "name": "Dangling fetch: POST /api/semse/buildops/projects (project-manager-app/apps/web/app/lib/buildops-api.ts:166)", "shortDescription": {"text": "Dangling fetch: POST /api/semse/buildops/projects (project-manager-app/apps/web/app/lib/buildops-api.ts:166)"}, "fullDescription": {"text": "`project-manager-app/apps/web/app/lib/buildops-api.ts:166` calls `POST /api/semse/buildops/projects` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/buildops/projects`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-69b9ab5793025ce5", "name": "Dangling fetch: POST /api/semse/buildops/estimates/from-tool-result (project-manager-app/apps/web/app/lib/buildops-api.t", "shortDescription": {"text": "Dangling fetch: POST /api/semse/buildops/estimates/from-tool-result (project-manager-app/apps/web/app/lib/buildops-api.ts:186)"}, "fullDescription": {"text": "`project-manager-app/apps/web/app/lib/buildops-api.ts:186` calls `POST /api/semse/buildops/estimates/from-tool-result` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/buildops/estimates/from-tool-result`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-57edff2f56b6eb60", "name": "Dangling fetch: POST /api/semse/buildops/tasks (project-manager-app/apps/web/app/lib/buildops-api.ts:206)", "shortDescription": {"text": "Dangling fetch: POST /api/semse/buildops/tasks (project-manager-app/apps/web/app/lib/buildops-api.ts:206)"}, "fullDescription": {"text": "`project-manager-app/apps/web/app/lib/buildops-api.ts:206` calls `POST /api/semse/buildops/tasks` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/buildops/tasks`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-134ba2b404179c17", "name": "Dangling fetch: POST /api/semse/buildops/plans/${encodeURIComponent(projectId)}/${action} (project-manager-app/apps/web/", "shortDescription": {"text": "Dangling fetch: POST /api/semse/buildops/plans/${encodeURIComponent(projectId)}/${action} (project-manager-app/apps/web/app/lib/buildops-api.ts:219)"}, "fullDescription": {"text": "`project-manager-app/apps/web/app/lib/buildops-api.ts:219` calls `POST /api/semse/buildops/plans/${encodeURIComponent(projectId)}/${action}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/buildops/plans/<p>/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-04d783eed6504f4d", "name": "Dangling fetch: POST /api/semse/tools/calculate (project-manager-app/apps/web/app/lib/semse-tools-api.ts:289)", "shortDescription": {"text": "Dangling fetch: POST /api/semse/tools/calculate (project-manager-app/apps/web/app/lib/semse-tools-api.ts:289)"}, "fullDescription": {"text": "`project-manager-app/apps/web/app/lib/semse-tools-api.ts:289` calls `POST /api/semse/tools/calculate` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/tools/calculate`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7f0a86e7820b81f6", "name": "Dangling fetch: POST /api/semse/jobs (project-manager-app/apps/web/app/(app)/client/protools/page.tsx:58)", "shortDescription": {"text": "Dangling fetch: POST /api/semse/jobs (project-manager-app/apps/web/app/(app)/client/protools/page.tsx:58)"}, "fullDescription": {"text": "`project-manager-app/apps/web/app/(app)/client/protools/page.tsx:58` calls `POST /api/semse/jobs` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/jobs`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5399ee78dbd7819a", "name": "Dangling fetch: POST /api/semse/agents/protools/estimate (project-manager-app/apps/web/app/(app)/client/protools/page.ts", "shortDescription": {"text": "Dangling fetch: POST /api/semse/agents/protools/estimate (project-manager-app/apps/web/app/(app)/client/protools/page.tsx:87)"}, "fullDescription": {"text": "`project-manager-app/apps/web/app/(app)/client/protools/page.tsx:87` calls `POST /api/semse/agents/protools/estimate` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/agents/protools/estimate`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-94b760ab3f14e0b2", "name": "Dangling fetch: GET /api/semse/marketplace/listings?${qs}&limit=20 (project-manager-app/apps/web/app/(app)/client/market", "shortDescription": {"text": "Dangling fetch: GET /api/semse/marketplace/listings?${qs}&limit=20 (project-manager-app/apps/web/app/(app)/client/marketplace/page.tsx:226)"}, "fullDescription": {"text": "`project-manager-app/apps/web/app/(app)/client/marketplace/page.tsx:226` calls `GET /api/semse/marketplace/listings?${qs}&limit=20` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/marketplace/listings`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-984e90cdbecd4cc2", "name": "Dangling fetch: GET /api/semse/marketplace/professionals?limit=8 (project-manager-app/apps/web/app/(app)/client/marketpl", "shortDescription": {"text": "Dangling fetch: GET /api/semse/marketplace/professionals?limit=8 (project-manager-app/apps/web/app/(app)/client/marketplace/page.tsx:227)"}, "fullDescription": {"text": "`project-manager-app/apps/web/app/(app)/client/marketplace/page.tsx:227` calls `GET /api/semse/marketplace/professionals?limit=8` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/marketplace/professionals`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-08e91c466147721c", "name": "Dangling fetch: GET /api/semse/marketplace/stats (project-manager-app/apps/web/app/(app)/client/marketplace/page.tsx:228", "shortDescription": {"text": "Dangling fetch: GET /api/semse/marketplace/stats (project-manager-app/apps/web/app/(app)/client/marketplace/page.tsx:228)"}, "fullDescription": {"text": "`project-manager-app/apps/web/app/(app)/client/marketplace/page.tsx:228` calls `GET /api/semse/marketplace/stats` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/marketplace/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-c9c8c623d6e531a1", "name": "Dangling fetch: POST /api/semse/bids (project-manager-app/apps/web/app/(app)/client/marketplace/page.tsx:252)", "shortDescription": {"text": "Dangling fetch: POST /api/semse/bids (project-manager-app/apps/web/app/(app)/client/marketplace/page.tsx:252)"}, "fullDescription": {"text": "`project-manager-app/apps/web/app/(app)/client/marketplace/page.tsx:252` calls `POST /api/semse/bids` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/bids`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-33c395062cc48e08", "name": "Dangling fetch: GET /api/semse/jobs (project-manager-app/apps/web/app/(app)/client/dashboard/page.tsx:53)", "shortDescription": {"text": "Dangling fetch: GET /api/semse/jobs (project-manager-app/apps/web/app/(app)/client/dashboard/page.tsx:53)"}, "fullDescription": {"text": "`project-manager-app/apps/web/app/(app)/client/dashboard/page.tsx:53` calls `GET /api/semse/jobs` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/jobs`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1239620f6487282c", "name": "Dangling fetch: GET /api/semse/jobs/${j.id}/bids (project-manager-app/apps/web/app/(app)/client/dashboard/page.tsx:63)", "shortDescription": {"text": "Dangling fetch: GET /api/semse/jobs/${j.id}/bids (project-manager-app/apps/web/app/(app)/client/dashboard/page.tsx:63)"}, "fullDescription": {"text": "`project-manager-app/apps/web/app/(app)/client/dashboard/page.tsx:63` calls `GET /api/semse/jobs/${j.id}/bids` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/jobs/<p>/bids`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-512c693ea31a8b4d", "name": "Dangling fetch: GET /api/semse/milestones/${milestoneId}/evidence-items (project-manager-app/apps/web/app/(app)/client/m", "shortDescription": {"text": "Dangling fetch: GET /api/semse/milestones/${milestoneId}/evidence-items (project-manager-app/apps/web/app/(app)/client/milestones/page.tsx:101)"}, "fullDescription": {"text": "`project-manager-app/apps/web/app/(app)/client/milestones/page.tsx:101` calls `GET /api/semse/milestones/${milestoneId}/evidence-items` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/milestones/<p>/evidence-items`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b54944e676215088", "name": "Dangling fetch: GET /api/semse/milestones/${milestoneId}/payment-readiness (project-manager-app/apps/web/app/(app)/clien", "shortDescription": {"text": "Dangling fetch: GET /api/semse/milestones/${milestoneId}/payment-readiness (project-manager-app/apps/web/app/(app)/client/milestones/page.tsx:102)"}, "fullDescription": {"text": "`project-manager-app/apps/web/app/(app)/client/milestones/page.tsx:102` calls `GET /api/semse/milestones/${milestoneId}/payment-readiness` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/milestones/<p>/payment-readiness`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a2ea29bb4038826f", "name": "Dangling fetch: GET /api/semse/my-bids (project-manager-app/apps/web/app/(app)/client/bids/page.tsx:43)", "shortDescription": {"text": "Dangling fetch: GET /api/semse/my-bids (project-manager-app/apps/web/app/(app)/client/bids/page.tsx:43)"}, "fullDescription": {"text": "`project-manager-app/apps/web/app/(app)/client/bids/page.tsx:43` calls `GET /api/semse/my-bids` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/my-bids`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-597e2e7e61d0fb76", "name": "Dangling fetch: GET /api/semse/jobs (project-manager-app/apps/web/app/(app)/client/professionals/page.tsx:196)", "shortDescription": {"text": "Dangling fetch: GET /api/semse/jobs (project-manager-app/apps/web/app/(app)/client/professionals/page.tsx:196)"}, "fullDescription": {"text": "`project-manager-app/apps/web/app/(app)/client/professionals/page.tsx:196` calls `GET /api/semse/jobs` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/jobs`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c6cfcb6c84ffa9df", "name": "Dangling fetch: GET /api/semse/intelligence/credentials/top (project-manager-app/apps/web/app/(app)/client/professionals", "shortDescription": {"text": "Dangling fetch: GET /api/semse/intelligence/credentials/top (project-manager-app/apps/web/app/(app)/client/professionals/page.tsx:201)"}, "fullDescription": {"text": "`project-manager-app/apps/web/app/(app)/client/professionals/page.tsx:201` calls `GET /api/semse/intelligence/credentials/top` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/intelligence/credentials/top`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1d42a0bbee018dbf", "name": "Dangling fetch: POST /api/semse/matching (project-manager-app/apps/web/app/(app)/client/professionals/page.tsx:219)", "shortDescription": {"text": "Dangling fetch: POST /api/semse/matching (project-manager-app/apps/web/app/(app)/client/professionals/page.tsx:219)"}, "fullDescription": {"text": "`project-manager-app/apps/web/app/(app)/client/professionals/page.tsx:219` calls `POST /api/semse/matching` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/matching`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-76fb3e111cc7daa9", "name": "Dangling fetch: GET /api/semse/jobs (project-manager-app/apps/web/app/(app)/client/jobs/page.tsx:88)", "shortDescription": {"text": "Dangling fetch: GET /api/semse/jobs (project-manager-app/apps/web/app/(app)/client/jobs/page.tsx:88)"}, "fullDescription": {"text": "`project-manager-app/apps/web/app/(app)/client/jobs/page.tsx:88` calls `GET /api/semse/jobs` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/jobs`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a591bdd312db50c8", "name": "Dangling fetch: POST /api/semse/intake/${encodeURIComponent(recoveredDraftId)}/claim (project-manager-app/apps/web/app/(", "shortDescription": {"text": "Dangling fetch: POST /api/semse/intake/${encodeURIComponent(recoveredDraftId)}/claim (project-manager-app/apps/web/app/(app)/client/jobs/new/page.tsx:166)"}, "fullDescription": {"text": "`project-manager-app/apps/web/app/(app)/client/jobs/new/page.tsx:166` calls `POST /api/semse/intake/${encodeURIComponent(recoveredDraftId)}/claim` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/intake/<p>/claim`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6b50b92d3a8f20aa", "name": "Dangling fetch: GET /api/semse/public/intake/${encodeURIComponent(recoveredDraftId)} (project-manager-app/apps/web/app/(", "shortDescription": {"text": "Dangling fetch: GET /api/semse/public/intake/${encodeURIComponent(recoveredDraftId)} (project-manager-app/apps/web/app/(app)/client/jobs/new/page.tsx:179)"}, "fullDescription": {"text": "`project-manager-app/apps/web/app/(app)/client/jobs/new/page.tsx:179` calls `GET /api/semse/public/intake/${encodeURIComponent(recoveredDraftId)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/public/intake/<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-0fc69bc859e97ce3", "name": "Dangling fetch: GET /api/semse/change-orders (project-manager-app/apps/web/app/(app)/client/change-orders/page.tsx:73)", "shortDescription": {"text": "Dangling fetch: GET /api/semse/change-orders (project-manager-app/apps/web/app/(app)/client/change-orders/page.tsx:73)"}, "fullDescription": {"text": "`project-manager-app/apps/web/app/(app)/client/change-orders/page.tsx:73` calls `GET /api/semse/change-orders` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/change-orders`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5e2466eb9fb2b83a", "name": "Dangling fetch: POST /api/semse/change-orders/${id}/run-risk-agent (project-manager-app/apps/web/app/(app)/client/change", "shortDescription": {"text": "Dangling fetch: POST /api/semse/change-orders/${id}/run-risk-agent (project-manager-app/apps/web/app/(app)/client/change-orders/page.tsx:89)"}, "fullDescription": {"text": "`project-manager-app/apps/web/app/(app)/client/change-orders/page.tsx:89` calls `POST /api/semse/change-orders/${id}/run-risk-agent` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/change-orders/<p>/run-risk-agent`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-947cf4b85229d395", "name": "Dangling fetch: POST /api/semse/change-orders/${id}/${action} (project-manager-app/apps/web/app/(app)/client/change-orde", "shortDescription": {"text": "Dangling fetch: POST /api/semse/change-orders/${id}/${action} (project-manager-app/apps/web/app/(app)/client/change-orders/page.tsx:108)"}, "fullDescription": {"text": "`project-manager-app/apps/web/app/(app)/client/change-orders/page.tsx:108` calls `POST /api/semse/change-orders/${id}/${action}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/change-orders/<p>/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-251dbf026f52c702", "name": "Dangling fetch: GET /api/semse/jobs (project-manager-app/apps/web/app/(app)/worker/dashboard/page.tsx:90)", "shortDescription": {"text": "Dangling fetch: GET /api/semse/jobs (project-manager-app/apps/web/app/(app)/worker/dashboard/page.tsx:90)"}, "fullDescription": {"text": "`project-manager-app/apps/web/app/(app)/worker/dashboard/page.tsx:90` calls `GET /api/semse/jobs` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/jobs`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2c5aea93a2729a8e", "name": "Dangling fetch: GET /api/semse/marketplace/listings?status=PUBLISHED&limit=40 (project-manager-app/apps/web/app/(app)/wo", "shortDescription": {"text": "Dangling fetch: GET /api/semse/marketplace/listings?status=PUBLISHED&limit=40 (project-manager-app/apps/web/app/(app)/worker/opportunities/page.tsx:72)"}, "fullDescription": {"text": "`project-manager-app/apps/web/app/(app)/worker/opportunities/page.tsx:72` calls `GET /api/semse/marketplace/listings?status=PUBLISHED&limit=40` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/marketplace/listings`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8827e0a273aa811f", "name": "Dangling fetch: POST /api/semse/bids (project-manager-app/apps/web/app/(app)/worker/opportunities/page.tsx:106)", "shortDescription": {"text": "Dangling fetch: POST /api/semse/bids (project-manager-app/apps/web/app/(app)/worker/opportunities/page.tsx:106)"}, "fullDescription": {"text": "`project-manager-app/apps/web/app/(app)/worker/opportunities/page.tsx:106` calls `POST /api/semse/bids` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/bids`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8e0d053bcb54c49d", "name": "Dangling fetch: GET /api/semse/workers/payout-method (project-manager-app/apps/web/app/(app)/worker/payments/page.tsx:80", "shortDescription": {"text": "Dangling fetch: GET /api/semse/workers/payout-method (project-manager-app/apps/web/app/(app)/worker/payments/page.tsx:80)"}, "fullDescription": {"text": "`project-manager-app/apps/web/app/(app)/worker/payments/page.tsx:80` calls `GET /api/semse/workers/payout-method` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/workers/payout-method`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7461ab3e1373dba0", "name": "Dangling fetch: GET /api/semse/jobs (project-manager-app/apps/web/app/(app)/worker/agenda/page.tsx:142)", "shortDescription": {"text": "Dangling fetch: GET /api/semse/jobs (project-manager-app/apps/web/app/(app)/worker/agenda/page.tsx:142)"}, "fullDescription": {"text": "`project-manager-app/apps/web/app/(app)/worker/agenda/page.tsx:142` calls `GET /api/semse/jobs` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/jobs`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5aa9eced4ddfac82", "name": "Dangling fetch: POST /api/semse/users/${currentUser.id}/verify (project-manager-app/apps/web/app/(app)/worker/profile/pa", "shortDescription": {"text": "Dangling fetch: POST /api/semse/users/${currentUser.id}/verify (project-manager-app/apps/web/app/(app)/worker/profile/page.tsx:140)"}, "fullDescription": {"text": "`project-manager-app/apps/web/app/(app)/worker/profile/page.tsx:140` calls `POST /api/semse/users/${currentUser.id}/verify` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/users/<p>/verify`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-afbf0d407756d737", "name": "Dangling fetch: GET /api/semse/jobs (project-manager-app/apps/web/app/(app)/worker/jobs/page.tsx:53)", "shortDescription": {"text": "Dangling fetch: GET /api/semse/jobs (project-manager-app/apps/web/app/(app)/worker/jobs/page.tsx:53)"}, "fullDescription": {"text": "`project-manager-app/apps/web/app/(app)/worker/jobs/page.tsx:53` calls `GET /api/semse/jobs` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/jobs`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7be5c80bc2941288", "name": "Dangling fetch: GET /api/semse/governance/proposals/${proposal.id}/results (project-manager-app/apps/web/app/(app)/admin", "shortDescription": {"text": "Dangling fetch: GET /api/semse/governance/proposals/${proposal.id}/results (project-manager-app/apps/web/app/(app)/admin/governance/page.tsx:114)"}, "fullDescription": {"text": "`project-manager-app/apps/web/app/(app)/admin/governance/page.tsx:114` calls `GET /api/semse/governance/proposals/${proposal.id}/results` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/governance/proposals/<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-8bb408f5fac7065a", "name": "Dangling fetch: POST /api/semse/governance/proposals/${proposal.id}/vote (project-manager-app/apps/web/app/(app)/admin/g", "shortDescription": {"text": "Dangling fetch: POST /api/semse/governance/proposals/${proposal.id}/vote (project-manager-app/apps/web/app/(app)/admin/governance/page.tsx:125)"}, "fullDescription": {"text": "`project-manager-app/apps/web/app/(app)/admin/governance/page.tsx:125` calls `POST /api/semse/governance/proposals/${proposal.id}/vote` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/governance/proposals/<p>/vote`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b43e1921970e33ba", "name": "Dangling fetch: POST /api/semse/governance/proposals (project-manager-app/apps/web/app/(app)/admin/governance/page.tsx:2", "shortDescription": {"text": "Dangling fetch: POST /api/semse/governance/proposals (project-manager-app/apps/web/app/(app)/admin/governance/page.tsx:268)"}, "fullDescription": {"text": "`project-manager-app/apps/web/app/(app)/admin/governance/page.tsx:268` calls `POST /api/semse/governance/proposals` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/governance/proposals`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-803b0cb467cc4854", "name": "Dangling fetch: GET /api/semse/governance/proposals${qs} (project-manager-app/apps/web/app/(app)/admin/governance/page.t", "shortDescription": {"text": "Dangling fetch: GET /api/semse/governance/proposals${qs} (project-manager-app/apps/web/app/(app)/admin/governance/page.tsx:446)"}, "fullDescription": {"text": "`project-manager-app/apps/web/app/(app)/admin/governance/page.tsx:446` calls `GET /api/semse/governance/proposals${qs}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/governance/proposals/<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-f4b4d74e1d57e505", "name": "Dangling fetch: POST /api/semse/prometeo/chunks/${encodeURIComponent(chunkId)}/feedback (project-manager-app/apps/web/ap", "shortDescription": {"text": "Dangling fetch: POST /api/semse/prometeo/chunks/${encodeURIComponent(chunkId)}/feedback (project-manager-app/apps/web/app/(app)/admin/prometeo/page.tsx:133)"}, "fullDescription": {"text": "`project-manager-app/apps/web/app/(app)/admin/prometeo/page.tsx:133` calls `POST /api/semse/prometeo/chunks/${encodeURIComponent(chunkId)}/feedback` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/prometeo/chunks/<p>/feedback`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-641790ec85321bfe", "name": "Dangling fetch: GET /api/semse/did/${encodeURIComponent(userId)} (project-manager-app/apps/web/app/(app)/admin/users/[id", "shortDescription": {"text": "Dangling fetch: GET /api/semse/did/${encodeURIComponent(userId)} (project-manager-app/apps/web/app/(app)/admin/users/[id]/page.tsx:58)"}, "fullDescription": {"text": "`project-manager-app/apps/web/app/(app)/admin/users/[id]/page.tsx:58` calls `GET /api/semse/did/${encodeURIComponent(userId)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/did/<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-fd52328c721ebc6e", "name": "Dangling fetch: GET /api/semse/governance/credits/${encodeURIComponent(userId)}?tenantId=${encodeURIComponent(TENANT_ID)", "shortDescription": {"text": "Dangling fetch: GET /api/semse/governance/credits/${encodeURIComponent(userId)}?tenantId=${encodeURIComponent(TENANT_ID)} (project-manager-app/apps/web/app/(app)/admin/users/[id]/page.tsx:59)"}, "fullDescription": {"text": "`project-manager-app/apps/web/app/(app)/admin/users/[id]/page.tsx:59` calls `GET /api/semse/governance/credits/${encodeURIComponent(userId)}?tenantId=${encodeURIComponent(TENANT_ID)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/governance/credits/<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-a68cfa278a1ddc28", "name": "Dangling fetch: GET /api/semse/marketplace/listings?${qs}&limit=30 (project-manager-app/apps/web/app/(app)/admin/marketp", "shortDescription": {"text": "Dangling fetch: GET /api/semse/marketplace/listings?${qs}&limit=30 (project-manager-app/apps/web/app/(app)/admin/marketplace/page.tsx:79)"}, "fullDescription": {"text": "`project-manager-app/apps/web/app/(app)/admin/marketplace/page.tsx:79` calls `GET /api/semse/marketplace/listings?${qs}&limit=30` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/marketplace/listings`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d2308614a7d53fa3", "name": "Dangling fetch: GET /api/semse/marketplace/professionals?limit=10 (project-manager-app/apps/web/app/(app)/admin/marketpl", "shortDescription": {"text": "Dangling fetch: GET /api/semse/marketplace/professionals?limit=10 (project-manager-app/apps/web/app/(app)/admin/marketplace/page.tsx:80)"}, "fullDescription": {"text": "`project-manager-app/apps/web/app/(app)/admin/marketplace/page.tsx:80` calls `GET /api/semse/marketplace/professionals?limit=10` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/marketplace/professionals`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a3bdc74d68428f6d", "name": "Dangling fetch: GET /api/semse/marketplace/stats (project-manager-app/apps/web/app/(app)/admin/marketplace/page.tsx:81)", "shortDescription": {"text": "Dangling fetch: GET /api/semse/marketplace/stats (project-manager-app/apps/web/app/(app)/admin/marketplace/page.tsx:81)"}, "fullDescription": {"text": "`project-manager-app/apps/web/app/(app)/admin/marketplace/page.tsx:81` calls `GET /api/semse/marketplace/stats` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/marketplace/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-38892244643a3d2e", "name": "Dangling fetch: GET /api/semse/jobs (project-manager-app/apps/web/app/(app)/admin/dashboard/page.tsx:46)", "shortDescription": {"text": "Dangling fetch: GET /api/semse/jobs (project-manager-app/apps/web/app/(app)/admin/dashboard/page.tsx:46)"}, "fullDescription": {"text": "`project-manager-app/apps/web/app/(app)/admin/dashboard/page.tsx:46` calls `GET /api/semse/jobs` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/jobs`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-92814460020d79e2", "name": "Dangling fetch: GET /api/semse/jobs (project-manager-app/apps/web/app/(app)/admin/dashboard/page.tsx:60)", "shortDescription": {"text": "Dangling fetch: GET /api/semse/jobs (project-manager-app/apps/web/app/(app)/admin/dashboard/page.tsx:60)"}, "fullDescription": {"text": "`project-manager-app/apps/web/app/(app)/admin/dashboard/page.tsx:60` calls `GET /api/semse/jobs` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/jobs`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6a3b7df0b415cf57", "name": "Dangling fetch: GET /api/semse/ops/worker-metrics (project-manager-app/apps/web/app/(app)/admin/worker/page.tsx:67)", "shortDescription": {"text": "Dangling fetch: GET /api/semse/ops/worker-metrics (project-manager-app/apps/web/app/(app)/admin/worker/page.tsx:67)"}, "fullDescription": {"text": "`project-manager-app/apps/web/app/(app)/admin/worker/page.tsx:67` calls `GET /api/semse/ops/worker-metrics` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/ops/worker-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-74d784a73c7a4f55", "name": "Dangling fetch: GET /api/semse/ops/intelligence-runs?limit=15 (project-manager-app/apps/web/app/(app)/admin/worker/page.", "shortDescription": {"text": "Dangling fetch: GET /api/semse/ops/intelligence-runs?limit=15 (project-manager-app/apps/web/app/(app)/admin/worker/page.tsx:68)"}, "fullDescription": {"text": "`project-manager-app/apps/web/app/(app)/admin/worker/page.tsx:68` calls `GET /api/semse/ops/intelligence-runs?limit=15` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/ops/intelligence-runs`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e05cc6ae0cb6ba7e", "name": "Dangling fetch: GET /api/semse/admin/algorithm-runs (project-manager-app/apps/web/app/(app)/admin/algorithm-engine/page.", "shortDescription": {"text": "Dangling fetch: GET /api/semse/admin/algorithm-runs (project-manager-app/apps/web/app/(app)/admin/algorithm-engine/page.tsx:70)"}, "fullDescription": {"text": "`project-manager-app/apps/web/app/(app)/admin/algorithm-engine/page.tsx:70` calls `GET /api/semse/admin/algorithm-runs` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/admin/algorithm-runs`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4a114756fb065eef", "name": "Dangling fetch: GET /api/semse/admin/algorithm-runs?trade=${encodeURIComponent(trade)} (project-manager-app/apps/web/app", "shortDescription": {"text": "Dangling fetch: GET /api/semse/admin/algorithm-runs?trade=${encodeURIComponent(trade)} (project-manager-app/apps/web/app/(app)/admin/algorithm-engine/page.tsx:78)"}, "fullDescription": {"text": "`project-manager-app/apps/web/app/(app)/admin/algorithm-engine/page.tsx:78` calls `GET /api/semse/admin/algorithm-runs?trade=${encodeURIComponent(trade)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/admin/algorithm-runs`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f031b8a531fe9f73", "name": "Dangling fetch: GET /api/semse/ops/consciousness (project-manager-app/apps/web/app/(app)/admin/consciousness/page.tsx:14", "shortDescription": {"text": "Dangling fetch: GET /api/semse/ops/consciousness (project-manager-app/apps/web/app/(app)/admin/consciousness/page.tsx:148)"}, "fullDescription": {"text": "`project-manager-app/apps/web/app/(app)/admin/consciousness/page.tsx:148` calls `GET /api/semse/ops/consciousness` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/ops/consciousness`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9377afb4c99cad92", "name": "Dangling fetch: POST /api/semse/agents/classify (project-manager-app/apps/web/app/(app)/admin/agents/page.tsx:124)", "shortDescription": {"text": "Dangling fetch: POST /api/semse/agents/classify (project-manager-app/apps/web/app/(app)/admin/agents/page.tsx:124)"}, "fullDescription": {"text": "`project-manager-app/apps/web/app/(app)/admin/agents/page.tsx:124` calls `POST /api/semse/agents/classify` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/agents/classify`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c014b0d677690c5f", "name": "Dangling fetch: POST /api/semse/agents/plan (project-manager-app/apps/web/app/(app)/admin/agents/page.tsx:133)", "shortDescription": {"text": "Dangling fetch: POST /api/semse/agents/plan (project-manager-app/apps/web/app/(app)/admin/agents/page.tsx:133)"}, "fullDescription": {"text": "`project-manager-app/apps/web/app/(app)/admin/agents/page.tsx:133` calls `POST /api/semse/agents/plan` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/agents/plan`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3d5d590ecf7cc0bd", "name": "Dangling fetch: POST /api/semse/agents/payment-readiness (project-manager-app/apps/web/app/(app)/admin/agents/page.tsx:1", "shortDescription": {"text": "Dangling fetch: POST /api/semse/agents/payment-readiness (project-manager-app/apps/web/app/(app)/admin/agents/page.tsx:142)"}, "fullDescription": {"text": "`project-manager-app/apps/web/app/(app)/admin/agents/page.tsx:142` calls `POST /api/semse/agents/payment-readiness` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/agents/payment-readiness`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4c58494c03fa08e9", "name": "Dangling fetch: GET /api/semse/agents/status (project-manager-app/apps/web/app/(app)/admin/agents/page.tsx:280)", "shortDescription": {"text": "Dangling fetch: GET /api/semse/agents/status (project-manager-app/apps/web/app/(app)/admin/agents/page.tsx:280)"}, "fullDescription": {"text": "`project-manager-app/apps/web/app/(app)/admin/agents/page.tsx:280` calls `GET /api/semse/agents/status` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/agents/status`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ff130c16406e25c8", "name": "Dangling fetch: GET /api/semse/ops/trust-overview (project-manager-app/apps/web/app/(app)/admin/trust/page.tsx:118)", "shortDescription": {"text": "Dangling fetch: GET /api/semse/ops/trust-overview (project-manager-app/apps/web/app/(app)/admin/trust/page.tsx:118)"}, "fullDescription": {"text": "`project-manager-app/apps/web/app/(app)/admin/trust/page.tsx:118` calls `GET /api/semse/ops/trust-overview` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/ops/trust-overview`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1d09933a226cab4e", "name": "Dangling fetch: GET /api/semse/contractor/leads?${qs} (project-manager-app/apps/web/app/(app)/admin/contractors/page.tsx", "shortDescription": {"text": "Dangling fetch: GET /api/semse/contractor/leads?${qs} (project-manager-app/apps/web/app/(app)/admin/contractors/page.tsx:98)"}, "fullDescription": {"text": "`project-manager-app/apps/web/app/(app)/admin/contractors/page.tsx:98` calls `GET /api/semse/contractor/leads?${qs}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/contractor/leads`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-35c17c96c8edb3e8", "name": "Dangling fetch: GET /api/semse/contractor/stats (project-manager-app/apps/web/app/(app)/admin/contractors/page.tsx:99)", "shortDescription": {"text": "Dangling fetch: GET /api/semse/contractor/stats (project-manager-app/apps/web/app/(app)/admin/contractors/page.tsx:99)"}, "fullDescription": {"text": "`project-manager-app/apps/web/app/(app)/admin/contractors/page.tsx:99` calls `GET /api/semse/contractor/stats` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/contractor/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-c008c148197cbfea", "name": "Dangling fetch: POST /api/semse/contractor/leads (project-manager-app/apps/web/app/(app)/admin/contractors/page.tsx:116)", "shortDescription": {"text": "Dangling fetch: POST /api/semse/contractor/leads (project-manager-app/apps/web/app/(app)/admin/contractors/page.tsx:116)"}, "fullDescription": {"text": "`project-manager-app/apps/web/app/(app)/admin/contractors/page.tsx:116` calls `POST /api/semse/contractor/leads` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/contractor/leads`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-21f48242a9d0b759", "name": "Dangling fetch: GET /api/semse/operational-signals?limit=100 (project-manager-app/apps/web/app/(app)/admin/mission-contr", "shortDescription": {"text": "Dangling fetch: GET /api/semse/operational-signals?limit=100 (project-manager-app/apps/web/app/(app)/admin/mission-control/page.tsx:306)"}, "fullDescription": {"text": "`project-manager-app/apps/web/app/(app)/admin/mission-control/page.tsx:306` calls `GET /api/semse/operational-signals?limit=100` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/operational-signals`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-01b559a35c7727c3", "name": "Dangling fetch: GET /api/semse/intelligence-runs?limit=10 (project-manager-app/apps/web/app/(app)/admin/mission-control/", "shortDescription": {"text": "Dangling fetch: GET /api/semse/intelligence-runs?limit=10 (project-manager-app/apps/web/app/(app)/admin/mission-control/page.tsx:307)"}, "fullDescription": {"text": "`project-manager-app/apps/web/app/(app)/admin/mission-control/page.tsx:307` calls `GET /api/semse/intelligence-runs?limit=10` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/intelligence-runs`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-82e5c3c4ced16b04", "name": "Dangling fetch: GET /api/semse/buildops/overview (project-manager-app/apps/web/app/(app)/admin/mission-control/page.tsx:", "shortDescription": {"text": "Dangling fetch: GET /api/semse/buildops/overview (project-manager-app/apps/web/app/(app)/admin/mission-control/page.tsx:308)"}, "fullDescription": {"text": "`project-manager-app/apps/web/app/(app)/admin/mission-control/page.tsx:308` calls `GET /api/semse/buildops/overview` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/buildops/overview`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f318edb95bb2bd0a", "name": "Dangling fetch: GET /api/semse/prometeo-brief (project-manager-app/apps/web/app/(app)/admin/mission-control/page.tsx:309", "shortDescription": {"text": "Dangling fetch: GET /api/semse/prometeo-brief (project-manager-app/apps/web/app/(app)/admin/mission-control/page.tsx:309)"}, "fullDescription": {"text": "`project-manager-app/apps/web/app/(app)/admin/mission-control/page.tsx:309` calls `GET /api/semse/prometeo-brief` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/prometeo-brief`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5e28e72e7d94ae95", "name": "Dangling fetch: GET /api/semse/ops/mission-control/summary (project-manager-app/apps/web/app/(app)/admin/mission-control", "shortDescription": {"text": "Dangling fetch: GET /api/semse/ops/mission-control/summary (project-manager-app/apps/web/app/(app)/admin/mission-control/page.tsx:310)"}, "fullDescription": {"text": "`project-manager-app/apps/web/app/(app)/admin/mission-control/page.tsx:310` calls `GET /api/semse/ops/mission-control/summary` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/ops/mission-control/summary`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9ab4975e2a078a12", "name": "Dangling fetch: PATCH /api/semse/operational-signals/${id}/acknowledge (project-manager-app/apps/web/app/(app)/admin/mis", "shortDescription": {"text": "Dangling fetch: PATCH /api/semse/operational-signals/${id}/acknowledge (project-manager-app/apps/web/app/(app)/admin/mission-control/page.tsx:357)"}, "fullDescription": {"text": "`project-manager-app/apps/web/app/(app)/admin/mission-control/page.tsx:357` calls `PATCH /api/semse/operational-signals/${id}/acknowledge` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/operational-signals/<p>/acknowledge`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-19e417a8aaba29e6", "name": "Dangling fetch: PATCH /api/semse/operational-signals/${id}/resolve (project-manager-app/apps/web/app/(app)/admin/mission", "shortDescription": {"text": "Dangling fetch: PATCH /api/semse/operational-signals/${id}/resolve (project-manager-app/apps/web/app/(app)/admin/mission-control/page.tsx:365)"}, "fullDescription": {"text": "`project-manager-app/apps/web/app/(app)/admin/mission-control/page.tsx:365` calls `PATCH /api/semse/operational-signals/${id}/resolve` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/operational-signals/<p>/resolve`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0029ddd19a225b47", "name": "Dangling fetch: POST /api/semse/operational-signals/seed-test (project-manager-app/apps/web/app/(app)/admin/mission-cont", "shortDescription": {"text": "Dangling fetch: POST /api/semse/operational-signals/seed-test (project-manager-app/apps/web/app/(app)/admin/mission-control/page.tsx:588)"}, "fullDescription": {"text": "`project-manager-app/apps/web/app/(app)/admin/mission-control/page.tsx:588` calls `POST /api/semse/operational-signals/seed-test` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/operational-signals/seed-test`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-50ffbfd81871131a", "name": "Dangling fetch: GET /api/semse/ops/ecosystem-metrics (project-manager-app/apps/web/app/(app)/admin/ecosystem/page.tsx:10", "shortDescription": {"text": "Dangling fetch: GET /api/semse/ops/ecosystem-metrics (project-manager-app/apps/web/app/(app)/admin/ecosystem/page.tsx:107)"}, "fullDescription": {"text": "`project-manager-app/apps/web/app/(app)/admin/ecosystem/page.tsx:107` calls `GET /api/semse/ops/ecosystem-metrics` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/ops/ecosystem-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-799e322ce1da0b5f", "name": "Dangling fetch: GET /api/semse/ratings/reputation (project-manager-app/apps/web/app/(app)/admin/reputation/page.tsx:189)", "shortDescription": {"text": "Dangling fetch: GET /api/semse/ratings/reputation (project-manager-app/apps/web/app/(app)/admin/reputation/page.tsx:189)"}, "fullDescription": {"text": "`project-manager-app/apps/web/app/(app)/admin/reputation/page.tsx:189` calls `GET /api/semse/ratings/reputation` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/ratings/reputation`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a5a3279cbc248222", "name": "Dangling fetch: GET /api/semse/ratings (project-manager-app/apps/web/app/(app)/admin/reputation/page.tsx:190)", "shortDescription": {"text": "Dangling fetch: GET /api/semse/ratings (project-manager-app/apps/web/app/(app)/admin/reputation/page.tsx:190)"}, "fullDescription": {"text": "`project-manager-app/apps/web/app/(app)/admin/reputation/page.tsx:190` calls `GET /api/semse/ratings` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/ratings`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9704faca2f0695d2", "name": "Dangling fetch: GET /api/semse/disputes (project-manager-app/apps/web/app/(app)/admin/disputes/page.tsx:141)", "shortDescription": {"text": "Dangling fetch: GET /api/semse/disputes (project-manager-app/apps/web/app/(app)/admin/disputes/page.tsx:141)"}, "fullDescription": {"text": "`project-manager-app/apps/web/app/(app)/admin/disputes/page.tsx:141` calls `GET /api/semse/disputes` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/disputes`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0b2ef3918ea0aff5", "name": "Dangling fetch: POST /api/semse/disputes/${targetId}/resolve (project-manager-app/apps/web/app/(app)/admin/disputes/page", "shortDescription": {"text": "Dangling fetch: POST /api/semse/disputes/${targetId}/resolve (project-manager-app/apps/web/app/(app)/admin/disputes/page.tsx:222)"}, "fullDescription": {"text": "`project-manager-app/apps/web/app/(app)/admin/disputes/page.tsx:222` calls `POST /api/semse/disputes/${targetId}/resolve` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/disputes/<p>/resolve`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2fb283a102a1ea09", "name": "Dangling fetch: GET /api/semse/buildops/projects?limit=50 (project-manager-app/apps/web/app/(app)/admin/intelligence-roo", "shortDescription": {"text": "Dangling fetch: GET /api/semse/buildops/projects?limit=50 (project-manager-app/apps/web/app/(app)/admin/intelligence-rooms/page.tsx:37)"}, "fullDescription": {"text": "`project-manager-app/apps/web/app/(app)/admin/intelligence-rooms/page.tsx:37` calls `GET /api/semse/buildops/projects?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: `/semse/buildops/projects`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3fce216951b88809", "name": "Dangling fetch: GET /api/semse/buildops/projects/${projectId} (project-manager-app/apps/web/app/(app)/admin/intelligence", "shortDescription": {"text": "Dangling fetch: GET /api/semse/buildops/projects/${projectId} (project-manager-app/apps/web/app/(app)/admin/intelligence-rooms/[id]/page.tsx:110)"}, "fullDescription": {"text": "`project-manager-app/apps/web/app/(app)/admin/intelligence-rooms/[id]/page.tsx:110` calls `GET /api/semse/buildops/projects/${projectId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/buildops/projects/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4f3f90b471b7e12d", "name": "Dangling fetch: GET /api/semse/operational-signals?buildOpsProjectId=${projectId}&limit=50 (project-manager-app/apps/web", "shortDescription": {"text": "Dangling fetch: GET /api/semse/operational-signals?buildOpsProjectId=${projectId}&limit=50 (project-manager-app/apps/web/app/(app)/admin/intelligence-rooms/[id]/page.tsx:111)"}, "fullDescription": {"text": "`project-manager-app/apps/web/app/(app)/admin/intelligence-rooms/[id]/page.tsx:111` calls `GET /api/semse/operational-signals?buildOpsProjectId=${projectId}&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: `/semse/operational-signals`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f76e736c75fd9cce", "name": "Dangling fetch: GET /api/semse/prometeo-brief?buildOpsProjectId=${projectId} (project-manager-app/apps/web/app/(app)/adm", "shortDescription": {"text": "Dangling fetch: GET /api/semse/prometeo-brief?buildOpsProjectId=${projectId} (project-manager-app/apps/web/app/(app)/admin/intelligence-rooms/[id]/page.tsx:112)"}, "fullDescription": {"text": "`project-manager-app/apps/web/app/(app)/admin/intelligence-rooms/[id]/page.tsx:112` calls `GET /api/semse/prometeo-brief?buildOpsProjectId=${projectId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/prometeo-brief`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-424c58f9870e4dcd", "name": "Dangling fetch: GET /api/semse/intelligence-runs?limit=10 (project-manager-app/apps/web/app/(app)/admin/intelligence-roo", "shortDescription": {"text": "Dangling fetch: GET /api/semse/intelligence-runs?limit=10 (project-manager-app/apps/web/app/(app)/admin/intelligence-rooms/[id]/page.tsx:113)"}, "fullDescription": {"text": "`project-manager-app/apps/web/app/(app)/admin/intelligence-rooms/[id]/page.tsx:113` calls `GET /api/semse/intelligence-runs?limit=10` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/intelligence-runs`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a639ad0f72f1a5e9", "name": "Dangling fetch: GET /api/semse/buildops/projects/${projectId}/activity?limit=30 (project-manager-app/apps/web/app/(app)/", "shortDescription": {"text": "Dangling fetch: GET /api/semse/buildops/projects/${projectId}/activity?limit=30 (project-manager-app/apps/web/app/(app)/admin/intelligence-rooms/[id]/page.tsx:114)"}, "fullDescription": {"text": "`project-manager-app/apps/web/app/(app)/admin/intelligence-rooms/[id]/page.tsx:114` calls `GET /api/semse/buildops/projects/${projectId}/activity?limit=30` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/buildops/projects/<p>/activity`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-592da915291b685e", "name": "Dangling fetch: PATCH /api/semse/operational-signals/${id}/acknowledge (project-manager-app/apps/web/app/(app)/admin/int", "shortDescription": {"text": "Dangling fetch: PATCH /api/semse/operational-signals/${id}/acknowledge (project-manager-app/apps/web/app/(app)/admin/intelligence-rooms/[id]/page.tsx:147)"}, "fullDescription": {"text": "`project-manager-app/apps/web/app/(app)/admin/intelligence-rooms/[id]/page.tsx:147` calls `PATCH /api/semse/operational-signals/${id}/acknowledge` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/operational-signals/<p>/acknowledge`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b4380506acaa92fe", "name": "Dangling fetch: PATCH /api/semse/operational-signals/${id}/resolve (project-manager-app/apps/web/app/(app)/admin/intelli", "shortDescription": {"text": "Dangling fetch: PATCH /api/semse/operational-signals/${id}/resolve (project-manager-app/apps/web/app/(app)/admin/intelligence-rooms/[id]/page.tsx:155)"}, "fullDescription": {"text": "`project-manager-app/apps/web/app/(app)/admin/intelligence-rooms/[id]/page.tsx:155` calls `PATCH /api/semse/operational-signals/${id}/resolve` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/operational-signals/<p>/resolve`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-95f296cbbc9f24cb", "name": "Dangling fetch: POST /api/semse/tools/calculate (project-manager-app/apps/web/app/(app)/tools/project-manager/project-ma", "shortDescription": {"text": "Dangling fetch: POST /api/semse/tools/calculate (project-manager-app/apps/web/app/(app)/tools/project-manager/project-manager-tool-client.tsx:98)"}, "fullDescription": {"text": "`project-manager-app/apps/web/app/(app)/tools/project-manager/project-manager-tool-client.tsx:98` calls `POST /api/semse/tools/calculate` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/tools/calculate`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a48acf82b8a3fcc9", "name": "Dangling fetch: POST /api/semse/auth/register (project-manager-app/apps/web/app/register/page.tsx:86)", "shortDescription": {"text": "Dangling fetch: POST /api/semse/auth/register (project-manager-app/apps/web/app/register/page.tsx:86)"}, "fullDescription": {"text": "`project-manager-app/apps/web/app/register/page.tsx:86` calls `POST /api/semse/auth/register` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/auth/register`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-af44d1488b449543", "name": "Dangling fetch: GET /api/semse/runtime-knowledge/tree (project-manager-app/apps/web/app/runtime-map/runtime-map-client.t", "shortDescription": {"text": "Dangling fetch: GET /api/semse/runtime-knowledge/tree (project-manager-app/apps/web/app/runtime-map/runtime-map-client.tsx:40)"}, "fullDescription": {"text": "`project-manager-app/apps/web/app/runtime-map/runtime-map-client.tsx:40` calls `GET /api/semse/runtime-knowledge/tree` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/runtime-knowledge/tree`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2d87cc6750171616", "name": "Dangling fetch: GET /api/semse/runtime-knowledge/status (project-manager-app/apps/web/app/runtime-map/runtime-map-client", "shortDescription": {"text": "Dangling fetch: GET /api/semse/runtime-knowledge/status (project-manager-app/apps/web/app/runtime-map/runtime-map-client.tsx:41)"}, "fullDescription": {"text": "`project-manager-app/apps/web/app/runtime-map/runtime-map-client.tsx:41` calls `GET /api/semse/runtime-knowledge/status` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/runtime-knowledge/status`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6ed16bf80797f8dc", "name": "Dangling fetch: GET /api/semse/runtime-knowledge/node/${selectedNodeId} (project-manager-app/apps/web/app/runtime-map/ru", "shortDescription": {"text": "Dangling fetch: GET /api/semse/runtime-knowledge/node/${selectedNodeId} (project-manager-app/apps/web/app/runtime-map/runtime-map-client.tsx:55)"}, "fullDescription": {"text": "`project-manager-app/apps/web/app/runtime-map/runtime-map-client.tsx:55` calls `GET /api/semse/runtime-knowledge/node/${selectedNodeId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/runtime-knowledge/node/<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-9e658637615e180a", "name": "Dangling fetch: GET /api/semse/runtime-knowledge/children/${selectedNodeId} (project-manager-app/apps/web/app/runtime-ma", "shortDescription": {"text": "Dangling fetch: GET /api/semse/runtime-knowledge/children/${selectedNodeId} (project-manager-app/apps/web/app/runtime-map/runtime-map-client.tsx:56)"}, "fullDescription": {"text": "`project-manager-app/apps/web/app/runtime-map/runtime-map-client.tsx:56` calls `GET /api/semse/runtime-knowledge/children/${selectedNodeId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/runtime-knowledge/children/<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-292fde93e64e90d2", "name": "Dangling fetch: GET /api/semse/runtime-knowledge/relations/${selectedNodeId} (project-manager-app/apps/web/app/runtime-m", "shortDescription": {"text": "Dangling fetch: GET /api/semse/runtime-knowledge/relations/${selectedNodeId} (project-manager-app/apps/web/app/runtime-map/runtime-map-client.tsx:57)"}, "fullDescription": {"text": "`project-manager-app/apps/web/app/runtime-map/runtime-map-client.tsx:57` calls `GET /api/semse/runtime-knowledge/relations/${selectedNodeId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/runtime-knowledge/relations/<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-3922a6b0fc924877", "name": "Dangling fetch: POST /api/semse/runtime-knowledge/query (project-manager-app/apps/web/app/runtime-map/runtime-map-client", "shortDescription": {"text": "Dangling fetch: POST /api/semse/runtime-knowledge/query (project-manager-app/apps/web/app/runtime-map/runtime-map-client.tsx:85)"}, "fullDescription": {"text": "`project-manager-app/apps/web/app/runtime-map/runtime-map-client.tsx:85` calls `POST /api/semse/runtime-knowledge/query` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/runtime-knowledge/query`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-eda58ad2827ddb0d", "name": "Dangling fetch: GET /api/semse/knowledge/overview (project-manager-app/apps/web/app/knowledge/knowledge-client.tsx:20)", "shortDescription": {"text": "Dangling fetch: GET /api/semse/knowledge/overview (project-manager-app/apps/web/app/knowledge/knowledge-client.tsx:20)"}, "fullDescription": {"text": "`project-manager-app/apps/web/app/knowledge/knowledge-client.tsx:20` calls `GET /api/semse/knowledge/overview` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/knowledge/overview`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5262a1d82d451731", "name": "Dangling fetch: POST /api/semse/tools/ai-assist (project-manager-app/apps/web/app/(public)/worker/apply/[id]/page.tsx:13", "shortDescription": {"text": "Dangling fetch: POST /api/semse/tools/ai-assist (project-manager-app/apps/web/app/(public)/worker/apply/[id]/page.tsx:136)"}, "fullDescription": {"text": "`project-manager-app/apps/web/app/(public)/worker/apply/[id]/page.tsx:136` calls `POST /api/semse/tools/ai-assist` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/tools/ai-assist`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6e46fb763b0d7028", "name": "Dangling fetch: POST /api/semse/public/intake/analyze (project-manager-app/apps/web/hooks/use-intake.ts:66)", "shortDescription": {"text": "Dangling fetch: POST /api/semse/public/intake/analyze (project-manager-app/apps/web/hooks/use-intake.ts:66)"}, "fullDescription": {"text": "`project-manager-app/apps/web/hooks/use-intake.ts:66` calls `POST /api/semse/public/intake/analyze` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/public/intake/analyze`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c079fece25279f78", "name": "Dangling fetch: GET /api/semse/public/intake/${encodeURIComponent(id)} (project-manager-app/apps/web/hooks/use-intake.ts", "shortDescription": {"text": "Dangling fetch: GET /api/semse/public/intake/${encodeURIComponent(id)} (project-manager-app/apps/web/hooks/use-intake.ts:89)"}, "fullDescription": {"text": "`project-manager-app/apps/web/hooks/use-intake.ts:89` calls `GET /api/semse/public/intake/${encodeURIComponent(id)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/public/intake/<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-d6091b0ed5a0eeb0", "name": "Dangling fetch: PATCH /api/semse/public/intake/${encodeURIComponent(intakeId)}/answer (project-manager-app/apps/web/hook", "shortDescription": {"text": "Dangling fetch: PATCH /api/semse/public/intake/${encodeURIComponent(intakeId)}/answer (project-manager-app/apps/web/hooks/use-intake.ts:110)"}, "fullDescription": {"text": "`project-manager-app/apps/web/hooks/use-intake.ts:110` calls `PATCH /api/semse/public/intake/${encodeURIComponent(intakeId)}/answer` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/public/intake/<p>/answer`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4732478d2ef14c31", "name": "Dangling fetch: POST /api/semse/public/intake/${encodeURIComponent(intakeId)}/images (project-manager-app/apps/web/hooks", "shortDescription": {"text": "Dangling fetch: POST /api/semse/public/intake/${encodeURIComponent(intakeId)}/images (project-manager-app/apps/web/hooks/use-intake.ts:141)"}, "fullDescription": {"text": "`project-manager-app/apps/web/hooks/use-intake.ts:141` calls `POST /api/semse/public/intake/${encodeURIComponent(intakeId)}/images` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/public/intake/<p>/images`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b6e6ac231b5a8d5a", "name": "Dangling fetch: POST /api/semse/public/intake/${encodeURIComponent(intakeId)}/estimate${suffix} (project-manager-app/app", "shortDescription": {"text": "Dangling fetch: POST /api/semse/public/intake/${encodeURIComponent(intakeId)}/estimate${suffix} (project-manager-app/apps/web/hooks/use-intake.ts:167)"}, "fullDescription": {"text": "`project-manager-app/apps/web/hooks/use-intake.ts:167` calls `POST /api/semse/public/intake/${encodeURIComponent(intakeId)}/estimate${suffix}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/public/intake/<p>/estimate/<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-542c97d680d447d3", "name": "Dangling fetch: POST /api/semse/intake/${encodeURIComponent(id)}/claim (project-manager-app/apps/web/hooks/use-intake.ts", "shortDescription": {"text": "Dangling fetch: POST /api/semse/intake/${encodeURIComponent(id)}/claim (project-manager-app/apps/web/hooks/use-intake.ts:181)"}, "fullDescription": {"text": "`project-manager-app/apps/web/hooks/use-intake.ts:181` calls `POST /api/semse/intake/${encodeURIComponent(id)}/claim` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/intake/<p>/claim`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ac062db22a2ae976", "name": "Dangling fetch: POST /api/semse/notifications/push-subscribe (project-manager-app/apps/web/hooks/usePushNotifications.ts", "shortDescription": {"text": "Dangling fetch: POST /api/semse/notifications/push-subscribe (project-manager-app/apps/web/hooks/usePushNotifications.ts:44)"}, "fullDescription": {"text": "`project-manager-app/apps/web/hooks/usePushNotifications.ts:44` calls `POST /api/semse/notifications/push-subscribe` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/semse/notifications/push-subscribe`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-fca11d494725d7c3", "name": "Unused endpoint: POST /analyze", "shortDescription": {"text": "Unused endpoint: POST /analyze"}, "fullDescription": {"text": "`project-manager-app/apps/vision-service/app/routes/evidence.py` declares `POST /analyze` 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-59dc92bd3719d52d", "name": "Unused endpoint: POST /compare-before-after", "shortDescription": {"text": "Unused endpoint: POST /compare-before-after"}, "fullDescription": {"text": "`project-manager-app/apps/vision-service/app/routes/evidence.py` declares `POST /compare-before-after` 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-e2520e53e12565e1", "name": "Unused endpoint: POST /check-duplicate", "shortDescription": {"text": "Unused endpoint: POST /check-duplicate"}, "fullDescription": {"text": "`project-manager-app/apps/vision-service/app/routes/evidence.py` declares `POST /check-duplicate` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e6dfad482a8c651e", "name": "Unused endpoint: POST /blueprint", "shortDescription": {"text": "Unused endpoint: POST /blueprint"}, "fullDescription": {"text": "`project-manager-app/apps/vision-service/app/routes/evidence.py` declares `POST /blueprint` 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-924ba797d3439aab", "name": "Unused endpoint: POST /perspective-correct", "shortDescription": {"text": "Unused endpoint: POST /perspective-correct"}, "fullDescription": {"text": "`project-manager-app/apps/vision-service/app/routes/evidence.py` declares `POST /perspective-correct` 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-cd4f7db6bbc9f46f", "name": "Unused endpoint: POST /document-binarize", "shortDescription": {"text": "Unused endpoint: POST /document-binarize"}, "fullDescription": {"text": "`project-manager-app/apps/vision-service/app/routes/evidence.py` declares `POST /document-binarize` 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-3eba5e001a8a6691", "name": "Unused endpoint: POST /estimate-area", "shortDescription": {"text": "Unused endpoint: POST /estimate-area"}, "fullDescription": {"text": "`project-manager-app/apps/vision-service/app/routes/evidence.py` declares `POST /estimate-area` 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-9aaee59a52ee81d5", "name": "Unused endpoint: POST /check-consistency", "shortDescription": {"text": "Unused endpoint: POST /check-consistency"}, "fullDescription": {"text": "`project-manager-app/apps/vision-service/app/routes/evidence.py` declares `POST /check-consistency` 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-7fe87e2399a385dd", "name": "Unused endpoint: POST /progress-timeline", "shortDescription": {"text": "Unused endpoint: POST /progress-timeline"}, "fullDescription": {"text": "`project-manager-app/apps/vision-service/app/routes/evidence.py` declares `POST /progress-timeline` 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-cc05b8d5abac3944", "name": "Unused endpoint: POST /safety-check", "shortDescription": {"text": "Unused endpoint: POST /safety-check"}, "fullDescription": {"text": "`project-manager-app/apps/vision-service/app/routes/evidence.py` declares `POST /safety-check` 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-cd8226b113423557", "name": "Unused endpoint: POST /match-reference", "shortDescription": {"text": "Unused endpoint: POST /match-reference"}, "fullDescription": {"text": "`project-manager-app/apps/vision-service/app/routes/evidence.py` declares `POST /match-reference` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-250247210267532e", "name": "Unused endpoint: POST /detect-trade", "shortDescription": {"text": "Unused endpoint: POST /detect-trade"}, "fullDescription": {"text": "`project-manager-app/apps/vision-service/app/routes/evidence.py` declares `POST /detect-trade` 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-735472b4f5b406c9", "name": "Unused endpoint: POST /batch-analyze", "shortDescription": {"text": "Unused endpoint: POST /batch-analyze"}, "fullDescription": {"text": "`project-manager-app/apps/vision-service/app/routes/evidence.py` declares `POST /batch-analyze` 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": "`project-manager-app/apps/api/src/main.ts` 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-4f16e97d5209bb16", "name": "Unused endpoint: POST /v1/governance/proposals", "shortDescription": {"text": "Unused endpoint: POST /v1/governance/proposals"}, "fullDescription": {"text": "`project-manager-app/apps/api/src/modules/governance/governance.controller.ts` declares `POST /v1/governance/proposals` 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-6fb52633f70bbf8e", "name": "Unused endpoint: GET /v1/governance/proposals", "shortDescription": {"text": "Unused endpoint: GET /v1/governance/proposals"}, "fullDescription": {"text": "`project-manager-app/apps/api/src/modules/governance/governance.controller.ts` declares `GET /v1/governance/proposals` 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-633289fff260f3ad", "name": "Unused endpoint: GET /v1/governance/proposals/:id", "shortDescription": {"text": "Unused endpoint: GET /v1/governance/proposals/:id"}, "fullDescription": {"text": "`project-manager-app/apps/api/src/modules/governance/governance.controller.ts` declares `GET /v1/governance/proposals/: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-41d2a54de47ba416", "name": "Unused endpoint: GET /v1/governance/proposals/:id/results", "shortDescription": {"text": "Unused endpoint: GET /v1/governance/proposals/:id/results"}, "fullDescription": {"text": "`project-manager-app/apps/api/src/modules/governance/governance.controller.ts` declares `GET /v1/governance/proposals/:id/results` 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-ff26076f39d43daa", "name": "Unused endpoint: POST /v1/governance/proposals/:id/vote", "shortDescription": {"text": "Unused endpoint: POST /v1/governance/proposals/:id/vote"}, "fullDescription": {"text": "`project-manager-app/apps/api/src/modules/governance/governance.controller.ts` declares `POST /v1/governance/proposals/:id/vote` 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-2ac41cdca680dc19", "name": "Unused endpoint: POST /v1/governance/proposals/:id/close", "shortDescription": {"text": "Unused endpoint: POST /v1/governance/proposals/:id/close"}, "fullDescription": {"text": "`project-manager-app/apps/api/src/modules/governance/governance.controller.ts` declares `POST /v1/governance/proposals/:id/close` 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-6d1f5f6035f2f9d2", "name": "Unused endpoint: GET /v1/governance/credits/:userId", "shortDescription": {"text": "Unused endpoint: GET /v1/governance/credits/:userId"}, "fullDescription": {"text": "`project-manager-app/apps/api/src/modules/governance/governance.controller.ts` declares `GET /v1/governance/credits/:userId` 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-b8aab06e4768af77", "name": "Unused endpoint: POST /v1/prometeo/ingest", "shortDescription": {"text": "Unused endpoint: POST /v1/prometeo/ingest"}, "fullDescription": {"text": "`project-manager-app/apps/api/src/modules/prometeo/prometeo.controller.ts` declares `POST /v1/prometeo/ingest` 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-141e889d47a90d8d", "name": "Unused endpoint: POST /v1/prometeo/ingest-file", "shortDescription": {"text": "Unused endpoint: POST /v1/prometeo/ingest-file"}, "fullDescription": {"text": "`project-manager-app/apps/api/src/modules/prometeo/prometeo.controller.ts` declares `POST /v1/prometeo/ingest-file` 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-c05899f1a47c87bb", "name": "Unused endpoint: GET /v1/prometeo/trade-library", "shortDescription": {"text": "Unused endpoint: GET /v1/prometeo/trade-library"}, "fullDescription": {"text": "`project-manager-app/apps/api/src/modules/prometeo/prometeo.controller.ts` declares `GET /v1/prometeo/trade-library` 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-bfbe34efcb3f5afb", "name": "Unused endpoint: GET /v1/prometeo/documents", "shortDescription": {"text": "Unused endpoint: GET /v1/prometeo/documents"}, "fullDescription": {"text": "`project-manager-app/apps/api/src/modules/prometeo/prometeo.controller.ts` declares `GET /v1/prometeo/documents` 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-879541353fb8d131", "name": "Unused endpoint: DELETE /v1/prometeo/documents/:id", "shortDescription": {"text": "Unused endpoint: DELETE /v1/prometeo/documents/:id"}, "fullDescription": {"text": "`project-manager-app/apps/api/src/modules/prometeo/prometeo.controller.ts` declares `DELETE /v1/prometeo/documents/: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-9795f927e35e43b5", "name": "Unused endpoint: POST /v1/prometeo/search", "shortDescription": {"text": "Unused endpoint: POST /v1/prometeo/search"}, "fullDescription": {"text": "`project-manager-app/apps/api/src/modules/prometeo/prometeo.controller.ts` declares `POST /v1/prometeo/search` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-978c9603025aee8f", "name": "Unused endpoint: POST /v1/prometeo/rag-context", "shortDescription": {"text": "Unused endpoint: POST /v1/prometeo/rag-context"}, "fullDescription": {"text": "`project-manager-app/apps/api/src/modules/prometeo/prometeo.controller.ts` declares `POST /v1/prometeo/rag-context` 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-755fcaff708fd8af", "name": "Unused endpoint: POST /v1/prometeo/rag-query", "shortDescription": {"text": "Unused endpoint: POST /v1/prometeo/rag-query"}, "fullDescription": {"text": "`project-manager-app/apps/api/src/modules/prometeo/prometeo.controller.ts` declares `POST /v1/prometeo/rag-query` 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-5363d3ac213bc648", "name": "Unused endpoint: POST /v1/prometeo/trade-guide", "shortDescription": {"text": "Unused endpoint: POST /v1/prometeo/trade-guide"}, "fullDescription": {"text": "`project-manager-app/apps/api/src/modules/prometeo/prometeo.controller.ts` declares `POST /v1/prometeo/trade-guide` 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-19ce9739091dd701", "name": "Unused endpoint: POST /v1/prometeo/assets", "shortDescription": {"text": "Unused endpoint: POST /v1/prometeo/assets"}, "fullDescription": {"text": "`project-manager-app/apps/api/src/modules/prometeo/prometeo.controller.ts` declares `POST /v1/prometeo/assets` 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-53f142f0fcd1aa99", "name": "Unused endpoint: GET /v1/prometeo/assets", "shortDescription": {"text": "Unused endpoint: GET /v1/prometeo/assets"}, "fullDescription": {"text": "`project-manager-app/apps/api/src/modules/prometeo/prometeo.controller.ts` declares `GET /v1/prometeo/assets` 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-8d9818e10cf7d74a", "name": "Unused endpoint: PATCH /v1/prometeo/assets/:id/status", "shortDescription": {"text": "Unused endpoint: PATCH /v1/prometeo/assets/:id/status"}, "fullDescription": {"text": "`project-manager-app/apps/api/src/modules/prometeo/prometeo.controller.ts` declares `PATCH /v1/prometeo/assets/: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-29cc949f0e2431c8", "name": "Unused endpoint: POST /v1/prometeo/work-orders", "shortDescription": {"text": "Unused endpoint: POST /v1/prometeo/work-orders"}, "fullDescription": {"text": "`project-manager-app/apps/api/src/modules/prometeo/prometeo.controller.ts` declares `POST /v1/prometeo/work-orders` 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-0b4261fb61ab6fcb", "name": "Unused endpoint: GET /v1/prometeo/work-orders", "shortDescription": {"text": "Unused endpoint: GET /v1/prometeo/work-orders"}, "fullDescription": {"text": "`project-manager-app/apps/api/src/modules/prometeo/prometeo.controller.ts` declares `GET /v1/prometeo/work-orders` 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-2e2c09195a54c321", "name": "Unused endpoint: PATCH /v1/prometeo/work-orders/:id/status", "shortDescription": {"text": "Unused endpoint: PATCH /v1/prometeo/work-orders/:id/status"}, "fullDescription": {"text": "`project-manager-app/apps/api/src/modules/prometeo/prometeo.controller.ts` declares `PATCH /v1/prometeo/work-orders/: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-98b847af3e06efaf", "name": "Unused endpoint: GET /v1/prometeo/embeddings/health", "shortDescription": {"text": "Unused endpoint: GET /v1/prometeo/embeddings/health"}, "fullDescription": {"text": "`project-manager-app/apps/api/src/modules/prometeo/prometeo.controller.ts` declares `GET /v1/prometeo/embeddings/health` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a17fef6c3f40042b", "name": "Unused endpoint: POST /v1/prometeo/embeddings/backfill", "shortDescription": {"text": "Unused endpoint: POST /v1/prometeo/embeddings/backfill"}, "fullDescription": {"text": "`project-manager-app/apps/api/src/modules/prometeo/prometeo.controller.ts` declares `POST /v1/prometeo/embeddings/backfill` 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-e9ac677cc830e501", "name": "Unused endpoint: POST /v1/prometeo/chunks/:chunkId/feedback", "shortDescription": {"text": "Unused endpoint: POST /v1/prometeo/chunks/:chunkId/feedback"}, "fullDescription": {"text": "`project-manager-app/apps/api/src/modules/prometeo/prometeo.controller.ts` declares `POST /v1/prometeo/chunks/:chunkId/feedback` 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-5db12be19636dfc2", "name": "Unused endpoint: GET /v1/prometeo/feedback/stats", "shortDescription": {"text": "Unused endpoint: GET /v1/prometeo/feedback/stats"}, "fullDescription": {"text": "`project-manager-app/apps/api/src/modules/prometeo/prometeo.controller.ts` declares `GET /v1/prometeo/feedback/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-13e4046d3a6aab4a", "name": "Unused endpoint: GET /v1/users/me", "shortDescription": {"text": "Unused endpoint: GET /v1/users/me"}, "fullDescription": {"text": "`project-manager-app/apps/api/src/modules/users/users.controller.ts` declares `GET /v1/users/me` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b94f4cfc3eecd9d8", "name": "Unused endpoint: GET /v1/users/me/profile", "shortDescription": {"text": "Unused endpoint: GET /v1/users/me/profile"}, "fullDescription": {"text": "`project-manager-app/apps/api/src/modules/users/users.controller.ts` declares `GET /v1/users/me/profile` 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-086f434190656683", "name": "Unused endpoint: PATCH /v1/users/me/profile", "shortDescription": {"text": "Unused endpoint: PATCH /v1/users/me/profile"}, "fullDescription": {"text": "`project-manager-app/apps/api/src/modules/users/users.controller.ts` declares `PATCH /v1/users/me/profile` 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-b243dc57849086cb", "name": "Unused endpoint: GET /v1/users/:userId", "shortDescription": {"text": "Unused endpoint: GET /v1/users/:userId"}, "fullDescription": {"text": "`project-manager-app/apps/api/src/modules/users/users.controller.ts` declares `GET /v1/users/:userId` 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-d5454b9ce3aadf21", "name": "Unused endpoint: GET /v1/users/:userId/memberships", "shortDescription": {"text": "Unused endpoint: GET /v1/users/:userId/memberships"}, "fullDescription": {"text": "`project-manager-app/apps/api/src/modules/users/users.controller.ts` declares `GET /v1/users/:userId/memberships` 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-f75b3140ad491cd8", "name": "Unused endpoint: POST /v1/users/:userId/verify", "shortDescription": {"text": "Unused endpoint: POST /v1/users/:userId/verify"}, "fullDescription": {"text": "`project-manager-app/apps/api/src/modules/users/users.controller.ts` declares `POST /v1/users/:userId/verify` 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-00d148b55d4afd3e", "name": "Unused endpoint: PATCH /v1/users/:userId/status", "shortDescription": {"text": "Unused endpoint: PATCH /v1/users/:userId/status"}, "fullDescription": {"text": "`project-manager-app/apps/api/src/modules/users/users.controller.ts` declares `PATCH /v1/users/:userId/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-0db84137722a588a", "name": "Unused endpoint: POST /v1/contractor/leads", "shortDescription": {"text": "Unused endpoint: POST /v1/contractor/leads"}, "fullDescription": {"text": "`project-manager-app/apps/api/src/modules/contractor/contractor.controller.ts` declares `POST /v1/contractor/leads` 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-89d0eea911b9d938", "name": "Unused endpoint: GET /v1/contractor/leads", "shortDescription": {"text": "Unused endpoint: GET /v1/contractor/leads"}, "fullDescription": {"text": "`project-manager-app/apps/api/src/modules/contractor/contractor.controller.ts` declares `GET /v1/contractor/leads` 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-07b767853efa22b2", "name": "Unused endpoint: GET /v1/contractor/leads/stats", "shortDescription": {"text": "Unused endpoint: GET /v1/contractor/leads/stats"}, "fullDescription": {"text": "`project-manager-app/apps/api/src/modules/contractor/contractor.controller.ts` declares `GET /v1/contractor/leads/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}}]}}, "automationDetails": {"id": "repobility/19257"}, "properties": {"repository": "Semse-projet/project-manager-app", "repoUrl": "https://github.com/Semse-projet/project-manager-app", "branch": "main"}, "results": [{"ruleId": "scanner-24047514c0410825", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 project-manager-app/apps/api/src/modules/ops/simulation-engine.service.ts:96"}, "properties": {"repobilityId": "8ce4b67822c69e11", "scanner": "scanner-primary", "fingerprint": "24047514c0410825", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-e7ab456b7ecee9b8", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 project-manager-app/apps/api/src/modules/ops/apply-engine.service.ts:68"}, "properties": {"repobilityId": "982b60cc3af8e257", "scanner": "scanner-primary", "fingerprint": "e7ab456b7ecee9b8", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-fdd671f912d27c83", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 project-manager-app/apps/web/components/semse/PatchDiffViewer.tsx:62"}, "properties": {"repobilityId": "f7aecf4ad21fdfaf", "scanner": "scanner-primary", "fingerprint": "fdd671f912d27c83", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-f6285a8ac38d1b35", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 project-manager-app/apps/web/components/landing/agents-simulator.tsx:384"}, "properties": {"repobilityId": "37ae489fca3d1db3", "scanner": "scanner-primary", "fingerprint": "f6285a8ac38d1b35", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-df718c83ffbff392", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 project-manager-app/apps/web/app/sprint-1-dashboard.tsx:157"}, "properties": {"repobilityId": "d239e00ca70b8605", "scanner": "scanner-primary", "fingerprint": "df718c83ffbff392", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-bda63f1a3cf55b0c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 project-manager-app/apps/web/app/dashboard/dashboard-client.tsx:279"}, "properties": {"repobilityId": "95b462a1ecf8ee72", "scanner": "scanner-primary", "fingerprint": "bda63f1a3cf55b0c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1b1d6e399882ffa9", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 project-manager-app/apps/web/app/field-ops/page.tsx:133"}, "properties": {"repobilityId": "e0a7070bbb238765", "scanner": "scanner-primary", "fingerprint": "1b1d6e399882ffa9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-35b6ae1973c2fb6e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 project-manager-app/apps/web/app/field-ops/page.tsx:310"}, "properties": {"repobilityId": "f0ea634b2c0ba451", "scanner": "scanner-primary", "fingerprint": "35b6ae1973c2fb6e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4208fdd8dbc4b62a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 project-manager-app/apps/web/app/(app)/layout.tsx:465"}, "properties": {"repobilityId": "8dfacfaf94f94dc3", "scanner": "scanner-primary", "fingerprint": "4208fdd8dbc4b62a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e800cc7256fdfafb", "level": "note", "message": {"text": "\"active\" state uses light bg in a dark theme \u2014 project-manager-app/apps/web/app/(app)/layout.tsx:459"}, "properties": {"repobilityId": "6f5dc0a6905ecdee", "scanner": "scanner-primary", "fingerprint": "e800cc7256fdfafb", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.active-light-bg"]}}, {"ruleId": "scanner-06e6cff60c812c84", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 project-manager-app/apps/web/app/(app)/client/leads/page.tsx:508"}, "properties": {"repobilityId": "d5acbf933e22893e", "scanner": "scanner-primary", "fingerprint": "06e6cff60c812c84", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-f92f876363469317", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 project-manager-app/apps/web/app/(app)/client/projects/[projectId]/copilot/components/plan-task-graph.tsx:227"}, "properties": {"repobilityId": "2ed3cf832f5b97ca", "scanner": "scanner-primary", "fingerprint": "f92f876363469317", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-a6c8f3c977903fef", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 project-manager-app/apps/web/app/(app)/worker/field-ops/page.tsx:133"}, "properties": {"repobilityId": "e176556067526617", "scanner": "scanner-primary", "fingerprint": "a6c8f3c977903fef", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-8e7fa859fdbca9ea", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 project-manager-app/apps/web/app/(app)/worker/field-ops/page.tsx:310"}, "properties": {"repobilityId": "60e5e812d6311612", "scanner": "scanner-primary", "fingerprint": "8e7fa859fdbca9ea", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0e0e67a5c25f0b96", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 project-manager-app/apps/web/app/(app)/worker/travel/[travelId]/page.tsx:455"}, "properties": {"repobilityId": "4bc259c2235e5ed1", "scanner": "scanner-primary", "fingerprint": "0e0e67a5c25f0b96", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-86e25892e4eb9877", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 project-manager-app/apps/web/app/(app)/admin/governance/page.tsx:298"}, "properties": {"repobilityId": "b1e7b8d99febac10", "scanner": "scanner-primary", "fingerprint": "86e25892e4eb9877", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-dbee684068f777fc", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 project-manager-app/apps/web/app/(app)/admin/browser-agent/page.tsx:321"}, "properties": {"repobilityId": "60ad34d0d8b34446", "scanner": "scanner-primary", "fingerprint": "dbee684068f777fc", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d556916c096286fa", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 project-manager-app/apps/web/app/(app)/tools/painting/painting-tool-client.tsx:232"}, "properties": {"repobilityId": "af6eb42bfe917223", "scanner": "scanner-primary", "fingerprint": "d556916c096286fa", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e2c06ea05f8bd463", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 project-manager-app/apps/web/app/(app)/tools/dashboard/page.tsx:186"}, "properties": {"repobilityId": "99090a6fea045fe2", "scanner": "scanner-primary", "fingerprint": "e2c06ea05f8bd463", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-08ce7d285f8750b1", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 project-manager-app/apps/web/app/(app)/tools/electrical/electrical-tool-client.tsx:624"}, "properties": {"repobilityId": "963b44a120763436", "scanner": "scanner-primary", "fingerprint": "08ce7d285f8750b1", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-39efc91d613de3a4", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 project-manager-app/apps/web/app/jobs/new/page.tsx:162"}, "properties": {"repobilityId": "47c420aaf3af9316", "scanner": "scanner-primary", "fingerprint": "39efc91d613de3a4", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-0340ae9ad601ddd5", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 project-manager-app/apps/web/app/jobs/[jobId]/page.tsx:301"}, "properties": {"repobilityId": "259a7484ab59dbb5", "scanner": "scanner-primary", "fingerprint": "0340ae9ad601ddd5", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d8ffce1bf9a1da01", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 project-manager-app/apps/web/app/jobs/[jobId]/evidence/page.tsx:413"}, "properties": {"repobilityId": "d62f8ddecc1f522c", "scanner": "scanner-primary", "fingerprint": "d8ffce1bf9a1da01", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a1ba56a09fb8eb28", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 project-manager-app/packages/shared/src/observability/logger.ts:141"}, "properties": {"repobilityId": "0f1a0d51872efdf8", "scanner": "scanner-primary", "fingerprint": "a1ba56a09fb8eb28", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3afbc01508c1bf15", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 project-manager-app/packages/ui/src/layout/AppShell.tsx:91"}, "properties": {"repobilityId": "85b62acc73c03aa1", "scanner": "scanner-primary", "fingerprint": "3afbc01508c1bf15", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-16924efe5836143b", "level": "note", "message": {"text": "\"active\" state uses light bg in a dark theme \u2014 project-manager-app/packages/ui/src/layout/AppShell.tsx:87"}, "properties": {"repobilityId": "c11a2f4a7d0677ec", "scanner": "scanner-primary", "fingerprint": "16924efe5836143b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.active-light-bg"]}}, {"ruleId": "scanner-9596d76005cd7311", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 project-manager-app/packages/ui/src/components/JobCard.tsx:77"}, "properties": {"repobilityId": "696640f8af8be297", "scanner": "scanner-primary", "fingerprint": "9596d76005cd7311", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-cb97cc8438bcd248", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 project-manager-app/packages/ui/src/components/AgentChatPanel.tsx:70"}, "properties": {"repobilityId": "4352a4a27f233ae7", "scanner": "scanner-primary", "fingerprint": "cb97cc8438bcd248", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-683e914c5b23781d", "level": "note", "message": {"text": "\"active\" state uses light bg in a dark theme \u2014 project-manager-app/packages/ui/src/components/AgentChatPanel.tsx:84"}, "properties": {"repobilityId": "64ef42d6c6f5e3b0", "scanner": "scanner-primary", "fingerprint": "683e914c5b23781d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.active-light-bg"]}}, {"ruleId": "scanner-20ee1c48296bb77c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 project-manager-app/packages/ui/src/components/EscrowTimeline.tsx:237"}, "properties": {"repobilityId": "5b3e76387d1d1d91", "scanner": "scanner-primary", "fingerprint": "20ee1c48296bb77c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-279108ab18ed242a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 project-manager-app/packages/db/scripts/repair-soft-delete-drift.ts:47"}, "properties": {"repobilityId": "8d44d53cee08f0ab", "scanner": "scanner-primary", "fingerprint": "279108ab18ed242a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-fa1befef85e588b6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 project-manager-app/packages/db/prisma/seed.ts:128"}, "properties": {"repobilityId": "77a45c1c1e6d47a1", "scanner": "scanner-primary", "fingerprint": "fa1befef85e588b6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7b088e48ea6345a9", "level": "warning", "message": {"text": "Dockerfile runs as root: project-manager-app/apps/vision-service/Dockerfile"}, "properties": {"repobilityId": "c283fa94affcee84", "scanner": "scanner-primary", "fingerprint": "7b088e48ea6345a9", "layer": "hardware", "severity": "medium", "confidence": 1.0, "tags": ["security", "container"]}}, {"ruleId": "scanner-f35ac44d03028729", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: python:3.11-slim"}, "properties": {"repobilityId": "fa00f8da92df80b1", "scanner": "scanner-primary", "fingerprint": "f35ac44d03028729", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "project-manager-app/apps/vision-service/Dockerfile"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-aa5acaa49eb8315b", "level": "note", "message": {"text": "Containers defined but no K8s/orchestration manifest found"}, "properties": {"repobilityId": "b230ea9b68736081", "scanner": "scanner-primary", "fingerprint": "aa5acaa49eb8315b", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["coverage", "deployment"]}}, {"ruleId": "scanner-e92e1f8669ae1c84", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in project-manager-app/tmp-semse-visible-smoke.mjs:2"}, "properties": {"repobilityId": "27030e8aa1283dad", "scanner": "scanner-primary", "fingerprint": "e92e1f8669ae1c84", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "project-manager-app/tmp-semse-visible-smoke.mjs"}, "region": {"startLine": 2}}}]}, {"ruleId": "scanner-1dad084ee4593271", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in project-manager-app/tmp-semse-visible-smoke-prod.mjs:2"}, "properties": {"repobilityId": "0e02680c54a63b82", "scanner": "scanner-primary", "fingerprint": "1dad084ee4593271", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "project-manager-app/tmp-semse-visible-smoke-prod.mjs"}, "region": {"startLine": 2}}}]}, {"ruleId": "scanner-a02da24805c2e5dc", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in project-manager-app/app.js:362"}, "properties": {"repobilityId": "f1c44b2725de17ce", "scanner": "scanner-primary", "fingerprint": "a02da24805c2e5dc", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "project-manager-app/app.js"}, "region": {"startLine": 362}}}]}, {"ruleId": "scanner-5df0812db5891754", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in project-manager-app/apps/api/src/modules/autonomy/autonomy.service.ts:2"}, "properties": {"repobilityId": "f12bad57b165dcf4", "scanner": "scanner-primary", "fingerprint": "5df0812db5891754", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "project-manager-app/apps/api/src/modules/autonomy/autonomy.service.ts"}, "region": {"startLine": 2}}}]}, {"ruleId": "scanner-9f275c760689deea", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in project-manager-app/apps/api/src/modules/agents/technical-runtime.service.ts:2"}, "properties": {"repobilityId": "5cbff0666fb648df", "scanner": "scanner-primary", "fingerprint": "9f275c760689deea", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "project-manager-app/apps/api/src/modules/agents/technical-runtime.service.ts"}, "region": {"startLine": 2}}}]}, {"ruleId": "scanner-0ca1a4677d1cf4cf", "level": "error", "message": {"text": "Insecure pattern 'exec_used' in project-manager-app/apps/api/src/modules/graphify/graphify.service.ts:57"}, "properties": {"repobilityId": "317cdf89f54d5f03", "scanner": "scanner-primary", "fingerprint": "0ca1a4677d1cf4cf", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["owasp", "exec_used"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "project-manager-app/apps/api/src/modules/graphify/graphify.service.ts"}, "region": {"startLine": 57}}}]}, {"ruleId": "scanner-1bbe5ce751a37bb7", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in project-manager-app/apps/api/src/modules/graphify/graphify.service.ts:2"}, "properties": {"repobilityId": "a27c32974a590d26", "scanner": "scanner-primary", "fingerprint": "1bbe5ce751a37bb7", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "project-manager-app/apps/api/src/modules/graphify/graphify.service.ts"}, "region": {"startLine": 2}}}]}, {"ruleId": "scanner-d5741b86d9cb5483", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in project-manager-app/apps/api/src/modules/developer-runtime/developer-runtime.shell.service.ts:1"}, "properties": {"repobilityId": "c1beac672927fed5", "scanner": "scanner-primary", "fingerprint": "d5741b86d9cb5483", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "project-manager-app/apps/api/src/modules/developer-runtime/developer-runtime.shell.service.ts"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-e00fc7b184b5e5ab", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in project-manager-app/apps/autonomy-server/src/server.mjs:128"}, "properties": {"repobilityId": "85992cea80e2b155", "scanner": "scanner-primary", "fingerprint": "e00fc7b184b5e5ab", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "project-manager-app/apps/autonomy-server/src/server.mjs"}, "region": {"startLine": 128}}}]}, {"ruleId": "scanner-74a689b985de9715", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in project-manager-app/apps/autonomy-server/src/server.mjs:46"}, "properties": {"repobilityId": "3e05cfb110e88e7a", "scanner": "scanner-primary", "fingerprint": "74a689b985de9715", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "project-manager-app/apps/autonomy-server/src/server.mjs"}, "region": {"startLine": 46}}}]}, {"ruleId": "scanner-e3ac5cee7e93d076", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in project-manager-app/apps/worker/src/modules/developer-runtime/runtime.executor.mjs:2"}, "properties": {"repobilityId": "e6e9a5cfa6bced49", "scanner": "scanner-primary", "fingerprint": "e3ac5cee7e93d076", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "project-manager-app/apps/worker/src/modules/developer-runtime/runtime.executor.mjs"}, "region": {"startLine": 2}}}]}, {"ruleId": "scanner-11d4a25c3427d0de", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in project-manager-app/apps/vision-service/app/main.py:15"}, "properties": {"repobilityId": "c6dfd6873d37e270", "scanner": "scanner-primary", "fingerprint": "11d4a25c3427d0de", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "project-manager-app/apps/vision-service/app/main.py"}, "region": {"startLine": 15}}}]}, {"ruleId": "scanner-3738eec6d83fc943", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in project-manager-app/apps/web/scripts/railway-start.mjs:2"}, "properties": {"repobilityId": "2c347390792edb1f", "scanner": "scanner-primary", "fingerprint": "3738eec6d83fc943", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "project-manager-app/apps/web/scripts/railway-start.mjs"}, "region": {"startLine": 2}}}]}, {"ruleId": "scanner-441208efb7ed8e85", "level": "error", "message": {"text": "Possible secret in project-manager-app/apps/angular/src/app/features/auth/login.page.ts"}, "properties": {"repobilityId": "647b14a2c4ce49b3", "scanner": "scanner-primary", "fingerprint": "441208efb7ed8e85", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "project-manager-app/apps/angular/src/app/features/auth/login.page.ts"}, "region": {"startLine": 239}}}]}, {"ruleId": "scanner-441208efb7ed8e85", "level": "error", "message": {"text": "Possible secret in project-manager-app/apps/angular/src/app/features/auth/login.page.ts"}, "properties": {"repobilityId": "647b14a2c4ce49b3", "scanner": "scanner-primary", "fingerprint": "441208efb7ed8e85", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "project-manager-app/apps/angular/src/app/features/auth/login.page.ts"}, "region": {"startLine": 260}}}]}, {"ruleId": "scanner-0f58d2c7008fd79d", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in project-manager-app/scripts/operacion-asistida-api-drill-runner.mjs:2"}, "properties": {"repobilityId": "bc015283242115f5", "scanner": "scanner-primary", "fingerprint": "0f58d2c7008fd79d", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "project-manager-app/scripts/operacion-asistida-api-drill-runner.mjs"}, "region": {"startLine": 2}}}]}, {"ruleId": "scanner-794ef3c67ef55284", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in project-manager-app/scripts/pull-local-llm.mjs:4"}, "properties": {"repobilityId": "f3fe3e38999b6a54", "scanner": "scanner-primary", "fingerprint": "794ef3c67ef55284", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "project-manager-app/scripts/pull-local-llm.mjs"}, "region": {"startLine": 4}}}]}, {"ruleId": "scanner-30a596a1e93cf60e", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in project-manager-app/scripts/smoke-browser-agent.mjs:2"}, "properties": {"repobilityId": "dc9755375cf24a96", "scanner": "scanner-primary", "fingerprint": "30a596a1e93cf60e", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "project-manager-app/scripts/smoke-browser-agent.mjs"}, "region": {"startLine": 2}}}]}, {"ruleId": "scanner-281818285892921a", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in project-manager-app/scripts/demo-web-runtime.mjs:1"}, "properties": {"repobilityId": "7cafed5c7e465afd", "scanner": "scanner-primary", "fingerprint": "281818285892921a", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "project-manager-app/scripts/demo-web-runtime.mjs"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-df373318683cdf16", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in project-manager-app/scripts/start-local-llm.mjs:4"}, "properties": {"repobilityId": "775af87b27ec74c2", "scanner": "scanner-primary", "fingerprint": "df373318683cdf16", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "project-manager-app/scripts/start-local-llm.mjs"}, "region": {"startLine": 4}}}]}, {"ruleId": "scanner-bf7148c552e4a8b7", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in project-manager-app/scripts/semse-health-check.mjs:25"}, "properties": {"repobilityId": "e08e78ee8d972914", "scanner": "scanner-primary", "fingerprint": "bf7148c552e4a8b7", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "project-manager-app/scripts/semse-health-check.mjs"}, "region": {"startLine": 25}}}]}, {"ruleId": "scanner-2f69bc0f1c62af64", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in project-manager-app/scripts/operacion-asistida-restore-multienv-runner.mjs:2"}, "properties": {"repobilityId": "45a3bf626e042ca4", "scanner": "scanner-primary", "fingerprint": "2f69bc0f1c62af64", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "project-manager-app/scripts/operacion-asistida-restore-multienv-runner.mjs"}, "region": {"startLine": 2}}}]}, {"ruleId": "scanner-560248b98beab2a1", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in project-manager-app/scripts/demo-smoke.mjs:1"}, "properties": {"repobilityId": "551ddf08c9edf4d8", "scanner": "scanner-primary", "fingerprint": "560248b98beab2a1", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "project-manager-app/scripts/demo-smoke.mjs"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-1131ea54a0c6b674", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in project-manager-app/scripts/web-sprint15-smoke.mjs:1"}, "properties": {"repobilityId": "d449848fd53b75da", "scanner": "scanner-primary", "fingerprint": "1131ea54a0c6b674", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "project-manager-app/scripts/web-sprint15-smoke.mjs"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-699bc25bf8e4d318", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in project-manager-app/scripts/pre-migrate.mjs:15"}, "properties": {"repobilityId": "bcfddcdecb3dac63", "scanner": "scanner-primary", "fingerprint": "699bc25bf8e4d318", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "project-manager-app/scripts/pre-migrate.mjs"}, "region": {"startLine": 15}}}]}, {"ruleId": "scanner-d33e6716c6a96975", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in project-manager-app/packages/autonomy/src/git.ts:1"}, "properties": {"repobilityId": "8350d629ab210b9b", "scanner": "scanner-primary", "fingerprint": "d33e6716c6a96975", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "project-manager-app/packages/autonomy/src/git.ts"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-bee3a348ceab9c31", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in project-manager-app/packages/autonomy/src/validator.ts:2"}, "properties": {"repobilityId": "98221617969b0c29", "scanner": "scanner-primary", "fingerprint": "bee3a348ceab9c31", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "project-manager-app/packages/autonomy/src/validator.ts"}, "region": {"startLine": 2}}}]}, {"ruleId": "scanner-4c8d7218b9e5cf83", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in SEMSE Pro Tools v2/herramientas_html/semse_herramienta_roofing.html:200"}, "properties": {"repobilityId": "a22000c58eddaf5a", "scanner": "scanner-primary", "fingerprint": "4c8d7218b9e5cf83", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "SEMSE Pro Tools v2/herramientas_html/semse_herramienta_roofing.html"}, "region": {"startLine": 200}}}]}, {"ruleId": "scanner-5669ad031f14a8ac", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in SEMSE Pro Tools v2/herramientas_html/semse_herramienta_hvac.html:200"}, "properties": {"repobilityId": "bdddd453aa0fde0f", "scanner": "scanner-primary", "fingerprint": "5669ad031f14a8ac", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "SEMSE Pro Tools v2/herramientas_html/semse_herramienta_hvac.html"}, "region": {"startLine": 200}}}]}, {"ruleId": "scanner-67169dceb5117a84", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in SEMSE Pro Tools v2/herramientas_html/semse_herramienta_pintura.html:200"}, "properties": {"repobilityId": "dc74e5984f6c11da", "scanner": "scanner-primary", "fingerprint": "67169dceb5117a84", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "SEMSE Pro Tools v2/herramientas_html/semse_herramienta_pintura.html"}, "region": {"startLine": 200}}}]}, {"ruleId": "scanner-6bd123c9b915052e", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in SEMSE Pro Tools v2/herramientas_html/semse_pro_tools_suite.html:200"}, "properties": {"repobilityId": "047b941e697f21b3", "scanner": "scanner-primary", "fingerprint": "6bd123c9b915052e", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "SEMSE Pro Tools v2/herramientas_html/semse_pro_tools_suite.html"}, "region": {"startLine": 200}}}]}, {"ruleId": "scanner-f5c98c7902efd22f", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in SEMSE Pro Tools v2/herramientas_html/semse_herramienta_drywall.html:200"}, "properties": {"repobilityId": "1f3eae85fd8aa883", "scanner": "scanner-primary", "fingerprint": "f5c98c7902efd22f", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "SEMSE Pro Tools v2/herramientas_html/semse_herramienta_drywall.html"}, "region": {"startLine": 200}}}]}, {"ruleId": "scanner-52770aab510dbde5", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in SEMSE Pro Tools v2/herramientas_html/semse_herramienta_concreto.html:79"}, "properties": {"repobilityId": "ac18120dfcf7e58b", "scanner": "scanner-primary", "fingerprint": "52770aab510dbde5", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "SEMSE Pro Tools v2/herramientas_html/semse_herramienta_concreto.html"}, "region": {"startLine": 79}}}]}, {"ruleId": "scanner-e7b9156c97661de4", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in SEMSE Pro Tools v2/herramientas_html/semse_herramienta_cotizador_escrow.html:200"}, "properties": {"repobilityId": "5f5c12c0f921b509", "scanner": "scanner-primary", "fingerprint": "e7b9156c97661de4", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "SEMSE Pro Tools v2/herramientas_html/semse_herramienta_cotizador_escrow.html"}, "region": {"startLine": 200}}}]}, {"ruleId": "scanner-cff25bb3457a0277", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in SEMSE Pro Tools v2/herramientas_html/semse_herramienta_pisos.html:200"}, "properties": {"repobilityId": "a9d1c7b12562157e", "scanner": "scanner-primary", "fingerprint": "cff25bb3457a0277", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "SEMSE Pro Tools v2/herramientas_html/semse_herramienta_pisos.html"}, "region": {"startLine": 200}}}]}, {"ruleId": "scanner-2f7a57e9c9da91f5", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in SEMSE Pro Tools v2/herramientas_html/semse_herramienta_electricista.html:193"}, "properties": {"repobilityId": "871014d4598fb7c1", "scanner": "scanner-primary", "fingerprint": "2f7a57e9c9da91f5", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "SEMSE Pro Tools v2/herramientas_html/semse_herramienta_electricista.html"}, "region": {"startLine": 193}}}]}, {"ruleId": "scanner-28b3f776c114fb75", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in SEMSE Pro Tools v2/herramientas_html/semse_herramienta_carpinteria.html:37"}, "properties": {"repobilityId": "8c0b0e9e9e95657b", "scanner": "scanner-primary", "fingerprint": "28b3f776c114fb75", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "SEMSE Pro Tools v2/herramientas_html/semse_herramienta_carpinteria.html"}, "region": {"startLine": 37}}}]}, {"ruleId": "scanner-4a1c7db9326672df", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in SEMSE Pro Tools v2/herramientas_html/semse_herramienta_inspeccion.html:200"}, "properties": {"repobilityId": "c95a5a05c9769b88", "scanner": "scanner-primary", "fingerprint": "4a1c7db9326672df", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "SEMSE Pro Tools v2/herramientas_html/semse_herramienta_inspeccion.html"}, "region": {"startLine": 200}}}]}, {"ruleId": "scanner-9ada27e997913795", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in SEMSE Pro Tools v2/herramientas_html/semse_herramienta_plomeria.html:200"}, "properties": {"repobilityId": "2241d25234cf0bcd", "scanner": "scanner-primary", "fingerprint": "9ada27e997913795", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "SEMSE Pro Tools v2/herramientas_html/semse_herramienta_plomeria.html"}, "region": {"startLine": 200}}}]}, {"ruleId": "scanner-4d20512a9dc3ffc1", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "42a3d8bc8f2dec80", "scanner": "scanner-primary", "fingerprint": "4d20512a9dc3ffc1", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/api-smoke.yml"}, "region": {"startLine": 46}}}]}, {"ruleId": "scanner-4d20512a9dc3ffc1", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "6a5d6fcc39cb2478", "scanner": "scanner-primary", "fingerprint": "4d20512a9dc3ffc1", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/api-smoke.yml"}, "region": {"startLine": 49}}}]}, {"ruleId": "scanner-4d20512a9dc3ffc1", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "644358b04ec55dd9", "scanner": "scanner-primary", "fingerprint": "4d20512a9dc3ffc1", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/api-smoke.yml"}, "region": {"startLine": 54}}}]}, {"ruleId": "scanner-4d20512a9dc3ffc1", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "0c6dd5ae40e369f4", "scanner": "scanner-primary", "fingerprint": "4d20512a9dc3ffc1", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/api-smoke.yml"}, "region": {"startLine": 103}}}]}, {"ruleId": "scanner-770a65addddf1210", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "7f4e6dcf2dc7e049", "scanner": "scanner-primary", "fingerprint": "770a65addddf1210", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/autonomy-staged-api.yml"}, "region": {"startLine": 76}}}]}, {"ruleId": "scanner-770a65addddf1210", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "e898e69c7e0b9660", "scanner": "scanner-primary", "fingerprint": "770a65addddf1210", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/autonomy-staged-api.yml"}, "region": {"startLine": 79}}}]}, {"ruleId": "scanner-770a65addddf1210", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "584b92069ca61176", "scanner": "scanner-primary", "fingerprint": "770a65addddf1210", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/autonomy-staged-api.yml"}, "region": {"startLine": 84}}}]}, {"ruleId": "scanner-770a65addddf1210", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "a050c22cffe21aa7", "scanner": "scanner-primary", "fingerprint": "770a65addddf1210", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/autonomy-staged-api.yml"}, "region": {"startLine": 132}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "97a9a5de61d82fcd", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 39}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "9e5617d449b061f6", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 42}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "4a63b1fd6887cae9", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 47}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "97a9a5de61d82fcd", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 77}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "9e5617d449b061f6", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 80}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "4a63b1fd6887cae9", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 85}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "4effa0820a061a14", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 104}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "90dca2b9a9fbfb28", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 114}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "97a9a5de61d82fcd", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 127}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "9e5617d449b061f6", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 130}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "4a63b1fd6887cae9", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 135}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "90dca2b9a9fbfb28", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 152}}}]}, {"ruleId": "scanner-ed4f033c4b1ec65b", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "a755dca1ec9429c7", "scanner": "scanner-primary", "fingerprint": "ed4f033c4b1ec65b", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/api-integration.yml"}, "region": {"startLine": 51}}}]}, {"ruleId": "scanner-ed4f033c4b1ec65b", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "c7a00da11136aabd", "scanner": "scanner-primary", "fingerprint": "ed4f033c4b1ec65b", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/api-integration.yml"}, "region": {"startLine": 54}}}]}, {"ruleId": "scanner-ed4f033c4b1ec65b", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "e81ed49f00347be2", "scanner": "scanner-primary", "fingerprint": "ed4f033c4b1ec65b", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/api-integration.yml"}, "region": {"startLine": 59}}}]}, {"ruleId": "scanner-ed4f033c4b1ec65b", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "bc65ef52a1924cb4", "scanner": "scanner-primary", "fingerprint": "ed4f033c4b1ec65b", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/api-integration.yml"}, "region": {"startLine": 108}}}]}, {"ruleId": "scanner-46c644c6227e4d4a", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "04f6c832d67a7838", "scanner": "scanner-primary", "fingerprint": "46c644c6227e4d4a", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/release.yml"}, "region": {"startLine": 42}}}]}, {"ruleId": "scanner-46c644c6227e4d4a", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "9dfacdabb01880ef", "scanner": "scanner-primary", "fingerprint": "46c644c6227e4d4a", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/release.yml"}, "region": {"startLine": 45}}}]}, {"ruleId": "scanner-46c644c6227e4d4a", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "b28f2eb9ce3eea56", "scanner": "scanner-primary", "fingerprint": "46c644c6227e4d4a", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/release.yml"}, "region": {"startLine": 50}}}]}, {"ruleId": "scanner-46c644c6227e4d4a", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "f0c3d4499b6cd885", "scanner": "scanner-primary", "fingerprint": "46c644c6227e4d4a", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/release.yml"}, "region": {"startLine": 69}}}]}, {"ruleId": "scanner-1838a141491ce38c", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "b8fd4f5048f96576", "scanner": "scanner-primary", "fingerprint": "1838a141491ce38c", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/release.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-73a3b21b710b0c4a", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "45094c63ad66f0fc", "scanner": "scanner-primary", "fingerprint": "73a3b21b710b0c4a", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/operacion-asistida-api.yml"}, "region": {"startLine": 81}}}]}, {"ruleId": "scanner-73a3b21b710b0c4a", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "09d1ef153c799960", "scanner": "scanner-primary", "fingerprint": "73a3b21b710b0c4a", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/operacion-asistida-api.yml"}, "region": {"startLine": 84}}}]}, {"ruleId": "scanner-73a3b21b710b0c4a", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "73f71ff4306aef29", "scanner": "scanner-primary", "fingerprint": "73a3b21b710b0c4a", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/operacion-asistida-api.yml"}, "region": {"startLine": 89}}}]}, {"ruleId": "scanner-73a3b21b710b0c4a", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "f606872997656b12", "scanner": "scanner-primary", "fingerprint": "73a3b21b710b0c4a", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/operacion-asistida-api.yml"}, "region": {"startLine": 121}}}]}, {"ruleId": "scanner-d19fa9e3d128a1b0", "level": "note", "message": {"text": "Very large file: project-manager-app/apps/api/src/modules/agents/harnesses/project-copilot.harness.ts (1417 lines)"}, "properties": {"repobilityId": "f48758d7d1b2b0bc", "scanner": "scanner-primary", "fingerprint": "d19fa9e3d128a1b0", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-f449403c352614c4", "level": "note", "message": {"text": "Very large file: project-manager-app/apps/api/src/modules/intake-operations-bridge/intake-operations-bridge.service.ts (1516 lines)"}, "properties": {"repobilityId": "74be48ddb67fa2d4", "scanner": "scanner-primary", "fingerprint": "f449403c352614c4", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-fedf5d30d3e3cdf2", "level": "note", "message": {"text": "Very large file: project-manager-app/apps/web/app/semse-api.ts (2495 lines)"}, "properties": {"repobilityId": "7ae12251ef41df3a", "scanner": "scanner-primary", "fingerprint": "fedf5d30d3e3cdf2", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-76d30060f1e5bc8d", "level": "note", "message": {"text": "Very large file: project-manager-app/apps/web/app/components/disputes/DisputeResolutionWorkspace.tsx (1170 lines)"}, "properties": {"repobilityId": "5966e4336572e8fd", "scanner": "scanner-primary", "fingerprint": "76d30060f1e5bc8d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-caa27de3857f57ea", "level": "note", "message": {"text": "Very large file: project-manager-app/apps/web/app/(app)/client/projects/[projectId]/copilot/page.tsx (1790 lines)"}, "properties": {"repobilityId": "d3208e7214ad6ed2", "scanner": "scanner-primary", "fingerprint": "caa27de3857f57ea", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-7d582c19c544220e", "level": "note", "message": {"text": "Very large file: project-manager-app/apps/web/app/(app)/client/jobs/[jobId]/page.tsx (1215 lines)"}, "properties": {"repobilityId": "e398c7b526af114a", "scanner": "scanner-primary", "fingerprint": "7d582c19c544220e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-97771ad38fedc431", "level": "note", "message": {"text": "Very large file: project-manager-app/apps/web/app/(app)/worker/travel/[travelId]/page.tsx (1304 lines)"}, "properties": {"repobilityId": "a893dcb9baa12399", "scanner": "scanner-primary", "fingerprint": "97771ad38fedc431", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-75a314a260b8b01f", "level": "note", "message": {"text": "Very large file: project-manager-app/apps/web/app/(app)/admin/ops/page.tsx (1421 lines)"}, "properties": {"repobilityId": "03103d72a31a03f7", "scanner": "scanner-primary", "fingerprint": "75a314a260b8b01f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-abb69035e4b36ffa", "level": "note", "message": {"text": "Very large file: project-manager-app/apps/web/app/(app)/admin/developer-runtime/page.tsx (1104 lines)"}, "properties": {"repobilityId": "81b9696b4fc55435", "scanner": "scanner-primary", "fingerprint": "abb69035e4b36ffa", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-4df039ce19c48f6b", "level": "note", "message": {"text": "Very large file: project-manager-app/apps/web/app/(app)/tools/electrical/electrical-tool-client.tsx (1925 lines)"}, "properties": {"repobilityId": "5bb70d98e10a5e95", "scanner": "scanner-primary", "fingerprint": "4df039ce19c48f6b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-72a0ccce57398b96", "level": "note", "message": {"text": "Very large file: project-manager-app/apps/web/lib/language-context.tsx (1343 lines)"}, "properties": {"repobilityId": "894fa1ffdb56a1d0", "scanner": "scanner-primary", "fingerprint": "72a0ccce57398b96", "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-141b30a41e03817b", "level": "note", "message": {"text": "No license file detected"}, "properties": {"repobilityId": "aca9d7e9546f57aa", "scanner": "scanner-primary", "fingerprint": "141b30a41e03817b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["license", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-ea8cc6adf02a1ccf", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: project-manager-app/apps/api/package.json"}, "properties": {"repobilityId": "5f876fc8f1b0ebc7", "scanner": "scanner-primary", "fingerprint": "ea8cc6adf02a1ccf", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "project-manager-app/apps/api/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-fcec851976861c29", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: project-manager-app/apps/autonomy-server/package.json"}, "properties": {"repobilityId": "69709e9ccb3f84bb", "scanner": "scanner-primary", "fingerprint": "fcec851976861c29", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "project-manager-app/apps/autonomy-server/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-648d68cc83a5fca7", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: project-manager-app/apps/worker/package.json"}, "properties": {"repobilityId": "d4dd1a1eca0b5729", "scanner": "scanner-primary", "fingerprint": "648d68cc83a5fca7", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "project-manager-app/apps/worker/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-b52a468b187f2dae", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: project-manager-app/apps/web/package.json"}, "properties": {"repobilityId": "e0bb01f425a34a6f", "scanner": "scanner-primary", "fingerprint": "b52a468b187f2dae", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "project-manager-app/apps/web/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-6f0c26175ecf0e4d", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: project-manager-app/apps/angular/package.json"}, "properties": {"repobilityId": "f7985f590f1876f1", "scanner": "scanner-primary", "fingerprint": "6f0c26175ecf0e4d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "project-manager-app/apps/angular/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-7e1abba01524a75b", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: project-manager-app/packages/auth/package.json"}, "properties": {"repobilityId": "04fcc77de264a2e6", "scanner": "scanner-primary", "fingerprint": "7e1abba01524a75b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "project-manager-app/packages/auth/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-14b5526b691a2826", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: project-manager-app/packages/autonomy/package.json"}, "properties": {"repobilityId": "b5eebeebdb4952ca", "scanner": "scanner-primary", "fingerprint": "14b5526b691a2826", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "project-manager-app/packages/autonomy/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-319b81649c5a2a7b", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: project-manager-app/packages/shared/package.json"}, "properties": {"repobilityId": "5c812e5adcc04d73", "scanner": "scanner-primary", "fingerprint": "319b81649c5a2a7b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "project-manager-app/packages/shared/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-db6e9204f4a7dee3", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: project-manager-app/packages/ui/package.json"}, "properties": {"repobilityId": "cb90cd64372963bf", "scanner": "scanner-primary", "fingerprint": "db6e9204f4a7dee3", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "project-manager-app/packages/ui/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-e99a1b153b8737ee", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: project-manager-app/packages/agents/package.json"}, "properties": {"repobilityId": "50ebf968455f9c2e", "scanner": "scanner-primary", "fingerprint": "e99a1b153b8737ee", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "project-manager-app/packages/agents/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3543b70ad5112ce2", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: project-manager-app/packages/tools/package.json"}, "properties": {"repobilityId": "ec019a6a5af39e36", "scanner": "scanner-primary", "fingerprint": "3543b70ad5112ce2", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "project-manager-app/packages/tools/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-5f2ed49e1734a76c", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: project-manager-app/packages/db/package.json"}, "properties": {"repobilityId": "c49bdfbd16edf268", "scanner": "scanner-primary", "fingerprint": "5f2ed49e1734a76c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "project-manager-app/packages/db/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-5d95db954bdf1ef2", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: project-manager-app/packages/schemas/package.json"}, "properties": {"repobilityId": "5bdb79d075240516", "scanner": "scanner-primary", "fingerprint": "5d95db954bdf1ef2", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "project-manager-app/packages/schemas/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-a100c2638c4a43df", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: project-manager-app/packages/knowledge/package.json"}, "properties": {"repobilityId": "3650151251f7a62f", "scanner": "scanner-primary", "fingerprint": "a100c2638c4a43df", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "project-manager-app/packages/knowledge/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "1ad73714c493dbcd", "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": "51a0938b0250ded5", "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": "345c9233ac10993c", "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": "d4b1e370b8529204", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-b9088664ace7f748", "level": "note", "message": {"text": "Composite production-readiness gap"}, "properties": {"repobilityId": "3fd1e4b983ab4769", "scanner": "scanner-primary", "fingerprint": "b9088664ace7f748", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["production-readiness", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-749d4bc1bd66df5f", "level": "warning", "message": {"text": "Agent instructions exist but release-hardening basics are missing"}, "properties": {"repobilityId": "4e7d2be2008b00a1", "scanner": "scanner-primary", "fingerprint": "749d4bc1bd66df5f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-ea8f3013f588db25", "level": "note", "message": {"text": "Shallow git history limits provenance confidence"}, "properties": {"repobilityId": "9f6b03c764e9f20a", "scanner": "scanner-primary", "fingerprint": "ea8f3013f588db25", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-8424db9c75e04ba4", "level": "none", "message": {"text": "Very short observed git history"}, "properties": {"repobilityId": "5f3ac808f6fa4c52", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-bc28ca33498500f7", "level": "note", "message": {"text": "Legacy-named symbol `isLegacy` in project-manager-app/logic.mjs:184"}, "properties": {"repobilityId": "2700b7a056d388e6", "scanner": "scanner-primary", "fingerprint": "bc28ca33498500f7", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-49c97b120efe6df2", "level": "note", "message": {"text": "Legacy-named symbol `project_manager_projects_v2` in project-manager-app/app.js:19"}, "properties": {"repobilityId": "9f10086e9393293e", "scanner": "scanner-primary", "fingerprint": "49c97b120efe6df2", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-52ecb81f8ab1d8e4", "level": "note", "message": {"text": "Legacy-named symbol `isLegacy` in project-manager-app/tests/unit/logic.test.mjs:394"}, "properties": {"repobilityId": "7671801ae056a117", "scanner": "scanner-primary", "fingerprint": "52ecb81f8ab1d8e4", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-585094048d6bea8a", "level": "note", "message": {"text": "Legacy-named symbol `nodesWithLegacy` in project-manager-app/tests/unit/navigation-registry.test.ts:84"}, "properties": {"repobilityId": "f8663dc5a6da05ca", "scanner": "scanner-primary", "fingerprint": "585094048d6bea8a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-acf534bb5146cb88", "level": "note", "message": {"text": "Legacy-named symbol `promoteApprovedPlanToLegacy` in project-manager-app/apps/api/test/buildops.controller.test.ts:77"}, "properties": {"repobilityId": "1c93d51203f936bb", "scanner": "scanner-primary", "fingerprint": "acf534bb5146cb88", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-6deb464bf891bf26", "level": "note", "message": {"text": "Legacy-named symbol `promoteApprovedPlanToLegacy` in project-manager-app/apps/api/test/buildops-plan-rerun-integration.test.ts:649"}, "properties": {"repobilityId": "798d0a68b69de024", "scanner": "scanner-primary", "fingerprint": "6deb464bf891bf26", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-e1eb5907df4a9b8d", "level": "note", "message": {"text": "Legacy-named symbol `promoted_to_legacy` in project-manager-app/apps/api/test/fsm-lifecycles.test.ts:36"}, "properties": {"repobilityId": "088dc44cfb00ae22", "scanner": "scanner-primary", "fingerprint": "e1eb5907df4a9b8d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-1ea32a67b9a61d84", "level": "note", "message": {"text": "Legacy-named symbol `tenant_legacy` in project-manager-app/apps/api/test/buildops-legacy-promotion-integration.test.ts:136"}, "properties": {"repobilityId": "fa0814b1693916e2", "scanner": "scanner-primary", "fingerprint": "1ea32a67b9a61d84", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-a0ad478887df1ea5", "level": "note", "message": {"text": "Legacy-named symbol `promoteApprovedPlanToLegacy` in project-manager-app/apps/api/test/buildops-legacy-promotion.service.test.ts:213"}, "properties": {"repobilityId": "e8b7a6e28d37842c", "scanner": "scanner-primary", "fingerprint": "a0ad478887df1ea5", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-093116e40f7d35c0", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/apps/api/src/modules/communications/providers/whatsapp-cloud.adapter.ts:163"}, "properties": {"repobilityId": "c93f730794e448df", "scanner": "scanner-primary", "fingerprint": "093116e40f7d35c0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-274c67bbc935889f", "level": "note", "message": {"text": "Legacy-named symbol `promoteApprovedPlanToLegacy` in project-manager-app/apps/api/src/modules/buildops/buildops-legacy-promotion.service.ts:85"}, "properties": {"repobilityId": "35dc71a85649efca", "scanner": "scanner-primary", "fingerprint": "274c67bbc935889f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-6b993715a98e7985", "level": "note", "message": {"text": "Legacy-named symbol `promoteLegacy` in project-manager-app/apps/api/src/modules/buildops/buildops.controller.ts:307"}, "properties": {"repobilityId": "582befd9c72a070e", "scanner": "scanner-primary", "fingerprint": "6b993715a98e7985", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-3e8e18db9938dc88", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/apps/api/src/modules/ai-models/providers/deepseek.provider.ts:30"}, "properties": {"repobilityId": "2d58d8745294c5d7", "scanner": "scanner-primary", "fingerprint": "3e8e18db9938dc88", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ae7537122bb79ea2", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/apps/api/src/modules/ai-models/providers/kimi.provider.ts:30"}, "properties": {"repobilityId": "d628193f945bfab6", "scanner": "scanner-primary", "fingerprint": "ae7537122bb79ea2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-958c8e591e78513e", "level": "none", "message": {"text": "Commented-code block (5 lines) in project-manager-app/apps/api/src/modules/change-orders/change-orders.service.ts:37"}, "properties": {"repobilityId": "2313aae8407c731f", "scanner": "scanner-primary", "fingerprint": "958c8e591e78513e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e2ce01cfbf4269e8", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/apps/autonomy-server/src/server.mjs:126"}, "properties": {"repobilityId": "299902a23afba7f1", "scanner": "scanner-primary", "fingerprint": "e2ce01cfbf4269e8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-0c83e78bd73ad5cc", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/apps/worker/src/main.mjs:514"}, "properties": {"repobilityId": "01104237d4ea662e", "scanner": "scanner-primary", "fingerprint": "0c83e78bd73ad5cc", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-bcfed13cde8d3513", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/apps/web/components/semse/TrustPassportCard.tsx:63"}, "properties": {"repobilityId": "a4c25640bf5416cc", "scanner": "scanner-primary", "fingerprint": "bcfed13cde8d3513", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-44ed63506e211fb6", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/apps/web/components/semse/ObserverPanel.tsx:133"}, "properties": {"repobilityId": "c6e4fbaf29520ba5", "scanner": "scanner-primary", "fingerprint": "44ed63506e211fb6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-8be4b424f356fa09", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/apps/web/components/milestones/EvidenceItemDetailPanel.tsx:145"}, "properties": {"repobilityId": "044332562e5057f0", "scanner": "scanner-primary", "fingerprint": "8be4b424f356fa09", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-da845a33596c438d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/apps/web/components/milestones/MilestoneEvidenceUploader.tsx:93"}, "properties": {"repobilityId": "a0f5f759fc8c4612", "scanner": "scanner-primary", "fingerprint": "da845a33596c438d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-490b4c7670878eea", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/apps/web/components/landing/landing-intake.tsx:180"}, "properties": {"repobilityId": "7df57bbdc130818a", "scanner": "scanner-primary", "fingerprint": "490b4c7670878eea", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-61bc72743e37866f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/apps/web/components/tools/ToolAIPanel.tsx:62"}, "properties": {"repobilityId": "2f11ede2a40dd36a", "scanner": "scanner-primary", "fingerprint": "61bc72743e37866f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e371b4f20c2d87f9", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/apps/web/components/change-orders/ChangeOrderImpactCard.tsx:64"}, "properties": {"repobilityId": "62c95d4a1a425b7a", "scanner": "scanner-primary", "fingerprint": "e371b4f20c2d87f9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-50d831ca300777d0", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/apps/web/app/semse-api.ts:112"}, "properties": {"repobilityId": "a007fa1ea32475ac", "scanner": "scanner-primary", "fingerprint": "50d831ca300777d0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-dc9186bddbc010ff", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/apps/web/app/anatomy/anatomy-client.tsx:30"}, "properties": {"repobilityId": "76d59e84765bdf0b", "scanner": "scanner-primary", "fingerprint": "dc9186bddbc010ff", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-5601bb3201534cbf", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/apps/web/app/api/semse/_server.ts:267"}, "properties": {"repobilityId": "1bc551f0bd57d991", "scanner": "scanner-primary", "fingerprint": "5601bb3201534cbf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-42f59e688118da49", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/apps/web/app/api/semse/ops/backfill-embeddings/route.ts:17"}, "properties": {"repobilityId": "2e68eeb9b85a7af4", "scanner": "scanner-primary", "fingerprint": "42f59e688118da49", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-29dba5c9a967c090", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/apps/web/app/api/semse/cortex/context/stream/route.ts:15"}, "properties": {"repobilityId": "193b8fe3c9510f0c", "scanner": "scanner-primary", "fingerprint": "29dba5c9a967c090", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d73bfc4b99884dc1", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/apps/web/app/api/semse/uploads/files/[...key]/route.ts:26"}, "properties": {"repobilityId": "54561673a4a76faf", "scanner": "scanner-primary", "fingerprint": "d73bfc4b99884dc1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4da137961724e141", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/apps/web/app/api/semse/vision/route.ts:17"}, "properties": {"repobilityId": "ccf818390273be17", "scanner": "scanner-primary", "fingerprint": "4da137961724e141", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-14a1c934de1201d0", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/apps/web/app/api/semse/finance/invoices/[id]/pdf/route.ts:17"}, "properties": {"repobilityId": "c078ff46eca1f77d", "scanner": "scanner-primary", "fingerprint": "14a1c934de1201d0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c020e108534639d2", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/apps/web/app/api/semse/my-bids/route.ts:14"}, "properties": {"repobilityId": "d821ddb706411bf4", "scanner": "scanner-primary", "fingerprint": "c020e108534639d2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-7359183b1d518a2d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/apps/web/app/api/semse/agents/delegations/stream/route.ts:15"}, "properties": {"repobilityId": "d34473095907c78a", "scanner": "scanner-primary", "fingerprint": "7359183b1d518a2d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-32a85e9334eaf34b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/apps/web/app/api/semse/agents/evidence-checklist/route.ts:12"}, "properties": {"repobilityId": "cc5656b74fca8116", "scanner": "scanner-primary", "fingerprint": "32a85e9334eaf34b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-49c55466070cf485", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/apps/web/app/api/semse/tools/painting/research/route.ts:121"}, "properties": {"repobilityId": "6e75808c921a96ed", "scanner": "scanner-primary", "fingerprint": "49c55466070cf485", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-46fa3297a0a067ee", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/apps/web/app/api/semse/tools/electrical/research/route.ts:122"}, "properties": {"repobilityId": "16680791f76ae28d", "scanner": "scanner-primary", "fingerprint": "46fa3297a0a067ee", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9c563e9088ff27d0", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/apps/web/app/api/semse/public/intake/_shared.ts:48"}, "properties": {"repobilityId": "bef08fbebdb50e37", "scanner": "scanner-primary", "fingerprint": "9c563e9088ff27d0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-5f0d9f24bbdb2072", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/apps/web/app/api/semse/public/intake/[id]/images/route.ts:24"}, "properties": {"repobilityId": "781220707ab23b08", "scanner": "scanner-primary", "fingerprint": "5f0d9f24bbdb2072", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-fe27cc1bf4367bb3", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/apps/web/app/api/semse/travel/_google.ts:60"}, "properties": {"repobilityId": "a5181663ce4caa73", "scanner": "scanner-primary", "fingerprint": "fe27cc1bf4367bb3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-12ae74c6ac5f5837", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/apps/web/app/repo-map/repo-map-client.tsx:31"}, "properties": {"repobilityId": "436992179cb30ef4", "scanner": "scanner-primary", "fingerprint": "12ae74c6ac5f5837", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-15da4b201962af5e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/apps/web/app/lib/buildops-api.ts:122"}, "properties": {"repobilityId": "a1227bc9d9c7ff4f", "scanner": "scanner-primary", "fingerprint": "15da4b201962af5e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-97811eaf37fb31c8", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/apps/web/app/lib/semse-tools-api.ts:257"}, "properties": {"repobilityId": "6e9c8bf22742b6f8", "scanner": "scanner-primary", "fingerprint": "97811eaf37fb31c8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-7064b2ffe412bec9", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/apps/web/app/field-ops/page.tsx:91"}, "properties": {"repobilityId": "7f15b403cb1a8ac1", "scanner": "scanner-primary", "fingerprint": "7064b2ffe412bec9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f11e1b61b52bfccc", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/apps/web/app/(app)/client/marketplace/page.tsx:226"}, "properties": {"repobilityId": "e87130c46d76c5ad", "scanner": "scanner-primary", "fingerprint": "f11e1b61b52bfccc", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b15498b7da8d5457", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/apps/web/app/(app)/client/dashboard/page.tsx:53"}, "properties": {"repobilityId": "b7e02664cfecc24d", "scanner": "scanner-primary", "fingerprint": "b15498b7da8d5457", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f67492f2d9076a71", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/apps/web/app/(app)/client/jobs/new/page.tsx:179"}, "properties": {"repobilityId": "9361312f7bd3203a", "scanner": "scanner-primary", "fingerprint": "f67492f2d9076a71", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-1011e7ce16e4222b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/apps/web/app/(app)/worker/field-ops/page.tsx:93"}, "properties": {"repobilityId": "a2eaaa5948ebeeb1", "scanner": "scanner-primary", "fingerprint": "1011e7ce16e4222b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-edd38001effc1560", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/apps/web/app/(app)/admin/prometeo/page.tsx:49"}, "properties": {"repobilityId": "eaae15ade5411820", "scanner": "scanner-primary", "fingerprint": "edd38001effc1560", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-baaa6fb8a41c063f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/apps/web/app/(app)/admin/marketplace/page.tsx:79"}, "properties": {"repobilityId": "5a6b77f0000e9a75", "scanner": "scanner-primary", "fingerprint": "baaa6fb8a41c063f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-636a92c57e972a77", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/apps/web/app/(app)/admin/algorithm-engine/page.tsx:78"}, "properties": {"repobilityId": "335d5f4a23c03b3e", "scanner": "scanner-primary", "fingerprint": "636a92c57e972a77", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e53840ab742d4137", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/apps/web/app/(app)/admin/contractors/page.tsx:99"}, "properties": {"repobilityId": "d980a0a463f717b8", "scanner": "scanner-primary", "fingerprint": "e53840ab742d4137", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-34b35733ac985646", "level": "note", "message": {"text": "Legacy-named symbol `battery_backup` in project-manager-app/apps/web/app/(app)/tools/electrical-subsystems/electrical-subsystems-tool-client.tsx:11"}, "properties": {"repobilityId": "e69185801513eb1a", "scanner": "scanner-primary", "fingerprint": "34b35733ac985646", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-2c553b4524712974", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/apps/web/app/runtime-map/runtime-map-client.tsx:40"}, "properties": {"repobilityId": "4981d32bc5cdd53c", "scanner": "scanner-primary", "fingerprint": "2c553b4524712974", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-8bff7e12f4028ee7", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/apps/web/app/knowledge/knowledge-client.tsx:20"}, "properties": {"repobilityId": "c6d5eebcd7b3835f", "scanner": "scanner-primary", "fingerprint": "8bff7e12f4028ee7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-65fc810ce019e371", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/apps/web/hooks/use-intake.ts:141"}, "properties": {"repobilityId": "48ed65fca79cf3fa", "scanner": "scanner-primary", "fingerprint": "65fc810ce019e371", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-475847b8af0f85a0", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/apps/web/hooks/usePushNotifications.ts:44"}, "properties": {"repobilityId": "712b7ab51b1088e1", "scanner": "scanner-primary", "fingerprint": "475847b8af0f85a0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c670652b3acaa20a", "level": "note", "message": {"text": "Legacy-named symbol `review__copy` in project-manager-app/apps/angular/src/app/features/client/client-job-builder.page.ts:194"}, "properties": {"repobilityId": "93f2d381834f5997", "scanner": "scanner-primary", "fingerprint": "c670652b3acaa20a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-5c523ed541124a41", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/scripts/api-contracts-smoke.mjs:86"}, "properties": {"repobilityId": "517d5cc844c1d671", "scanner": "scanner-primary", "fingerprint": "5c523ed541124a41", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3071640c1c8ad3b2", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/scripts/api-operacion-asistida-smoke.mjs:100"}, "properties": {"repobilityId": "03b5fcd13288a16f", "scanner": "scanner-primary", "fingerprint": "3071640c1c8ad3b2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-07e1768acafd3cd6", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/scripts/local-llm-smoke.mjs:18"}, "properties": {"repobilityId": "532541a1891aed6e", "scanner": "scanner-primary", "fingerprint": "07e1768acafd3cd6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-7465fe70c35323c3", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/scripts/smart-intake-e2e-smoke.mjs:36"}, "properties": {"repobilityId": "8465e85c17281267", "scanner": "scanner-primary", "fingerprint": "7465fe70c35323c3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-0ae5bbd0f2a91f0d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/scripts/api-copilot-actions-smoke.mjs:15"}, "properties": {"repobilityId": "01f2253b6370bf83", "scanner": "scanner-primary", "fingerprint": "0ae5bbd0f2a91f0d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c71b5e5386e0745f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/scripts/api-marketplace-smoke.mjs:74"}, "properties": {"repobilityId": "f90660703b5d9f6c", "scanner": "scanner-primary", "fingerprint": "c71b5e5386e0745f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-19802fd6e8a5aca3", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/scripts/smoke-browser-agent-remote.mjs:46"}, "properties": {"repobilityId": "d559c3e7e92bc407", "scanner": "scanner-primary", "fingerprint": "19802fd6e8a5aca3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-115c1b1b261bc90f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/scripts/api-travel-smoke.mjs:22"}, "properties": {"repobilityId": "020e6ee38ec14e8e", "scanner": "scanner-primary", "fingerprint": "115c1b1b261bc90f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a0e98a6ddb47a2be", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/scripts/prometeo-rag-embeddings-smoke.mjs:33"}, "properties": {"repobilityId": "b5827dbbff88dbb7", "scanner": "scanner-primary", "fingerprint": "a0e98a6ddb47a2be", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-dd1ad4972748b84b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/scripts/api-autonomy-staged-smoke.mjs:107"}, "properties": {"repobilityId": "dac47e8d37a5ac6d", "scanner": "scanner-primary", "fingerprint": "dd1ad4972748b84b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4cf26988f204193e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/scripts/smoke-browser-agent.mjs:213"}, "properties": {"repobilityId": "58fc1d09ec3e8941", "scanner": "scanner-primary", "fingerprint": "4cf26988f204193e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-28a24684b7bcc1f3", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/scripts/prometeo-backfill-embeddings.mjs:33"}, "properties": {"repobilityId": "ad9ef4978d5caeab", "scanner": "scanner-primary", "fingerprint": "28a24684b7bcc1f3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-000f9acd6336e0af", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/scripts/multi-category-intake-smoke.mjs:141"}, "properties": {"repobilityId": "6e0e4024cbd04d88", "scanner": "scanner-primary", "fingerprint": "000f9acd6336e0af", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-85718916b98582f1", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/scripts/operacion-asistida-bcp-drill.mjs:317"}, "properties": {"repobilityId": "4fab7ee121b5799f", "scanner": "scanner-primary", "fingerprint": "85718916b98582f1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-fb9808779bd5afe3", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/scripts/api-integration.mjs:271"}, "properties": {"repobilityId": "d715efb817c8ee94", "scanner": "scanner-primary", "fingerprint": "fb9808779bd5afe3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9e305aac7c1cd059", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/scripts/api-autonomy-local-llm-smoke.mjs:128"}, "properties": {"repobilityId": "68fb3bbe341e99ba", "scanner": "scanner-primary", "fingerprint": "9e305aac7c1cd059", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2b9013d3a1012b93", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/scripts/api-disputes-smoke.mjs:112"}, "properties": {"repobilityId": "0db0f5a134ea550a", "scanner": "scanner-primary", "fingerprint": "2b9013d3a1012b93", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-cba41562b691a086", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/scripts/buildops-legacy-promotion-smoke.mjs:46"}, "properties": {"repobilityId": "82109ec89b3a36b3", "scanner": "scanner-primary", "fingerprint": "cba41562b691a086", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-00dd65780acb8d17", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/scripts/api-projects-smoke.mjs:157"}, "properties": {"repobilityId": "14b4c33f9225e2ed", "scanner": "scanner-primary", "fingerprint": "00dd65780acb8d17", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3bfd11735615c4a0", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/scripts/api-agents-smoke.mjs:96"}, "properties": {"repobilityId": "4308d774bd9a5da9", "scanner": "scanner-primary", "fingerprint": "3bfd11735615c4a0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b0993b24939ae2e8", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/scripts/api-milestones-smoke.mjs:90"}, "properties": {"repobilityId": "669a3570fd5394f5", "scanner": "scanner-primary", "fingerprint": "b0993b24939ae2e8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4e371f3144fcdf9e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/scripts/buildops-rerun-bridge-smoke.mjs:64"}, "properties": {"repobilityId": "71fc81fe7824e457", "scanner": "scanner-primary", "fingerprint": "4e371f3144fcdf9e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b1f2e0b1126b932a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/scripts/api-domain-events-smoke.mjs:147"}, "properties": {"repobilityId": "4df509f5639f959c", "scanner": "scanner-primary", "fingerprint": "b1f2e0b1126b932a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-0dd015576f84f4a2", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/scripts/api-persistence-smoke.mjs:43"}, "properties": {"repobilityId": "4a88c43ebee5b6cd", "scanner": "scanner-primary", "fingerprint": "0dd015576f84f4a2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-82c60272c17b3f69", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/scripts/web-travel-bff-smoke.mjs:8"}, "properties": {"repobilityId": "9c3946792775da21", "scanner": "scanner-primary", "fingerprint": "82c60272c17b3f69", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2736782877eb6f39", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/scripts/api-reservations-smoke.mjs:80"}, "properties": {"repobilityId": "1b2874d7a42af746", "scanner": "scanner-primary", "fingerprint": "2736782877eb6f39", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b98dc63f1f446284", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/scripts/api-escrow-contract-smoke.mjs:120"}, "properties": {"repobilityId": "9884caa66237b9e5", "scanner": "scanner-primary", "fingerprint": "b98dc63f1f446284", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4f61e73e75eef799", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/scripts/intake-operations-bridge-smoke.mjs:35"}, "properties": {"repobilityId": "2f2a8db5afb20570", "scanner": "scanner-primary", "fingerprint": "4f61e73e75eef799", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-8eb796185b9538cb", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/scripts/demo-smoke.mjs:29"}, "properties": {"repobilityId": "d5027e9507bf70d9", "scanner": "scanner-primary", "fingerprint": "8eb796185b9538cb", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d9bbf5a1887cffce", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/scripts/api-evidence-smoke.mjs:95"}, "properties": {"repobilityId": "92e24a950f96ec0c", "scanner": "scanner-primary", "fingerprint": "d9bbf5a1887cffce", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c5f84bf4361bebf6", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 project-manager-app/packages/autonomy/src/index.ts:102"}, "properties": {"repobilityId": "8c162e6be99fd22e", "scanner": "scanner-primary", "fingerprint": "c5f84bf4361bebf6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4da2a52ef12d515e", "level": "note", "message": {"text": "Legacy-named symbol `agt_pricing_v1` in project-manager-app/packages/agents/src/governance.ts:311"}, "properties": {"repobilityId": "256a7918b08421e0", "scanner": "scanner-primary", "fingerprint": "4da2a52ef12d515e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-efe5ca4050f86428", "level": "note", "message": {"text": "Legacy-named symbol `remove_old` in project-manager-app/packages/tools/src/trades/flooring.engine.ts:92"}, "properties": {"repobilityId": "ea5a1e9b06856c75", "scanner": "scanner-primary", "fingerprint": "efe5ca4050f86428", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-2153571a4d5dd99f", "level": "note", "message": {"text": "78 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "7a9eb2130cdb9da2", "scanner": "scanner-primary", "fingerprint": "2153571a4d5dd99f", "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": "bb6566792feada49", "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": "25aae8f43568799a", "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": "2f196371384eb6ef", "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": "e44d825292464241", "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": "c5f328db76613ed9", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-17ccfdcd19cd325a", "level": "error", "message": {"text": "FastAPI POST `analyze_evidence_endpoint` without auth dependency \u2014 project-manager-app/apps/vision-service/app/routes/evidence.py:59"}, "properties": {"repobilityId": "960f967c224f2986", "scanner": "scanner-primary", "fingerprint": "17ccfdcd19cd325a", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "project-manager-app/apps/vision-service/app/routes/evidence.py"}, "region": {"startLine": 59}}}]}, {"ruleId": "scanner-b3e5a11936d416c2", "level": "error", "message": {"text": "FastAPI POST `compare_before_after_endpoint` without auth dependency \u2014 project-manager-app/apps/vision-service/app/routes/evidence.py:159"}, "properties": {"repobilityId": "c2b3f3649a0be4bc", "scanner": "scanner-primary", "fingerprint": "b3e5a11936d416c2", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "project-manager-app/apps/vision-service/app/routes/evidence.py"}, "region": {"startLine": 159}}}]}, {"ruleId": "scanner-ba581e8a7acd3bd1", "level": "error", "message": {"text": "FastAPI POST `check_duplicate_endpoint` without auth dependency \u2014 project-manager-app/apps/vision-service/app/routes/evidence.py:173"}, "properties": {"repobilityId": "ba694a827c813569", "scanner": "scanner-primary", "fingerprint": "ba581e8a7acd3bd1", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "project-manager-app/apps/vision-service/app/routes/evidence.py"}, "region": {"startLine": 173}}}]}, {"ruleId": "scanner-a0335dfb72cf41c4", "level": "error", "message": {"text": "FastAPI POST `blueprint_endpoint` without auth dependency \u2014 project-manager-app/apps/vision-service/app/routes/evidence.py:186"}, "properties": {"repobilityId": "3402e8a8f78c9358", "scanner": "scanner-primary", "fingerprint": "a0335dfb72cf41c4", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "project-manager-app/apps/vision-service/app/routes/evidence.py"}, "region": {"startLine": 186}}}]}, {"ruleId": "scanner-677d5223da1eb171", "level": "error", "message": {"text": "FastAPI POST `perspective_correct_endpoint` without auth dependency \u2014 project-manager-app/apps/vision-service/app/routes/evidence.py:197"}, "properties": {"repobilityId": "94651ca48bac3132", "scanner": "scanner-primary", "fingerprint": "677d5223da1eb171", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "project-manager-app/apps/vision-service/app/routes/evidence.py"}, "region": {"startLine": 197}}}]}, {"ruleId": "scanner-f4977cb5b3f9dbe9", "level": "error", "message": {"text": "FastAPI POST `document_binarize_endpoint` without auth dependency \u2014 project-manager-app/apps/vision-service/app/routes/evidence.py:214"}, "properties": {"repobilityId": "081585e7fb5ea37b", "scanner": "scanner-primary", "fingerprint": "f4977cb5b3f9dbe9", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "project-manager-app/apps/vision-service/app/routes/evidence.py"}, "region": {"startLine": 214}}}]}, {"ruleId": "scanner-54379b87b0b5d021", "level": "error", "message": {"text": "FastAPI POST `estimate_area_endpoint` without auth dependency \u2014 project-manager-app/apps/vision-service/app/routes/evidence.py:223"}, "properties": {"repobilityId": "17b210ae762640d3", "scanner": "scanner-primary", "fingerprint": "54379b87b0b5d021", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "project-manager-app/apps/vision-service/app/routes/evidence.py"}, "region": {"startLine": 223}}}]}, {"ruleId": "scanner-b5022c78a0f5eb03", "level": "error", "message": {"text": "FastAPI POST `check_consistency_endpoint` without auth dependency \u2014 project-manager-app/apps/vision-service/app/routes/evidence.py:233"}, "properties": {"repobilityId": "9dda118811dd8cc5", "scanner": "scanner-primary", "fingerprint": "b5022c78a0f5eb03", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "project-manager-app/apps/vision-service/app/routes/evidence.py"}, "region": {"startLine": 233}}}]}, {"ruleId": "scanner-ff46c0ec0bea2d3b", "level": "error", "message": {"text": "FastAPI POST `progress_timeline_endpoint` without auth dependency \u2014 project-manager-app/apps/vision-service/app/routes/evidence.py:243"}, "properties": {"repobilityId": "17c4362a0d8043d4", "scanner": "scanner-primary", "fingerprint": "ff46c0ec0bea2d3b", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "project-manager-app/apps/vision-service/app/routes/evidence.py"}, "region": {"startLine": 243}}}]}, {"ruleId": "scanner-eeb86d7d5764001f", "level": "error", "message": {"text": "FastAPI POST `safety_check_endpoint` without auth dependency \u2014 project-manager-app/apps/vision-service/app/routes/evidence.py:262"}, "properties": {"repobilityId": "4f7c8752c325105a", "scanner": "scanner-primary", "fingerprint": "eeb86d7d5764001f", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "project-manager-app/apps/vision-service/app/routes/evidence.py"}, "region": {"startLine": 262}}}]}, {"ruleId": "scanner-c23ab1e507b71440", "level": "error", "message": {"text": "FastAPI POST `match_reference_endpoint` without auth dependency \u2014 project-manager-app/apps/vision-service/app/routes/evidence.py:268"}, "properties": {"repobilityId": "f4560639cf2ef340", "scanner": "scanner-primary", "fingerprint": "c23ab1e507b71440", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "project-manager-app/apps/vision-service/app/routes/evidence.py"}, "region": {"startLine": 268}}}]}, {"ruleId": "scanner-4f93124b7a1a1e2d", "level": "error", "message": {"text": "FastAPI POST `detect_trade_endpoint` without auth dependency \u2014 project-manager-app/apps/vision-service/app/routes/evidence.py:275"}, "properties": {"repobilityId": "b1db1911f2e9af8a", "scanner": "scanner-primary", "fingerprint": "4f93124b7a1a1e2d", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "project-manager-app/apps/vision-service/app/routes/evidence.py"}, "region": {"startLine": 275}}}]}, {"ruleId": "scanner-b9bfea72c9780087", "level": "error", "message": {"text": "FastAPI POST `batch_analyze_endpoint` without auth dependency \u2014 project-manager-app/apps/vision-service/app/routes/evidence.py:295"}, "properties": {"repobilityId": "e229fed8e76da8dd", "scanner": "scanner-primary", "fingerprint": "b9bfea72c9780087", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "project-manager-app/apps/vision-service/app/routes/evidence.py"}, "region": {"startLine": 295}}}]}, {"ruleId": "scanner-953c16770c88d061", "level": "error", "message": {"text": "Dangling fetch: POST /api/semse/tracker/bootstrap (project-manager-app/tests/e2e-semse/worker-tracker.spec.js:21)"}, "properties": {"repobilityId": "64958104279ecbb0", "scanner": "scanner-primary", "fingerprint": "953c16770c88d061", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6aa7a4744e083d43", "level": "error", "message": {"text": "Dangling fetch: GET /api/provider (project-manager-app/apps/autonomy-server/src/server.mjs:119)"}, "properties": {"repobilityId": "9069f87fe2bca0c7", "scanner": "scanner-primary", "fingerprint": "6aa7a4744e083d43", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9d1d1f219d0350b6", "level": "error", "message": {"text": "Dangling fetch: GET /api/runs (project-manager-app/apps/autonomy-server/src/server.mjs:126)"}, "properties": {"repobilityId": "9de1a8480a35c626", "scanner": "scanner-primary", "fingerprint": "9d1d1f219d0350b6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ceff3c830374893b", "level": "error", "message": {"text": "Dangling fetch: POST /api/run (project-manager-app/apps/autonomy-server/src/server.mjs:146)"}, "properties": {"repobilityId": "62b3108cd5011708", "scanner": "scanner-primary", "fingerprint": "ceff3c830374893b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b5a24196b43aed7d", "level": "error", "message": {"text": "Dangling fetch: POST https://api.openai.com/v1/embeddings (project-manager-app/scripts/prometeo-backfill-embeddings.mjs:33)"}, "properties": {"repobilityId": "76a4e94765ca5557", "scanner": "scanner-primary", "fingerprint": "b5a24196b43aed7d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3fc89afc491727ce", "level": "error", "message": {"text": "Dangling fetch: POST https://api.openai.com/v1/embeddings (project-manager-app/apps/api/src/modules/prometeo/embedding.service.ts:121)"}, "properties": {"repobilityId": "06d7eff5739c1882", "scanner": "scanner-primary", "fingerprint": "3fc89afc491727ce", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-cfcd109e7944605c", "level": "error", "message": {"text": "Dangling fetch: POST https://graph.facebook.com/${version}/${phoneNumberId}/messages (project-manager-app/apps/api/src/modules/communications/providers/whatsapp-cloud.adapter.ts:163)"}, "properties": {"repobilityId": "824c25ec595ff1c6", "scanner": "scanner-primary", "fingerprint": "cfcd109e7944605c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-05f3547c1fb663ef", "level": "error", "message": {"text": "Dangling fetch: GET /api/semse/${moduleSlug} (project-manager-app/apps/api/src/modules/ops/apply-engine.service.ts:93)"}, "properties": {"repobilityId": "8718222626c35600", "scanner": "scanner-primary", "fingerprint": "05f3547c1fb663ef", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-60a53b4d100bb5ff", "level": "error", "message": {"text": "Dangling fetch: POST /api/semse/buildops/projects/${projectId}/rag-query (project-manager-app/apps/web/components/buildops/OperationalRagQueryPanel.tsx:46)"}, "properties": {"repobilityId": "48bb7a0a78b72f0d", "scanner": "scanner-primary", "fingerprint": "60a53b4d100bb5ff", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b546e85853834974", "level": "error", "message": {"text": "Dangling fetch: GET /api/semse/buildops/projects/${projectId}/health (project-manager-app/apps/web/components/buildops/BuildOpsProjectHealthPanel.tsx:43)"}, "properties": {"repobilityId": "5b79762ca75ea01c", "scanner": "scanner-primary", "fingerprint": "b546e85853834974", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-60c8f5b91f942fb9", "level": "error", "message": {"text": "Dangling fetch: GET /api/semse/worker/evidence-summary (project-manager-app/apps/web/components/semse/WorkerEvidenceSummary.tsx:15)"}, "properties": {"repobilityId": "09e59c5efca9612e", "scanner": "scanner-primary", "fingerprint": "60c8f5b91f942fb9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-87c467064f7c70e7", "level": "error", "message": {"text": "Dangling fetch: POST /api/semse/agents/plan (project-manager-app/apps/web/components/semse/BuildOpsPlanCard.tsx:30)"}, "properties": {"repobilityId": "291aa05621f38ed6", "scanner": "scanner-primary", "fingerprint": "87c467064f7c70e7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b1e7abdc2792aec1", "level": "error", "message": {"text": "Dangling fetch: POST /api/semse/agents/payment-readiness (project-manager-app/apps/web/components/semse/CrowdDecisionBadge.tsx:30)"}, "properties": {"repobilityId": "c9339714243d256a", "scanner": "scanner-primary", "fingerprint": "b1e7abdc2792aec1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0f59461e6b03fc33", "level": "error", "message": {"text": "Dangling fetch: POST /api/semse/ops/apply (project-manager-app/apps/web/components/semse/SimulationPanel.tsx:76)"}, "properties": {"repobilityId": "9df006cd0a096d3d", "scanner": "scanner-primary", "fingerprint": "0f59461e6b03fc33", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2cecdeae56b0d447", "level": "error", "message": {"text": "Dangling fetch: GET /api/semse/ops/simulation?limit=6 (project-manager-app/apps/web/components/semse/SimulationPanel.tsx:222)"}, "properties": {"repobilityId": "cb81904d17b7eb85", "scanner": "scanner-primary", "fingerprint": "2cecdeae56b0d447", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0c9b33a57473895b", "level": "error", "message": {"text": "Dangling fetch: POST /api/semse/notifications/${notificationId}/read (project-manager-app/apps/web/components/semse/NotificationBell.tsx:68)"}, "properties": {"repobilityId": "b5299ab7a198f988", "scanner": "scanner-primary", "fingerprint": "0c9b33a57473895b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-532abba95a31c348", "level": "error", "message": {"text": "Dangling fetch: POST /api/semse/notifications/read-all (project-manager-app/apps/web/components/semse/NotificationBell.tsx:72)"}, "properties": {"repobilityId": "0afc16e653a60be8", "scanner": "scanner-primary", "fingerprint": "532abba95a31c348", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-286a6f283dcb1a84", "level": "error", "message": {"text": "Dangling fetch: GET /api/semse/notifications?limit=15 (project-manager-app/apps/web/components/semse/NotificationBell.tsx:89)"}, "properties": {"repobilityId": "ead10a3e5b227268", "scanner": "scanner-primary", "fingerprint": "286a6f283dcb1a84", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-70be30d77180f963", "level": "error", "message": {"text": "Dangling fetch: GET /api/semse/trust/${encodeURIComponent(userId)}/passport (project-manager-app/apps/web/components/semse/TrustPassportCard.tsx:63)"}, "properties": {"repobilityId": "649630c4c52db2a3", "scanner": "scanner-primary", "fingerprint": "70be30d77180f963", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-251971f1b5f496b0", "level": "error", "message": {"text": "Dangling fetch: GET /api/semse/governance/credits/${encodeURIComponent(userId)}?tenantId=${encodeURIComponent(tenantId)} (project-manager-app/apps/web/components/semse/TrustPassportCard.tsx:64)"}, "properties": {"repobilityId": "340bd83d82192966", "scanner": "scanner-primary", "fingerprint": "251971f1b5f496b0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0a0ef6b788be049d", "level": "error", "message": {"text": "Dangling fetch: GET /api/semse/consciousness/simulations (project-manager-app/apps/web/components/semse/SimulationHistoryPanel.tsx:54)"}, "properties": {"repobilityId": "bbc489eb4323849e", "scanner": "scanner-primary", "fingerprint": "0a0ef6b788be049d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8675b3ac45921e40", "level": "error", "message": {"text": "Dangling fetch: GET /api/semse/ops/recommendations (project-manager-app/apps/web/components/semse/RecommendationsPanel.tsx:148)"}, "properties": {"repobilityId": "a62161083b36869c", "scanner": "scanner-primary", "fingerprint": "8675b3ac45921e40", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8b59b3b33d12535c", "level": "error", "message": {"text": "Dangling fetch: POST /api/semse/agents/evidence-checklist (project-manager-app/apps/web/components/semse/EvidenceChecklistCard.tsx:35)"}, "properties": {"repobilityId": "797aa17391c85667", "scanner": "scanner-primary", "fingerprint": "8b59b3b33d12535c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-70992995539f3f56", "level": "error", "message": {"text": "Dangling fetch: GET /api/semse/milestones/${milestoneId}/vision-summary (project-manager-app/apps/web/components/milestones/MilestoneVisionSummaryCard.tsx:39)"}, "properties": {"repobilityId": "9385c220fda5edc6", "scanner": "scanner-primary", "fingerprint": "70992995539f3f56", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8bd434ce8cdfaa53", "level": "error", "message": {"text": "Dangling fetch: GET /api/semse/milestones/${milestoneId}/evidence-items (project-manager-app/apps/web/components/milestones/EvidenceReviewAdminCard.tsx:129)"}, "properties": {"repobilityId": "d8e1e59e363d6085", "scanner": "scanner-primary", "fingerprint": "8bd434ce8cdfaa53", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3752fcb8c8120ab8", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/semse/milestones/${milestoneId}/evidence-items/${item.id} (project-manager-app/apps/web/components/milestones/EvidenceReviewAdminCard.tsx:154)"}, "properties": {"repobilityId": "955fa7c046a7982e", "scanner": "scanner-primary", "fingerprint": "3752fcb8c8120ab8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-55d4b8aec2f9b8d6", "level": "error", "message": {"text": "Dangling fetch: POST /api/semse/milestones/${milestoneId}/evidence-items/${item.id}/review (project-manager-app/apps/web/components/milestones/EvidenceReviewAdminCard.tsx:180)"}, "properties": {"repobilityId": "ab1adf3c979047fd", "scanner": "scanner-primary", "fingerprint": "55d4b8aec2f9b8d6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d9eb98569ffd4220", "level": "error", "message": {"text": "Dangling fetch: POST /api/semse/milestones/${milestoneId}/evidence-items/${item.id}/archive (project-manager-app/apps/web/components/milestones/EvidenceReviewAdminCard.tsx:431)"}, "properties": {"repobilityId": "e47000a42c5988b5", "scanner": "scanner-primary", "fingerprint": "d9eb98569ffd4220", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-867d0ac34c90cb6a", "level": "error", "message": {"text": "Dangling fetch: GET /api/semse/milestones/${milestoneId}/evidence-items/${itemId} (project-manager-app/apps/web/components/milestones/EvidenceItemDetailPanel.tsx:108)"}, "properties": {"repobilityId": "d18912ebf34901ae", "scanner": "scanner-primary", "fingerprint": "867d0ac34c90cb6a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2a365389646dc6c4", "level": "error", "message": {"text": "Dangling fetch: GET /api/semse/milestones/${milestoneId}/evidence-items/${itemId}/history (project-manager-app/apps/web/components/milestones/EvidenceItemDetailPanel.tsx:109)"}, "properties": {"repobilityId": "0674c606fa10a0c1", "scanner": "scanner-primary", "fingerprint": "2a365389646dc6c4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-bb3dde11764ce10d", "level": "error", "message": {"text": "Dangling fetch: POST /api/semse/evidence/presign (project-manager-app/apps/web/components/milestones/EvidenceItemDetailPanel.tsx:134)"}, "properties": {"repobilityId": "608fd4a072ea6b78", "scanner": "scanner-primary", "fingerprint": "bb3dde11764ce10d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f98a18f1a343f10b", "level": "error", "message": {"text": "Dangling fetch: PUT /api/semse/uploads/files/${encodeURIComponent(key)} (project-manager-app/apps/web/components/milestones/EvidenceItemDetailPanel.tsx:145)"}, "properties": {"repobilityId": "7401470aef5d6d0b", "scanner": "scanner-primary", "fingerprint": "f98a18f1a343f10b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3d925fdf4eb7f025", "level": "error", "message": {"text": "Dangling fetch: POST /api/semse/evidence (project-manager-app/apps/web/components/milestones/EvidenceItemDetailPanel.tsx:151)"}, "properties": {"repobilityId": "56a5c7ab33c0baa3", "scanner": "scanner-primary", "fingerprint": "3d925fdf4eb7f025", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-636a6461d97338e0", "level": "error", "message": {"text": "Dangling fetch: POST /api/semse/milestones/${milestoneId}/evidence-items/${itemId}/replace (project-manager-app/apps/web/components/milestones/EvidenceItemDetailPanel.tsx:160)"}, "properties": {"repobilityId": "ad26ec396e21f6b3", "scanner": "scanner-primary", "fingerprint": "636a6461d97338e0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-870cce13a2662d7d", "level": "error", "message": {"text": "Dangling fetch: GET /api/semse/milestones/${milestoneId}/payment-governance (project-manager-app/apps/web/components/milestones/MilestoneGovernancePanel.tsx:97)"}, "properties": {"repobilityId": "5a21e82a65129e8f", "scanner": "scanner-primary", "fingerprint": "870cce13a2662d7d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-44c7f58d282a0702", "level": "error", "message": {"text": "Dangling fetch: POST /api/semse/evidence/presign (project-manager-app/apps/web/components/milestones/MilestoneEvidenceUploader.tsx:81)"}, "properties": {"repobilityId": "5cb1d1c48f8da01a", "scanner": "scanner-primary", "fingerprint": "44c7f58d282a0702", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9f40add950f23910", "level": "error", "message": {"text": "Dangling fetch: POST /api/semse/evidence (project-manager-app/apps/web/components/milestones/MilestoneEvidenceUploader.tsx:102)"}, "properties": {"repobilityId": "b308db26eaf68209", "scanner": "scanner-primary", "fingerprint": "9f40add950f23910", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-27a816e025247430", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/semse/milestones/${milestoneId}/evidence-items/${itemId} (project-manager-app/apps/web/components/milestones/MilestoneEvidenceUploader.tsx:112)"}, "properties": {"repobilityId": "9d0647ea24c91965", "scanner": "scanner-primary", "fingerprint": "27a816e025247430", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-27cefc94221dc3d5", "level": "error", "message": {"text": "Dangling fetch: POST /api/semse/milestones/${milestoneId}/evidence-items/${itemId}/review (project-manager-app/apps/web/components/milestones/MilestoneEvidenceUploader.tsx:122)"}, "properties": {"repobilityId": "d571c3f749814055", "scanner": "scanner-primary", "fingerprint": "27cefc94221dc3d5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-76ecebab9f8c7291", "level": "error", "message": {"text": "Dangling fetch: GET /api/semse/milestones/${milestoneId}/evidence-items (project-manager-app/apps/web/components/milestones/MilestoneEvidenceUploader.tsx:164)"}, "properties": {"repobilityId": "b31caaef581a5f39", "scanner": "scanner-primary", "fingerprint": "76ecebab9f8c7291", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-01cdd59397c4d859", "level": "error", "message": {"text": "Dangling fetch: POST /api/semse/public/professionals/preview (project-manager-app/apps/web/components/landing/landing-intake.tsx:180)"}, "properties": {"repobilityId": "648446d043d83887", "scanner": "scanner-primary", "fingerprint": "01cdd59397c4d859", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b8aa97c9f7cdb938", "level": "error", "message": {"text": "Dangling fetch: POST /api/semse/public/budget/suggest (project-manager-app/apps/web/components/landing/landing-intake.tsx:213)"}, "properties": {"repobilityId": "406824be1949a78a", "scanner": "scanner-primary", "fingerprint": "b8aa97c9f7cdb938", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-03a3d7b32e0c1e01", "level": "error", "message": {"text": "Dangling fetch: POST /api/semse/tools/ai-assist (project-manager-app/apps/web/components/tools/ToolAIPanel.tsx:62)"}, "properties": {"repobilityId": "e6292f28d1cd56ad", "scanner": "scanner-primary", "fingerprint": "03a3d7b32e0c1e01", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-fb9589ad9fdb5dbe", "level": "error", "message": {"text": "Dangling fetch: GET /api/semse/change-orders/${changeOrderId}/impact (project-manager-app/apps/web/components/change-orders/ChangeOrderImpactCard.tsx:49)"}, "properties": {"repobilityId": "15a408ebbb4543d4", "scanner": "scanner-primary", "fingerprint": "fb9589ad9fdb5dbe", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e48d01c56d040709", "level": "error", "message": {"text": "Dangling fetch: POST /api/semse/change-orders/${changeOrderId}/apply-to-buildops (project-manager-app/apps/web/components/change-orders/ChangeOrderImpactCard.tsx:59)"}, "properties": {"repobilityId": "ead2951be4b4d782", "scanner": "scanner-primary", "fingerprint": "e48d01c56d040709", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3a9a1d0624e72caa", "level": "error", "message": {"text": "Dangling fetch: GET /api/semse/change-orders/${changeOrderId}/impact (project-manager-app/apps/web/components/change-orders/ChangeOrderImpactCard.tsx:64)"}, "properties": {"repobilityId": "658f77260924e175", "scanner": "scanner-primary", "fingerprint": "3a9a1d0624e72caa", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-fa2c262e4d9da817", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/semse/agents/plans/${encodeURIComponent(planId)}/approve (project-manager-app/apps/web/app/semse-api.ts:1193)"}, "properties": {"repobilityId": "ce5ecac7394c2cfe", "scanner": "scanner-primary", "fingerprint": "fa2c262e4d9da817", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5b4c630b131ac9be", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/semse/agents/plans/${encodeURIComponent(planId)}/reject (project-manager-app/apps/web/app/semse-api.ts:1211)"}, "properties": {"repobilityId": "caea5452b41f13ed", "scanner": "scanner-primary", "fingerprint": "5b4c630b131ac9be", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a6a501d92ec17300", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/semse/agents/plans/${encodeURIComponent(planId)}/cancel (project-manager-app/apps/web/app/semse-api.ts:1229)"}, "properties": {"repobilityId": "4f4ea168e656877e", "scanner": "scanner-primary", "fingerprint": "a6a501d92ec17300", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-06f05af764b278e1", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/semse/agents/plans/${encodeURIComponent(planId)}/steps/${encodeURIComponent(stepId)}/${action} (project-manager-app/apps/web/app/semse-api.ts:1252)"}, "properties": {"repobilityId": "041e1466bb0b5265", "scanner": "scanner-primary", "fingerprint": "06f05af764b278e1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-cdefc49a11fec695", "level": "error", "message": {"text": "Dangling fetch: POST /api/semse/prometeo/chunks/${encodeURIComponent(input.chunkId)}/feedback (project-manager-app/apps/web/app/semse-api.ts:1627)"}, "properties": {"repobilityId": "2c9291e0cd5d9f50", "scanner": "scanner-primary", "fingerprint": "cdefc49a11fec695", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-14d821936109bdea", "level": "error", "message": {"text": "Dangling fetch: GET /api/pro/${encodeURIComponent(slug)} (project-manager-app/apps/web/app/pro/[slug]/page.tsx:47)"}, "properties": {"repobilityId": "5faa56c22896f8af", "scanner": "scanner-primary", "fingerprint": "14d821936109bdea", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ee7c439d42fc5f06", "level": "error", "message": {"text": "Dangling fetch: POST /api/semse/auth/reset-password (project-manager-app/apps/web/app/reset-password/page.tsx:127)"}, "properties": {"repobilityId": "a9b946791f87cbbf", "scanner": "scanner-primary", "fingerprint": "ee7c439d42fc5f06", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-37f96086ea7c1133", "level": "error", "message": {"text": "Dangling fetch: GET /api/semse/anatomy/tree (project-manager-app/apps/web/app/anatomy/anatomy-client.tsx:30)"}, "properties": {"repobilityId": "4fbe4c63759797b3", "scanner": "scanner-primary", "fingerprint": "37f96086ea7c1133", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7710f6271044666e", "level": "error", "message": {"text": "Dangling fetch: GET /api/semse/anatomy/node/${selectedNodeId} (project-manager-app/apps/web/app/anatomy/anatomy-client.tsx:44)"}, "properties": {"repobilityId": "2032c61d72043d27", "scanner": "scanner-primary", "fingerprint": "7710f6271044666e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-99be6cc167db00d4", "level": "error", "message": {"text": "Dangling fetch: GET /api/semse/anatomy/children/${selectedNodeId} (project-manager-app/apps/web/app/anatomy/anatomy-client.tsx:45)"}, "properties": {"repobilityId": "1a03a94af8ba7ccc", "scanner": "scanner-primary", "fingerprint": "99be6cc167db00d4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-cf47d98f0dd87290", "level": "error", "message": {"text": "Dangling fetch: GET /api/semse/anatomy/relations/${selectedNodeId} (project-manager-app/apps/web/app/anatomy/anatomy-client.tsx:46)"}, "properties": {"repobilityId": "8409b989a295ad6d", "scanner": "scanner-primary", "fingerprint": "cf47d98f0dd87290", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9b696a5fc668678c", "level": "error", "message": {"text": "Dangling fetch: POST /api/semse/anatomy/query (project-manager-app/apps/web/app/anatomy/anatomy-client.tsx:72)"}, "properties": {"repobilityId": "c577fc7bd811dc8e", "scanner": "scanner-primary", "fingerprint": "9b696a5fc668678c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6c5b7c4337b88b4a", "level": "error", "message": {"text": "Dangling fetch: POST /api/semse/auth/token (project-manager-app/apps/web/app/login/page.tsx:57)"}, "properties": {"repobilityId": "996e6a76ef4ea5ed", "scanner": "scanner-primary", "fingerprint": "6c5b7c4337b88b4a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f0cd93377d40cfd6", "level": "error", "message": {"text": "Dangling fetch: POST https://api.tavily.com/search (project-manager-app/apps/web/app/api/semse/tools/painting/research/route.ts:178)"}, "properties": {"repobilityId": "f779ba61a334f403", "scanner": "scanner-primary", "fingerprint": "f0cd93377d40cfd6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c4e3dc0c7ab009cf", "level": "error", "message": {"text": "Dangling fetch: POST https://api.tavily.com/search (project-manager-app/apps/web/app/api/semse/tools/electrical/research/route.ts:179)"}, "properties": {"repobilityId": "dae4cfa22615dd81", "scanner": "scanner-primary", "fingerprint": "c4e3dc0c7ab009cf", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e0041b9facb90dc6", "level": "error", "message": {"text": "Dangling fetch: GET /api/semse/repo-knowledge/tree (project-manager-app/apps/web/app/repo-map/repo-map-client.tsx:31)"}, "properties": {"repobilityId": "0807ef4aa185db68", "scanner": "scanner-primary", "fingerprint": "e0041b9facb90dc6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-48166eef89975966", "level": "error", "message": {"text": "Dangling fetch: GET /api/semse/repo-knowledge/node/${selectedNodeId} (project-manager-app/apps/web/app/repo-map/repo-map-client.tsx:45)"}, "properties": {"repobilityId": "ad421bfdaeca694c", "scanner": "scanner-primary", "fingerprint": "48166eef89975966", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-099ba02a18ea8ef2", "level": "error", "message": {"text": "Dangling fetch: GET /api/semse/repo-knowledge/children/${selectedNodeId} (project-manager-app/apps/web/app/repo-map/repo-map-client.tsx:46)"}, "properties": {"repobilityId": "777181c798cc1f18", "scanner": "scanner-primary", "fingerprint": "099ba02a18ea8ef2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9828fad0dec77b93", "level": "error", "message": {"text": "Dangling fetch: GET /api/semse/repo-knowledge/relations/${selectedNodeId} (project-manager-app/apps/web/app/repo-map/repo-map-client.tsx:47)"}, "properties": {"repobilityId": "73796a9bc09c8ddd", "scanner": "scanner-primary", "fingerprint": "9828fad0dec77b93", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-95feb59580442684", "level": "error", "message": {"text": "Dangling fetch: POST /api/semse/repo-knowledge/query (project-manager-app/apps/web/app/repo-map/repo-map-client.tsx:73)"}, "properties": {"repobilityId": "98ee14d04165a3b2", "scanner": "scanner-primary", "fingerprint": "95feb59580442684", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9533fad1f697db4d", "level": "error", "message": {"text": "Dangling fetch: POST /api/semse/jobs/${jobId}/escrow (project-manager-app/apps/web/app/components/payments/EscrowFundModal.tsx:62)"}, "properties": {"repobilityId": "e2ee5ded8d6bad12", "scanner": "scanner-primary", "fingerprint": "9533fad1f697db4d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3601ea69b8d9340e", "level": "error", "message": {"text": "Dangling fetch: POST /api/semse/workers/payout-method (project-manager-app/apps/web/app/components/payments/PayoutMethodForm.tsx:80)"}, "properties": {"repobilityId": "6e895fa879279b37", "scanner": "scanner-primary", "fingerprint": "3601ea69b8d9340e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-84290a918d9e5c81", "level": "error", "message": {"text": "Dangling fetch: POST /api/semse/auth/forgot-password (project-manager-app/apps/web/app/forgot-password/page.tsx:18)"}, "properties": {"repobilityId": "e47691b964600006", "scanner": "scanner-primary", "fingerprint": "84290a918d9e5c81", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2117c6b32c416f9b", "level": "error", "message": {"text": "Dangling fetch: GET /api/semse/buildops/overview (project-manager-app/apps/web/app/lib/buildops-api.ts:122)"}, "properties": {"repobilityId": "f4aa11d34ff06b44", "scanner": "scanner-primary", "fingerprint": "2117c6b32c416f9b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c9d26c9f1e838df0", "level": "error", "message": {"text": "Dangling fetch: GET /api/semse/buildops/projects (project-manager-app/apps/web/app/lib/buildops-api.ts:127)"}, "properties": {"repobilityId": "ecc19459ba50fa69", "scanner": "scanner-primary", "fingerprint": "c9d26c9f1e838df0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2cd4561173adc72d", "level": "error", "message": {"text": "Dangling fetch: GET /api/semse/buildops/projects/${encodeURIComponent(projectId)} (project-manager-app/apps/web/app/lib/buildops-api.ts:132)"}, "properties": {"repobilityId": "abe72929445c9b03", "scanner": "scanner-primary", "fingerprint": "2cd4561173adc72d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b5901d3b8d381397", "level": "error", "message": {"text": "Dangling fetch: GET /api/semse/buildops/tasks (project-manager-app/apps/web/app/lib/buildops-api.ts:137)"}, "properties": {"repobilityId": "f499e55e0bad7153", "scanner": "scanner-primary", "fingerprint": "b5901d3b8d381397", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0d759557591cb9c5", "level": "error", "message": {"text": "Dangling fetch: GET /api/semse/buildops/tasks/${encodeURIComponent(taskId)} (project-manager-app/apps/web/app/lib/buildops-api.ts:142)"}, "properties": {"repobilityId": "61e929fb2e1fb882", "scanner": "scanner-primary", "fingerprint": "0d759557591cb9c5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8eed20f1808c8958", "level": "error", "message": {"text": "Dangling fetch: GET /api/semse/buildops/milestones (project-manager-app/apps/web/app/lib/buildops-api.ts:147)"}, "properties": {"repobilityId": "cccf201b2968af64", "scanner": "scanner-primary", "fingerprint": "8eed20f1808c8958", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6fdd164322452693", "level": "error", "message": {"text": "Dangling fetch: POST /api/semse/buildops/projects (project-manager-app/apps/web/app/lib/buildops-api.ts:166)"}, "properties": {"repobilityId": "968011181d4706bd", "scanner": "scanner-primary", "fingerprint": "6fdd164322452693", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-69b9ab5793025ce5", "level": "error", "message": {"text": "Dangling fetch: POST /api/semse/buildops/estimates/from-tool-result (project-manager-app/apps/web/app/lib/buildops-api.ts:186)"}, "properties": {"repobilityId": "71dc4e40a0658507", "scanner": "scanner-primary", "fingerprint": "69b9ab5793025ce5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-57edff2f56b6eb60", "level": "error", "message": {"text": "Dangling fetch: POST /api/semse/buildops/tasks (project-manager-app/apps/web/app/lib/buildops-api.ts:206)"}, "properties": {"repobilityId": "7164c84e825bd066", "scanner": "scanner-primary", "fingerprint": "57edff2f56b6eb60", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-134ba2b404179c17", "level": "error", "message": {"text": "Dangling fetch: POST /api/semse/buildops/plans/${encodeURIComponent(projectId)}/${action} (project-manager-app/apps/web/app/lib/buildops-api.ts:219)"}, "properties": {"repobilityId": "8175a977d0486426", "scanner": "scanner-primary", "fingerprint": "134ba2b404179c17", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-04d783eed6504f4d", "level": "error", "message": {"text": "Dangling fetch: POST /api/semse/tools/calculate (project-manager-app/apps/web/app/lib/semse-tools-api.ts:289)"}, "properties": {"repobilityId": "8c5d51d6200b27ca", "scanner": "scanner-primary", "fingerprint": "04d783eed6504f4d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7f0a86e7820b81f6", "level": "error", "message": {"text": "Dangling fetch: POST /api/semse/jobs (project-manager-app/apps/web/app/(app)/client/protools/page.tsx:58)"}, "properties": {"repobilityId": "1dce417e29463a56", "scanner": "scanner-primary", "fingerprint": "7f0a86e7820b81f6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5399ee78dbd7819a", "level": "error", "message": {"text": "Dangling fetch: POST /api/semse/agents/protools/estimate (project-manager-app/apps/web/app/(app)/client/protools/page.tsx:87)"}, "properties": {"repobilityId": "ff7a9ac405db72f7", "scanner": "scanner-primary", "fingerprint": "5399ee78dbd7819a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-94b760ab3f14e0b2", "level": "error", "message": {"text": "Dangling fetch: GET /api/semse/marketplace/listings?${qs}&limit=20 (project-manager-app/apps/web/app/(app)/client/marketplace/page.tsx:226)"}, "properties": {"repobilityId": "17058aa18198081b", "scanner": "scanner-primary", "fingerprint": "94b760ab3f14e0b2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-984e90cdbecd4cc2", "level": "error", "message": {"text": "Dangling fetch: GET /api/semse/marketplace/professionals?limit=8 (project-manager-app/apps/web/app/(app)/client/marketplace/page.tsx:227)"}, "properties": {"repobilityId": "7e0c71c587f04a1e", "scanner": "scanner-primary", "fingerprint": "984e90cdbecd4cc2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-08e91c466147721c", "level": "error", "message": {"text": "Dangling fetch: GET /api/semse/marketplace/stats (project-manager-app/apps/web/app/(app)/client/marketplace/page.tsx:228)"}, "properties": {"repobilityId": "4dfb373f6eff6401", "scanner": "scanner-primary", "fingerprint": "08e91c466147721c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c9c8c623d6e531a1", "level": "error", "message": {"text": "Dangling fetch: POST /api/semse/bids (project-manager-app/apps/web/app/(app)/client/marketplace/page.tsx:252)"}, "properties": {"repobilityId": "208fb4c124352129", "scanner": "scanner-primary", "fingerprint": "c9c8c623d6e531a1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-33c395062cc48e08", "level": "error", "message": {"text": "Dangling fetch: GET /api/semse/jobs (project-manager-app/apps/web/app/(app)/client/dashboard/page.tsx:53)"}, "properties": {"repobilityId": "791cf2dd676efec4", "scanner": "scanner-primary", "fingerprint": "33c395062cc48e08", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1239620f6487282c", "level": "error", "message": {"text": "Dangling fetch: GET /api/semse/jobs/${j.id}/bids (project-manager-app/apps/web/app/(app)/client/dashboard/page.tsx:63)"}, "properties": {"repobilityId": "776b52bb5fe5b971", "scanner": "scanner-primary", "fingerprint": "1239620f6487282c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-512c693ea31a8b4d", "level": "error", "message": {"text": "Dangling fetch: GET /api/semse/milestones/${milestoneId}/evidence-items (project-manager-app/apps/web/app/(app)/client/milestones/page.tsx:101)"}, "properties": {"repobilityId": "ebfd883cf907811f", "scanner": "scanner-primary", "fingerprint": "512c693ea31a8b4d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b54944e676215088", "level": "error", "message": {"text": "Dangling fetch: GET /api/semse/milestones/${milestoneId}/payment-readiness (project-manager-app/apps/web/app/(app)/client/milestones/page.tsx:102)"}, "properties": {"repobilityId": "4d412f1ee4032c6a", "scanner": "scanner-primary", "fingerprint": "b54944e676215088", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a2ea29bb4038826f", "level": "error", "message": {"text": "Dangling fetch: GET /api/semse/my-bids (project-manager-app/apps/web/app/(app)/client/bids/page.tsx:43)"}, "properties": {"repobilityId": "5d8ecd03314ccac8", "scanner": "scanner-primary", "fingerprint": "a2ea29bb4038826f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-597e2e7e61d0fb76", "level": "error", "message": {"text": "Dangling fetch: GET /api/semse/jobs (project-manager-app/apps/web/app/(app)/client/professionals/page.tsx:196)"}, "properties": {"repobilityId": "4361774fba899c80", "scanner": "scanner-primary", "fingerprint": "597e2e7e61d0fb76", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c6cfcb6c84ffa9df", "level": "error", "message": {"text": "Dangling fetch: GET /api/semse/intelligence/credentials/top (project-manager-app/apps/web/app/(app)/client/professionals/page.tsx:201)"}, "properties": {"repobilityId": "8ee42f7da5ab5ac7", "scanner": "scanner-primary", "fingerprint": "c6cfcb6c84ffa9df", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1d42a0bbee018dbf", "level": "error", "message": {"text": "Dangling fetch: POST /api/semse/matching (project-manager-app/apps/web/app/(app)/client/professionals/page.tsx:219)"}, "properties": {"repobilityId": "649e8d31fc107524", "scanner": "scanner-primary", "fingerprint": "1d42a0bbee018dbf", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-76fb3e111cc7daa9", "level": "error", "message": {"text": "Dangling fetch: GET /api/semse/jobs (project-manager-app/apps/web/app/(app)/client/jobs/page.tsx:88)"}, "properties": {"repobilityId": "e03df98c047bcc76", "scanner": "scanner-primary", "fingerprint": "76fb3e111cc7daa9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a591bdd312db50c8", "level": "error", "message": {"text": "Dangling fetch: POST /api/semse/intake/${encodeURIComponent(recoveredDraftId)}/claim (project-manager-app/apps/web/app/(app)/client/jobs/new/page.tsx:166)"}, "properties": {"repobilityId": "858d0fe20373c9c3", "scanner": "scanner-primary", "fingerprint": "a591bdd312db50c8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6b50b92d3a8f20aa", "level": "error", "message": {"text": "Dangling fetch: GET /api/semse/public/intake/${encodeURIComponent(recoveredDraftId)} (project-manager-app/apps/web/app/(app)/client/jobs/new/page.tsx:179)"}, "properties": {"repobilityId": "b85ad9ef735c13c0", "scanner": "scanner-primary", "fingerprint": "6b50b92d3a8f20aa", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0fc69bc859e97ce3", "level": "error", "message": {"text": "Dangling fetch: GET /api/semse/change-orders (project-manager-app/apps/web/app/(app)/client/change-orders/page.tsx:73)"}, "properties": {"repobilityId": "94caf01d3f641c53", "scanner": "scanner-primary", "fingerprint": "0fc69bc859e97ce3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5e2466eb9fb2b83a", "level": "error", "message": {"text": "Dangling fetch: POST /api/semse/change-orders/${id}/run-risk-agent (project-manager-app/apps/web/app/(app)/client/change-orders/page.tsx:89)"}, "properties": {"repobilityId": "b0c8c4308ebd8f6f", "scanner": "scanner-primary", "fingerprint": "5e2466eb9fb2b83a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-947cf4b85229d395", "level": "error", "message": {"text": "Dangling fetch: POST /api/semse/change-orders/${id}/${action} (project-manager-app/apps/web/app/(app)/client/change-orders/page.tsx:108)"}, "properties": {"repobilityId": "924ab76606201a2a", "scanner": "scanner-primary", "fingerprint": "947cf4b85229d395", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-251dbf026f52c702", "level": "error", "message": {"text": "Dangling fetch: GET /api/semse/jobs (project-manager-app/apps/web/app/(app)/worker/dashboard/page.tsx:90)"}, "properties": {"repobilityId": "3969d4c70d50e887", "scanner": "scanner-primary", "fingerprint": "251dbf026f52c702", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2c5aea93a2729a8e", "level": "error", "message": {"text": "Dangling fetch: GET /api/semse/marketplace/listings?status=PUBLISHED&limit=40 (project-manager-app/apps/web/app/(app)/worker/opportunities/page.tsx:72)"}, "properties": {"repobilityId": "91bde27f4c3a37fe", "scanner": "scanner-primary", "fingerprint": "2c5aea93a2729a8e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8827e0a273aa811f", "level": "error", "message": {"text": "Dangling fetch: POST /api/semse/bids (project-manager-app/apps/web/app/(app)/worker/opportunities/page.tsx:106)"}, "properties": {"repobilityId": "cb9c6691583a5739", "scanner": "scanner-primary", "fingerprint": "8827e0a273aa811f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8e0d053bcb54c49d", "level": "error", "message": {"text": "Dangling fetch: GET /api/semse/workers/payout-method (project-manager-app/apps/web/app/(app)/worker/payments/page.tsx:80)"}, "properties": {"repobilityId": "f07202a8cfa22177", "scanner": "scanner-primary", "fingerprint": "8e0d053bcb54c49d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7461ab3e1373dba0", "level": "error", "message": {"text": "Dangling fetch: GET /api/semse/jobs (project-manager-app/apps/web/app/(app)/worker/agenda/page.tsx:142)"}, "properties": {"repobilityId": "a2a0dc380b34ab86", "scanner": "scanner-primary", "fingerprint": "7461ab3e1373dba0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5aa9eced4ddfac82", "level": "error", "message": {"text": "Dangling fetch: POST /api/semse/users/${currentUser.id}/verify (project-manager-app/apps/web/app/(app)/worker/profile/page.tsx:140)"}, "properties": {"repobilityId": "f08a0f1c9c40c3b3", "scanner": "scanner-primary", "fingerprint": "5aa9eced4ddfac82", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-afbf0d407756d737", "level": "error", "message": {"text": "Dangling fetch: GET /api/semse/jobs (project-manager-app/apps/web/app/(app)/worker/jobs/page.tsx:53)"}, "properties": {"repobilityId": "fbebcd8bd3c41b0d", "scanner": "scanner-primary", "fingerprint": "afbf0d407756d737", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7be5c80bc2941288", "level": "error", "message": {"text": "Dangling fetch: GET /api/semse/governance/proposals/${proposal.id}/results (project-manager-app/apps/web/app/(app)/admin/governance/page.tsx:114)"}, "properties": {"repobilityId": "f73b0645881d32cc", "scanner": "scanner-primary", "fingerprint": "7be5c80bc2941288", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8bb408f5fac7065a", "level": "error", "message": {"text": "Dangling fetch: POST /api/semse/governance/proposals/${proposal.id}/vote (project-manager-app/apps/web/app/(app)/admin/governance/page.tsx:125)"}, "properties": {"repobilityId": "93f58b01220fb8e0", "scanner": "scanner-primary", "fingerprint": "8bb408f5fac7065a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b43e1921970e33ba", "level": "error", "message": {"text": "Dangling fetch: POST /api/semse/governance/proposals (project-manager-app/apps/web/app/(app)/admin/governance/page.tsx:268)"}, "properties": {"repobilityId": "098cc6837e3c7e97", "scanner": "scanner-primary", "fingerprint": "b43e1921970e33ba", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-803b0cb467cc4854", "level": "error", "message": {"text": "Dangling fetch: GET /api/semse/governance/proposals${qs} (project-manager-app/apps/web/app/(app)/admin/governance/page.tsx:446)"}, "properties": {"repobilityId": "90f8cb60f49fdf1b", "scanner": "scanner-primary", "fingerprint": "803b0cb467cc4854", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f4b4d74e1d57e505", "level": "error", "message": {"text": "Dangling fetch: POST /api/semse/prometeo/chunks/${encodeURIComponent(chunkId)}/feedback (project-manager-app/apps/web/app/(app)/admin/prometeo/page.tsx:133)"}, "properties": {"repobilityId": "38734835440a0dda", "scanner": "scanner-primary", "fingerprint": "f4b4d74e1d57e505", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-641790ec85321bfe", "level": "error", "message": {"text": "Dangling fetch: GET /api/semse/did/${encodeURIComponent(userId)} (project-manager-app/apps/web/app/(app)/admin/users/[id]/page.tsx:58)"}, "properties": {"repobilityId": "fc12d9a9081da477", "scanner": "scanner-primary", "fingerprint": "641790ec85321bfe", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-fd52328c721ebc6e", "level": "error", "message": {"text": "Dangling fetch: GET /api/semse/governance/credits/${encodeURIComponent(userId)}?tenantId=${encodeURIComponent(TENANT_ID)} (project-manager-app/apps/web/app/(app)/admin/users/[id]/page.tsx:59)"}, "properties": {"repobilityId": "5adec57f38879ee8", "scanner": "scanner-primary", "fingerprint": "fd52328c721ebc6e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a68cfa278a1ddc28", "level": "error", "message": {"text": "Dangling fetch: GET /api/semse/marketplace/listings?${qs}&limit=30 (project-manager-app/apps/web/app/(app)/admin/marketplace/page.tsx:79)"}, "properties": {"repobilityId": "d56ca64cdc1f4231", "scanner": "scanner-primary", "fingerprint": "a68cfa278a1ddc28", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d2308614a7d53fa3", "level": "error", "message": {"text": "Dangling fetch: GET /api/semse/marketplace/professionals?limit=10 (project-manager-app/apps/web/app/(app)/admin/marketplace/page.tsx:80)"}, "properties": {"repobilityId": "8a18678cdd5eae72", "scanner": "scanner-primary", "fingerprint": "d2308614a7d53fa3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a3bdc74d68428f6d", "level": "error", "message": {"text": "Dangling fetch: GET /api/semse/marketplace/stats (project-manager-app/apps/web/app/(app)/admin/marketplace/page.tsx:81)"}, "properties": {"repobilityId": "3df500614ad7fcb2", "scanner": "scanner-primary", "fingerprint": "a3bdc74d68428f6d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-38892244643a3d2e", "level": "error", "message": {"text": "Dangling fetch: GET /api/semse/jobs (project-manager-app/apps/web/app/(app)/admin/dashboard/page.tsx:46)"}, "properties": {"repobilityId": "29406ed1e77c8895", "scanner": "scanner-primary", "fingerprint": "38892244643a3d2e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-92814460020d79e2", "level": "error", "message": {"text": "Dangling fetch: GET /api/semse/jobs (project-manager-app/apps/web/app/(app)/admin/dashboard/page.tsx:60)"}, "properties": {"repobilityId": "ec9d919345359143", "scanner": "scanner-primary", "fingerprint": "92814460020d79e2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6a3b7df0b415cf57", "level": "error", "message": {"text": "Dangling fetch: GET /api/semse/ops/worker-metrics (project-manager-app/apps/web/app/(app)/admin/worker/page.tsx:67)"}, "properties": {"repobilityId": "fd3cb5a7ea64257e", "scanner": "scanner-primary", "fingerprint": "6a3b7df0b415cf57", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-74d784a73c7a4f55", "level": "error", "message": {"text": "Dangling fetch: GET /api/semse/ops/intelligence-runs?limit=15 (project-manager-app/apps/web/app/(app)/admin/worker/page.tsx:68)"}, "properties": {"repobilityId": "eb834cb297e345f0", "scanner": "scanner-primary", "fingerprint": "74d784a73c7a4f55", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e05cc6ae0cb6ba7e", "level": "error", "message": {"text": "Dangling fetch: GET /api/semse/admin/algorithm-runs (project-manager-app/apps/web/app/(app)/admin/algorithm-engine/page.tsx:70)"}, "properties": {"repobilityId": "4b8849d6c257dce3", "scanner": "scanner-primary", "fingerprint": "e05cc6ae0cb6ba7e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4a114756fb065eef", "level": "error", "message": {"text": "Dangling fetch: GET /api/semse/admin/algorithm-runs?trade=${encodeURIComponent(trade)} (project-manager-app/apps/web/app/(app)/admin/algorithm-engine/page.tsx:78)"}, "properties": {"repobilityId": "f90738eaa36e850b", "scanner": "scanner-primary", "fingerprint": "4a114756fb065eef", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f031b8a531fe9f73", "level": "error", "message": {"text": "Dangling fetch: GET /api/semse/ops/consciousness (project-manager-app/apps/web/app/(app)/admin/consciousness/page.tsx:148)"}, "properties": {"repobilityId": "02d4044305dc37fa", "scanner": "scanner-primary", "fingerprint": "f031b8a531fe9f73", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9377afb4c99cad92", "level": "error", "message": {"text": "Dangling fetch: POST /api/semse/agents/classify (project-manager-app/apps/web/app/(app)/admin/agents/page.tsx:124)"}, "properties": {"repobilityId": "ccda12d2dfdd1533", "scanner": "scanner-primary", "fingerprint": "9377afb4c99cad92", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c014b0d677690c5f", "level": "error", "message": {"text": "Dangling fetch: POST /api/semse/agents/plan (project-manager-app/apps/web/app/(app)/admin/agents/page.tsx:133)"}, "properties": {"repobilityId": "2181834ca5e1d450", "scanner": "scanner-primary", "fingerprint": "c014b0d677690c5f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3d5d590ecf7cc0bd", "level": "error", "message": {"text": "Dangling fetch: POST /api/semse/agents/payment-readiness (project-manager-app/apps/web/app/(app)/admin/agents/page.tsx:142)"}, "properties": {"repobilityId": "9344b8d09bde33d3", "scanner": "scanner-primary", "fingerprint": "3d5d590ecf7cc0bd", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4c58494c03fa08e9", "level": "error", "message": {"text": "Dangling fetch: GET /api/semse/agents/status (project-manager-app/apps/web/app/(app)/admin/agents/page.tsx:280)"}, "properties": {"repobilityId": "4783efb04fefa721", "scanner": "scanner-primary", "fingerprint": "4c58494c03fa08e9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ff130c16406e25c8", "level": "error", "message": {"text": "Dangling fetch: GET /api/semse/ops/trust-overview (project-manager-app/apps/web/app/(app)/admin/trust/page.tsx:118)"}, "properties": {"repobilityId": "dd67ef284cd55292", "scanner": "scanner-primary", "fingerprint": "ff130c16406e25c8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1d09933a226cab4e", "level": "error", "message": {"text": "Dangling fetch: GET /api/semse/contractor/leads?${qs} (project-manager-app/apps/web/app/(app)/admin/contractors/page.tsx:98)"}, "properties": {"repobilityId": "fccd2ff0c994432d", "scanner": "scanner-primary", "fingerprint": "1d09933a226cab4e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-35c17c96c8edb3e8", "level": "error", "message": {"text": "Dangling fetch: GET /api/semse/contractor/stats (project-manager-app/apps/web/app/(app)/admin/contractors/page.tsx:99)"}, "properties": {"repobilityId": "bc290486642747dd", "scanner": "scanner-primary", "fingerprint": "35c17c96c8edb3e8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c008c148197cbfea", "level": "error", "message": {"text": "Dangling fetch: POST /api/semse/contractor/leads (project-manager-app/apps/web/app/(app)/admin/contractors/page.tsx:116)"}, "properties": {"repobilityId": "3aa04877ece6a424", "scanner": "scanner-primary", "fingerprint": "c008c148197cbfea", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-21f48242a9d0b759", "level": "error", "message": {"text": "Dangling fetch: GET /api/semse/operational-signals?limit=100 (project-manager-app/apps/web/app/(app)/admin/mission-control/page.tsx:306)"}, "properties": {"repobilityId": "7e892e416406b141", "scanner": "scanner-primary", "fingerprint": "21f48242a9d0b759", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-01b559a35c7727c3", "level": "error", "message": {"text": "Dangling fetch: GET /api/semse/intelligence-runs?limit=10 (project-manager-app/apps/web/app/(app)/admin/mission-control/page.tsx:307)"}, "properties": {"repobilityId": "afa055e44970213a", "scanner": "scanner-primary", "fingerprint": "01b559a35c7727c3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-82e5c3c4ced16b04", "level": "error", "message": {"text": "Dangling fetch: GET /api/semse/buildops/overview (project-manager-app/apps/web/app/(app)/admin/mission-control/page.tsx:308)"}, "properties": {"repobilityId": "1721b5f26c32f937", "scanner": "scanner-primary", "fingerprint": "82e5c3c4ced16b04", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f318edb95bb2bd0a", "level": "error", "message": {"text": "Dangling fetch: GET /api/semse/prometeo-brief (project-manager-app/apps/web/app/(app)/admin/mission-control/page.tsx:309)"}, "properties": {"repobilityId": "52ff9e87eb216677", "scanner": "scanner-primary", "fingerprint": "f318edb95bb2bd0a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5e28e72e7d94ae95", "level": "error", "message": {"text": "Dangling fetch: GET /api/semse/ops/mission-control/summary (project-manager-app/apps/web/app/(app)/admin/mission-control/page.tsx:310)"}, "properties": {"repobilityId": "52e119101d950369", "scanner": "scanner-primary", "fingerprint": "5e28e72e7d94ae95", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9ab4975e2a078a12", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/semse/operational-signals/${id}/acknowledge (project-manager-app/apps/web/app/(app)/admin/mission-control/page.tsx:357)"}, "properties": {"repobilityId": "1847433d1d6bfeb4", "scanner": "scanner-primary", "fingerprint": "9ab4975e2a078a12", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-19e417a8aaba29e6", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/semse/operational-signals/${id}/resolve (project-manager-app/apps/web/app/(app)/admin/mission-control/page.tsx:365)"}, "properties": {"repobilityId": "8259158103a8243f", "scanner": "scanner-primary", "fingerprint": "19e417a8aaba29e6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0029ddd19a225b47", "level": "error", "message": {"text": "Dangling fetch: POST /api/semse/operational-signals/seed-test (project-manager-app/apps/web/app/(app)/admin/mission-control/page.tsx:588)"}, "properties": {"repobilityId": "f27c3174fcbf663e", "scanner": "scanner-primary", "fingerprint": "0029ddd19a225b47", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-50ffbfd81871131a", "level": "error", "message": {"text": "Dangling fetch: GET /api/semse/ops/ecosystem-metrics (project-manager-app/apps/web/app/(app)/admin/ecosystem/page.tsx:107)"}, "properties": {"repobilityId": "5e5deab87b88d6cc", "scanner": "scanner-primary", "fingerprint": "50ffbfd81871131a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-799e322ce1da0b5f", "level": "error", "message": {"text": "Dangling fetch: GET /api/semse/ratings/reputation (project-manager-app/apps/web/app/(app)/admin/reputation/page.tsx:189)"}, "properties": {"repobilityId": "198f007555b1e375", "scanner": "scanner-primary", "fingerprint": "799e322ce1da0b5f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a5a3279cbc248222", "level": "error", "message": {"text": "Dangling fetch: GET /api/semse/ratings (project-manager-app/apps/web/app/(app)/admin/reputation/page.tsx:190)"}, "properties": {"repobilityId": "7b7d032ca0ddb023", "scanner": "scanner-primary", "fingerprint": "a5a3279cbc248222", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9704faca2f0695d2", "level": "error", "message": {"text": "Dangling fetch: GET /api/semse/disputes (project-manager-app/apps/web/app/(app)/admin/disputes/page.tsx:141)"}, "properties": {"repobilityId": "8925528478a2c519", "scanner": "scanner-primary", "fingerprint": "9704faca2f0695d2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0b2ef3918ea0aff5", "level": "error", "message": {"text": "Dangling fetch: POST /api/semse/disputes/${targetId}/resolve (project-manager-app/apps/web/app/(app)/admin/disputes/page.tsx:222)"}, "properties": {"repobilityId": "ece2eb2d9d802769", "scanner": "scanner-primary", "fingerprint": "0b2ef3918ea0aff5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2fb283a102a1ea09", "level": "error", "message": {"text": "Dangling fetch: GET /api/semse/buildops/projects?limit=50 (project-manager-app/apps/web/app/(app)/admin/intelligence-rooms/page.tsx:37)"}, "properties": {"repobilityId": "f58139f14a7b0efc", "scanner": "scanner-primary", "fingerprint": "2fb283a102a1ea09", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3fce216951b88809", "level": "error", "message": {"text": "Dangling fetch: GET /api/semse/buildops/projects/${projectId} (project-manager-app/apps/web/app/(app)/admin/intelligence-rooms/[id]/page.tsx:110)"}, "properties": {"repobilityId": "24307f82d1e06c87", "scanner": "scanner-primary", "fingerprint": "3fce216951b88809", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4f3f90b471b7e12d", "level": "error", "message": {"text": "Dangling fetch: GET /api/semse/operational-signals?buildOpsProjectId=${projectId}&limit=50 (project-manager-app/apps/web/app/(app)/admin/intelligence-rooms/[id]/page.tsx:111)"}, "properties": {"repobilityId": "86bb3d87ee405a69", "scanner": "scanner-primary", "fingerprint": "4f3f90b471b7e12d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f76e736c75fd9cce", "level": "error", "message": {"text": "Dangling fetch: GET /api/semse/prometeo-brief?buildOpsProjectId=${projectId} (project-manager-app/apps/web/app/(app)/admin/intelligence-rooms/[id]/page.tsx:112)"}, "properties": {"repobilityId": "57957c57cdd46f65", "scanner": "scanner-primary", "fingerprint": "f76e736c75fd9cce", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-424c58f9870e4dcd", "level": "error", "message": {"text": "Dangling fetch: GET /api/semse/intelligence-runs?limit=10 (project-manager-app/apps/web/app/(app)/admin/intelligence-rooms/[id]/page.tsx:113)"}, "properties": {"repobilityId": "4d88dae3b085e844", "scanner": "scanner-primary", "fingerprint": "424c58f9870e4dcd", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a639ad0f72f1a5e9", "level": "error", "message": {"text": "Dangling fetch: GET /api/semse/buildops/projects/${projectId}/activity?limit=30 (project-manager-app/apps/web/app/(app)/admin/intelligence-rooms/[id]/page.tsx:114)"}, "properties": {"repobilityId": "117eb906c46837e4", "scanner": "scanner-primary", "fingerprint": "a639ad0f72f1a5e9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-592da915291b685e", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/semse/operational-signals/${id}/acknowledge (project-manager-app/apps/web/app/(app)/admin/intelligence-rooms/[id]/page.tsx:147)"}, "properties": {"repobilityId": "2bc1157084fb4e43", "scanner": "scanner-primary", "fingerprint": "592da915291b685e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b4380506acaa92fe", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/semse/operational-signals/${id}/resolve (project-manager-app/apps/web/app/(app)/admin/intelligence-rooms/[id]/page.tsx:155)"}, "properties": {"repobilityId": "7f4e8a4cc5768073", "scanner": "scanner-primary", "fingerprint": "b4380506acaa92fe", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-95f296cbbc9f24cb", "level": "error", "message": {"text": "Dangling fetch: POST /api/semse/tools/calculate (project-manager-app/apps/web/app/(app)/tools/project-manager/project-manager-tool-client.tsx:98)"}, "properties": {"repobilityId": "38645c0843adee5c", "scanner": "scanner-primary", "fingerprint": "95f296cbbc9f24cb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a48acf82b8a3fcc9", "level": "error", "message": {"text": "Dangling fetch: POST /api/semse/auth/register (project-manager-app/apps/web/app/register/page.tsx:86)"}, "properties": {"repobilityId": "e23e95076c9f3216", "scanner": "scanner-primary", "fingerprint": "a48acf82b8a3fcc9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-af44d1488b449543", "level": "error", "message": {"text": "Dangling fetch: GET /api/semse/runtime-knowledge/tree (project-manager-app/apps/web/app/runtime-map/runtime-map-client.tsx:40)"}, "properties": {"repobilityId": "2867cb1593d1804e", "scanner": "scanner-primary", "fingerprint": "af44d1488b449543", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2d87cc6750171616", "level": "error", "message": {"text": "Dangling fetch: GET /api/semse/runtime-knowledge/status (project-manager-app/apps/web/app/runtime-map/runtime-map-client.tsx:41)"}, "properties": {"repobilityId": "d9ef2bf2e478bfee", "scanner": "scanner-primary", "fingerprint": "2d87cc6750171616", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6ed16bf80797f8dc", "level": "error", "message": {"text": "Dangling fetch: GET /api/semse/runtime-knowledge/node/${selectedNodeId} (project-manager-app/apps/web/app/runtime-map/runtime-map-client.tsx:55)"}, "properties": {"repobilityId": "a7353acf264fb133", "scanner": "scanner-primary", "fingerprint": "6ed16bf80797f8dc", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9e658637615e180a", "level": "error", "message": {"text": "Dangling fetch: GET /api/semse/runtime-knowledge/children/${selectedNodeId} (project-manager-app/apps/web/app/runtime-map/runtime-map-client.tsx:56)"}, "properties": {"repobilityId": "9458322beb3e7d7e", "scanner": "scanner-primary", "fingerprint": "9e658637615e180a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-292fde93e64e90d2", "level": "error", "message": {"text": "Dangling fetch: GET /api/semse/runtime-knowledge/relations/${selectedNodeId} (project-manager-app/apps/web/app/runtime-map/runtime-map-client.tsx:57)"}, "properties": {"repobilityId": "aa39b3a397c88302", "scanner": "scanner-primary", "fingerprint": "292fde93e64e90d2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3922a6b0fc924877", "level": "error", "message": {"text": "Dangling fetch: POST /api/semse/runtime-knowledge/query (project-manager-app/apps/web/app/runtime-map/runtime-map-client.tsx:85)"}, "properties": {"repobilityId": "606c4c29e4339a53", "scanner": "scanner-primary", "fingerprint": "3922a6b0fc924877", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-eda58ad2827ddb0d", "level": "error", "message": {"text": "Dangling fetch: GET /api/semse/knowledge/overview (project-manager-app/apps/web/app/knowledge/knowledge-client.tsx:20)"}, "properties": {"repobilityId": "485a2794138af7fc", "scanner": "scanner-primary", "fingerprint": "eda58ad2827ddb0d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5262a1d82d451731", "level": "error", "message": {"text": "Dangling fetch: POST /api/semse/tools/ai-assist (project-manager-app/apps/web/app/(public)/worker/apply/[id]/page.tsx:136)"}, "properties": {"repobilityId": "ad7742337ae7998c", "scanner": "scanner-primary", "fingerprint": "5262a1d82d451731", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6e46fb763b0d7028", "level": "error", "message": {"text": "Dangling fetch: POST /api/semse/public/intake/analyze (project-manager-app/apps/web/hooks/use-intake.ts:66)"}, "properties": {"repobilityId": "24fabd4243b3f096", "scanner": "scanner-primary", "fingerprint": "6e46fb763b0d7028", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c079fece25279f78", "level": "error", "message": {"text": "Dangling fetch: GET /api/semse/public/intake/${encodeURIComponent(id)} (project-manager-app/apps/web/hooks/use-intake.ts:89)"}, "properties": {"repobilityId": "8df2685b6da598c9", "scanner": "scanner-primary", "fingerprint": "c079fece25279f78", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d6091b0ed5a0eeb0", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/semse/public/intake/${encodeURIComponent(intakeId)}/answer (project-manager-app/apps/web/hooks/use-intake.ts:110)"}, "properties": {"repobilityId": "043c3f33697afe5f", "scanner": "scanner-primary", "fingerprint": "d6091b0ed5a0eeb0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4732478d2ef14c31", "level": "error", "message": {"text": "Dangling fetch: POST /api/semse/public/intake/${encodeURIComponent(intakeId)}/images (project-manager-app/apps/web/hooks/use-intake.ts:141)"}, "properties": {"repobilityId": "465e3d4ab21821eb", "scanner": "scanner-primary", "fingerprint": "4732478d2ef14c31", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b6e6ac231b5a8d5a", "level": "error", "message": {"text": "Dangling fetch: POST /api/semse/public/intake/${encodeURIComponent(intakeId)}/estimate${suffix} (project-manager-app/apps/web/hooks/use-intake.ts:167)"}, "properties": {"repobilityId": "87307204b3a38e9c", "scanner": "scanner-primary", "fingerprint": "b6e6ac231b5a8d5a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-542c97d680d447d3", "level": "error", "message": {"text": "Dangling fetch: POST /api/semse/intake/${encodeURIComponent(id)}/claim (project-manager-app/apps/web/hooks/use-intake.ts:181)"}, "properties": {"repobilityId": "cca6960648722f6a", "scanner": "scanner-primary", "fingerprint": "542c97d680d447d3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ac062db22a2ae976", "level": "error", "message": {"text": "Dangling fetch: POST /api/semse/notifications/push-subscribe (project-manager-app/apps/web/hooks/usePushNotifications.ts:44)"}, "properties": {"repobilityId": "f848286dff8f6744", "scanner": "scanner-primary", "fingerprint": "ac062db22a2ae976", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-fca11d494725d7c3", "level": "note", "message": {"text": "Unused endpoint: POST /analyze"}, "properties": {"repobilityId": "2862015c105f58de", "scanner": "scanner-primary", "fingerprint": "fca11d494725d7c3", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-59dc92bd3719d52d", "level": "note", "message": {"text": "Unused endpoint: POST /compare-before-after"}, "properties": {"repobilityId": "269dc4885848c90b", "scanner": "scanner-primary", "fingerprint": "59dc92bd3719d52d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e2520e53e12565e1", "level": "note", "message": {"text": "Unused endpoint: POST /check-duplicate"}, "properties": {"repobilityId": "f89a15d614e4696a", "scanner": "scanner-primary", "fingerprint": "e2520e53e12565e1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e6dfad482a8c651e", "level": "note", "message": {"text": "Unused endpoint: POST /blueprint"}, "properties": {"repobilityId": "802c1a86c5c96f0f", "scanner": "scanner-primary", "fingerprint": "e6dfad482a8c651e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-924ba797d3439aab", "level": "note", "message": {"text": "Unused endpoint: POST /perspective-correct"}, "properties": {"repobilityId": "541e12bab609584f", "scanner": "scanner-primary", "fingerprint": "924ba797d3439aab", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-cd4f7db6bbc9f46f", "level": "note", "message": {"text": "Unused endpoint: POST /document-binarize"}, "properties": {"repobilityId": "0ea877a179dfcb32", "scanner": "scanner-primary", "fingerprint": "cd4f7db6bbc9f46f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3eba5e001a8a6691", "level": "note", "message": {"text": "Unused endpoint: POST /estimate-area"}, "properties": {"repobilityId": "e08337eb523f8b6f", "scanner": "scanner-primary", "fingerprint": "3eba5e001a8a6691", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-9aaee59a52ee81d5", "level": "note", "message": {"text": "Unused endpoint: POST /check-consistency"}, "properties": {"repobilityId": "c0279edbb696233e", "scanner": "scanner-primary", "fingerprint": "9aaee59a52ee81d5", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7fe87e2399a385dd", "level": "note", "message": {"text": "Unused endpoint: POST /progress-timeline"}, "properties": {"repobilityId": "e331580ab005c9cd", "scanner": "scanner-primary", "fingerprint": "7fe87e2399a385dd", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-cc05b8d5abac3944", "level": "note", "message": {"text": "Unused endpoint: POST /safety-check"}, "properties": {"repobilityId": "e8e9828dec5bead3", "scanner": "scanner-primary", "fingerprint": "cc05b8d5abac3944", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-cd8226b113423557", "level": "note", "message": {"text": "Unused endpoint: POST /match-reference"}, "properties": {"repobilityId": "9ee6067d21cd66cb", "scanner": "scanner-primary", "fingerprint": "cd8226b113423557", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-250247210267532e", "level": "note", "message": {"text": "Unused endpoint: POST /detect-trade"}, "properties": {"repobilityId": "3ab4c7e8bf7b6925", "scanner": "scanner-primary", "fingerprint": "250247210267532e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-735472b4f5b406c9", "level": "note", "message": {"text": "Unused endpoint: POST /batch-analyze"}, "properties": {"repobilityId": "2ac37a2d0f383b5f", "scanner": "scanner-primary", "fingerprint": "735472b4f5b406c9", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5baa8971ebe192a1", "level": "note", "message": {"text": "Unused endpoint: GET /"}, "properties": {"repobilityId": "cc8d1d8cec3cfeaa", "scanner": "scanner-primary", "fingerprint": "5baa8971ebe192a1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-4f16e97d5209bb16", "level": "note", "message": {"text": "Unused endpoint: POST /v1/governance/proposals"}, "properties": {"repobilityId": "706b5f25f3eccc3e", "scanner": "scanner-primary", "fingerprint": "4f16e97d5209bb16", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6fb52633f70bbf8e", "level": "note", "message": {"text": "Unused endpoint: GET /v1/governance/proposals"}, "properties": {"repobilityId": "93931b64097ed1ee", "scanner": "scanner-primary", "fingerprint": "6fb52633f70bbf8e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-633289fff260f3ad", "level": "note", "message": {"text": "Unused endpoint: GET /v1/governance/proposals/:id"}, "properties": {"repobilityId": "757a6c3b87b017f4", "scanner": "scanner-primary", "fingerprint": "633289fff260f3ad", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-41d2a54de47ba416", "level": "note", "message": {"text": "Unused endpoint: GET /v1/governance/proposals/:id/results"}, "properties": {"repobilityId": "ba0cf4e7bf4dc11a", "scanner": "scanner-primary", "fingerprint": "41d2a54de47ba416", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ff26076f39d43daa", "level": "note", "message": {"text": "Unused endpoint: POST /v1/governance/proposals/:id/vote"}, "properties": {"repobilityId": "745fa3956cc1bf9b", "scanner": "scanner-primary", "fingerprint": "ff26076f39d43daa", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2ac41cdca680dc19", "level": "note", "message": {"text": "Unused endpoint: POST /v1/governance/proposals/:id/close"}, "properties": {"repobilityId": "83bacd6fccb79c39", "scanner": "scanner-primary", "fingerprint": "2ac41cdca680dc19", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6d1f5f6035f2f9d2", "level": "note", "message": {"text": "Unused endpoint: GET /v1/governance/credits/:userId"}, "properties": {"repobilityId": "33ab703c39a04a59", "scanner": "scanner-primary", "fingerprint": "6d1f5f6035f2f9d2", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b8aab06e4768af77", "level": "note", "message": {"text": "Unused endpoint: POST /v1/prometeo/ingest"}, "properties": {"repobilityId": "3eb0418aecd664a3", "scanner": "scanner-primary", "fingerprint": "b8aab06e4768af77", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-141e889d47a90d8d", "level": "note", "message": {"text": "Unused endpoint: POST /v1/prometeo/ingest-file"}, "properties": {"repobilityId": "1cd3ca42a30c7b9d", "scanner": "scanner-primary", "fingerprint": "141e889d47a90d8d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c05899f1a47c87bb", "level": "note", "message": {"text": "Unused endpoint: GET /v1/prometeo/trade-library"}, "properties": {"repobilityId": "17d3ca4dffc19186", "scanner": "scanner-primary", "fingerprint": "c05899f1a47c87bb", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-bfbe34efcb3f5afb", "level": "note", "message": {"text": "Unused endpoint: GET /v1/prometeo/documents"}, "properties": {"repobilityId": "6017d0327ffadcc8", "scanner": "scanner-primary", "fingerprint": "bfbe34efcb3f5afb", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-879541353fb8d131", "level": "note", "message": {"text": "Unused endpoint: DELETE /v1/prometeo/documents/:id"}, "properties": {"repobilityId": "0c1db694e0d45043", "scanner": "scanner-primary", "fingerprint": "879541353fb8d131", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-9795f927e35e43b5", "level": "note", "message": {"text": "Unused endpoint: POST /v1/prometeo/search"}, "properties": {"repobilityId": "806c66caba8c2a07", "scanner": "scanner-primary", "fingerprint": "9795f927e35e43b5", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-978c9603025aee8f", "level": "note", "message": {"text": "Unused endpoint: POST /v1/prometeo/rag-context"}, "properties": {"repobilityId": "a871fd577dd4121f", "scanner": "scanner-primary", "fingerprint": "978c9603025aee8f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-755fcaff708fd8af", "level": "note", "message": {"text": "Unused endpoint: POST /v1/prometeo/rag-query"}, "properties": {"repobilityId": "5d60619b87a1af97", "scanner": "scanner-primary", "fingerprint": "755fcaff708fd8af", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5363d3ac213bc648", "level": "note", "message": {"text": "Unused endpoint: POST /v1/prometeo/trade-guide"}, "properties": {"repobilityId": "87ced7c9f686ff6a", "scanner": "scanner-primary", "fingerprint": "5363d3ac213bc648", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-19ce9739091dd701", "level": "note", "message": {"text": "Unused endpoint: POST /v1/prometeo/assets"}, "properties": {"repobilityId": "1bbf474aa8421496", "scanner": "scanner-primary", "fingerprint": "19ce9739091dd701", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-53f142f0fcd1aa99", "level": "note", "message": {"text": "Unused endpoint: GET /v1/prometeo/assets"}, "properties": {"repobilityId": "85567cd624bc19a6", "scanner": "scanner-primary", "fingerprint": "53f142f0fcd1aa99", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8d9818e10cf7d74a", "level": "note", "message": {"text": "Unused endpoint: PATCH /v1/prometeo/assets/:id/status"}, "properties": {"repobilityId": "6e3be67ff3c40a23", "scanner": "scanner-primary", "fingerprint": "8d9818e10cf7d74a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-29cc949f0e2431c8", "level": "note", "message": {"text": "Unused endpoint: POST /v1/prometeo/work-orders"}, "properties": {"repobilityId": "4a68e1e600738339", "scanner": "scanner-primary", "fingerprint": "29cc949f0e2431c8", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-0b4261fb61ab6fcb", "level": "note", "message": {"text": "Unused endpoint: GET /v1/prometeo/work-orders"}, "properties": {"repobilityId": "206d33d0695165fc", "scanner": "scanner-primary", "fingerprint": "0b4261fb61ab6fcb", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2e2c09195a54c321", "level": "note", "message": {"text": "Unused endpoint: PATCH /v1/prometeo/work-orders/:id/status"}, "properties": {"repobilityId": "44c931fa7661cc03", "scanner": "scanner-primary", "fingerprint": "2e2c09195a54c321", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-98b847af3e06efaf", "level": "note", "message": {"text": "Unused endpoint: GET /v1/prometeo/embeddings/health"}, "properties": {"repobilityId": "ff067a6850e3991f", "scanner": "scanner-primary", "fingerprint": "98b847af3e06efaf", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a17fef6c3f40042b", "level": "note", "message": {"text": "Unused endpoint: POST /v1/prometeo/embeddings/backfill"}, "properties": {"repobilityId": "f73930a892ec6067", "scanner": "scanner-primary", "fingerprint": "a17fef6c3f40042b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e9ac677cc830e501", "level": "note", "message": {"text": "Unused endpoint: POST /v1/prometeo/chunks/:chunkId/feedback"}, "properties": {"repobilityId": "8390591ed4bdad9a", "scanner": "scanner-primary", "fingerprint": "e9ac677cc830e501", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5db12be19636dfc2", "level": "note", "message": {"text": "Unused endpoint: GET /v1/prometeo/feedback/stats"}, "properties": {"repobilityId": "8f5e1d86efd98870", "scanner": "scanner-primary", "fingerprint": "5db12be19636dfc2", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-13e4046d3a6aab4a", "level": "note", "message": {"text": "Unused endpoint: GET /v1/users/me"}, "properties": {"repobilityId": "c035a1a8e20aae40", "scanner": "scanner-primary", "fingerprint": "13e4046d3a6aab4a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b94f4cfc3eecd9d8", "level": "note", "message": {"text": "Unused endpoint: GET /v1/users/me/profile"}, "properties": {"repobilityId": "11d7f027c877f43f", "scanner": "scanner-primary", "fingerprint": "b94f4cfc3eecd9d8", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-086f434190656683", "level": "note", "message": {"text": "Unused endpoint: PATCH /v1/users/me/profile"}, "properties": {"repobilityId": "83be24ac0a9b7d70", "scanner": "scanner-primary", "fingerprint": "086f434190656683", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b243dc57849086cb", "level": "note", "message": {"text": "Unused endpoint: GET /v1/users/:userId"}, "properties": {"repobilityId": "7adff714b7f11366", "scanner": "scanner-primary", "fingerprint": "b243dc57849086cb", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d5454b9ce3aadf21", "level": "note", "message": {"text": "Unused endpoint: GET /v1/users/:userId/memberships"}, "properties": {"repobilityId": "aa34603c58c2dd37", "scanner": "scanner-primary", "fingerprint": "d5454b9ce3aadf21", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f75b3140ad491cd8", "level": "note", "message": {"text": "Unused endpoint: POST /v1/users/:userId/verify"}, "properties": {"repobilityId": "6c83490af1d126ea", "scanner": "scanner-primary", "fingerprint": "f75b3140ad491cd8", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-00d148b55d4afd3e", "level": "note", "message": {"text": "Unused endpoint: PATCH /v1/users/:userId/status"}, "properties": {"repobilityId": "0b187c73a2019a7f", "scanner": "scanner-primary", "fingerprint": "00d148b55d4afd3e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-0db84137722a588a", "level": "note", "message": {"text": "Unused endpoint: POST /v1/contractor/leads"}, "properties": {"repobilityId": "8ff6acc977d6aec4", "scanner": "scanner-primary", "fingerprint": "0db84137722a588a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-89d0eea911b9d938", "level": "note", "message": {"text": "Unused endpoint: GET /v1/contractor/leads"}, "properties": {"repobilityId": "aa9d8d00aa3f62cb", "scanner": "scanner-primary", "fingerprint": "89d0eea911b9d938", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-07b767853efa22b2", "level": "note", "message": {"text": "Unused endpoint: GET /v1/contractor/leads/stats"}, "properties": {"repobilityId": "a35482afa92fd683", "scanner": "scanner-primary", "fingerprint": "07b767853efa22b2", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}