{"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-f678e605c6e7ee27", "name": "Custom React Flow node registered without explicit width/height \u2014 test/billing-routes.test.ts:357", "shortDescription": {"text": "Custom React Flow node registered without explicit width/height \u2014 test/billing-routes.test.ts:357"}, "fullDescription": {"text": "When you register a custom node type via `nodeTypes`, the RFNode object you build must include `width` and `height` props. Without them, MiniMap renders ZERO mini-nodes for that type and `fitView` underestimates the bounds (cuts off lane labels, etc.). Add `width: \u2026, height: \u2026` to the node object. See P-I.\n\nWhy: P-I in CHECKLIST.md \u2014 RF MiniMap + fitView need explicit dims on custom nodes.\nRule id: fq.rfnode.no-dims"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-608389312e0aba20", "name": "Stray `console.log` in TS/JS \u2014 scripts/routine-gate/gate.ts:26", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/routine-gate/gate.ts:26"}, "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-f63bcbe9b97d103f", "name": "Stray `console.log` in TS/JS \u2014 scripts/release/check-releasable.ts:32", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/release/check-releasable.ts:32"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1987d75329d1c898", "name": "TODO/FIXME marker in shipping code \u2014 src/index.ts:489", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/index.ts:489"}, "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-95f5c8c33377fb41", "name": "TODO/FIXME marker in shipping code \u2014 src/views/components.ts:67", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/views/components.ts:67"}, "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-209d45bbcfce729a", "name": "Privileged port 12 in use", "shortDescription": {"text": "Privileged port 12 in use"}, "fullDescription": {"text": "Port 12 is privileged (<1024). Make sure the service runs with the right caps or front it with a non-privileged port via a load balancer."}, "properties": {"scanner": "scanner-primary", "layer": "network", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-cbe37f89207fbdab", "name": "Privileged port 23 in use", "shortDescription": {"text": "Privileged port 23 in use"}, "fullDescription": {"text": "Port 23 is privileged (<1024). Make sure the service runs with the right caps or front it with a non-privileged port via a load balancer."}, "properties": {"scanner": "scanner-primary", "layer": "network", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-8b7f6eec6c1dcf33", "name": "Insecure pattern 'node_child_process' in scripts/routine-gate/github.ts:1", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/routine-gate/github.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-09f81682120e7d4a", "name": "Insecure pattern 'node_child_process' in scripts/release/check-releasable.ts:2", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/release/check-releasable.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-57ba8a6efe9efe73", "name": "Insecure pattern 'cors_wildcard' in src/index.ts:307", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in src/index.ts:307"}, "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-0b15fde3bca9b01b", "name": "Insecure pattern 'domparser_html_parse' in src/views/html.ts:578", "shortDescription": {"text": "Insecure pattern 'domparser_html_parse' in src/views/html.ts:578"}, "fullDescription": {"text": "Found a known-risky pattern (domparser_html_parse). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-1bf0b9eaf198275c", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/views/scripts.ts:252", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/views/scripts.ts:252"}, "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-2432ce19e07df2d9", "name": "Insecure pattern 'domparser_html_parse' in src/views/scripts.ts:733", "shortDescription": {"text": "Insecure pattern 'domparser_html_parse' in src/views/scripts.ts:733"}, "fullDescription": {"text": "Found a known-risky pattern (domparser_html_parse). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "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-45d7e6efed4aa249", "name": "Very large file: test/index.test.ts (1293 lines)", "shortDescription": {"text": "Very large file: test/index.test.ts (1293 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-b51886beffed353c", "name": "Very large file: test/dashboard-routes.test.ts (2863 lines)", "shortDescription": {"text": "Very large file: test/dashboard-routes.test.ts (2863 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-938dfba58bb06bd1", "name": "Very large file: src/index.ts (1535 lines)", "shortDescription": {"text": "Very large file: src/index.ts (1535 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-70405f2433292825", "name": "Very large file: src/views/dashboard.ts (3091 lines)", "shortDescription": {"text": "Very large file: src/views/dashboard.ts (3091 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-814ad3b935843e8e", "name": "Very large file: src/views/scripts.ts (1374 lines)", "shortDescription": {"text": "Very large file: src/views/scripts.ts (1374 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-f3397a199bd15e38", "name": "Very large file: src/views/learn.ts (983 lines)", "shortDescription": {"text": "Very large file: src/views/learn.ts (983 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-3ab5d313dda8e5f9", "name": "Debug logging residue appears in source files", "shortDescription": {"text": "Debug logging residue appears in source files"}, "fullDescription": {"text": "Found 20 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 22 placeholder/mock markers across 10 source files. This often means the repo looks complete while core flows still use generated scaffolding or fake data."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2d0c7b7ab8f8aacf", "name": "Critical user flow still appears backed by mock or placeholder data", "shortDescription": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "fullDescription": {"text": "A payment/auth/admin/order/billing-style flow contains mock, fake, TODO, dummy, or placeholder markers in runtime source. In the Fable corpus this is a high-leverage completeness smell: the app can look finished while the money, identity, or tenant flow is still scaffolded."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-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-2c5f98b152cddb6d", "name": "Agent authority lacks a verifier contract: .claude/launch.json", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/launch.json"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-58f0ef2039cc88a9", "name": "Agent authority lacks a verifier contract: .claude/skills/dmarcus-mood-check/SKILL.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/skills/dmarcus-mood-check/SKILL.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-5d7c3de116d2573b", "name": "Agent instruction contains unpinned remote install: .claude/skills/threat-model/SKILL.md", "shortDescription": {"text": "Agent instruction contains unpinned remote install: .claude/skills/threat-model/SKILL.md"}, "fullDescription": {"text": "Remote install commands in agent instructions are a supply-chain risk, especially when an agent can execute shell commands."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b0137257fb4eb147", "name": "Agent authority lacks a verifier contract: src/db/CLAUDE.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: src/db/CLAUDE.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-1eb995f9341cd5a0", "name": "Commented-code block (5 lines) in vitest.config.ts:5", "shortDescription": {"text": "Commented-code block (5 lines) in vitest.config.ts:5"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4d4b4bb4b92e58fb", "name": "`fetch()` without try/.catch or AbortSignal \u2014 test/rate-limit-middleware.test.ts:70", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 test/rate-limit-middleware.test.ts:70"}, "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-a05c25869d6711f5", "name": "`fetch()` without try/.catch or AbortSignal \u2014 test/bimi.test.ts:69", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 test/bimi.test.ts:69"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-54b0607f0acc8241", "name": "Commented-code block (5 lines) in test/index.test.ts:205", "shortDescription": {"text": "Commented-code block (5 lines) in test/index.test.ts:205"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-69f358e67cb478cf", "name": "Commented-code block (5 lines) in test/mx-providers.test.ts:143", "shortDescription": {"text": "Commented-code block (5 lines) in test/mx-providers.test.ts:143"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-36d62f185b9fb110", "name": "Commented-code block (5 lines) in test/dashboard-views.test.ts:475", "shortDescription": {"text": "Commented-code block (5 lines) in test/dashboard-views.test.ts:475"}, "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-84b5bb7091ac0334", "name": "`fetch()` without try/.catch or AbortSignal \u2014 test/bearer-middleware.test.ts:58", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 test/bearer-middleware.test.ts:58"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2fc1f85a334686b1", "name": "Commented-code block (6 lines) in test/cron-rescan.test.ts:414", "shortDescription": {"text": "Commented-code block (6 lines) in test/cron-rescan.test.ts:414"}, "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-c98a54b0b09f205d", "name": "Commented-code block (5 lines) in test/api-check-stream.test.ts:52", "shortDescription": {"text": "Commented-code block (5 lines) in test/api-check-stream.test.ts:52"}, "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-736c4db8193b5445", "name": "`fetch()` without try/.catch or AbortSignal \u2014 test/mta-sts.test.ts:236", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 test/mta-sts.test.ts:236"}, "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-f8f0aa1eb0275e4b", "name": "Commented-code block (9 lines) in test/integration/rate-limit-do.test.ts:10", "shortDescription": {"text": "Commented-code block (9 lines) in test/integration/rate-limit-do.test.ts:10"}, "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-a0c2d6e35cd5cfb5", "name": "Commented-code block (5 lines) in test/integration/mta-sts-runtime.test.ts:4", "shortDescription": {"text": "Commented-code block (5 lines) in test/integration/mta-sts-runtime.test.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5f571bfc08a90f79", "name": "Commented-code block (6 lines) in test/shims/cloudflare-workers.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in test/shims/cloudflare-workers.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3a1254d853d00ff9", "name": "Commented-code block (7 lines) in scripts/release/releasable.ts:1", "shortDescription": {"text": "Commented-code block (7 lines) in scripts/release/releasable.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-eafbbed54f501ca5", "name": "Commented-code block (7 lines) in .claude/workflows/pr-triage.js:19", "shortDescription": {"text": "Commented-code block (7 lines) in .claude/workflows/pr-triage.js:19"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-72ce1dcfb337dcda", "name": "`fetch()` without try/.catch or AbortSignal \u2014 mta-sts-worker/src/index.ts:2", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 mta-sts-worker/src/index.ts:2"}, "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-4d33007f330264ad", "name": "Commented-code block (7 lines) in src/rate-limit-do.ts:6", "shortDescription": {"text": "Commented-code block (7 lines) in src/rate-limit-do.ts:6"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-dee9590c08d3c3d3", "name": "Commented-code block (5 lines) in src/csv.ts:80", "shortDescription": {"text": "Commented-code block (5 lines) in src/csv.ts:80"}, "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-3542ee96a157b8d2", "name": "Commented-code block (5 lines) in src/env.ts:25", "shortDescription": {"text": "Commented-code block (5 lines) in src/env.ts:25"}, "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-3f45c21d45fe63be", "name": "Commented-code block (6 lines) in src/index.ts:168", "shortDescription": {"text": "Commented-code block (6 lines) in src/index.ts:168"}, "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-ec9ff7ed38c944ca", "name": "Commented-code block (5 lines) in src/orchestrator.ts:78", "shortDescription": {"text": "Commented-code block (5 lines) in src/orchestrator.ts:78"}, "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-45781621e07edf4c", "name": "Commented-code block (5 lines) in src/rate-limit.ts:44", "shortDescription": {"text": "Commented-code block (5 lines) in src/rate-limit.ts:44"}, "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-197c8cf9dd12e7a4", "name": "Commented-code block (6 lines) in src/sentry-scrub.ts:3", "shortDescription": {"text": "Commented-code block (6 lines) in src/sentry-scrub.ts:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-be60229be40c34ee", "name": "Commented-code block (6 lines) in src/auth/middleware.ts:23", "shortDescription": {"text": "Commented-code block (6 lines) in src/auth/middleware.ts:23"}, "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-34476a2b64a126f4", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/auth/routes.ts:58", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/auth/routes.ts:58"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a54ed1ec1bb37127", "name": "Commented-code block (6 lines) in src/auth/access-jwt.ts:10", "shortDescription": {"text": "Commented-code block (6 lines) in src/auth/access-jwt.ts:10"}, "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-0cccfa2dfd97bb10", "name": "Commented-code block (5 lines) in src/analyzers/spf.ts:166", "shortDescription": {"text": "Commented-code block (5 lines) in src/analyzers/spf.ts:166"}, "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-161fa6b392634613", "name": "Commented-code block (5 lines) in src/analyzers/dmarc.ts:62", "shortDescription": {"text": "Commented-code block (5 lines) in src/analyzers/dmarc.ts:62"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cd2981c0b8f8285a", "name": "Commented-code block (8 lines) in src/analyzers/dane.ts:10", "shortDescription": {"text": "Commented-code block (8 lines) in src/analyzers/dane.ts:10"}, "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-a5d1475db8686938", "name": "Commented-code block (8 lines) in src/analyzers/bimi.ts:8", "shortDescription": {"text": "Commented-code block (8 lines) in src/analyzers/bimi.ts:8"}, "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-3a59e26cc15c4cce", "name": "Commented-code block (10 lines) in src/analyzers/mta-sts.ts:99", "shortDescription": {"text": "Commented-code block (10 lines) in src/analyzers/mta-sts.ts:99"}, "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-00712511f871b430", "name": "Commented-code block (10 lines) in src/analyzers/security-txt.ts:12", "shortDescription": {"text": "Commented-code block (10 lines) in src/analyzers/security-txt.ts:12"}, "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-e4a5603ca16de689", "name": "Commented-code block (5 lines) in src/api/history.ts:33", "shortDescription": {"text": "Commented-code block (5 lines) in src/api/history.ts:33"}, "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-f6ad0d9cd576ecd0", "name": "Commented-code block (5 lines) in src/api/badge.ts:14", "shortDescription": {"text": "Commented-code block (5 lines) in src/api/badge.ts:14"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-80236ef2a913a824", "name": "Commented-code block (12 lines) in src/shared/domain.ts:29", "shortDescription": {"text": "Commented-code block (12 lines) in src/shared/domain.ts:29"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-27ab1f5f7cf8118e", "name": "Commented-code block (6 lines) in src/shared/ssrf.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in src/shared/ssrf.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b6ece44238e1e448", "name": "Commented-code block (6 lines) in src/shared/scoring-config.ts:18", "shortDescription": {"text": "Commented-code block (6 lines) in src/shared/scoring-config.ts:18"}, "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-8e9b2bbb47fee6a3", "name": "Commented-code block (5 lines) in src/shared/scoring.ts:69", "shortDescription": {"text": "Commented-code block (5 lines) in src/shared/scoring.ts:69"}, "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-5f00ea78d5a77cf0", "name": "Commented-code block (10 lines) in src/shared/portfolio.ts:51", "shortDescription": {"text": "Commented-code block (10 lines) in src/shared/portfolio.ts:51"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6a8559c3742331e1", "name": "Commented-code block (9 lines) in src/dashboard/routes.ts:527", "shortDescription": {"text": "Commented-code block (9 lines) in src/dashboard/routes.ts:527"}, "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-04814f7c5eb4dc03", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/billing/stripe.ts:107", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/billing/stripe.ts:107"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ba971b20b39a27a6", "name": "Commented-code block (5 lines) in src/alerts/email.ts:15", "shortDescription": {"text": "Commented-code block (5 lines) in src/alerts/email.ts:15"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0cef59fdab47da75", "name": "Commented-code block (5 lines) in src/alerts/unsubscribe.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/alerts/unsubscribe.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a02600052b19a139", "name": "Commented-code block (6 lines) in src/cron/rescan.ts:175", "shortDescription": {"text": "Commented-code block (6 lines) in src/cron/rescan.ts:175"}, "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-724be44bca3ccaa0", "name": "Commented-code block (8 lines) in src/db/scans.ts:87", "shortDescription": {"text": "Commented-code block (8 lines) in src/db/scans.ts:87"}, "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-55bd010b1e7e0cd8", "name": "Commented-code block (5 lines) in src/db/domains.ts:84", "shortDescription": {"text": "Commented-code block (5 lines) in src/db/domains.ts:84"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6efd077568466976", "name": "Commented-code block (6 lines) in src/webhooks/triggers.ts:47", "shortDescription": {"text": "Commented-code block (6 lines) in src/webhooks/triggers.ts:47"}, "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-fbb58d86108f12c5", "name": "Commented-code block (7 lines) in src/webhooks/dispatcher.ts:17", "shortDescription": {"text": "Commented-code block (7 lines) in src/webhooks/dispatcher.ts:17"}, "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-808618e8e1e31bc0", "name": "Commented-code block (5 lines) in src/webhooks/formats/index.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/webhooks/formats/index.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-62511fba63d0318f", "name": "Commented-code block (5 lines) in src/views/dashboard.ts:1983", "shortDescription": {"text": "Commented-code block (5 lines) in src/views/dashboard.ts:1983"}, "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-ebc1d22b04f9c69b", "name": "Commented-code block (7 lines) in src/views/html.ts:529", "shortDescription": {"text": "Commented-code block (7 lines) in src/views/html.ts:529"}, "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-ecfdc90dc69e95bf", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/views/scripts.ts:659", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/views/scripts.ts:659"}, "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-d1caa2c34413978b", "name": "Commented-code block (6 lines) in src/dns/scan-budget.ts:5", "shortDescription": {"text": "Commented-code block (6 lines) in src/dns/scan-budget.ts:5"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b4571f29f845098b", "name": "Commented-code block (6 lines) in src/dns/errors.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in src/dns/errors.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8ae3c3409d017263", "name": "Dangling fetch: GET /learn/${p.slug} (test/index.test.ts:875)", "shortDescription": {"text": "Dangling fetch: GET /learn/${p.slug} (test/index.test.ts:875)"}, "fullDescription": {"text": "`test/index.test.ts:875` calls `GET /learn/${p.slug}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/learn/<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-99ed47afd2dc2f0f", "name": "Dangling fetch: GET /learn/${p.slug} (test/index.test.ts:898)", "shortDescription": {"text": "Dangling fetch: GET /learn/${p.slug} (test/index.test.ts:898)"}, "fullDescription": {"text": "`test/index.test.ts:898` calls `GET /learn/${p.slug}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/learn/<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-767645d833da4293", "name": "Dangling fetch: GET /mx/google (test/index.test.ts:1115)", "shortDescription": {"text": "Dangling fetch: GET /mx/google (test/index.test.ts:1115)"}, "fullDescription": {"text": "`test/index.test.ts:1115` calls `GET /mx/google` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/mx/google`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2dc974262d0bf6f4", "name": "Dangling fetch: GET /auth/login (test/auth-routes.test.ts:21)", "shortDescription": {"text": "Dangling fetch: GET /auth/login (test/auth-routes.test.ts:21)"}, "fullDescription": {"text": "`test/auth-routes.test.ts:21` calls `GET /auth/login` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/auth/login`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1b83354194883829", "name": "Dangling fetch: GET /auth/login (test/auth-routes.test.ts:33)", "shortDescription": {"text": "Dangling fetch: GET /auth/login (test/auth-routes.test.ts:33)"}, "fullDescription": {"text": "`test/auth-routes.test.ts:33` calls `GET /auth/login` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/auth/login`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d933ada8af4ab49b", "name": "Dangling fetch: GET /auth/login (test/auth-routes.test.ts:41)", "shortDescription": {"text": "Dangling fetch: GET /auth/login (test/auth-routes.test.ts:41)"}, "fullDescription": {"text": "`test/auth-routes.test.ts:41` calls `GET /auth/login` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/auth/login`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8a8efdf38d2a583b", "name": "Dangling fetch: GET /auth/login (test/auth-routes.test.ts:51)", "shortDescription": {"text": "Dangling fetch: GET /auth/login (test/auth-routes.test.ts:51)"}, "fullDescription": {"text": "`test/auth-routes.test.ts:51` calls `GET /auth/login` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/auth/login`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-fa6fb28dc9cdfcda", "name": "Dangling fetch: GET /auth/login (test/auth-routes.test.ts:59)", "shortDescription": {"text": "Dangling fetch: GET /auth/login (test/auth-routes.test.ts:59)"}, "fullDescription": {"text": "`test/auth-routes.test.ts:59` calls `GET /auth/login` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/auth/login`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2140da9a8c154652", "name": "Dangling fetch: GET /auth/login (test/auth-routes.test.ts:67)", "shortDescription": {"text": "Dangling fetch: GET /auth/login (test/auth-routes.test.ts:67)"}, "fullDescription": {"text": "`test/auth-routes.test.ts:67` calls `GET /auth/login` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/auth/login`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-bf9173ae38fe7406", "name": "Dangling fetch: GET /auth/callback (test/auth-routes.test.ts:88)", "shortDescription": {"text": "Dangling fetch: GET /auth/callback (test/auth-routes.test.ts:88)"}, "fullDescription": {"text": "`test/auth-routes.test.ts:88` calls `GET /auth/callback` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/auth/callback`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6d4f6812df328cb1", "name": "Dangling fetch: GET /auth/logout (test/auth-routes.test.ts:131)", "shortDescription": {"text": "Dangling fetch: GET /auth/logout (test/auth-routes.test.ts:131)"}, "fullDescription": {"text": "`test/auth-routes.test.ts:131` calls `GET /auth/logout` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/auth/logout`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-bf4164c9e3729b81", "name": "Dangling fetch: GET /auth/logout (test/auth-routes.test.ts:141)", "shortDescription": {"text": "Dangling fetch: GET /auth/logout (test/auth-routes.test.ts:141)"}, "fullDescription": {"text": "`test/auth-routes.test.ts:141` calls `GET /auth/logout` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/auth/logout`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5cb6bd352af55128", "name": "Dangling fetch: GET /dashboard/home (test/auth-middleware.test.ts:22)", "shortDescription": {"text": "Dangling fetch: GET /dashboard/home (test/auth-middleware.test.ts:22)"}, "fullDescription": {"text": "`test/auth-middleware.test.ts:22` calls `GET /dashboard/home` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/dashboard/home`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4edad8146d9bc6c6", "name": "Dangling fetch: GET /dashboard/home (test/auth-middleware.test.ts:37)", "shortDescription": {"text": "Dangling fetch: GET /dashboard/home (test/auth-middleware.test.ts:37)"}, "fullDescription": {"text": "`test/auth-middleware.test.ts:37` calls `GET /dashboard/home` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/dashboard/home`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c84ebdfccdb8c5c7", "name": "Dangling fetch: GET /dashboard/home (test/auth-middleware.test.ts:55)", "shortDescription": {"text": "Dangling fetch: GET /dashboard/home (test/auth-middleware.test.ts:55)"}, "fullDescription": {"text": "`test/auth-middleware.test.ts:55` calls `GET /dashboard/home` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/dashboard/home`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9b9eab055786e696", "name": "Dangling fetch: GET /public (test/auth-middleware.test.ts:65)", "shortDescription": {"text": "Dangling fetch: GET /public (test/auth-middleware.test.ts:65)"}, "fullDescription": {"text": "`test/auth-middleware.test.ts:65` calls `GET /public` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/public`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5d691268ffa0f5ef", "name": "Dangling fetch: GET /dashboard (test/dashboard-routes.test.ts:422)", "shortDescription": {"text": "Dangling fetch: GET /dashboard (test/dashboard-routes.test.ts:422)"}, "fullDescription": {"text": "`test/dashboard-routes.test.ts:422` calls `GET /dashboard` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/dashboard`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2d5e842020bd7ce2", "name": "Dangling fetch: GET /dashboard (test/dashboard-routes.test.ts:455)", "shortDescription": {"text": "Dangling fetch: GET /dashboard (test/dashboard-routes.test.ts:455)"}, "fullDescription": {"text": "`test/dashboard-routes.test.ts:455` calls `GET /dashboard` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/dashboard`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1343ef953439e05f", "name": "Dangling fetch: GET /dashboard (test/dashboard-routes.test.ts:480)", "shortDescription": {"text": "Dangling fetch: GET /dashboard (test/dashboard-routes.test.ts:480)"}, "fullDescription": {"text": "`test/dashboard-routes.test.ts:480` calls `GET /dashboard` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/dashboard`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-97243c90609ca83d", "name": "Dangling fetch: GET /dashboard (test/dashboard-routes.test.ts:491)", "shortDescription": {"text": "Dangling fetch: GET /dashboard (test/dashboard-routes.test.ts:491)"}, "fullDescription": {"text": "`test/dashboard-routes.test.ts:491` calls `GET /dashboard` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/dashboard`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5754efdabc431f2f", "name": "Dangling fetch: GET /dashboard (test/dashboard-routes.test.ts:515)", "shortDescription": {"text": "Dangling fetch: GET /dashboard (test/dashboard-routes.test.ts:515)"}, "fullDescription": {"text": "`test/dashboard-routes.test.ts:515` calls `GET /dashboard` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/dashboard`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1bc46a5bf8f5c818", "name": "Dangling fetch: GET /dashboard (test/dashboard-routes.test.ts:550)", "shortDescription": {"text": "Dangling fetch: GET /dashboard (test/dashboard-routes.test.ts:550)"}, "fullDescription": {"text": "`test/dashboard-routes.test.ts:550` calls `GET /dashboard` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/dashboard`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1c4d436c0b23e6be", "name": "Dangling fetch: GET /dashboard (test/dashboard-routes.test.ts:597)", "shortDescription": {"text": "Dangling fetch: GET /dashboard (test/dashboard-routes.test.ts:597)"}, "fullDescription": {"text": "`test/dashboard-routes.test.ts:597` calls `GET /dashboard` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/dashboard`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ae5dba645c9eb090", "name": "Dangling fetch: GET /dashboard (test/dashboard-routes.test.ts:666)", "shortDescription": {"text": "Dangling fetch: GET /dashboard (test/dashboard-routes.test.ts:666)"}, "fullDescription": {"text": "`test/dashboard-routes.test.ts:666` calls `GET /dashboard` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/dashboard`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a3d608dabaa36ce0", "name": "Dangling fetch: GET /dashboard?q=alpha (test/dashboard-routes.test.ts:717)", "shortDescription": {"text": "Dangling fetch: GET /dashboard?q=alpha (test/dashboard-routes.test.ts:717)"}, "fullDescription": {"text": "`test/dashboard-routes.test.ts:717` calls `GET /dashboard?q=alpha` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/dashboard`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e835528814e76c5f", "name": "Dangling fetch: GET /dashboard?q=zzz (test/dashboard-routes.test.ts:755)", "shortDescription": {"text": "Dangling fetch: GET /dashboard?q=zzz (test/dashboard-routes.test.ts:755)"}, "fullDescription": {"text": "`test/dashboard-routes.test.ts:755` calls `GET /dashboard?q=zzz` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/dashboard`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1e82e093401e6528", "name": "Dangling fetch: GET /dashboard/domains (test/dashboard-routes.test.ts:767)", "shortDescription": {"text": "Dangling fetch: GET /dashboard/domains (test/dashboard-routes.test.ts:767)"}, "fullDescription": {"text": "`test/dashboard-routes.test.ts:767` calls `GET /dashboard/domains` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/dashboard/domains`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d6e1001cd8acc72d", "name": "Dangling fetch: GET /dashboard/domains (test/dashboard-routes.test.ts:789)", "shortDescription": {"text": "Dangling fetch: GET /dashboard/domains (test/dashboard-routes.test.ts:789)"}, "fullDescription": {"text": "`test/dashboard-routes.test.ts:789` calls `GET /dashboard/domains` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/dashboard/domains`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5fbec6be76b7e665", "name": "Dangling fetch: GET /dashboard/domains (test/dashboard-routes.test.ts:824)", "shortDescription": {"text": "Dangling fetch: GET /dashboard/domains (test/dashboard-routes.test.ts:824)"}, "fullDescription": {"text": "`test/dashboard-routes.test.ts:824` calls `GET /dashboard/domains` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/dashboard/domains`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7f03d8c91abb49c8", "name": "Dangling fetch: GET /dashboard/domains?q=alpha (test/dashboard-routes.test.ts:880)", "shortDescription": {"text": "Dangling fetch: GET /dashboard/domains?q=alpha (test/dashboard-routes.test.ts:880)"}, "fullDescription": {"text": "`test/dashboard-routes.test.ts:880` calls `GET /dashboard/domains?q=alpha` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/dashboard/domains`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-bbef3097ff3031e8", "name": "Dangling fetch: GET /dashboard/domain/example.com (test/dashboard-routes.test.ts:895)", "shortDescription": {"text": "Dangling fetch: GET /dashboard/domain/example.com (test/dashboard-routes.test.ts:895)"}, "fullDescription": {"text": "`test/dashboard-routes.test.ts:895` calls `GET /dashboard/domain/example.com` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/dashboard/domain/example.com`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d3eb68daa2f11241", "name": "Dangling fetch: GET /dashboard/domain/notmine.com (test/dashboard-routes.test.ts:904)", "shortDescription": {"text": "Dangling fetch: GET /dashboard/domain/notmine.com (test/dashboard-routes.test.ts:904)"}, "fullDescription": {"text": "`test/dashboard-routes.test.ts:904` calls `GET /dashboard/domain/notmine.com` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/dashboard/domain/notmine.com`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-965bbf34432395fa", "name": "Dangling fetch: GET /dashboard/domain/example.com (test/dashboard-routes.test.ts:928)", "shortDescription": {"text": "Dangling fetch: GET /dashboard/domain/example.com (test/dashboard-routes.test.ts:928)"}, "fullDescription": {"text": "`test/dashboard-routes.test.ts:928` calls `GET /dashboard/domain/example.com` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/dashboard/domain/example.com`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-120c7c8972ab64a2", "name": "Dangling fetch: GET /dashboard/domain/example.com (test/dashboard-routes.test.ts:954)", "shortDescription": {"text": "Dangling fetch: GET /dashboard/domain/example.com (test/dashboard-routes.test.ts:954)"}, "fullDescription": {"text": "`test/dashboard-routes.test.ts:954` calls `GET /dashboard/domain/example.com` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/dashboard/domain/example.com`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-db5049ef69c8c4a6", "name": "Dangling fetch: GET /dashboard/domain/example.com.json (test/dashboard-routes.test.ts:966)", "shortDescription": {"text": "Dangling fetch: GET /dashboard/domain/example.com.json (test/dashboard-routes.test.ts:966)"}, "fullDescription": {"text": "`test/dashboard-routes.test.ts:966` calls `GET /dashboard/domain/example.com.json` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/dashboard/domain/example.com.json`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2137548379799254", "name": "Dangling fetch: GET /dashboard/domain/notmine.com.json (test/dashboard-routes.test.ts:975)", "shortDescription": {"text": "Dangling fetch: GET /dashboard/domain/notmine.com.json (test/dashboard-routes.test.ts:975)"}, "fullDescription": {"text": "`test/dashboard-routes.test.ts:975` calls `GET /dashboard/domain/notmine.com.json` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/dashboard/domain/notmine.com.json`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-789e59265408ceb5", "name": "Dangling fetch: GET /dashboard/domain/example.com.json (test/dashboard-routes.test.ts:1001)", "shortDescription": {"text": "Dangling fetch: GET /dashboard/domain/example.com.json (test/dashboard-routes.test.ts:1001)"}, "fullDescription": {"text": "`test/dashboard-routes.test.ts:1001` calls `GET /dashboard/domain/example.com.json` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/dashboard/domain/example.com.json`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-fd3e9cc7facf1542", "name": "Dangling fetch: GET /dashboard/domain/example.com.json (test/dashboard-routes.test.ts:1078)", "shortDescription": {"text": "Dangling fetch: GET /dashboard/domain/example.com.json (test/dashboard-routes.test.ts:1078)"}, "fullDescription": {"text": "`test/dashboard-routes.test.ts:1078` calls `GET /dashboard/domain/example.com.json` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/dashboard/domain/example.com.json`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c481dd7f50cbf4c3", "name": "Dangling fetch: GET /dashboard/domain/example.com.json (test/dashboard-routes.test.ts:1157)", "shortDescription": {"text": "Dangling fetch: GET /dashboard/domain/example.com.json (test/dashboard-routes.test.ts:1157)"}, "fullDescription": {"text": "`test/dashboard-routes.test.ts:1157` calls `GET /dashboard/domain/example.com.json` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/dashboard/domain/example.com.json`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7870194f7c5404ec", "name": "Dangling fetch: GET /dashboard/domain/example.com.json (test/dashboard-routes.test.ts:1212)", "shortDescription": {"text": "Dangling fetch: GET /dashboard/domain/example.com.json (test/dashboard-routes.test.ts:1212)"}, "fullDescription": {"text": "`test/dashboard-routes.test.ts:1212` calls `GET /dashboard/domain/example.com.json` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/dashboard/domain/example.com.json`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a5b287f548449110", "name": "Dangling fetch: GET /dashboard/domain/example.com/history (test/dashboard-routes.test.ts:1249)", "shortDescription": {"text": "Dangling fetch: GET /dashboard/domain/example.com/history (test/dashboard-routes.test.ts:1249)"}, "fullDescription": {"text": "`test/dashboard-routes.test.ts:1249` calls `GET /dashboard/domain/example.com/history` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/dashboard/domain/example.com/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-e1c1417161a1b92a", "name": "Dangling fetch: GET /dashboard/domain/notmine.com/history (test/dashboard-routes.test.ts:1258)", "shortDescription": {"text": "Dangling fetch: GET /dashboard/domain/notmine.com/history (test/dashboard-routes.test.ts:1258)"}, "fullDescription": {"text": "`test/dashboard-routes.test.ts:1258` calls `GET /dashboard/domain/notmine.com/history` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/dashboard/domain/notmine.com/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-d01d940e7f2bfa65", "name": "Dangling fetch: GET /dashboard/domain/example.com/history (test/dashboard-routes.test.ts:1281)", "shortDescription": {"text": "Dangling fetch: GET /dashboard/domain/example.com/history (test/dashboard-routes.test.ts:1281)"}, "fullDescription": {"text": "`test/dashboard-routes.test.ts:1281` calls `GET /dashboard/domain/example.com/history` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/dashboard/domain/example.com/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-93f3af1b75fd1955", "name": "Dangling fetch: GET /dashboard/domain/example.com/history (test/dashboard-routes.test.ts:1315)", "shortDescription": {"text": "Dangling fetch: GET /dashboard/domain/example.com/history (test/dashboard-routes.test.ts:1315)"}, "fullDescription": {"text": "`test/dashboard-routes.test.ts:1315` calls `GET /dashboard/domain/example.com/history` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/dashboard/domain/example.com/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-4db23b2f6a039a56", "name": "Dangling fetch: GET /dashboard/domain/example.com/history (test/dashboard-routes.test.ts:1343)", "shortDescription": {"text": "Dangling fetch: GET /dashboard/domain/example.com/history (test/dashboard-routes.test.ts:1343)"}, "fullDescription": {"text": "`test/dashboard-routes.test.ts:1343` calls `GET /dashboard/domain/example.com/history` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/dashboard/domain/example.com/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-ad0f3ebe65b99702", "name": "Dangling fetch: GET /dashboard/domain/example.com/history (test/dashboard-routes.test.ts:1359)", "shortDescription": {"text": "Dangling fetch: GET /dashboard/domain/example.com/history (test/dashboard-routes.test.ts:1359)"}, "fullDescription": {"text": "`test/dashboard-routes.test.ts:1359` calls `GET /dashboard/domain/example.com/history` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/dashboard/domain/example.com/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-77c502fedcd732a7", "name": "Dangling fetch: GET /dashboard/domain/example.com/history (test/dashboard-routes.test.ts:1392)", "shortDescription": {"text": "Dangling fetch: GET /dashboard/domain/example.com/history (test/dashboard-routes.test.ts:1392)"}, "fullDescription": {"text": "`test/dashboard-routes.test.ts:1392` calls `GET /dashboard/domain/example.com/history` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/dashboard/domain/example.com/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-b23cc932c94d13ef", "name": "Dangling fetch: GET /dashboard/settings (test/dashboard-routes.test.ts:1405)", "shortDescription": {"text": "Dangling fetch: GET /dashboard/settings (test/dashboard-routes.test.ts:1405)"}, "fullDescription": {"text": "`test/dashboard-routes.test.ts:1405` calls `GET /dashboard/settings` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/dashboard/settings`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-15860211a199dc9c", "name": "Dangling fetch: GET /dashboard/settings (test/dashboard-routes.test.ts:1426)", "shortDescription": {"text": "Dangling fetch: GET /dashboard/settings (test/dashboard-routes.test.ts:1426)"}, "fullDescription": {"text": "`test/dashboard-routes.test.ts:1426` calls `GET /dashboard/settings` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/dashboard/settings`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-478b96327c755a69", "name": "Dangling fetch: GET /dashboard/settings (test/dashboard-routes.test.ts:1451)", "shortDescription": {"text": "Dangling fetch: GET /dashboard/settings (test/dashboard-routes.test.ts:1451)"}, "fullDescription": {"text": "`test/dashboard-routes.test.ts:1451` calls `GET /dashboard/settings` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/dashboard/settings`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e4f6b724c206a222", "name": "Dangling fetch: GET /dashboard/settings (test/dashboard-routes.test.ts:1475)", "shortDescription": {"text": "Dangling fetch: GET /dashboard/settings (test/dashboard-routes.test.ts:1475)"}, "fullDescription": {"text": "`test/dashboard-routes.test.ts:1475` calls `GET /dashboard/settings` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/dashboard/settings`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-62a77f04d887209a", "name": "Dangling fetch: GET /dashboard/settings (test/dashboard-routes.test.ts:1506)", "shortDescription": {"text": "Dangling fetch: GET /dashboard/settings (test/dashboard-routes.test.ts:1506)"}, "fullDescription": {"text": "`test/dashboard-routes.test.ts:1506` calls `GET /dashboard/settings` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/dashboard/settings`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-275fdea96910e6dd", "name": "Dangling fetch: GET /dashboard/settings (test/dashboard-routes.test.ts:1517)", "shortDescription": {"text": "Dangling fetch: GET /dashboard/settings (test/dashboard-routes.test.ts:1517)"}, "fullDescription": {"text": "`test/dashboard-routes.test.ts:1517` calls `GET /dashboard/settings` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/dashboard/settings`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c51bef4883608da7", "name": "Dangling fetch: GET /dashboard/settings/api-keys (test/dashboard-routes.test.ts:1529)", "shortDescription": {"text": "Dangling fetch: GET /dashboard/settings/api-keys (test/dashboard-routes.test.ts:1529)"}, "fullDescription": {"text": "`test/dashboard-routes.test.ts:1529` calls `GET /dashboard/settings/api-keys` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/dashboard/settings/api-keys`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-cb1342d24d0c3532", "name": "Dangling fetch: GET /dashboard/settings/api-keys (test/dashboard-routes.test.ts:1562)", "shortDescription": {"text": "Dangling fetch: GET /dashboard/settings/api-keys (test/dashboard-routes.test.ts:1562)"}, "fullDescription": {"text": "`test/dashboard-routes.test.ts:1562` calls `GET /dashboard/settings/api-keys` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/dashboard/settings/api-keys`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8fd7cdf5e0c85245", "name": "Dangling fetch: GET /dashboard/settings/api-keys?created=1&raw=${encodeURIComponent(raw)} (test/dashboard-routes.test.ts", "shortDescription": {"text": "Dangling fetch: GET /dashboard/settings/api-keys?created=1&raw=${encodeURIComponent(raw)} (test/dashboard-routes.test.ts:1591)"}, "fullDescription": {"text": "`test/dashboard-routes.test.ts:1591` calls `GET /dashboard/settings/api-keys?created=1&raw=${encodeURIComponent(raw)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/dashboard/settings/api-keys`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3f07a58255928e72", "name": "Dangling fetch: GET /dashboard/settings/api-keys (test/dashboard-routes.test.ts:1619)", "shortDescription": {"text": "Dangling fetch: GET /dashboard/settings/api-keys (test/dashboard-routes.test.ts:1619)"}, "fullDescription": {"text": "`test/dashboard-routes.test.ts:1619` calls `GET /dashboard/settings/api-keys` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/dashboard/settings/api-keys`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-977165387aed1fc7", "name": "Dangling fetch: POST /dashboard/settings/api-keys/generate (test/dashboard-routes.test.ts:1637)", "shortDescription": {"text": "Dangling fetch: POST /dashboard/settings/api-keys/generate (test/dashboard-routes.test.ts:1637)"}, "fullDescription": {"text": "`test/dashboard-routes.test.ts:1637` calls `POST /dashboard/settings/api-keys/generate` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/dashboard/settings/api-keys/generate`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6e2d00531f6a108d", "name": "Dangling fetch: POST /dashboard/settings/api-keys/generate (test/dashboard-routes.test.ts:1650)", "shortDescription": {"text": "Dangling fetch: POST /dashboard/settings/api-keys/generate (test/dashboard-routes.test.ts:1650)"}, "fullDescription": {"text": "`test/dashboard-routes.test.ts:1650` calls `POST /dashboard/settings/api-keys/generate` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/dashboard/settings/api-keys/generate`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1e9d2f6871366ebc", "name": "Dangling fetch: POST /dashboard/settings/api-keys/generate (test/dashboard-routes.test.ts:1680)", "shortDescription": {"text": "Dangling fetch: POST /dashboard/settings/api-keys/generate (test/dashboard-routes.test.ts:1680)"}, "fullDescription": {"text": "`test/dashboard-routes.test.ts:1680` calls `POST /dashboard/settings/api-keys/generate` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/dashboard/settings/api-keys/generate`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3f86b1da338d305a", "name": "Dangling fetch: POST /dashboard/settings/api-keys/revoke (test/dashboard-routes.test.ts:1702)", "shortDescription": {"text": "Dangling fetch: POST /dashboard/settings/api-keys/revoke (test/dashboard-routes.test.ts:1702)"}, "fullDescription": {"text": "`test/dashboard-routes.test.ts:1702` calls `POST /dashboard/settings/api-keys/revoke` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/dashboard/settings/api-keys/revoke`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f626a3c8142150d1", "name": "Dangling fetch: POST /dashboard/domain/example.com/scan (test/dashboard-routes.test.ts:1726)", "shortDescription": {"text": "Dangling fetch: POST /dashboard/domain/example.com/scan (test/dashboard-routes.test.ts:1726)"}, "fullDescription": {"text": "`test/dashboard-routes.test.ts:1726` calls `POST /dashboard/domain/example.com/scan` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/dashboard/domain/example.com/scan`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4934132e194e1793", "name": "Dangling fetch: POST /dashboard/domain/notmine.com/scan (test/dashboard-routes.test.ts:1737)", "shortDescription": {"text": "Dangling fetch: POST /dashboard/domain/notmine.com/scan (test/dashboard-routes.test.ts:1737)"}, "fullDescription": {"text": "`test/dashboard-routes.test.ts:1737` calls `POST /dashboard/domain/notmine.com/scan` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/dashboard/domain/notmine.com/scan`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c62d16673d5ec438", "name": "Dangling fetch: POST /dashboard/domain/example.com/scan (test/dashboard-routes.test.ts:1764)", "shortDescription": {"text": "Dangling fetch: POST /dashboard/domain/example.com/scan (test/dashboard-routes.test.ts:1764)"}, "fullDescription": {"text": "`test/dashboard-routes.test.ts:1764` calls `POST /dashboard/domain/example.com/scan` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/dashboard/domain/example.com/scan`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1eec42a8ffbadd46", "name": "Dangling fetch: POST /dashboard/settings/email-alerts (test/dashboard-routes.test.ts:1791)", "shortDescription": {"text": "Dangling fetch: POST /dashboard/settings/email-alerts (test/dashboard-routes.test.ts:1791)"}, "fullDescription": {"text": "`test/dashboard-routes.test.ts:1791` calls `POST /dashboard/settings/email-alerts` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/dashboard/settings/email-alerts`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ad3fa41ce400e4f7", "name": "Dangling fetch: POST /dashboard/settings/email-alerts (test/dashboard-routes.test.ts:1804)", "shortDescription": {"text": "Dangling fetch: POST /dashboard/settings/email-alerts (test/dashboard-routes.test.ts:1804)"}, "fullDescription": {"text": "`test/dashboard-routes.test.ts:1804` calls `POST /dashboard/settings/email-alerts` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/dashboard/settings/email-alerts`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0047ab002f38dda5", "name": "Dangling fetch: POST /dashboard/settings/email-alerts (test/dashboard-routes.test.ts:1827)", "shortDescription": {"text": "Dangling fetch: POST /dashboard/settings/email-alerts (test/dashboard-routes.test.ts:1827)"}, "fullDescription": {"text": "`test/dashboard-routes.test.ts:1827` calls `POST /dashboard/settings/email-alerts` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/dashboard/settings/email-alerts`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-56f2d458688e4b01", "name": "Dangling fetch: POST /dashboard/settings/webhook (test/dashboard-routes.test.ts:1848)", "shortDescription": {"text": "Dangling fetch: POST /dashboard/settings/webhook (test/dashboard-routes.test.ts:1848)"}, "fullDescription": {"text": "`test/dashboard-routes.test.ts:1848` calls `POST /dashboard/settings/webhook` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/dashboard/settings/webhook`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-622a9c800705e7d9", "name": "Dangling fetch: POST /dashboard/settings/webhook (test/dashboard-routes.test.ts:1864)", "shortDescription": {"text": "Dangling fetch: POST /dashboard/settings/webhook (test/dashboard-routes.test.ts:1864)"}, "fullDescription": {"text": "`test/dashboard-routes.test.ts:1864` calls `POST /dashboard/settings/webhook` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/dashboard/settings/webhook`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b50a8121722fc14d", "name": "Dangling fetch: POST /dashboard/settings/webhook (test/dashboard-routes.test.ts:1890)", "shortDescription": {"text": "Dangling fetch: POST /dashboard/settings/webhook (test/dashboard-routes.test.ts:1890)"}, "fullDescription": {"text": "`test/dashboard-routes.test.ts:1890` calls `POST /dashboard/settings/webhook` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/dashboard/settings/webhook`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1bdd01c0c4246b72", "name": "Dangling fetch: POST /dashboard/settings/webhook (test/dashboard-routes.test.ts:1916)", "shortDescription": {"text": "Dangling fetch: POST /dashboard/settings/webhook (test/dashboard-routes.test.ts:1916)"}, "fullDescription": {"text": "`test/dashboard-routes.test.ts:1916` calls `POST /dashboard/settings/webhook` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/dashboard/settings/webhook`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0aa50bc1a665811b", "name": "Dangling fetch: GET /dashboard/domain/add (test/dashboard-routes.test.ts:1934)", "shortDescription": {"text": "Dangling fetch: GET /dashboard/domain/add (test/dashboard-routes.test.ts:1934)"}, "fullDescription": {"text": "`test/dashboard-routes.test.ts:1934` calls `GET /dashboard/domain/add` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/dashboard/domain/add`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-28e6dab1ff4edea7", "name": "Dangling fetch: GET /dashboard/domain/add (test/dashboard-routes.test.ts:1943)", "shortDescription": {"text": "Dangling fetch: GET /dashboard/domain/add (test/dashboard-routes.test.ts:1943)"}, "fullDescription": {"text": "`test/dashboard-routes.test.ts:1943` calls `GET /dashboard/domain/add` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/dashboard/domain/add`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-39ce4dd841e8c060", "name": "Dangling fetch: POST /dashboard/domain/add (test/dashboard-routes.test.ts:1957)", "shortDescription": {"text": "Dangling fetch: POST /dashboard/domain/add (test/dashboard-routes.test.ts:1957)"}, "fullDescription": {"text": "`test/dashboard-routes.test.ts:1957` calls `POST /dashboard/domain/add` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/dashboard/domain/add`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e13f741398db8b86", "name": "Dangling fetch: POST /dashboard/domain/add (test/dashboard-routes.test.ts:1969)", "shortDescription": {"text": "Dangling fetch: POST /dashboard/domain/add (test/dashboard-routes.test.ts:1969)"}, "fullDescription": {"text": "`test/dashboard-routes.test.ts:1969` calls `POST /dashboard/domain/add` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/dashboard/domain/add`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9030fa2786ce3a0d", "name": "Dangling fetch: POST /dashboard/domain/add (test/dashboard-routes.test.ts:1988)", "shortDescription": {"text": "Dangling fetch: POST /dashboard/domain/add (test/dashboard-routes.test.ts:1988)"}, "fullDescription": {"text": "`test/dashboard-routes.test.ts:1988` calls `POST /dashboard/domain/add` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/dashboard/domain/add`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-fa7de18071ac9ea2", "name": "Dangling fetch: POST /dashboard/domain/add (test/dashboard-routes.test.ts:2030)", "shortDescription": {"text": "Dangling fetch: POST /dashboard/domain/add (test/dashboard-routes.test.ts:2030)"}, "fullDescription": {"text": "`test/dashboard-routes.test.ts:2030` calls `POST /dashboard/domain/add` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/dashboard/domain/add`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-539522c8b29cda9f", "name": "Dangling fetch: POST /dashboard/domain/add (test/dashboard-routes.test.ts:2054)", "shortDescription": {"text": "Dangling fetch: POST /dashboard/domain/add (test/dashboard-routes.test.ts:2054)"}, "fullDescription": {"text": "`test/dashboard-routes.test.ts:2054` calls `POST /dashboard/domain/add` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/dashboard/domain/add`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-484300112dd057b4", "name": "Dangling fetch: POST /dashboard/domain/add (test/dashboard-routes.test.ts:2086)", "shortDescription": {"text": "Dangling fetch: POST /dashboard/domain/add (test/dashboard-routes.test.ts:2086)"}, "fullDescription": {"text": "`test/dashboard-routes.test.ts:2086` calls `POST /dashboard/domain/add` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/dashboard/domain/add`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-dcb587d4f9adbb5a", "name": "Dangling fetch: POST /dashboard/domain/add (test/dashboard-routes.test.ts:2125)", "shortDescription": {"text": "Dangling fetch: POST /dashboard/domain/add (test/dashboard-routes.test.ts:2125)"}, "fullDescription": {"text": "`test/dashboard-routes.test.ts:2125` calls `POST /dashboard/domain/add` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/dashboard/domain/add`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1ebd58d172fc2c22", "name": "Dangling fetch: POST /dashboard/domain/add (test/dashboard-routes.test.ts:2162)", "shortDescription": {"text": "Dangling fetch: POST /dashboard/domain/add (test/dashboard-routes.test.ts:2162)"}, "fullDescription": {"text": "`test/dashboard-routes.test.ts:2162` calls `POST /dashboard/domain/add` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/dashboard/domain/add`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-859d64a6e4275b86", "name": "Dangling fetch: GET /dashboard/domain/add (test/dashboard-routes.test.ts:2197)", "shortDescription": {"text": "Dangling fetch: GET /dashboard/domain/add (test/dashboard-routes.test.ts:2197)"}, "fullDescription": {"text": "`test/dashboard-routes.test.ts:2197` calls `GET /dashboard/domain/add` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/dashboard/domain/add`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-af900b2820e4b030", "name": "Dangling fetch: POST /dashboard/domain/add (test/dashboard-routes.test.ts:2229)", "shortDescription": {"text": "Dangling fetch: POST /dashboard/domain/add (test/dashboard-routes.test.ts:2229)"}, "fullDescription": {"text": "`test/dashboard-routes.test.ts:2229` calls `POST /dashboard/domain/add` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/dashboard/domain/add`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-530d38488dca2ff0", "name": "Dangling fetch: GET /dashboard/domain/add (test/dashboard-routes.test.ts:2265)", "shortDescription": {"text": "Dangling fetch: GET /dashboard/domain/add (test/dashboard-routes.test.ts:2265)"}, "fullDescription": {"text": "`test/dashboard-routes.test.ts:2265` calls `GET /dashboard/domain/add` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/dashboard/domain/add`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3bf8bc2643a0f99b", "name": "Dangling fetch: POST /dashboard/domain/example.com/delete (test/dashboard-routes.test.ts:2278)", "shortDescription": {"text": "Dangling fetch: POST /dashboard/domain/example.com/delete (test/dashboard-routes.test.ts:2278)"}, "fullDescription": {"text": "`test/dashboard-routes.test.ts:2278` calls `POST /dashboard/domain/example.com/delete` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/dashboard/domain/example.com/delete`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7e378e5cf6a871d3", "name": "Dangling fetch: POST /dashboard/domain/example.com/delete (test/dashboard-routes.test.ts:2290)", "shortDescription": {"text": "Dangling fetch: POST /dashboard/domain/example.com/delete (test/dashboard-routes.test.ts:2290)"}, "fullDescription": {"text": "`test/dashboard-routes.test.ts:2290` calls `POST /dashboard/domain/example.com/delete` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/dashboard/domain/example.com/delete`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ad902191ceeb8ae5", "name": "Dangling fetch: GET /dashboard (test/dashboard-routes.test.ts:2332)", "shortDescription": {"text": "Dangling fetch: GET /dashboard (test/dashboard-routes.test.ts:2332)"}, "fullDescription": {"text": "`test/dashboard-routes.test.ts:2332` calls `GET /dashboard` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/dashboard`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7860221222f88d45", "name": "Dangling fetch: GET /dashboard (test/dashboard-routes.test.ts:2351)", "shortDescription": {"text": "Dangling fetch: GET /dashboard (test/dashboard-routes.test.ts:2351)"}, "fullDescription": {"text": "`test/dashboard-routes.test.ts:2351` calls `GET /dashboard` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/dashboard`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e27d23ddfbf47fa2", "name": "Dangling fetch: GET /dashboard (test/dashboard-routes.test.ts:2390)", "shortDescription": {"text": "Dangling fetch: GET /dashboard (test/dashboard-routes.test.ts:2390)"}, "fullDescription": {"text": "`test/dashboard-routes.test.ts:2390` calls `GET /dashboard` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/dashboard`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a2747a47c304232b", "name": "Dangling fetch: POST /dashboard/alerts/1/acknowledge (test/dashboard-routes.test.ts:2403)", "shortDescription": {"text": "Dangling fetch: POST /dashboard/alerts/1/acknowledge (test/dashboard-routes.test.ts:2403)"}, "fullDescription": {"text": "`test/dashboard-routes.test.ts:2403` calls `POST /dashboard/alerts/1/acknowledge` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/dashboard/alerts/<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-d2ed6a3406dac9e2", "name": "Dangling fetch: POST /dashboard/alerts/abc/acknowledge (test/dashboard-routes.test.ts:2414)", "shortDescription": {"text": "Dangling fetch: POST /dashboard/alerts/abc/acknowledge (test/dashboard-routes.test.ts:2414)"}, "fullDescription": {"text": "`test/dashboard-routes.test.ts:2414` calls `POST /dashboard/alerts/abc/acknowledge` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/dashboard/alerts/abc/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-ba898701695b0b8b", "name": "Dangling fetch: POST /dashboard/alerts/42/acknowledge (test/dashboard-routes.test.ts:2452)", "shortDescription": {"text": "Dangling fetch: POST /dashboard/alerts/42/acknowledge (test/dashboard-routes.test.ts:2452)"}, "fullDescription": {"text": "`test/dashboard-routes.test.ts:2452` calls `POST /dashboard/alerts/42/acknowledge` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/dashboard/alerts/<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-70a26f6bbcb5137c", "name": "Dangling fetch: POST /dashboard/alerts/99/acknowledge (test/dashboard-routes.test.ts:2495)", "shortDescription": {"text": "Dangling fetch: POST /dashboard/alerts/99/acknowledge (test/dashboard-routes.test.ts:2495)"}, "fullDescription": {"text": "`test/dashboard-routes.test.ts:2495` calls `POST /dashboard/alerts/99/acknowledge` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/dashboard/alerts/<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-a378b9c44639f5a8", "name": "Dangling fetch: POST /dashboard/alerts/99999/acknowledge (test/dashboard-routes.test.ts:2506)", "shortDescription": {"text": "Dangling fetch: POST /dashboard/alerts/99999/acknowledge (test/dashboard-routes.test.ts:2506)"}, "fullDescription": {"text": "`test/dashboard-routes.test.ts:2506` calls `POST /dashboard/alerts/99999/acknowledge` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/dashboard/alerts/<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-31a70e020ce3543e", "name": "Dangling fetch: GET /dashboard/bulk (test/dashboard-routes.test.ts:2518)", "shortDescription": {"text": "Dangling fetch: GET /dashboard/bulk (test/dashboard-routes.test.ts:2518)"}, "fullDescription": {"text": "`test/dashboard-routes.test.ts:2518` calls `GET /dashboard/bulk` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/dashboard/bulk`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-86c8f82ed44db87a", "name": "Dangling fetch: GET /dashboard/bulk (test/dashboard-routes.test.ts:2527)", "shortDescription": {"text": "Dangling fetch: GET /dashboard/bulk (test/dashboard-routes.test.ts:2527)"}, "fullDescription": {"text": "`test/dashboard-routes.test.ts:2527` calls `GET /dashboard/bulk` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/dashboard/bulk`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-fecec4034c2d0dfd", "name": "Dangling fetch: GET /dashboard/bulk (test/dashboard-routes.test.ts:2545)", "shortDescription": {"text": "Dangling fetch: GET /dashboard/bulk (test/dashboard-routes.test.ts:2545)"}, "fullDescription": {"text": "`test/dashboard-routes.test.ts:2545` calls `GET /dashboard/bulk` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/dashboard/bulk`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-65b813c767cde4aa", "name": "Dangling fetch: POST /dashboard/bulk (test/dashboard-routes.test.ts:2560)", "shortDescription": {"text": "Dangling fetch: POST /dashboard/bulk (test/dashboard-routes.test.ts:2560)"}, "fullDescription": {"text": "`test/dashboard-routes.test.ts:2560` calls `POST /dashboard/bulk` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/dashboard/bulk`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2807b5c80bd14d74", "name": "Dangling fetch: POST /dashboard/bulk (test/dashboard-routes.test.ts:2569)", "shortDescription": {"text": "Dangling fetch: POST /dashboard/bulk (test/dashboard-routes.test.ts:2569)"}, "fullDescription": {"text": "`test/dashboard-routes.test.ts:2569` calls `POST /dashboard/bulk` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/dashboard/bulk`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7a0ba93f3e176832", "name": "Dangling fetch: POST /dashboard/bulk (test/dashboard-routes.test.ts:2595)", "shortDescription": {"text": "Dangling fetch: POST /dashboard/bulk (test/dashboard-routes.test.ts:2595)"}, "fullDescription": {"text": "`test/dashboard-routes.test.ts:2595` calls `POST /dashboard/bulk` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/dashboard/bulk`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3901b84bd1ede60c", "name": "Dangling fetch: POST /dashboard/bulk (test/dashboard-routes.test.ts:2622)", "shortDescription": {"text": "Dangling fetch: POST /dashboard/bulk (test/dashboard-routes.test.ts:2622)"}, "fullDescription": {"text": "`test/dashboard-routes.test.ts:2622` calls `POST /dashboard/bulk` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/dashboard/bulk`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f83145a89d2cfced", "name": "Dangling fetch: GET /dashboard/export (test/dashboard-routes.test.ts:2640)", "shortDescription": {"text": "Dangling fetch: GET /dashboard/export (test/dashboard-routes.test.ts:2640)"}, "fullDescription": {"text": "`test/dashboard-routes.test.ts:2640` calls `GET /dashboard/export` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/dashboard/export`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-37e4e7f4380de2d3", "name": "Dangling fetch: GET /dashboard/export (test/dashboard-routes.test.ts:2662)", "shortDescription": {"text": "Dangling fetch: GET /dashboard/export (test/dashboard-routes.test.ts:2662)"}, "fullDescription": {"text": "`test/dashboard-routes.test.ts:2662` calls `GET /dashboard/export` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/dashboard/export`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ead15a369b23d4ba", "name": "Dangling fetch: GET /dashboard/export (test/dashboard-routes.test.ts:2707)", "shortDescription": {"text": "Dangling fetch: GET /dashboard/export (test/dashboard-routes.test.ts:2707)"}, "fullDescription": {"text": "`test/dashboard-routes.test.ts:2707` calls `GET /dashboard/export` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/dashboard/export`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-306f1ce933cfeea8", "name": "Dangling fetch: GET /dashboard/export (test/dashboard-routes.test.ts:2739)", "shortDescription": {"text": "Dangling fetch: GET /dashboard/export (test/dashboard-routes.test.ts:2739)"}, "fullDescription": {"text": "`test/dashboard-routes.test.ts:2739` calls `GET /dashboard/export` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/dashboard/export`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-22df9dd4d34926a3", "name": "Dangling fetch: GET /dashboard/export?format=json (test/dashboard-routes.test.ts:2799)", "shortDescription": {"text": "Dangling fetch: GET /dashboard/export?format=json (test/dashboard-routes.test.ts:2799)"}, "fullDescription": {"text": "`test/dashboard-routes.test.ts:2799` calls `GET /dashboard/export?format=json` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/dashboard/export`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ab1a4fcc0a28aee2", "name": "Dangling fetch: GET /dashboard (test/dashboard-routes.test.ts:2854)", "shortDescription": {"text": "Dangling fetch: GET /dashboard (test/dashboard-routes.test.ts:2854)"}, "fullDescription": {"text": "`test/dashboard-routes.test.ts:2854` calls `GET /dashboard` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/dashboard`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f84053df33fae920", "name": "Dangling fetch: POST /webhooks/stripe (test/billing-routes.test.ts:160)", "shortDescription": {"text": "Dangling fetch: POST /webhooks/stripe (test/billing-routes.test.ts:160)"}, "fullDescription": {"text": "`test/billing-routes.test.ts:160` calls `POST /webhooks/stripe` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/webhooks/stripe`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6043cc1e68269839", "name": "Dangling fetch: POST /webhooks/stripe (test/billing-routes.test.ts:172)", "shortDescription": {"text": "Dangling fetch: POST /webhooks/stripe (test/billing-routes.test.ts:172)"}, "fullDescription": {"text": "`test/billing-routes.test.ts:172` calls `POST /webhooks/stripe` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/webhooks/stripe`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1c7d632ee3bbe28a", "name": "Dangling fetch: POST /webhooks/stripe (test/billing-routes.test.ts:211)", "shortDescription": {"text": "Dangling fetch: POST /webhooks/stripe (test/billing-routes.test.ts:211)"}, "fullDescription": {"text": "`test/billing-routes.test.ts:211` calls `POST /webhooks/stripe` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/webhooks/stripe`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6dcd7dffc0ab6dc7", "name": "Dangling fetch: POST /webhooks/stripe (test/billing-routes.test.ts:263)", "shortDescription": {"text": "Dangling fetch: POST /webhooks/stripe (test/billing-routes.test.ts:263)"}, "fullDescription": {"text": "`test/billing-routes.test.ts:263` calls `POST /webhooks/stripe` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/webhooks/stripe`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c8016244d9f2c53f", "name": "Dangling fetch: POST /webhooks/stripe (test/billing-routes.test.ts:300)", "shortDescription": {"text": "Dangling fetch: POST /webhooks/stripe (test/billing-routes.test.ts:300)"}, "fullDescription": {"text": "`test/billing-routes.test.ts:300` calls `POST /webhooks/stripe` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/webhooks/stripe`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f399cf741ce46c34", "name": "Dangling fetch: POST /webhooks/stripe (test/billing-routes.test.ts:314)", "shortDescription": {"text": "Dangling fetch: POST /webhooks/stripe (test/billing-routes.test.ts:314)"}, "fullDescription": {"text": "`test/billing-routes.test.ts:314` calls `POST /webhooks/stripe` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/webhooks/stripe`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e2cb35b87513c330", "name": "Dangling fetch: POST /webhooks/stripe (test/billing-routes.test.ts:344)", "shortDescription": {"text": "Dangling fetch: POST /webhooks/stripe (test/billing-routes.test.ts:344)"}, "fullDescription": {"text": "`test/billing-routes.test.ts:344` calls `POST /webhooks/stripe` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/webhooks/stripe`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d9eb82af88e8ce1b", "name": "Dangling fetch: POST /webhooks/stripe (test/billing-routes.test.ts:368)", "shortDescription": {"text": "Dangling fetch: POST /webhooks/stripe (test/billing-routes.test.ts:368)"}, "fullDescription": {"text": "`test/billing-routes.test.ts:368` calls `POST /webhooks/stripe` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/webhooks/stripe`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-194ff08fc4a3b5b0", "name": "Dangling fetch: GET /dashboard/billing/subscribe (test/billing-routes.test.ts:425)", "shortDescription": {"text": "Dangling fetch: GET /dashboard/billing/subscribe (test/billing-routes.test.ts:425)"}, "fullDescription": {"text": "`test/billing-routes.test.ts:425` calls `GET /dashboard/billing/subscribe` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/dashboard/billing/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-7d74f9684fa14da6", "name": "Dangling fetch: GET /dashboard/billing/subscribe (test/billing-routes.test.ts:448)", "shortDescription": {"text": "Dangling fetch: GET /dashboard/billing/subscribe (test/billing-routes.test.ts:448)"}, "fullDescription": {"text": "`test/billing-routes.test.ts:448` calls `GET /dashboard/billing/subscribe` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/dashboard/billing/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-1de7c906c2cc261b", "name": "Dangling fetch: GET /dashboard/billing/subscribe (test/billing-routes.test.ts:478)", "shortDescription": {"text": "Dangling fetch: GET /dashboard/billing/subscribe (test/billing-routes.test.ts:478)"}, "fullDescription": {"text": "`test/billing-routes.test.ts:478` calls `GET /dashboard/billing/subscribe` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/dashboard/billing/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-5e16d5c2caaf1caf", "name": "Dangling fetch: GET /dashboard/billing/portal (test/billing-routes.test.ts:530)", "shortDescription": {"text": "Dangling fetch: GET /dashboard/billing/portal (test/billing-routes.test.ts:530)"}, "fullDescription": {"text": "`test/billing-routes.test.ts:530` calls `GET /dashboard/billing/portal` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/dashboard/billing/portal`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c91bbf85b8950d7c", "name": "Dangling fetch: GET /dashboard/billing/portal (test/billing-routes.test.ts:556)", "shortDescription": {"text": "Dangling fetch: GET /dashboard/billing/portal (test/billing-routes.test.ts:556)"}, "fullDescription": {"text": "`test/billing-routes.test.ts:556` calls `GET /dashboard/billing/portal` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/dashboard/billing/portal`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8cc44114e7d8419d", "name": "Dangling fetch: GET /legal/terms (test/pricing-legal.test.ts:168)", "shortDescription": {"text": "Dangling fetch: GET /legal/terms (test/pricing-legal.test.ts:168)"}, "fullDescription": {"text": "`test/pricing-legal.test.ts:168` calls `GET /legal/terms` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/legal/terms`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-32fa48d21184d9f8", "name": "Dangling fetch: GET /legal (test/pricing-legal.test.ts:173)", "shortDescription": {"text": "Dangling fetch: GET /legal (test/pricing-legal.test.ts:173)"}, "fullDescription": {"text": "`test/pricing-legal.test.ts:173` calls `GET /legal` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/legal`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-df0dc75ee3e384f3", "name": "Dangling fetch: POST /webhooks/stripe (test/integration/stripe-lifecycle.test.ts:272)", "shortDescription": {"text": "Dangling fetch: POST /webhooks/stripe (test/integration/stripe-lifecycle.test.ts:272)"}, "fullDescription": {"text": "`test/integration/stripe-lifecycle.test.ts:272` calls `POST /webhooks/stripe` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/webhooks/stripe`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a1365f8797449121", "name": "Dangling fetch: GET /dashboard/billing/subscribe (test/integration/stripe-lifecycle.test.ts:343)", "shortDescription": {"text": "Dangling fetch: GET /dashboard/billing/subscribe (test/integration/stripe-lifecycle.test.ts:343)"}, "fullDescription": {"text": "`test/integration/stripe-lifecycle.test.ts:343` calls `GET /dashboard/billing/subscribe` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/dashboard/billing/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-6cd0c7f46f61922e", "name": "Dangling fetch: GET /dashboard/billing/portal (test/integration/stripe-lifecycle.test.ts:496)", "shortDescription": {"text": "Dangling fetch: GET /dashboard/billing/portal (test/integration/stripe-lifecycle.test.ts:496)"}, "fullDescription": {"text": "`test/integration/stripe-lifecycle.test.ts:496` calls `GET /dashboard/billing/portal` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/dashboard/billing/portal`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e5ed7166f1d94fe6", "name": "Dangling fetch: POST /webhooks/stripe (test/integration/stripe-lifecycle.test.ts:597)", "shortDescription": {"text": "Dangling fetch: POST /webhooks/stripe (test/integration/stripe-lifecycle.test.ts:597)"}, "fullDescription": {"text": "`test/integration/stripe-lifecycle.test.ts:597` calls `POST /webhooks/stripe` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/webhooks/stripe`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-182d381bde1c88e7", "name": "Dangling fetch: GET /dashboard/billing/subscribe (test/integration/stripe-lifecycle.test.ts:614)", "shortDescription": {"text": "Dangling fetch: GET /dashboard/billing/subscribe (test/integration/stripe-lifecycle.test.ts:614)"}, "fullDescription": {"text": "`test/integration/stripe-lifecycle.test.ts:614` calls `GET /dashboard/billing/subscribe` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/dashboard/billing/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-9f9b9c59e89ccc00", "name": "Dangling fetch: POST /webhooks/stripe (test/integration/stripe-lifecycle.test.ts:627)", "shortDescription": {"text": "Dangling fetch: POST /webhooks/stripe (test/integration/stripe-lifecycle.test.ts:627)"}, "fullDescription": {"text": "`test/integration/stripe-lifecycle.test.ts:627` calls `POST /webhooks/stripe` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/webhooks/stripe`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d679ac115c9582a0", "name": "Dangling fetch: POST https://api.workos.com/user_management/authenticate (src/auth/routes.ts:58)", "shortDescription": {"text": "Dangling fetch: POST https://api.workos.com/user_management/authenticate (src/auth/routes.ts:58)"}, "fullDescription": {"text": "`src/auth/routes.ts:58` calls `POST https://api.workos.com/user_management/authenticate` 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.workos.com/user_management/authenticate`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b7f6cf2bd24a10d1", "name": "Dangling fetch: POST https://api.stripe.com/v1${path} (src/billing/stripe.ts:107)", "shortDescription": {"text": "Dangling fetch: POST https://api.stripe.com/v1${path} (src/billing/stripe.ts:107)"}, "fullDescription": {"text": "`src/billing/stripe.ts:107` calls `POST https://api.stripe.com/v1${path}` 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.stripe.com/v1/<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-b8073f7bf758f6d0", "name": "Unused endpoint: USE /api/*", "shortDescription": {"text": "Unused endpoint: USE /api/*"}, "fullDescription": {"text": "`src/index.ts` declares `USE /api/*` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4a03c6195c96785c", "name": "Unused endpoint: USE /dashboard/*", "shortDescription": {"text": "Unused endpoint: USE /dashboard/*"}, "fullDescription": {"text": "`src/index.ts` declares `USE /dashboard/*` 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-ce762777591d1568", "name": "Unused endpoint: GET /_dev/dashboard", "shortDescription": {"text": "Unused endpoint: GET /_dev/dashboard"}, "fullDescription": {"text": "`src/index.ts` declares `GET /_dev/dashboard` 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-183ab251d8990bb8", "name": "Unused endpoint: USE /check", "shortDescription": {"text": "Unused endpoint: USE /check"}, "fullDescription": {"text": "`src/index.ts` declares `USE /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-5cf54d1d1f160506", "name": "Unused endpoint: USE /check/score", "shortDescription": {"text": "Unused endpoint: USE /check/score"}, "fullDescription": {"text": "`src/index.ts` declares `USE /check/score` 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-b202e576064805c6", "name": "Unused endpoint: USE /api/check", "shortDescription": {"text": "Unused endpoint: USE /api/check"}, "fullDescription": {"text": "`src/index.ts` declares `USE /api/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-b8721c8752947a0b", "name": "Unused endpoint: USE /api/bulk-scan", "shortDescription": {"text": "Unused endpoint: USE /api/bulk-scan"}, "fullDescription": {"text": "`src/index.ts` declares `USE /api/bulk-scan` 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-7f7784ff44f08014", "name": "Unused endpoint: USE /api/domain/*", "shortDescription": {"text": "Unused endpoint: USE /api/domain/*"}, "fullDescription": {"text": "`src/index.ts` declares `USE /api/domain/*` 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-b7beca0a94cf9a1c", "name": "Unused endpoint: USE /api/check/stream", "shortDescription": {"text": "Unused endpoint: USE /api/check/stream"}, "fullDescription": {"text": "`src/index.ts` declares `USE /api/check/stream` 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-b96574e67d1cedc6", "name": "Unused endpoint: USE /badge", "shortDescription": {"text": "Unused endpoint: USE /badge"}, "fullDescription": {"text": "`src/index.ts` declares `USE /badge` 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-95e266019920938e", "name": "Unused endpoint: USE /mcp", "shortDescription": {"text": "Unused endpoint: USE /mcp"}, "fullDescription": {"text": "`src/index.ts` declares `USE /mcp` 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-e5acd21d9ecb0480", "name": "Unused endpoint: GET /og-image.svg", "shortDescription": {"text": "Unused endpoint: GET /og-image.svg"}, "fullDescription": {"text": "`src/index.ts` declares `GET /og-image.svg` 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-239a938869adf673", "name": "Unused endpoint: POST /mcp", "shortDescription": {"text": "Unused endpoint: POST /mcp"}, "fullDescription": {"text": "`src/index.ts` declares `POST /mcp` 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-6078dce92f323e45", "name": "Unused endpoint: GET /mx", "shortDescription": {"text": "Unused endpoint: GET /mx"}, "fullDescription": {"text": "`src/index.ts` declares `GET /mx` 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-6823b5b9bddffad0", "name": "Unused endpoint: GET /mx/:slug", "shortDescription": {"text": "Unused endpoint: GET /mx/:slug"}, "fullDescription": {"text": "`src/index.ts` declares `GET /mx/:slug` 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-65f7266c15d218ee", "name": "Unused endpoint: GET /api/domain/:name/history", "shortDescription": {"text": "Unused endpoint: GET /api/domain/:name/history"}, "fullDescription": {"text": "`src/index.ts` declares `GET /api/domain/:name/history` 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-2694b5886d7e993a", "name": "Unused endpoint: GET /check/score", "shortDescription": {"text": "Unused endpoint: GET /check/score"}, "fullDescription": {"text": "`src/index.ts` declares `GET /check/score` 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-e5f899fff8e655a2", "name": "Unused endpoint: GET /check", "shortDescription": {"text": "Unused endpoint: GET /check"}, "fullDescription": {"text": "`src/index.ts` declares `GET /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-6a4dfcad3eb1618a", "name": "Unused endpoint: GET /login", "shortDescription": {"text": "Unused endpoint: GET /login"}, "fullDescription": {"text": "`src/auth/routes.ts` declares `GET /login` 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-cdfb578618cf2542", "name": "Unused endpoint: GET /callback", "shortDescription": {"text": "Unused endpoint: GET /callback"}, "fullDescription": {"text": "`src/auth/routes.ts` declares `GET /callback` 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-5ca735a2e6e3646c", "name": "Unused endpoint: GET /logout", "shortDescription": {"text": "Unused endpoint: GET /logout"}, "fullDescription": {"text": "`src/auth/routes.ts` declares `GET /logout` 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-6ad2194d377bd37e", "name": "Unused endpoint: GET /domains", "shortDescription": {"text": "Unused endpoint: GET /domains"}, "fullDescription": {"text": "`src/dashboard/routes.ts` declares `GET /domains` 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-e686634beeea0bb8", "name": "Unused endpoint: GET /export", "shortDescription": {"text": "Unused endpoint: GET /export"}, "fullDescription": {"text": "`src/dashboard/routes.ts` declares `GET /export` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7bb1660f899ccb4d", "name": "Unused endpoint: POST /alerts/acknowledge-all", "shortDescription": {"text": "Unused endpoint: POST /alerts/acknowledge-all"}, "fullDescription": {"text": "`src/dashboard/routes.ts` declares `POST /alerts/acknowledge-all` 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-38e693d6e44b20d1", "name": "Unused endpoint: POST /alerts/:id/acknowledge", "shortDescription": {"text": "Unused endpoint: POST /alerts/:id/acknowledge"}, "fullDescription": {"text": "`src/dashboard/routes.ts` declares `POST /alerts/:id/acknowledge` 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-ed69bbd3d7bf53a0", "name": "Unused endpoint: GET /domain/add", "shortDescription": {"text": "Unused endpoint: GET /domain/add"}, "fullDescription": {"text": "`src/dashboard/routes.ts` declares `GET /domain/add` 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-dd38bc578e8c6287", "name": "Unused endpoint: POST /domain/add", "shortDescription": {"text": "Unused endpoint: POST /domain/add"}, "fullDescription": {"text": "`src/dashboard/routes.ts` declares `POST /domain/add` 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-14411a9796cd4a91", "name": "Unused endpoint: GET /bulk", "shortDescription": {"text": "Unused endpoint: GET /bulk"}, "fullDescription": {"text": "`src/dashboard/routes.ts` declares `GET /bulk` 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-90631dcf4fb49f54", "name": "Unused endpoint: POST /bulk", "shortDescription": {"text": "Unused endpoint: POST /bulk"}, "fullDescription": {"text": "`src/dashboard/routes.ts` declares `POST /bulk` 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-f74678000d967310", "name": "Unused endpoint: GET /domain/:domain{.+\\\\.json}", "shortDescription": {"text": "Unused endpoint: GET /domain/:domain{.+\\\\.json}"}, "fullDescription": {"text": "`src/dashboard/routes.ts` declares `GET /domain/:domain{.+\\\\.json}` 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-c4eee4e63dc0a37b", "name": "Unused endpoint: GET /domain/:domain", "shortDescription": {"text": "Unused endpoint: GET /domain/:domain"}, "fullDescription": {"text": "`src/dashboard/routes.ts` declares `GET /domain/:domain` 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-8add6ba73c1b4274", "name": "Unused endpoint: GET /domain/:domain/history", "shortDescription": {"text": "Unused endpoint: GET /domain/:domain/history"}, "fullDescription": {"text": "`src/dashboard/routes.ts` declares `GET /domain/:domain/history` 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-d8965d19b2941348", "name": "Unused endpoint: POST /domain/:domain/scan", "shortDescription": {"text": "Unused endpoint: POST /domain/:domain/scan"}, "fullDescription": {"text": "`src/dashboard/routes.ts` declares `POST /domain/:domain/scan` 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-f80b2476671c6b82", "name": "Unused endpoint: POST /domain/:domain/delete", "shortDescription": {"text": "Unused endpoint: POST /domain/:domain/delete"}, "fullDescription": {"text": "`src/dashboard/routes.ts` declares `POST /domain/:domain/delete` 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-512ccb0fd0b230ba", "name": "Unused endpoint: GET /settings", "shortDescription": {"text": "Unused endpoint: GET /settings"}, "fullDescription": {"text": "`src/dashboard/routes.ts` declares `GET /settings` 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-9d82b5a723855229", "name": "Unused endpoint: POST /settings/email-alerts", "shortDescription": {"text": "Unused endpoint: POST /settings/email-alerts"}, "fullDescription": {"text": "`src/dashboard/routes.ts` declares `POST /settings/email-alerts` 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-1bdca7e9aecc1310", "name": "Unused endpoint: POST /settings/notify-on-change", "shortDescription": {"text": "Unused endpoint: POST /settings/notify-on-change"}, "fullDescription": {"text": "`src/dashboard/routes.ts` declares `POST /settings/notify-on-change` 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-9730cc6279f4b0c6", "name": "Unused endpoint: GET /settings/api-keys", "shortDescription": {"text": "Unused endpoint: GET /settings/api-keys"}, "fullDescription": {"text": "`src/dashboard/routes.ts` declares `GET /settings/api-keys` 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-26c7b8a44ba9e179", "name": "Unused endpoint: POST /settings/api-keys/generate", "shortDescription": {"text": "Unused endpoint: POST /settings/api-keys/generate"}, "fullDescription": {"text": "`src/dashboard/routes.ts` declares `POST /settings/api-keys/generate` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-48900acd6cb99620", "name": "Unused endpoint: POST /settings/api-keys/revoke", "shortDescription": {"text": "Unused endpoint: POST /settings/api-keys/revoke"}, "fullDescription": {"text": "`src/dashboard/routes.ts` declares `POST /settings/api-keys/revoke` 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-fdf252fcb98c1563", "name": "Unused endpoint: POST /settings/webhook/test", "shortDescription": {"text": "Unused endpoint: POST /settings/webhook/test"}, "fullDescription": {"text": "`src/dashboard/routes.ts` declares `POST /settings/webhook/test` 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-e1fdf4b060cc9158", "name": "Unused endpoint: POST /settings/webhook", "shortDescription": {"text": "Unused endpoint: POST /settings/webhook"}, "fullDescription": {"text": "`src/dashboard/routes.ts` declares `POST /settings/webhook` 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-beac5d731a094f4b", "name": "Unused endpoint: GET /subscribe", "shortDescription": {"text": "Unused endpoint: GET /subscribe"}, "fullDescription": {"text": "`src/billing/routes.ts` declares `GET /subscribe` 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-cbe94c8508f4d2c1", "name": "Unused endpoint: GET /portal", "shortDescription": {"text": "Unused endpoint: GET /portal"}, "fullDescription": {"text": "`src/billing/routes.ts` declares `GET /portal` 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-2083a87719497893", "name": "Unused endpoint: POST /stripe", "shortDescription": {"text": "Unused endpoint: POST /stripe"}, "fullDescription": {"text": "`src/billing/routes.ts` declares `POST /stripe` 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/19053"}, "properties": {"repository": "schmug/dmarcheck", "repoUrl": "https://github.com/schmug/dmarcheck", "branch": "main"}, "results": [{"ruleId": "scanner-f678e605c6e7ee27", "level": "warning", "message": {"text": "Custom React Flow node registered without explicit width/height \u2014 test/billing-routes.test.ts:357"}, "properties": {"repobilityId": "cb7efc60286f997d", "scanner": "scanner-primary", "fingerprint": "f678e605c6e7ee27", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.rfnode.no-dims"]}}, {"ruleId": "scanner-608389312e0aba20", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/routine-gate/gate.ts:26"}, "properties": {"repobilityId": "0a2afd79162b49d3", "scanner": "scanner-primary", "fingerprint": "608389312e0aba20", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f63bcbe9b97d103f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/release/check-releasable.ts:32"}, "properties": {"repobilityId": "fe04ff7b5d850257", "scanner": "scanner-primary", "fingerprint": "f63bcbe9b97d103f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1987d75329d1c898", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/index.ts:489"}, "properties": {"repobilityId": "3536c54822235cb2", "scanner": "scanner-primary", "fingerprint": "1987d75329d1c898", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-95f5c8c33377fb41", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/views/components.ts:67"}, "properties": {"repobilityId": "01f5a681ded1047c", "scanner": "scanner-primary", "fingerprint": "95f5c8c33377fb41", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-209d45bbcfce729a", "level": "warning", "message": {"text": "Privileged port 12 in use"}, "properties": {"repobilityId": "65e7eefa33f2def4", "scanner": "scanner-primary", "fingerprint": "209d45bbcfce729a", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/codeql.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-cbe37f89207fbdab", "level": "warning", "message": {"text": "Privileged port 23 in use"}, "properties": {"repobilityId": "a1230e3dfc4becfa", "scanner": "scanner-primary", "fingerprint": "cbe37f89207fbdab", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/codeql.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-8b7f6eec6c1dcf33", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/routine-gate/github.ts:1"}, "properties": {"repobilityId": "048312beac28aaf2", "scanner": "scanner-primary", "fingerprint": "8b7f6eec6c1dcf33", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/routine-gate/github.ts"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-09f81682120e7d4a", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/release/check-releasable.ts:2"}, "properties": {"repobilityId": "63b118e393e9d817", "scanner": "scanner-primary", "fingerprint": "09f81682120e7d4a", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/release/check-releasable.ts"}, "region": {"startLine": 2}}}]}, {"ruleId": "scanner-57ba8a6efe9efe73", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in src/index.ts:307"}, "properties": {"repobilityId": "56c7c9857324258f", "scanner": "scanner-primary", "fingerprint": "57ba8a6efe9efe73", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/index.ts"}, "region": {"startLine": 307}}}]}, {"ruleId": "scanner-0b15fde3bca9b01b", "level": "warning", "message": {"text": "Insecure pattern 'domparser_html_parse' in src/views/html.ts:578"}, "properties": {"repobilityId": "62510460000477a5", "scanner": "scanner-primary", "fingerprint": "0b15fde3bca9b01b", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "domparser_html_parse"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/views/html.ts"}, "region": {"startLine": 578}}}]}, {"ruleId": "scanner-1bf0b9eaf198275c", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/views/scripts.ts:252"}, "properties": {"repobilityId": "fdaa2a68b5148dd6", "scanner": "scanner-primary", "fingerprint": "1bf0b9eaf198275c", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/views/scripts.ts"}, "region": {"startLine": 252}}}]}, {"ruleId": "scanner-2432ce19e07df2d9", "level": "warning", "message": {"text": "Insecure pattern 'domparser_html_parse' in src/views/scripts.ts:733"}, "properties": {"repobilityId": "cd85745ca0f28be7", "scanner": "scanner-primary", "fingerprint": "2432ce19e07df2d9", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "domparser_html_parse"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/views/scripts.ts"}, "region": {"startLine": 733}}}]}, {"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-45d7e6efed4aa249", "level": "note", "message": {"text": "Very large file: test/index.test.ts (1293 lines)"}, "properties": {"repobilityId": "8d4d232afe4b43c6", "scanner": "scanner-primary", "fingerprint": "45d7e6efed4aa249", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-b51886beffed353c", "level": "note", "message": {"text": "Very large file: test/dashboard-routes.test.ts (2863 lines)"}, "properties": {"repobilityId": "0abbf800d7c4acd7", "scanner": "scanner-primary", "fingerprint": "b51886beffed353c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-938dfba58bb06bd1", "level": "note", "message": {"text": "Very large file: src/index.ts (1535 lines)"}, "properties": {"repobilityId": "25727599e08a7f66", "scanner": "scanner-primary", "fingerprint": "938dfba58bb06bd1", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-70405f2433292825", "level": "note", "message": {"text": "Very large file: src/views/dashboard.ts (3091 lines)"}, "properties": {"repobilityId": "1bcdab6fea68e268", "scanner": "scanner-primary", "fingerprint": "70405f2433292825", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-814ad3b935843e8e", "level": "note", "message": {"text": "Very large file: src/views/scripts.ts (1374 lines)"}, "properties": {"repobilityId": "93ec3848550e9bc1", "scanner": "scanner-primary", "fingerprint": "814ad3b935843e8e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-f3397a199bd15e38", "level": "note", "message": {"text": "Very large file: src/views/learn.ts (983 lines)"}, "properties": {"repobilityId": "71b3256192fea379", "scanner": "scanner-primary", "fingerprint": "f3397a199bd15e38", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "29995d2ae1afcdd0", "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": "185a60152b408dcb", "scanner": "scanner-primary", "fingerprint": "72b2a6250083a784", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "incomplete", "generated-repo-pattern"]}}, {"ruleId": "scanner-2d0c7b7ab8f8aacf", "level": "warning", "message": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "properties": {"repobilityId": "6b0362136d576779", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-ea8f3013f588db25", "level": "note", "message": {"text": "Shallow git history limits provenance confidence"}, "properties": {"repobilityId": "1b0506886c5dd555", "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": "1d0870309d4955f7", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-2c5f98b152cddb6d", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/launch.json"}, "properties": {"repobilityId": "0de48c0f4ab303d8", "scanner": "scanner-primary", "fingerprint": "2c5f98b152cddb6d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/launch.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-58f0ef2039cc88a9", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/skills/dmarcus-mood-check/SKILL.md"}, "properties": {"repobilityId": "c3201fea5ddf8bee", "scanner": "scanner-primary", "fingerprint": "58f0ef2039cc88a9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/dmarcus-mood-check/SKILL.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-5d7c3de116d2573b", "level": "warning", "message": {"text": "Agent instruction contains unpinned remote install: .claude/skills/threat-model/SKILL.md"}, "properties": {"repobilityId": "30c75349a9e5f630", "scanner": "scanner-primary", "fingerprint": "5d7c3de116d2573b", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "supply-chain", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/threat-model/SKILL.md"}, "region": {"startLine": 134}}}]}, {"ruleId": "scanner-b0137257fb4eb147", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: src/db/CLAUDE.md"}, "properties": {"repobilityId": "d08cb8a913f6f2f7", "scanner": "scanner-primary", "fingerprint": "b0137257fb4eb147", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/db/CLAUDE.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-1eb995f9341cd5a0", "level": "none", "message": {"text": "Commented-code block (5 lines) in vitest.config.ts:5"}, "properties": {"repobilityId": "4ef68684cdb09adb", "scanner": "scanner-primary", "fingerprint": "1eb995f9341cd5a0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4d4b4bb4b92e58fb", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 test/rate-limit-middleware.test.ts:70"}, "properties": {"repobilityId": "a622da536bba48e3", "scanner": "scanner-primary", "fingerprint": "4d4b4bb4b92e58fb", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a05c25869d6711f5", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 test/bimi.test.ts:69"}, "properties": {"repobilityId": "032b993782f418d6", "scanner": "scanner-primary", "fingerprint": "a05c25869d6711f5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-54b0607f0acc8241", "level": "none", "message": {"text": "Commented-code block (5 lines) in test/index.test.ts:205"}, "properties": {"repobilityId": "1533af1b1c561662", "scanner": "scanner-primary", "fingerprint": "54b0607f0acc8241", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-69f358e67cb478cf", "level": "none", "message": {"text": "Commented-code block (5 lines) in test/mx-providers.test.ts:143"}, "properties": {"repobilityId": "2540d384e87e5d79", "scanner": "scanner-primary", "fingerprint": "69f358e67cb478cf", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-36d62f185b9fb110", "level": "none", "message": {"text": "Commented-code block (5 lines) in test/dashboard-views.test.ts:475"}, "properties": {"repobilityId": "c762edefa6b23e58", "scanner": "scanner-primary", "fingerprint": "36d62f185b9fb110", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-84b5bb7091ac0334", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 test/bearer-middleware.test.ts:58"}, "properties": {"repobilityId": "e9eb4dce4b4da4d4", "scanner": "scanner-primary", "fingerprint": "84b5bb7091ac0334", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2fc1f85a334686b1", "level": "none", "message": {"text": "Commented-code block (6 lines) in test/cron-rescan.test.ts:414"}, "properties": {"repobilityId": "ab7c25764fe778d5", "scanner": "scanner-primary", "fingerprint": "2fc1f85a334686b1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c98a54b0b09f205d", "level": "none", "message": {"text": "Commented-code block (5 lines) in test/api-check-stream.test.ts:52"}, "properties": {"repobilityId": "f6f17205f3bd8be5", "scanner": "scanner-primary", "fingerprint": "c98a54b0b09f205d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-736c4db8193b5445", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 test/mta-sts.test.ts:236"}, "properties": {"repobilityId": "530064721c6020f8", "scanner": "scanner-primary", "fingerprint": "736c4db8193b5445", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f8f0aa1eb0275e4b", "level": "none", "message": {"text": "Commented-code block (9 lines) in test/integration/rate-limit-do.test.ts:10"}, "properties": {"repobilityId": "6e4df782fa9a0dbc", "scanner": "scanner-primary", "fingerprint": "f8f0aa1eb0275e4b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a0c2d6e35cd5cfb5", "level": "none", "message": {"text": "Commented-code block (5 lines) in test/integration/mta-sts-runtime.test.ts:4"}, "properties": {"repobilityId": "7fcb29368e08823d", "scanner": "scanner-primary", "fingerprint": "a0c2d6e35cd5cfb5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5f571bfc08a90f79", "level": "none", "message": {"text": "Commented-code block (6 lines) in test/shims/cloudflare-workers.ts:1"}, "properties": {"repobilityId": "2b0b3014417b2913", "scanner": "scanner-primary", "fingerprint": "5f571bfc08a90f79", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3a1254d853d00ff9", "level": "none", "message": {"text": "Commented-code block (7 lines) in scripts/release/releasable.ts:1"}, "properties": {"repobilityId": "87252d3033e7bba6", "scanner": "scanner-primary", "fingerprint": "3a1254d853d00ff9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-eafbbed54f501ca5", "level": "none", "message": {"text": "Commented-code block (7 lines) in .claude/workflows/pr-triage.js:19"}, "properties": {"repobilityId": "0e7a8466be8df3d2", "scanner": "scanner-primary", "fingerprint": "eafbbed54f501ca5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-72ce1dcfb337dcda", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 mta-sts-worker/src/index.ts:2"}, "properties": {"repobilityId": "c6f85114f9b94b37", "scanner": "scanner-primary", "fingerprint": "72ce1dcfb337dcda", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4d33007f330264ad", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/rate-limit-do.ts:6"}, "properties": {"repobilityId": "2dad17fc4503fda8", "scanner": "scanner-primary", "fingerprint": "4d33007f330264ad", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-dee9590c08d3c3d3", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/csv.ts:80"}, "properties": {"repobilityId": "f0bec33e77adf58a", "scanner": "scanner-primary", "fingerprint": "dee9590c08d3c3d3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3542ee96a157b8d2", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/env.ts:25"}, "properties": {"repobilityId": "d043340a2d801167", "scanner": "scanner-primary", "fingerprint": "3542ee96a157b8d2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3f45c21d45fe63be", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/index.ts:168"}, "properties": {"repobilityId": "d2008e6de24c60be", "scanner": "scanner-primary", "fingerprint": "3f45c21d45fe63be", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ec9ff7ed38c944ca", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/orchestrator.ts:78"}, "properties": {"repobilityId": "919ba8e1204af9d9", "scanner": "scanner-primary", "fingerprint": "ec9ff7ed38c944ca", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-45781621e07edf4c", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/rate-limit.ts:44"}, "properties": {"repobilityId": "e8ae43cb10489048", "scanner": "scanner-primary", "fingerprint": "45781621e07edf4c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-197c8cf9dd12e7a4", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/sentry-scrub.ts:3"}, "properties": {"repobilityId": "f211527cbaa1712f", "scanner": "scanner-primary", "fingerprint": "197c8cf9dd12e7a4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-be60229be40c34ee", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/auth/middleware.ts:23"}, "properties": {"repobilityId": "36802996de92fe61", "scanner": "scanner-primary", "fingerprint": "be60229be40c34ee", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-34476a2b64a126f4", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/auth/routes.ts:58"}, "properties": {"repobilityId": "13f593253500bd80", "scanner": "scanner-primary", "fingerprint": "34476a2b64a126f4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a54ed1ec1bb37127", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/auth/access-jwt.ts:10"}, "properties": {"repobilityId": "1cc0ecfbaae2f53c", "scanner": "scanner-primary", "fingerprint": "a54ed1ec1bb37127", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0cccfa2dfd97bb10", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/analyzers/spf.ts:166"}, "properties": {"repobilityId": "9c972ab995b07d7d", "scanner": "scanner-primary", "fingerprint": "0cccfa2dfd97bb10", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-161fa6b392634613", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/analyzers/dmarc.ts:62"}, "properties": {"repobilityId": "a2d4b43c1423c094", "scanner": "scanner-primary", "fingerprint": "161fa6b392634613", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cd2981c0b8f8285a", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/analyzers/dane.ts:10"}, "properties": {"repobilityId": "08a794673b7fb1fe", "scanner": "scanner-primary", "fingerprint": "cd2981c0b8f8285a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a5d1475db8686938", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/analyzers/bimi.ts:8"}, "properties": {"repobilityId": "8e1992a6cf6a07b9", "scanner": "scanner-primary", "fingerprint": "a5d1475db8686938", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3a59e26cc15c4cce", "level": "none", "message": {"text": "Commented-code block (10 lines) in src/analyzers/mta-sts.ts:99"}, "properties": {"repobilityId": "7450bb874bc65836", "scanner": "scanner-primary", "fingerprint": "3a59e26cc15c4cce", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-00712511f871b430", "level": "none", "message": {"text": "Commented-code block (10 lines) in src/analyzers/security-txt.ts:12"}, "properties": {"repobilityId": "37594254485867bb", "scanner": "scanner-primary", "fingerprint": "00712511f871b430", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e4a5603ca16de689", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/api/history.ts:33"}, "properties": {"repobilityId": "7e2f0803e5c5a1fb", "scanner": "scanner-primary", "fingerprint": "e4a5603ca16de689", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f6ad0d9cd576ecd0", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/api/badge.ts:14"}, "properties": {"repobilityId": "81bf024c6bd308bd", "scanner": "scanner-primary", "fingerprint": "f6ad0d9cd576ecd0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-80236ef2a913a824", "level": "none", "message": {"text": "Commented-code block (12 lines) in src/shared/domain.ts:29"}, "properties": {"repobilityId": "6392ff4e9237c3d0", "scanner": "scanner-primary", "fingerprint": "80236ef2a913a824", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-27ab1f5f7cf8118e", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/shared/ssrf.ts:1"}, "properties": {"repobilityId": "6d35dab1e02d997b", "scanner": "scanner-primary", "fingerprint": "27ab1f5f7cf8118e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b6ece44238e1e448", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/shared/scoring-config.ts:18"}, "properties": {"repobilityId": "f750e6cef5089a29", "scanner": "scanner-primary", "fingerprint": "b6ece44238e1e448", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8e9b2bbb47fee6a3", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/shared/scoring.ts:69"}, "properties": {"repobilityId": "187905f61d6e390f", "scanner": "scanner-primary", "fingerprint": "8e9b2bbb47fee6a3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5f00ea78d5a77cf0", "level": "none", "message": {"text": "Commented-code block (10 lines) in src/shared/portfolio.ts:51"}, "properties": {"repobilityId": "68eab5d2350d3bdb", "scanner": "scanner-primary", "fingerprint": "5f00ea78d5a77cf0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6a8559c3742331e1", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/dashboard/routes.ts:527"}, "properties": {"repobilityId": "be8b6e802e79bf5f", "scanner": "scanner-primary", "fingerprint": "6a8559c3742331e1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-04814f7c5eb4dc03", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/billing/stripe.ts:107"}, "properties": {"repobilityId": "1acd2b45c97590ff", "scanner": "scanner-primary", "fingerprint": "04814f7c5eb4dc03", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ba971b20b39a27a6", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/alerts/email.ts:15"}, "properties": {"repobilityId": "02293d1093b732ac", "scanner": "scanner-primary", "fingerprint": "ba971b20b39a27a6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0cef59fdab47da75", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/alerts/unsubscribe.ts:1"}, "properties": {"repobilityId": "a6bcfc2f378260d7", "scanner": "scanner-primary", "fingerprint": "0cef59fdab47da75", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a02600052b19a139", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/cron/rescan.ts:175"}, "properties": {"repobilityId": "9ef7820bc7d6143b", "scanner": "scanner-primary", "fingerprint": "a02600052b19a139", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-724be44bca3ccaa0", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/db/scans.ts:87"}, "properties": {"repobilityId": "8623dbbcc33d9cc9", "scanner": "scanner-primary", "fingerprint": "724be44bca3ccaa0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-55bd010b1e7e0cd8", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/db/domains.ts:84"}, "properties": {"repobilityId": "7b2f625e65fd4188", "scanner": "scanner-primary", "fingerprint": "55bd010b1e7e0cd8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6efd077568466976", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/webhooks/triggers.ts:47"}, "properties": {"repobilityId": "992a1673eae3062f", "scanner": "scanner-primary", "fingerprint": "6efd077568466976", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fbb58d86108f12c5", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/webhooks/dispatcher.ts:17"}, "properties": {"repobilityId": "6d8ed248e9b2dad1", "scanner": "scanner-primary", "fingerprint": "fbb58d86108f12c5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-808618e8e1e31bc0", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/webhooks/formats/index.ts:1"}, "properties": {"repobilityId": "8b8a885f16b503f4", "scanner": "scanner-primary", "fingerprint": "808618e8e1e31bc0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-62511fba63d0318f", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/views/dashboard.ts:1983"}, "properties": {"repobilityId": "d1498b06b659bbbd", "scanner": "scanner-primary", "fingerprint": "62511fba63d0318f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ebc1d22b04f9c69b", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/views/html.ts:529"}, "properties": {"repobilityId": "920c5c163bddd97f", "scanner": "scanner-primary", "fingerprint": "ebc1d22b04f9c69b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ecfdc90dc69e95bf", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/views/scripts.ts:659"}, "properties": {"repobilityId": "0654ed5c7df34fde", "scanner": "scanner-primary", "fingerprint": "ecfdc90dc69e95bf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d1caa2c34413978b", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/dns/scan-budget.ts:5"}, "properties": {"repobilityId": "e9a14f124070f3c1", "scanner": "scanner-primary", "fingerprint": "d1caa2c34413978b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b4571f29f845098b", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/dns/errors.ts:1"}, "properties": {"repobilityId": "ca0f5c557317a659", "scanner": "scanner-primary", "fingerprint": "b4571f29f845098b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8ae3c3409d017263", "level": "error", "message": {"text": "Dangling fetch: GET /learn/${p.slug} (test/index.test.ts:875)"}, "properties": {"repobilityId": "4991b3b3516bd6fe", "scanner": "scanner-primary", "fingerprint": "8ae3c3409d017263", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-99ed47afd2dc2f0f", "level": "error", "message": {"text": "Dangling fetch: GET /learn/${p.slug} (test/index.test.ts:898)"}, "properties": {"repobilityId": "09a8ec4514520904", "scanner": "scanner-primary", "fingerprint": "99ed47afd2dc2f0f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-767645d833da4293", "level": "error", "message": {"text": "Dangling fetch: GET /mx/google (test/index.test.ts:1115)"}, "properties": {"repobilityId": "90ff9dc14a2a97e0", "scanner": "scanner-primary", "fingerprint": "767645d833da4293", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-2dc974262d0bf6f4", "level": "error", "message": {"text": "Dangling fetch: GET /auth/login (test/auth-routes.test.ts:21)"}, "properties": {"repobilityId": "cf895ddad31efe23", "scanner": "scanner-primary", "fingerprint": "2dc974262d0bf6f4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-1b83354194883829", "level": "error", "message": {"text": "Dangling fetch: GET /auth/login (test/auth-routes.test.ts:33)"}, "properties": {"repobilityId": "4fa7e4985c597107", "scanner": "scanner-primary", "fingerprint": "1b83354194883829", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-d933ada8af4ab49b", "level": "error", "message": {"text": "Dangling fetch: GET /auth/login (test/auth-routes.test.ts:41)"}, "properties": {"repobilityId": "87720e005499a263", "scanner": "scanner-primary", "fingerprint": "d933ada8af4ab49b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-8a8efdf38d2a583b", "level": "error", "message": {"text": "Dangling fetch: GET /auth/login (test/auth-routes.test.ts:51)"}, "properties": {"repobilityId": "6b23397acc6862a1", "scanner": "scanner-primary", "fingerprint": "8a8efdf38d2a583b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-fa6fb28dc9cdfcda", "level": "error", "message": {"text": "Dangling fetch: GET /auth/login (test/auth-routes.test.ts:59)"}, "properties": {"repobilityId": "265ae2f0a495d998", "scanner": "scanner-primary", "fingerprint": "fa6fb28dc9cdfcda", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-2140da9a8c154652", "level": "error", "message": {"text": "Dangling fetch: GET /auth/login (test/auth-routes.test.ts:67)"}, "properties": {"repobilityId": "cd846091fb1f93cb", "scanner": "scanner-primary", "fingerprint": "2140da9a8c154652", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-bf9173ae38fe7406", "level": "error", "message": {"text": "Dangling fetch: GET /auth/callback (test/auth-routes.test.ts:88)"}, "properties": {"repobilityId": "2df3b3f84742c4b3", "scanner": "scanner-primary", "fingerprint": "bf9173ae38fe7406", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-6d4f6812df328cb1", "level": "error", "message": {"text": "Dangling fetch: GET /auth/logout (test/auth-routes.test.ts:131)"}, "properties": {"repobilityId": "fdf612ed5da5971f", "scanner": "scanner-primary", "fingerprint": "6d4f6812df328cb1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-bf4164c9e3729b81", "level": "error", "message": {"text": "Dangling fetch: GET /auth/logout (test/auth-routes.test.ts:141)"}, "properties": {"repobilityId": "3fabc0eb614ec703", "scanner": "scanner-primary", "fingerprint": "bf4164c9e3729b81", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-5cb6bd352af55128", "level": "error", "message": {"text": "Dangling fetch: GET /dashboard/home (test/auth-middleware.test.ts:22)"}, "properties": {"repobilityId": "d7de459034635256", "scanner": "scanner-primary", "fingerprint": "5cb6bd352af55128", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-4edad8146d9bc6c6", "level": "error", "message": {"text": "Dangling fetch: GET /dashboard/home (test/auth-middleware.test.ts:37)"}, "properties": {"repobilityId": "f77ba0979a0b3e9b", "scanner": "scanner-primary", "fingerprint": "4edad8146d9bc6c6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-c84ebdfccdb8c5c7", "level": "error", "message": {"text": "Dangling fetch: GET /dashboard/home (test/auth-middleware.test.ts:55)"}, "properties": {"repobilityId": "9edbbfd7ecd93622", "scanner": "scanner-primary", "fingerprint": "c84ebdfccdb8c5c7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-9b9eab055786e696", "level": "error", "message": {"text": "Dangling fetch: GET /public (test/auth-middleware.test.ts:65)"}, "properties": {"repobilityId": "27f9eea9a4156530", "scanner": "scanner-primary", "fingerprint": "9b9eab055786e696", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-5d691268ffa0f5ef", "level": "error", "message": {"text": "Dangling fetch: GET /dashboard (test/dashboard-routes.test.ts:422)"}, "properties": {"repobilityId": "e0b0e176026bab7f", "scanner": "scanner-primary", "fingerprint": "5d691268ffa0f5ef", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-2d5e842020bd7ce2", "level": "error", "message": {"text": "Dangling fetch: GET /dashboard (test/dashboard-routes.test.ts:455)"}, "properties": {"repobilityId": "7f03d19694950598", "scanner": "scanner-primary", "fingerprint": "2d5e842020bd7ce2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-1343ef953439e05f", "level": "error", "message": {"text": "Dangling fetch: GET /dashboard (test/dashboard-routes.test.ts:480)"}, "properties": {"repobilityId": "cb5094dd46fd9158", "scanner": "scanner-primary", "fingerprint": "1343ef953439e05f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-97243c90609ca83d", "level": "error", "message": {"text": "Dangling fetch: GET /dashboard (test/dashboard-routes.test.ts:491)"}, "properties": {"repobilityId": "bf8a85915a900eff", "scanner": "scanner-primary", "fingerprint": "97243c90609ca83d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-5754efdabc431f2f", "level": "error", "message": {"text": "Dangling fetch: GET /dashboard (test/dashboard-routes.test.ts:515)"}, "properties": {"repobilityId": "7aaabc857ea10b10", "scanner": "scanner-primary", "fingerprint": "5754efdabc431f2f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-1bc46a5bf8f5c818", "level": "error", "message": {"text": "Dangling fetch: GET /dashboard (test/dashboard-routes.test.ts:550)"}, "properties": {"repobilityId": "bb9919db47bcd61b", "scanner": "scanner-primary", "fingerprint": "1bc46a5bf8f5c818", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-1c4d436c0b23e6be", "level": "error", "message": {"text": "Dangling fetch: GET /dashboard (test/dashboard-routes.test.ts:597)"}, "properties": {"repobilityId": "ba25e9f9d2e63104", "scanner": "scanner-primary", "fingerprint": "1c4d436c0b23e6be", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-ae5dba645c9eb090", "level": "error", "message": {"text": "Dangling fetch: GET /dashboard (test/dashboard-routes.test.ts:666)"}, "properties": {"repobilityId": "ca6f91a0151e6f02", "scanner": "scanner-primary", "fingerprint": "ae5dba645c9eb090", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-a3d608dabaa36ce0", "level": "error", "message": {"text": "Dangling fetch: GET /dashboard?q=alpha (test/dashboard-routes.test.ts:717)"}, "properties": {"repobilityId": "5b99b5ced8d6c4e4", "scanner": "scanner-primary", "fingerprint": "a3d608dabaa36ce0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-e835528814e76c5f", "level": "error", "message": {"text": "Dangling fetch: GET /dashboard?q=zzz (test/dashboard-routes.test.ts:755)"}, "properties": {"repobilityId": "04ecdc1a387823df", "scanner": "scanner-primary", "fingerprint": "e835528814e76c5f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-1e82e093401e6528", "level": "error", "message": {"text": "Dangling fetch: GET /dashboard/domains (test/dashboard-routes.test.ts:767)"}, "properties": {"repobilityId": "1bf23a88a8719ab5", "scanner": "scanner-primary", "fingerprint": "1e82e093401e6528", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-d6e1001cd8acc72d", "level": "error", "message": {"text": "Dangling fetch: GET /dashboard/domains (test/dashboard-routes.test.ts:789)"}, "properties": {"repobilityId": "5a904692d9609e03", "scanner": "scanner-primary", "fingerprint": "d6e1001cd8acc72d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-5fbec6be76b7e665", "level": "error", "message": {"text": "Dangling fetch: GET /dashboard/domains (test/dashboard-routes.test.ts:824)"}, "properties": {"repobilityId": "c0ef89e22d91e3e4", "scanner": "scanner-primary", "fingerprint": "5fbec6be76b7e665", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-7f03d8c91abb49c8", "level": "error", "message": {"text": "Dangling fetch: GET /dashboard/domains?q=alpha (test/dashboard-routes.test.ts:880)"}, "properties": {"repobilityId": "7868cb5b199ebb57", "scanner": "scanner-primary", "fingerprint": "7f03d8c91abb49c8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-bbef3097ff3031e8", "level": "error", "message": {"text": "Dangling fetch: GET /dashboard/domain/example.com (test/dashboard-routes.test.ts:895)"}, "properties": {"repobilityId": "4db2e8440ee36064", "scanner": "scanner-primary", "fingerprint": "bbef3097ff3031e8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-d3eb68daa2f11241", "level": "error", "message": {"text": "Dangling fetch: GET /dashboard/domain/notmine.com (test/dashboard-routes.test.ts:904)"}, "properties": {"repobilityId": "728f15a49fc983a4", "scanner": "scanner-primary", "fingerprint": "d3eb68daa2f11241", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-965bbf34432395fa", "level": "error", "message": {"text": "Dangling fetch: GET /dashboard/domain/example.com (test/dashboard-routes.test.ts:928)"}, "properties": {"repobilityId": "987462036a654c40", "scanner": "scanner-primary", "fingerprint": "965bbf34432395fa", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-120c7c8972ab64a2", "level": "error", "message": {"text": "Dangling fetch: GET /dashboard/domain/example.com (test/dashboard-routes.test.ts:954)"}, "properties": {"repobilityId": "a5b1cbcd593d68b3", "scanner": "scanner-primary", "fingerprint": "120c7c8972ab64a2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-db5049ef69c8c4a6", "level": "error", "message": {"text": "Dangling fetch: GET /dashboard/domain/example.com.json (test/dashboard-routes.test.ts:966)"}, "properties": {"repobilityId": "1b46f0a5c3d0c5f1", "scanner": "scanner-primary", "fingerprint": "db5049ef69c8c4a6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-2137548379799254", "level": "error", "message": {"text": "Dangling fetch: GET /dashboard/domain/notmine.com.json (test/dashboard-routes.test.ts:975)"}, "properties": {"repobilityId": "1f800cd4b23ef436", "scanner": "scanner-primary", "fingerprint": "2137548379799254", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-789e59265408ceb5", "level": "error", "message": {"text": "Dangling fetch: GET /dashboard/domain/example.com.json (test/dashboard-routes.test.ts:1001)"}, "properties": {"repobilityId": "c8273a37fc0a16fe", "scanner": "scanner-primary", "fingerprint": "789e59265408ceb5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-fd3e9cc7facf1542", "level": "error", "message": {"text": "Dangling fetch: GET /dashboard/domain/example.com.json (test/dashboard-routes.test.ts:1078)"}, "properties": {"repobilityId": "8ef9d22c7bb36f08", "scanner": "scanner-primary", "fingerprint": "fd3e9cc7facf1542", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-c481dd7f50cbf4c3", "level": "error", "message": {"text": "Dangling fetch: GET /dashboard/domain/example.com.json (test/dashboard-routes.test.ts:1157)"}, "properties": {"repobilityId": "9c03611e89f72384", "scanner": "scanner-primary", "fingerprint": "c481dd7f50cbf4c3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-7870194f7c5404ec", "level": "error", "message": {"text": "Dangling fetch: GET /dashboard/domain/example.com.json (test/dashboard-routes.test.ts:1212)"}, "properties": {"repobilityId": "dee5c75025866a86", "scanner": "scanner-primary", "fingerprint": "7870194f7c5404ec", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-a5b287f548449110", "level": "error", "message": {"text": "Dangling fetch: GET /dashboard/domain/example.com/history (test/dashboard-routes.test.ts:1249)"}, "properties": {"repobilityId": "0f7135fc76b9ab4c", "scanner": "scanner-primary", "fingerprint": "a5b287f548449110", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-e1c1417161a1b92a", "level": "error", "message": {"text": "Dangling fetch: GET /dashboard/domain/notmine.com/history (test/dashboard-routes.test.ts:1258)"}, "properties": {"repobilityId": "f38c246ff4e7e397", "scanner": "scanner-primary", "fingerprint": "e1c1417161a1b92a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-d01d940e7f2bfa65", "level": "error", "message": {"text": "Dangling fetch: GET /dashboard/domain/example.com/history (test/dashboard-routes.test.ts:1281)"}, "properties": {"repobilityId": "beabc1f03c8b86a0", "scanner": "scanner-primary", "fingerprint": "d01d940e7f2bfa65", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-93f3af1b75fd1955", "level": "error", "message": {"text": "Dangling fetch: GET /dashboard/domain/example.com/history (test/dashboard-routes.test.ts:1315)"}, "properties": {"repobilityId": "23b1d1f7fd029c8b", "scanner": "scanner-primary", "fingerprint": "93f3af1b75fd1955", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-4db23b2f6a039a56", "level": "error", "message": {"text": "Dangling fetch: GET /dashboard/domain/example.com/history (test/dashboard-routes.test.ts:1343)"}, "properties": {"repobilityId": "72ae1ecb3199ed12", "scanner": "scanner-primary", "fingerprint": "4db23b2f6a039a56", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-ad0f3ebe65b99702", "level": "error", "message": {"text": "Dangling fetch: GET /dashboard/domain/example.com/history (test/dashboard-routes.test.ts:1359)"}, "properties": {"repobilityId": "dfa3f62dbd703c52", "scanner": "scanner-primary", "fingerprint": "ad0f3ebe65b99702", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-77c502fedcd732a7", "level": "error", "message": {"text": "Dangling fetch: GET /dashboard/domain/example.com/history (test/dashboard-routes.test.ts:1392)"}, "properties": {"repobilityId": "a0b8fe0c02068db2", "scanner": "scanner-primary", "fingerprint": "77c502fedcd732a7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-b23cc932c94d13ef", "level": "error", "message": {"text": "Dangling fetch: GET /dashboard/settings (test/dashboard-routes.test.ts:1405)"}, "properties": {"repobilityId": "a28798a9e3e8edaa", "scanner": "scanner-primary", "fingerprint": "b23cc932c94d13ef", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-15860211a199dc9c", "level": "error", "message": {"text": "Dangling fetch: GET /dashboard/settings (test/dashboard-routes.test.ts:1426)"}, "properties": {"repobilityId": "55dbd662c39eba0c", "scanner": "scanner-primary", "fingerprint": "15860211a199dc9c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-478b96327c755a69", "level": "error", "message": {"text": "Dangling fetch: GET /dashboard/settings (test/dashboard-routes.test.ts:1451)"}, "properties": {"repobilityId": "b27215cd869f4a39", "scanner": "scanner-primary", "fingerprint": "478b96327c755a69", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-e4f6b724c206a222", "level": "error", "message": {"text": "Dangling fetch: GET /dashboard/settings (test/dashboard-routes.test.ts:1475)"}, "properties": {"repobilityId": "ef032b3b66f286aa", "scanner": "scanner-primary", "fingerprint": "e4f6b724c206a222", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-62a77f04d887209a", "level": "error", "message": {"text": "Dangling fetch: GET /dashboard/settings (test/dashboard-routes.test.ts:1506)"}, "properties": {"repobilityId": "0260e254837456ce", "scanner": "scanner-primary", "fingerprint": "62a77f04d887209a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-275fdea96910e6dd", "level": "error", "message": {"text": "Dangling fetch: GET /dashboard/settings (test/dashboard-routes.test.ts:1517)"}, "properties": {"repobilityId": "20539e9815b8f6cc", "scanner": "scanner-primary", "fingerprint": "275fdea96910e6dd", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-c51bef4883608da7", "level": "error", "message": {"text": "Dangling fetch: GET /dashboard/settings/api-keys (test/dashboard-routes.test.ts:1529)"}, "properties": {"repobilityId": "7131870c6d2e9248", "scanner": "scanner-primary", "fingerprint": "c51bef4883608da7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-cb1342d24d0c3532", "level": "error", "message": {"text": "Dangling fetch: GET /dashboard/settings/api-keys (test/dashboard-routes.test.ts:1562)"}, "properties": {"repobilityId": "929ca730683388d1", "scanner": "scanner-primary", "fingerprint": "cb1342d24d0c3532", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-8fd7cdf5e0c85245", "level": "error", "message": {"text": "Dangling fetch: GET /dashboard/settings/api-keys?created=1&raw=${encodeURIComponent(raw)} (test/dashboard-routes.test.ts:1591)"}, "properties": {"repobilityId": "338127dc0eb68e04", "scanner": "scanner-primary", "fingerprint": "8fd7cdf5e0c85245", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-3f07a58255928e72", "level": "error", "message": {"text": "Dangling fetch: GET /dashboard/settings/api-keys (test/dashboard-routes.test.ts:1619)"}, "properties": {"repobilityId": "527bb4bb2b75dbcf", "scanner": "scanner-primary", "fingerprint": "3f07a58255928e72", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-977165387aed1fc7", "level": "error", "message": {"text": "Dangling fetch: POST /dashboard/settings/api-keys/generate (test/dashboard-routes.test.ts:1637)"}, "properties": {"repobilityId": "ddafa0319d32b061", "scanner": "scanner-primary", "fingerprint": "977165387aed1fc7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-6e2d00531f6a108d", "level": "error", "message": {"text": "Dangling fetch: POST /dashboard/settings/api-keys/generate (test/dashboard-routes.test.ts:1650)"}, "properties": {"repobilityId": "4fc67830c69a5d96", "scanner": "scanner-primary", "fingerprint": "6e2d00531f6a108d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-1e9d2f6871366ebc", "level": "error", "message": {"text": "Dangling fetch: POST /dashboard/settings/api-keys/generate (test/dashboard-routes.test.ts:1680)"}, "properties": {"repobilityId": "a9bf509fbfb56626", "scanner": "scanner-primary", "fingerprint": "1e9d2f6871366ebc", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-3f86b1da338d305a", "level": "error", "message": {"text": "Dangling fetch: POST /dashboard/settings/api-keys/revoke (test/dashboard-routes.test.ts:1702)"}, "properties": {"repobilityId": "d0ac5541e2b6048b", "scanner": "scanner-primary", "fingerprint": "3f86b1da338d305a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-f626a3c8142150d1", "level": "error", "message": {"text": "Dangling fetch: POST /dashboard/domain/example.com/scan (test/dashboard-routes.test.ts:1726)"}, "properties": {"repobilityId": "fb3b07f26878960f", "scanner": "scanner-primary", "fingerprint": "f626a3c8142150d1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-4934132e194e1793", "level": "error", "message": {"text": "Dangling fetch: POST /dashboard/domain/notmine.com/scan (test/dashboard-routes.test.ts:1737)"}, "properties": {"repobilityId": "dda4053fe1ab9da9", "scanner": "scanner-primary", "fingerprint": "4934132e194e1793", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-c62d16673d5ec438", "level": "error", "message": {"text": "Dangling fetch: POST /dashboard/domain/example.com/scan (test/dashboard-routes.test.ts:1764)"}, "properties": {"repobilityId": "19393bc7a3814545", "scanner": "scanner-primary", "fingerprint": "c62d16673d5ec438", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-1eec42a8ffbadd46", "level": "error", "message": {"text": "Dangling fetch: POST /dashboard/settings/email-alerts (test/dashboard-routes.test.ts:1791)"}, "properties": {"repobilityId": "908a6a3d9f7ba514", "scanner": "scanner-primary", "fingerprint": "1eec42a8ffbadd46", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-ad3fa41ce400e4f7", "level": "error", "message": {"text": "Dangling fetch: POST /dashboard/settings/email-alerts (test/dashboard-routes.test.ts:1804)"}, "properties": {"repobilityId": "ff5c69617eb8b343", "scanner": "scanner-primary", "fingerprint": "ad3fa41ce400e4f7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-0047ab002f38dda5", "level": "error", "message": {"text": "Dangling fetch: POST /dashboard/settings/email-alerts (test/dashboard-routes.test.ts:1827)"}, "properties": {"repobilityId": "6f450b42f21f0af0", "scanner": "scanner-primary", "fingerprint": "0047ab002f38dda5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-56f2d458688e4b01", "level": "error", "message": {"text": "Dangling fetch: POST /dashboard/settings/webhook (test/dashboard-routes.test.ts:1848)"}, "properties": {"repobilityId": "eb4ca08d1b0afaa6", "scanner": "scanner-primary", "fingerprint": "56f2d458688e4b01", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-622a9c800705e7d9", "level": "error", "message": {"text": "Dangling fetch: POST /dashboard/settings/webhook (test/dashboard-routes.test.ts:1864)"}, "properties": {"repobilityId": "48d33177e79bab0b", "scanner": "scanner-primary", "fingerprint": "622a9c800705e7d9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-b50a8121722fc14d", "level": "error", "message": {"text": "Dangling fetch: POST /dashboard/settings/webhook (test/dashboard-routes.test.ts:1890)"}, "properties": {"repobilityId": "d9cd6572dcb63cb9", "scanner": "scanner-primary", "fingerprint": "b50a8121722fc14d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-1bdd01c0c4246b72", "level": "error", "message": {"text": "Dangling fetch: POST /dashboard/settings/webhook (test/dashboard-routes.test.ts:1916)"}, "properties": {"repobilityId": "9ef78bfa856401bb", "scanner": "scanner-primary", "fingerprint": "1bdd01c0c4246b72", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-0aa50bc1a665811b", "level": "error", "message": {"text": "Dangling fetch: GET /dashboard/domain/add (test/dashboard-routes.test.ts:1934)"}, "properties": {"repobilityId": "8b7e5ea685e628d4", "scanner": "scanner-primary", "fingerprint": "0aa50bc1a665811b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-28e6dab1ff4edea7", "level": "error", "message": {"text": "Dangling fetch: GET /dashboard/domain/add (test/dashboard-routes.test.ts:1943)"}, "properties": {"repobilityId": "8c29195232e0fca5", "scanner": "scanner-primary", "fingerprint": "28e6dab1ff4edea7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-39ce4dd841e8c060", "level": "error", "message": {"text": "Dangling fetch: POST /dashboard/domain/add (test/dashboard-routes.test.ts:1957)"}, "properties": {"repobilityId": "3337a06ffef63413", "scanner": "scanner-primary", "fingerprint": "39ce4dd841e8c060", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-e13f741398db8b86", "level": "error", "message": {"text": "Dangling fetch: POST /dashboard/domain/add (test/dashboard-routes.test.ts:1969)"}, "properties": {"repobilityId": "e2c45b43f9f1456d", "scanner": "scanner-primary", "fingerprint": "e13f741398db8b86", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-9030fa2786ce3a0d", "level": "error", "message": {"text": "Dangling fetch: POST /dashboard/domain/add (test/dashboard-routes.test.ts:1988)"}, "properties": {"repobilityId": "3cd36c8e55f71915", "scanner": "scanner-primary", "fingerprint": "9030fa2786ce3a0d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-fa7de18071ac9ea2", "level": "error", "message": {"text": "Dangling fetch: POST /dashboard/domain/add (test/dashboard-routes.test.ts:2030)"}, "properties": {"repobilityId": "692fd363692aaa86", "scanner": "scanner-primary", "fingerprint": "fa7de18071ac9ea2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-539522c8b29cda9f", "level": "error", "message": {"text": "Dangling fetch: POST /dashboard/domain/add (test/dashboard-routes.test.ts:2054)"}, "properties": {"repobilityId": "846c02a5a3b0e6e4", "scanner": "scanner-primary", "fingerprint": "539522c8b29cda9f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-484300112dd057b4", "level": "error", "message": {"text": "Dangling fetch: POST /dashboard/domain/add (test/dashboard-routes.test.ts:2086)"}, "properties": {"repobilityId": "63bcb5df131eeb5e", "scanner": "scanner-primary", "fingerprint": "484300112dd057b4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-dcb587d4f9adbb5a", "level": "error", "message": {"text": "Dangling fetch: POST /dashboard/domain/add (test/dashboard-routes.test.ts:2125)"}, "properties": {"repobilityId": "3492c0856e0ba46c", "scanner": "scanner-primary", "fingerprint": "dcb587d4f9adbb5a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-1ebd58d172fc2c22", "level": "error", "message": {"text": "Dangling fetch: POST /dashboard/domain/add (test/dashboard-routes.test.ts:2162)"}, "properties": {"repobilityId": "f21dc74fb096ae61", "scanner": "scanner-primary", "fingerprint": "1ebd58d172fc2c22", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-859d64a6e4275b86", "level": "error", "message": {"text": "Dangling fetch: GET /dashboard/domain/add (test/dashboard-routes.test.ts:2197)"}, "properties": {"repobilityId": "8346d23cd246a93c", "scanner": "scanner-primary", "fingerprint": "859d64a6e4275b86", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-af900b2820e4b030", "level": "error", "message": {"text": "Dangling fetch: POST /dashboard/domain/add (test/dashboard-routes.test.ts:2229)"}, "properties": {"repobilityId": "761061e363f334ae", "scanner": "scanner-primary", "fingerprint": "af900b2820e4b030", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-530d38488dca2ff0", "level": "error", "message": {"text": "Dangling fetch: GET /dashboard/domain/add (test/dashboard-routes.test.ts:2265)"}, "properties": {"repobilityId": "d946393f9f8a4361", "scanner": "scanner-primary", "fingerprint": "530d38488dca2ff0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-3bf8bc2643a0f99b", "level": "error", "message": {"text": "Dangling fetch: POST /dashboard/domain/example.com/delete (test/dashboard-routes.test.ts:2278)"}, "properties": {"repobilityId": "e2f98022b3e00572", "scanner": "scanner-primary", "fingerprint": "3bf8bc2643a0f99b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-7e378e5cf6a871d3", "level": "error", "message": {"text": "Dangling fetch: POST /dashboard/domain/example.com/delete (test/dashboard-routes.test.ts:2290)"}, "properties": {"repobilityId": "b49e66d91ad07db9", "scanner": "scanner-primary", "fingerprint": "7e378e5cf6a871d3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-ad902191ceeb8ae5", "level": "error", "message": {"text": "Dangling fetch: GET /dashboard (test/dashboard-routes.test.ts:2332)"}, "properties": {"repobilityId": "99d7cb82bcf6b714", "scanner": "scanner-primary", "fingerprint": "ad902191ceeb8ae5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-7860221222f88d45", "level": "error", "message": {"text": "Dangling fetch: GET /dashboard (test/dashboard-routes.test.ts:2351)"}, "properties": {"repobilityId": "e24bdbb57da96a65", "scanner": "scanner-primary", "fingerprint": "7860221222f88d45", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-e27d23ddfbf47fa2", "level": "error", "message": {"text": "Dangling fetch: GET /dashboard (test/dashboard-routes.test.ts:2390)"}, "properties": {"repobilityId": "a6fe84e314970c51", "scanner": "scanner-primary", "fingerprint": "e27d23ddfbf47fa2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-a2747a47c304232b", "level": "error", "message": {"text": "Dangling fetch: POST /dashboard/alerts/1/acknowledge (test/dashboard-routes.test.ts:2403)"}, "properties": {"repobilityId": "088482d74ff41f88", "scanner": "scanner-primary", "fingerprint": "a2747a47c304232b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-d2ed6a3406dac9e2", "level": "error", "message": {"text": "Dangling fetch: POST /dashboard/alerts/abc/acknowledge (test/dashboard-routes.test.ts:2414)"}, "properties": {"repobilityId": "bee9f49f92127200", "scanner": "scanner-primary", "fingerprint": "d2ed6a3406dac9e2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-ba898701695b0b8b", "level": "error", "message": {"text": "Dangling fetch: POST /dashboard/alerts/42/acknowledge (test/dashboard-routes.test.ts:2452)"}, "properties": {"repobilityId": "366f22f3599a564b", "scanner": "scanner-primary", "fingerprint": "ba898701695b0b8b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-70a26f6bbcb5137c", "level": "error", "message": {"text": "Dangling fetch: POST /dashboard/alerts/99/acknowledge (test/dashboard-routes.test.ts:2495)"}, "properties": {"repobilityId": "d477705423c820fd", "scanner": "scanner-primary", "fingerprint": "70a26f6bbcb5137c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-a378b9c44639f5a8", "level": "error", "message": {"text": "Dangling fetch: POST /dashboard/alerts/99999/acknowledge (test/dashboard-routes.test.ts:2506)"}, "properties": {"repobilityId": "41ec8a01293d65a8", "scanner": "scanner-primary", "fingerprint": "a378b9c44639f5a8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-31a70e020ce3543e", "level": "error", "message": {"text": "Dangling fetch: GET /dashboard/bulk (test/dashboard-routes.test.ts:2518)"}, "properties": {"repobilityId": "160c3c115d952565", "scanner": "scanner-primary", "fingerprint": "31a70e020ce3543e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-86c8f82ed44db87a", "level": "error", "message": {"text": "Dangling fetch: GET /dashboard/bulk (test/dashboard-routes.test.ts:2527)"}, "properties": {"repobilityId": "27d04620cecf473d", "scanner": "scanner-primary", "fingerprint": "86c8f82ed44db87a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-fecec4034c2d0dfd", "level": "error", "message": {"text": "Dangling fetch: GET /dashboard/bulk (test/dashboard-routes.test.ts:2545)"}, "properties": {"repobilityId": "4881be73ea3cfd52", "scanner": "scanner-primary", "fingerprint": "fecec4034c2d0dfd", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-65b813c767cde4aa", "level": "error", "message": {"text": "Dangling fetch: POST /dashboard/bulk (test/dashboard-routes.test.ts:2560)"}, "properties": {"repobilityId": "f1d117706342b39d", "scanner": "scanner-primary", "fingerprint": "65b813c767cde4aa", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-2807b5c80bd14d74", "level": "error", "message": {"text": "Dangling fetch: POST /dashboard/bulk (test/dashboard-routes.test.ts:2569)"}, "properties": {"repobilityId": "6011047ca10aca62", "scanner": "scanner-primary", "fingerprint": "2807b5c80bd14d74", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-7a0ba93f3e176832", "level": "error", "message": {"text": "Dangling fetch: POST /dashboard/bulk (test/dashboard-routes.test.ts:2595)"}, "properties": {"repobilityId": "c2fdeb2a6312e03e", "scanner": "scanner-primary", "fingerprint": "7a0ba93f3e176832", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-3901b84bd1ede60c", "level": "error", "message": {"text": "Dangling fetch: POST /dashboard/bulk (test/dashboard-routes.test.ts:2622)"}, "properties": {"repobilityId": "ba02c2965e331ce3", "scanner": "scanner-primary", "fingerprint": "3901b84bd1ede60c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-f83145a89d2cfced", "level": "error", "message": {"text": "Dangling fetch: GET /dashboard/export (test/dashboard-routes.test.ts:2640)"}, "properties": {"repobilityId": "22425e7649217443", "scanner": "scanner-primary", "fingerprint": "f83145a89d2cfced", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-37e4e7f4380de2d3", "level": "error", "message": {"text": "Dangling fetch: GET /dashboard/export (test/dashboard-routes.test.ts:2662)"}, "properties": {"repobilityId": "ca2bc03cf2e27170", "scanner": "scanner-primary", "fingerprint": "37e4e7f4380de2d3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-ead15a369b23d4ba", "level": "error", "message": {"text": "Dangling fetch: GET /dashboard/export (test/dashboard-routes.test.ts:2707)"}, "properties": {"repobilityId": "b77a4b1f4ffc0848", "scanner": "scanner-primary", "fingerprint": "ead15a369b23d4ba", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-306f1ce933cfeea8", "level": "error", "message": {"text": "Dangling fetch: GET /dashboard/export (test/dashboard-routes.test.ts:2739)"}, "properties": {"repobilityId": "998e2ebb7482f461", "scanner": "scanner-primary", "fingerprint": "306f1ce933cfeea8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-22df9dd4d34926a3", "level": "error", "message": {"text": "Dangling fetch: GET /dashboard/export?format=json (test/dashboard-routes.test.ts:2799)"}, "properties": {"repobilityId": "164b949ef4def93b", "scanner": "scanner-primary", "fingerprint": "22df9dd4d34926a3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-ab1a4fcc0a28aee2", "level": "error", "message": {"text": "Dangling fetch: GET /dashboard (test/dashboard-routes.test.ts:2854)"}, "properties": {"repobilityId": "4f2e9258fa4486a5", "scanner": "scanner-primary", "fingerprint": "ab1a4fcc0a28aee2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-f84053df33fae920", "level": "error", "message": {"text": "Dangling fetch: POST /webhooks/stripe (test/billing-routes.test.ts:160)"}, "properties": {"repobilityId": "a197c21496f3b5d0", "scanner": "scanner-primary", "fingerprint": "f84053df33fae920", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-6043cc1e68269839", "level": "error", "message": {"text": "Dangling fetch: POST /webhooks/stripe (test/billing-routes.test.ts:172)"}, "properties": {"repobilityId": "40172e507912d084", "scanner": "scanner-primary", "fingerprint": "6043cc1e68269839", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-1c7d632ee3bbe28a", "level": "error", "message": {"text": "Dangling fetch: POST /webhooks/stripe (test/billing-routes.test.ts:211)"}, "properties": {"repobilityId": "0dbe0ad0e9f3c2aa", "scanner": "scanner-primary", "fingerprint": "1c7d632ee3bbe28a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-6dcd7dffc0ab6dc7", "level": "error", "message": {"text": "Dangling fetch: POST /webhooks/stripe (test/billing-routes.test.ts:263)"}, "properties": {"repobilityId": "d0fe7acb956f5f25", "scanner": "scanner-primary", "fingerprint": "6dcd7dffc0ab6dc7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-c8016244d9f2c53f", "level": "error", "message": {"text": "Dangling fetch: POST /webhooks/stripe (test/billing-routes.test.ts:300)"}, "properties": {"repobilityId": "c397746d0d45f0d5", "scanner": "scanner-primary", "fingerprint": "c8016244d9f2c53f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-f399cf741ce46c34", "level": "error", "message": {"text": "Dangling fetch: POST /webhooks/stripe (test/billing-routes.test.ts:314)"}, "properties": {"repobilityId": "50c0d7d728a6b72f", "scanner": "scanner-primary", "fingerprint": "f399cf741ce46c34", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-e2cb35b87513c330", "level": "error", "message": {"text": "Dangling fetch: POST /webhooks/stripe (test/billing-routes.test.ts:344)"}, "properties": {"repobilityId": "2731c39e861cf52c", "scanner": "scanner-primary", "fingerprint": "e2cb35b87513c330", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-d9eb82af88e8ce1b", "level": "error", "message": {"text": "Dangling fetch: POST /webhooks/stripe (test/billing-routes.test.ts:368)"}, "properties": {"repobilityId": "2fefdfc38ce9dc5c", "scanner": "scanner-primary", "fingerprint": "d9eb82af88e8ce1b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-194ff08fc4a3b5b0", "level": "error", "message": {"text": "Dangling fetch: GET /dashboard/billing/subscribe (test/billing-routes.test.ts:425)"}, "properties": {"repobilityId": "294824121f6a3b87", "scanner": "scanner-primary", "fingerprint": "194ff08fc4a3b5b0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-7d74f9684fa14da6", "level": "error", "message": {"text": "Dangling fetch: GET /dashboard/billing/subscribe (test/billing-routes.test.ts:448)"}, "properties": {"repobilityId": "1d88d4296db9f601", "scanner": "scanner-primary", "fingerprint": "7d74f9684fa14da6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-1de7c906c2cc261b", "level": "error", "message": {"text": "Dangling fetch: GET /dashboard/billing/subscribe (test/billing-routes.test.ts:478)"}, "properties": {"repobilityId": "26019ce6f1507298", "scanner": "scanner-primary", "fingerprint": "1de7c906c2cc261b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-5e16d5c2caaf1caf", "level": "error", "message": {"text": "Dangling fetch: GET /dashboard/billing/portal (test/billing-routes.test.ts:530)"}, "properties": {"repobilityId": "79626b4e49d5ebbf", "scanner": "scanner-primary", "fingerprint": "5e16d5c2caaf1caf", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-c91bbf85b8950d7c", "level": "error", "message": {"text": "Dangling fetch: GET /dashboard/billing/portal (test/billing-routes.test.ts:556)"}, "properties": {"repobilityId": "423891ec3702e5b6", "scanner": "scanner-primary", "fingerprint": "c91bbf85b8950d7c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-8cc44114e7d8419d", "level": "error", "message": {"text": "Dangling fetch: GET /legal/terms (test/pricing-legal.test.ts:168)"}, "properties": {"repobilityId": "3b1ba9504b94539f", "scanner": "scanner-primary", "fingerprint": "8cc44114e7d8419d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-32fa48d21184d9f8", "level": "error", "message": {"text": "Dangling fetch: GET /legal (test/pricing-legal.test.ts:173)"}, "properties": {"repobilityId": "d755018da8495736", "scanner": "scanner-primary", "fingerprint": "32fa48d21184d9f8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-df0dc75ee3e384f3", "level": "error", "message": {"text": "Dangling fetch: POST /webhooks/stripe (test/integration/stripe-lifecycle.test.ts:272)"}, "properties": {"repobilityId": "7783fda12c0f8211", "scanner": "scanner-primary", "fingerprint": "df0dc75ee3e384f3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-a1365f8797449121", "level": "error", "message": {"text": "Dangling fetch: GET /dashboard/billing/subscribe (test/integration/stripe-lifecycle.test.ts:343)"}, "properties": {"repobilityId": "c942fbec66ec4094", "scanner": "scanner-primary", "fingerprint": "a1365f8797449121", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-6cd0c7f46f61922e", "level": "error", "message": {"text": "Dangling fetch: GET /dashboard/billing/portal (test/integration/stripe-lifecycle.test.ts:496)"}, "properties": {"repobilityId": "154096b75d2ca0c0", "scanner": "scanner-primary", "fingerprint": "6cd0c7f46f61922e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-e5ed7166f1d94fe6", "level": "error", "message": {"text": "Dangling fetch: POST /webhooks/stripe (test/integration/stripe-lifecycle.test.ts:597)"}, "properties": {"repobilityId": "939493d36b7b3415", "scanner": "scanner-primary", "fingerprint": "e5ed7166f1d94fe6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-182d381bde1c88e7", "level": "error", "message": {"text": "Dangling fetch: GET /dashboard/billing/subscribe (test/integration/stripe-lifecycle.test.ts:614)"}, "properties": {"repobilityId": "83a280e48361e4c5", "scanner": "scanner-primary", "fingerprint": "182d381bde1c88e7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-9f9b9c59e89ccc00", "level": "error", "message": {"text": "Dangling fetch: POST /webhooks/stripe (test/integration/stripe-lifecycle.test.ts:627)"}, "properties": {"repobilityId": "ed652e093f021135", "scanner": "scanner-primary", "fingerprint": "9f9b9c59e89ccc00", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-d679ac115c9582a0", "level": "error", "message": {"text": "Dangling fetch: POST https://api.workos.com/user_management/authenticate (src/auth/routes.ts:58)"}, "properties": {"repobilityId": "7a5f022d9943b476", "scanner": "scanner-primary", "fingerprint": "d679ac115c9582a0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b7f6cf2bd24a10d1", "level": "error", "message": {"text": "Dangling fetch: POST https://api.stripe.com/v1${path} (src/billing/stripe.ts:107)"}, "properties": {"repobilityId": "d899cefb75880bca", "scanner": "scanner-primary", "fingerprint": "b7f6cf2bd24a10d1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b8073f7bf758f6d0", "level": "note", "message": {"text": "Unused endpoint: USE /api/*"}, "properties": {"repobilityId": "ac68565139bec8cd", "scanner": "scanner-primary", "fingerprint": "b8073f7bf758f6d0", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-4a03c6195c96785c", "level": "note", "message": {"text": "Unused endpoint: USE /dashboard/*"}, "properties": {"repobilityId": "4e1752a29f69e733", "scanner": "scanner-primary", "fingerprint": "4a03c6195c96785c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ce762777591d1568", "level": "note", "message": {"text": "Unused endpoint: GET /_dev/dashboard"}, "properties": {"repobilityId": "bf0c9c7729b2341e", "scanner": "scanner-primary", "fingerprint": "ce762777591d1568", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-183ab251d8990bb8", "level": "note", "message": {"text": "Unused endpoint: USE /check"}, "properties": {"repobilityId": "9bf484756d871991", "scanner": "scanner-primary", "fingerprint": "183ab251d8990bb8", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5cf54d1d1f160506", "level": "note", "message": {"text": "Unused endpoint: USE /check/score"}, "properties": {"repobilityId": "9da5ee00c98bb5db", "scanner": "scanner-primary", "fingerprint": "5cf54d1d1f160506", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b202e576064805c6", "level": "note", "message": {"text": "Unused endpoint: USE /api/check"}, "properties": {"repobilityId": "34631a2d12d045e8", "scanner": "scanner-primary", "fingerprint": "b202e576064805c6", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b8721c8752947a0b", "level": "note", "message": {"text": "Unused endpoint: USE /api/bulk-scan"}, "properties": {"repobilityId": "65f87b2c55e55ded", "scanner": "scanner-primary", "fingerprint": "b8721c8752947a0b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7f7784ff44f08014", "level": "note", "message": {"text": "Unused endpoint: USE /api/domain/*"}, "properties": {"repobilityId": "3fa4ecbe6b97041c", "scanner": "scanner-primary", "fingerprint": "7f7784ff44f08014", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b7beca0a94cf9a1c", "level": "note", "message": {"text": "Unused endpoint: USE /api/check/stream"}, "properties": {"repobilityId": "22650c1d7280bfd1", "scanner": "scanner-primary", "fingerprint": "b7beca0a94cf9a1c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b96574e67d1cedc6", "level": "note", "message": {"text": "Unused endpoint: USE /badge"}, "properties": {"repobilityId": "b62abe89c6607ea4", "scanner": "scanner-primary", "fingerprint": "b96574e67d1cedc6", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-95e266019920938e", "level": "note", "message": {"text": "Unused endpoint: USE /mcp"}, "properties": {"repobilityId": "7c263c4d38725d41", "scanner": "scanner-primary", "fingerprint": "95e266019920938e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e5acd21d9ecb0480", "level": "note", "message": {"text": "Unused endpoint: GET /og-image.svg"}, "properties": {"repobilityId": "acb07adb6d9c7ceb", "scanner": "scanner-primary", "fingerprint": "e5acd21d9ecb0480", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-239a938869adf673", "level": "note", "message": {"text": "Unused endpoint: POST /mcp"}, "properties": {"repobilityId": "5dadfda9300b1ebc", "scanner": "scanner-primary", "fingerprint": "239a938869adf673", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6078dce92f323e45", "level": "note", "message": {"text": "Unused endpoint: GET /mx"}, "properties": {"repobilityId": "2a588c0517077c29", "scanner": "scanner-primary", "fingerprint": "6078dce92f323e45", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6823b5b9bddffad0", "level": "note", "message": {"text": "Unused endpoint: GET /mx/:slug"}, "properties": {"repobilityId": "66975896aa3b5d66", "scanner": "scanner-primary", "fingerprint": "6823b5b9bddffad0", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-65f7266c15d218ee", "level": "note", "message": {"text": "Unused endpoint: GET /api/domain/:name/history"}, "properties": {"repobilityId": "26c1d3d9ad97f598", "scanner": "scanner-primary", "fingerprint": "65f7266c15d218ee", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2694b5886d7e993a", "level": "note", "message": {"text": "Unused endpoint: GET /check/score"}, "properties": {"repobilityId": "b636c7799607c895", "scanner": "scanner-primary", "fingerprint": "2694b5886d7e993a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e5f899fff8e655a2", "level": "note", "message": {"text": "Unused endpoint: GET /check"}, "properties": {"repobilityId": "b966b12f4e5e4a3c", "scanner": "scanner-primary", "fingerprint": "e5f899fff8e655a2", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6a4dfcad3eb1618a", "level": "note", "message": {"text": "Unused endpoint: GET /login"}, "properties": {"repobilityId": "d2e7dac7b4d203a5", "scanner": "scanner-primary", "fingerprint": "6a4dfcad3eb1618a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-cdfb578618cf2542", "level": "note", "message": {"text": "Unused endpoint: GET /callback"}, "properties": {"repobilityId": "0c3773e11ef2ff9e", "scanner": "scanner-primary", "fingerprint": "cdfb578618cf2542", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5ca735a2e6e3646c", "level": "note", "message": {"text": "Unused endpoint: GET /logout"}, "properties": {"repobilityId": "c0a5fd68953e1201", "scanner": "scanner-primary", "fingerprint": "5ca735a2e6e3646c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6ad2194d377bd37e", "level": "note", "message": {"text": "Unused endpoint: GET /domains"}, "properties": {"repobilityId": "6708eedbb85c770a", "scanner": "scanner-primary", "fingerprint": "6ad2194d377bd37e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e686634beeea0bb8", "level": "note", "message": {"text": "Unused endpoint: GET /export"}, "properties": {"repobilityId": "51e28599a0621c44", "scanner": "scanner-primary", "fingerprint": "e686634beeea0bb8", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7bb1660f899ccb4d", "level": "note", "message": {"text": "Unused endpoint: POST /alerts/acknowledge-all"}, "properties": {"repobilityId": "66148100d7c16060", "scanner": "scanner-primary", "fingerprint": "7bb1660f899ccb4d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-38e693d6e44b20d1", "level": "note", "message": {"text": "Unused endpoint: POST /alerts/:id/acknowledge"}, "properties": {"repobilityId": "a5dc1d4c9a969ed7", "scanner": "scanner-primary", "fingerprint": "38e693d6e44b20d1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ed69bbd3d7bf53a0", "level": "note", "message": {"text": "Unused endpoint: GET /domain/add"}, "properties": {"repobilityId": "5bba9f884ffda067", "scanner": "scanner-primary", "fingerprint": "ed69bbd3d7bf53a0", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-dd38bc578e8c6287", "level": "note", "message": {"text": "Unused endpoint: POST /domain/add"}, "properties": {"repobilityId": "141f3d7a73825be4", "scanner": "scanner-primary", "fingerprint": "dd38bc578e8c6287", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-14411a9796cd4a91", "level": "note", "message": {"text": "Unused endpoint: GET /bulk"}, "properties": {"repobilityId": "6f08928713faeced", "scanner": "scanner-primary", "fingerprint": "14411a9796cd4a91", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-90631dcf4fb49f54", "level": "note", "message": {"text": "Unused endpoint: POST /bulk"}, "properties": {"repobilityId": "68188edafc266ab9", "scanner": "scanner-primary", "fingerprint": "90631dcf4fb49f54", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f74678000d967310", "level": "note", "message": {"text": "Unused endpoint: GET /domain/:domain{.+\\\\.json}"}, "properties": {"repobilityId": "5e55a6d173847271", "scanner": "scanner-primary", "fingerprint": "f74678000d967310", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c4eee4e63dc0a37b", "level": "note", "message": {"text": "Unused endpoint: GET /domain/:domain"}, "properties": {"repobilityId": "06b19d6aab63a12d", "scanner": "scanner-primary", "fingerprint": "c4eee4e63dc0a37b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8add6ba73c1b4274", "level": "note", "message": {"text": "Unused endpoint: GET /domain/:domain/history"}, "properties": {"repobilityId": "70a42748ed33adfa", "scanner": "scanner-primary", "fingerprint": "8add6ba73c1b4274", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d8965d19b2941348", "level": "note", "message": {"text": "Unused endpoint: POST /domain/:domain/scan"}, "properties": {"repobilityId": "bce93aa5d40a06cb", "scanner": "scanner-primary", "fingerprint": "d8965d19b2941348", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f80b2476671c6b82", "level": "note", "message": {"text": "Unused endpoint: POST /domain/:domain/delete"}, "properties": {"repobilityId": "5b919b6a14ca70ef", "scanner": "scanner-primary", "fingerprint": "f80b2476671c6b82", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-512ccb0fd0b230ba", "level": "note", "message": {"text": "Unused endpoint: GET /settings"}, "properties": {"repobilityId": "5eea064117f64a0b", "scanner": "scanner-primary", "fingerprint": "512ccb0fd0b230ba", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-9d82b5a723855229", "level": "note", "message": {"text": "Unused endpoint: POST /settings/email-alerts"}, "properties": {"repobilityId": "05dc36214c0dbf4d", "scanner": "scanner-primary", "fingerprint": "9d82b5a723855229", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1bdca7e9aecc1310", "level": "note", "message": {"text": "Unused endpoint: POST /settings/notify-on-change"}, "properties": {"repobilityId": "b550d7f3052ed42c", "scanner": "scanner-primary", "fingerprint": "1bdca7e9aecc1310", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-9730cc6279f4b0c6", "level": "note", "message": {"text": "Unused endpoint: GET /settings/api-keys"}, "properties": {"repobilityId": "d98752c0d9b6177c", "scanner": "scanner-primary", "fingerprint": "9730cc6279f4b0c6", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-26c7b8a44ba9e179", "level": "note", "message": {"text": "Unused endpoint: POST /settings/api-keys/generate"}, "properties": {"repobilityId": "daf86007b855d14e", "scanner": "scanner-primary", "fingerprint": "26c7b8a44ba9e179", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-48900acd6cb99620", "level": "note", "message": {"text": "Unused endpoint: POST /settings/api-keys/revoke"}, "properties": {"repobilityId": "5daef857a9722c54", "scanner": "scanner-primary", "fingerprint": "48900acd6cb99620", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-fdf252fcb98c1563", "level": "note", "message": {"text": "Unused endpoint: POST /settings/webhook/test"}, "properties": {"repobilityId": "672f7bbad84b2d6a", "scanner": "scanner-primary", "fingerprint": "fdf252fcb98c1563", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e1fdf4b060cc9158", "level": "note", "message": {"text": "Unused endpoint: POST /settings/webhook"}, "properties": {"repobilityId": "25c1a739ecc3eadd", "scanner": "scanner-primary", "fingerprint": "e1fdf4b060cc9158", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-beac5d731a094f4b", "level": "note", "message": {"text": "Unused endpoint: GET /subscribe"}, "properties": {"repobilityId": "096c3138c1521047", "scanner": "scanner-primary", "fingerprint": "beac5d731a094f4b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-cbe94c8508f4d2c1", "level": "note", "message": {"text": "Unused endpoint: GET /portal"}, "properties": {"repobilityId": "555703e18c7a84ad", "scanner": "scanner-primary", "fingerprint": "cbe94c8508f4d2c1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2083a87719497893", "level": "note", "message": {"text": "Unused endpoint: POST /stripe"}, "properties": {"repobilityId": "c1a545c88ca4f91e", "scanner": "scanner-primary", "fingerprint": "2083a87719497893", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}