{"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-0dc8a5512c72fd37", "name": "Stray `console.log` in TS/JS \u2014 packages/cli/src/bin.ts:4", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/cli/src/bin.ts:4"}, "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-917d8da81ef3552f", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/console/app/routes/account-mfa.tsx:191", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/console/app/routes/account-mfa.tsx:191"}, "fullDescription": {"text": "Open XSS surface unless the input is provably trusted. Replace with explicit JSX or sanitize via a vetted library.\n\nWhy: OWASP basics. Already partially flagged by the security analyzer.\nRule id: fq.dangerous-html"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0a69ee2a972fb190", "name": "Stray `console.log` in TS/JS \u2014 edge/control-plane/src/index.ts:69", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 edge/control-plane/src/index.ts:69"}, "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-7dedef713bca3dea", "name": "Insecure pattern 'weak_hash' in packages/auth/src/totp.ts:12", "shortDescription": {"text": "Insecure pattern 'weak_hash' in packages/auth/src/totp.ts:12"}, "fullDescription": {"text": "Found a known-risky pattern (weak_hash). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b89bce973b29562d", "name": "Insecure pattern 'node_child_process' in packages/cli/src/index.ts:1", "shortDescription": {"text": "Insecure pattern 'node_child_process' in packages/cli/src/index.ts:1"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4dff6b01216ad607", "name": "Possible secret in packages/ai/test/redact.test.ts", "shortDescription": {"text": "Possible secret in packages/ai/test/redact.test.ts"}, "fullDescription": {"text": "Detected pattern matching github_token. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-5831fd556cf2a3bc", "name": "Insecure pattern 'dangerous_innerhtml' in apps/console/app/routes/account-mfa.tsx:191", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in apps/console/app/routes/account-mfa.tsx:191"}, "fullDescription": {"text": "Found a known-risky pattern (dangerous_innerhtml). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0e189771c287db0d", "name": "Possible secret in apps/delivery/test/delivery.test.ts", "shortDescription": {"text": "Possible secret in apps/delivery/test/delivery.test.ts"}, "fullDescription": {"text": "Detected pattern matching generic_api_key. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-cb639d9a10a47b23", "name": "package.json defines install-time lifecycle scripts", "shortDescription": {"text": "package.json defines install-time lifecycle scripts"}, "fullDescription": {"text": "preinstall/install/postinstall/prepare scripts execute during dependency installation. Review them carefully for network calls, obfuscation, shell execution, or credential access."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7b85b0a5c9a918e4", "name": "Node manifest has dependencies but no lockfile: packages/crypto/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/crypto/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7b6e5a9432832ca3", "name": "Node manifest has dependencies but no lockfile: packages/config-formats/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/config-formats/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-76fa53011d46d8bb", "name": "Node manifest has dependencies but no lockfile: packages/scim/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/scim/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-41b225e183229484", "name": "Node manifest has dependencies but no lockfile: packages/auth/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/auth/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8c2e3196a4ef0cdd", "name": "Node manifest has dependencies but no lockfile: packages/cli/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/cli/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-cb01c01804de0b47", "name": "Node manifest has dependencies but no lockfile: packages/database/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/database/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-698bfd157009b1c1", "name": "Node manifest has dependencies but no lockfile: packages/edge-protocol/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/edge-protocol/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-fe835af57b2413d4", "name": "Node manifest has dependencies but no lockfile: packages/diff/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/diff/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1f50989207eeba59", "name": "Node manifest has dependencies but no lockfile: packages/realtime/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/realtime/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-80f569ae36a3e3bf", "name": "Node manifest has dependencies but no lockfile: packages/ai/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/ai/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-749c9d5c65aad64a", "name": "Node manifest has dependencies but no lockfile: packages/refs/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/refs/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-18da59d193df10c2", "name": "Node manifest has dependencies but no lockfile: packages/sso-saml/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/sso-saml/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ae014485ab255591", "name": "Node manifest has dependencies but no lockfile: packages/sdk/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/sdk/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-50218c90b43393bb", "name": "Node manifest has dependencies but no lockfile: packages/ui/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/ui/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d68e07550f722659", "name": "Node manifest has dependencies but no lockfile: apps/notify/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: apps/notify/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b06b8d86f24c77f9", "name": "Node manifest has dependencies but no lockfile: apps/api/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: apps/api/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f6667c791bf68546", "name": "Node manifest has dependencies but no lockfile: apps/audit/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: apps/audit/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-819b1aac40086a97", "name": "Node manifest has dependencies but no lockfile: apps/console/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: apps/console/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7002f88f207d84eb", "name": "Node manifest has dependencies but no lockfile: apps/auth/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: apps/auth/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-23203e409e387b14", "name": "Node manifest has dependencies but no lockfile: apps/delivery/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: apps/delivery/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1ca3f9a1797936a2", "name": "Node manifest has dependencies but no lockfile: apps/www/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: apps/www/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b03de626e647c1a5", "name": "Node manifest has dependencies but no lockfile: edge/control-plane/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: edge/control-plane/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3ab5d313dda8e5f9", "name": "Debug logging residue appears in source files", "shortDescription": {"text": "Debug logging residue appears in source files"}, "fullDescription": {"text": "Found 6 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 40 placeholder/mock markers across 19 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-749d4bc1bd66df5f", "name": "Agent instructions exist but release-hardening basics are missing", "shortDescription": {"text": "Agent instructions exist but release-hardening basics are missing"}, "fullDescription": {"text": "AI-coder instruction files were found, but the repo is missing lockfile. Treat this as a contract gap: the agent is guided, but the generated output is not yet guarded by the controls that make it repeatable."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-7fd1bb39f7c88c0e", "name": "Commented-code block (5 lines) in packages/crypto/src/index.ts:25", "shortDescription": {"text": "Commented-code block (5 lines) in packages/crypto/src/index.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-98a494a7e61bce6c", "name": "Commented-code block (5 lines) in packages/database/src/queries.ts:329", "shortDescription": {"text": "Commented-code block (5 lines) in packages/database/src/queries.ts:329"}, "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-743aacaf73ade9dd", "name": "Commented-code block (5 lines) in apps/api/env.d.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in apps/api/env.d.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-3199d3fa594426fb", "name": "Commented-code block (5 lines) in apps/api/src/custom-hostnames.ts:151", "shortDescription": {"text": "Commented-code block (5 lines) in apps/api/src/custom-hostnames.ts:151"}, "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-f58083cade5e4364", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/api/src/durable-objects/vault.ts:1034", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/api/src/durable-objects/vault.ts:1034"}, "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-81e007c6c672e8ef", "name": "Commented-code block (6 lines) in apps/api/src/database/queries.ts:78", "shortDescription": {"text": "Commented-code block (6 lines) in apps/api/src/database/queries.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-611781a83f098aa5", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/api/src/middleware/auth.ts:22", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/api/src/middleware/auth.ts:22"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-02c8d44b42d75fc3", "name": "Commented-code block (6 lines) in apps/api/src/routes/workspaces.ts:390", "shortDescription": {"text": "Commented-code block (6 lines) in apps/api/src/routes/workspaces.ts:390"}, "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-6fdd8f519ba9e213", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/api/src/routes/workspaces.ts:886", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/api/src/routes/workspaces.ts:886"}, "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-90ebda090494664b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/api/test/workspace-ws.test.ts:10", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/api/test/workspace-ws.test.ts:10"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-563d4baa96013c9b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/api/test/health.test.ts:8", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/api/test/health.test.ts:8"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-801662e8f7d846aa", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/api/test/security.test.ts:19", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/api/test/security.test.ts:19"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-53036f36e313f607", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/api/test/machine.test.ts:26", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/api/test/machine.test.ts:26"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d7abc7eeae33fa50", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/console/workers/app.ts:28", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/console/workers/app.ts:28"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c202d9eacdb6ddc3", "name": "Commented-code block (5 lines) in apps/console/app/lib/session.server.ts:82", "shortDescription": {"text": "Commented-code block (5 lines) in apps/console/app/lib/session.server.ts:82"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6427297856aa671b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/console/app/lib/passkey.ts:15", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/console/app/lib/passkey.ts:15"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-89968ab5019f01cc", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/console/app/lib/workspace.server.ts:15", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/console/app/lib/workspace.server.ts:15"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-863049ce0c46e7ea", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/console/app/routes/sso.start.tsx:16", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/console/app/routes/sso.start.tsx:16"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-5bd0b28fa4925f08", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/console/app/routes/login.tsx:49", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/console/app/routes/login.tsx:49"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-baa9ddbcf9bc94c7", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/console/app/routes/dashboard.audit.tsx:56", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/console/app/routes/dashboard.audit.tsx:56"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-67ab5633706b571f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/console/app/routes/share.tsx:30", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/console/app/routes/share.tsx:30"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2142a95d539e3665", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/console/app/routes/verify-email.tsx:19", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/console/app/routes/verify-email.tsx:19"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-84769e6af1bcbb04", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/console/app/routes/oauth.start.tsx:17", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/console/app/routes/oauth.start.tsx:17"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c9470a45587320dc", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/console/app/routes/account-mfa.tsx:19", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/console/app/routes/account-mfa.tsx:19"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c41726f56e07638b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/console/app/routes/invite.tsx:31", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/console/app/routes/invite.tsx:31"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-419ba4a0d7d7bc9f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/console/app/routes/sso-admin.tsx:36", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/console/app/routes/sso-admin.tsx:36"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d3d5ae34d7b53e25", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/console/app/routes/saml-admin.tsx:35", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/console/app/routes/saml-admin.tsx:35"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-5ed35218d82d9666", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/console/app/routes/home.tsx:30", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/console/app/routes/home.tsx:30"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-141b8463bad42c1c", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/console/app/routes/reset-password.tsx:22", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/console/app/routes/reset-password.tsx:22"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c402871c06efee37", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/console/app/routes/saml.start.tsx:15", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/console/app/routes/saml.start.tsx:15"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-37a548e806e35baf", "name": "Commented-code block (6 lines) in apps/console/app/routes/environment.tsx:278", "shortDescription": {"text": "Commented-code block (6 lines) in apps/console/app/routes/environment.tsx:278"}, "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-180d31b3b6252497", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/console/app/routes/environment.tsx:87", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/console/app/routes/environment.tsx:87"}, "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-14ca8a846046bc03", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/console/app/routes/assistant.tsx:32", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/console/app/routes/assistant.tsx:32"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a97e2ff3d431a776", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/console/app/routes/api.reveal-token.tsx:40", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/console/app/routes/api.reveal-token.tsx:40"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e2207fb362587253", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/console/app/routes/dashboard.compare.tsx:69", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/console/app/routes/dashboard.compare.tsx:69"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e81a64b66f815c6c", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/console/app/routes/sso.callback.tsx:28", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/console/app/routes/sso.callback.tsx:28"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-8df9f10c684fdd75", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/console/app/routes/saml.acs.tsx:27", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/console/app/routes/saml.acs.tsx:27"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-888a2bc701ae495e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/console/app/routes/forgot-password.tsx:15", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/console/app/routes/forgot-password.tsx:15"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f4e996ba94ba2772", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/console/app/routes/billing.tsx:36", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/console/app/routes/billing.tsx:36"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-bc6ece4b3f31f87c", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/console/app/routes/scim.tsx:28", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/console/app/routes/scim.tsx:28"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c5f3290756436b76", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/console/app/routes/dashboard.notifications.tsx:56", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/console/app/routes/dashboard.notifications.tsx:56"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a525f69663ee4686", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/console/app/routes/domains.tsx:70", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/console/app/routes/domains.tsx: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-3d4dc67a464d0d8b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/console/app/routes/share.view.tsx:21", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/console/app/routes/share.view.tsx:21"}, "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-64da84970a1d0fbe", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/console/app/routes/dashboard.tsx:84", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/console/app/routes/dashboard.tsx:84"}, "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-50ff63addf592d00", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/console/app/routes/api.passkey.tsx:34", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/console/app/routes/api.passkey.tsx:34"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9f6c74e71011eb23", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/console/app/routes/login.mfa.tsx:40", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/console/app/routes/login.mfa.tsx:40"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f95426277e0b9ca6", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/console/app/routes/members.tsx:65", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/console/app/routes/members.tsx:65"}, "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-adc7dd020c9b1949", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/console/app/routes/oauth.callback.tsx:26", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/console/app/routes/oauth.callback.tsx:26"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6a445d0c2205062d", "name": "Commented-code block (5 lines) in apps/auth/src/index.ts:151", "shortDescription": {"text": "Commented-code block (5 lines) in apps/auth/src/index.ts:151"}, "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-4b02d0da0742e696", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/auth/test/routes.test.ts:23", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/auth/test/routes.test.ts:23"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b8f88612fda576c9", "name": "Commented-code block (5 lines) in apps/delivery/src/index.ts:102", "shortDescription": {"text": "Commented-code block (5 lines) in apps/delivery/src/index.ts:102"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9f95928976c37655", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/delivery/test/delivery.test.ts:24", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/delivery/test/delivery.test.ts:24"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2eafc3188c36bb02", "name": "3 env vars used in code but missing from .env.example", "shortDescription": {"text": "3 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `DEV`, `EDGEVAULT_API_KEY`, `MODE`. Add them (with a placeholder/comment) to .env.example so onboarding doesn't break."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0b5a23d4d60b229d", "name": "Dangling fetch: GET https://api.cloudflare.com/client/v4/zones/${config.zoneId}/custom_hostnames${path} (apps/api/src/cu", "shortDescription": {"text": "Dangling fetch: GET https://api.cloudflare.com/client/v4/zones/${config.zoneId}/custom_hostnames${path} (apps/api/src/custom-hostnames.ts:120)"}, "fullDescription": {"text": "`apps/api/src/custom-hostnames.ts:120` calls `GET https://api.cloudflare.com/client/v4/zones/${config.zoneId}/custom_hostnames${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.cloudflare.com/client/v4/zones/<p>/custom_hostnames/<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-969fad22d08d4849", "name": "Dangling fetch: GET https://auth.internal/.well-known/jwks.json (apps/api/src/middleware/auth.ts:22)", "shortDescription": {"text": "Dangling fetch: GET https://auth.internal/.well-known/jwks.json (apps/api/src/middleware/auth.ts:22)"}, "fullDescription": {"text": "`apps/api/src/middleware/auth.ts:22` calls `GET https://auth.internal/.well-known/jwks.json` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/auth.internal/.well-known/jwks.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-04c5e72af9204ef8", "name": "Dangling fetch: POST /dashboard/${encodeURIComponent(workspaceId)}/assistant (apps/console/app/lib/use-agent-chat.ts:58)", "shortDescription": {"text": "Dangling fetch: POST /dashboard/${encodeURIComponent(workspaceId)}/assistant (apps/console/app/lib/use-agent-chat.ts:58)"}, "fullDescription": {"text": "`apps/console/app/lib/use-agent-chat.ts:58` calls `POST /dashboard/${encodeURIComponent(workspaceId)}/assistant` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/dashboard/<p>/assistant`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-eb3664637004bdf6", "name": "Dangling fetch: POST /api/passkey (apps/console/app/lib/passkey.ts:15)", "shortDescription": {"text": "Dangling fetch: POST /api/passkey (apps/console/app/lib/passkey.ts:15)"}, "fullDescription": {"text": "`apps/console/app/lib/passkey.ts:15` calls `POST /api/passkey` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/passkey`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-305c95eeba73acfb", "name": "Dangling fetch: POST /api/reveal-token (apps/console/app/lib/passkey.ts:58)", "shortDescription": {"text": "Dangling fetch: POST /api/reveal-token (apps/console/app/lib/passkey.ts:58)"}, "fullDescription": {"text": "`apps/console/app/lib/passkey.ts:58` calls `POST /api/reveal-token` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/reveal-token`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d61adaf04525ecd0", "name": "Dangling fetch: GET https://api/api/v1/workspaces/${workspaceId} (apps/console/app/lib/workspace.server.ts:15)", "shortDescription": {"text": "Dangling fetch: GET https://api/api/v1/workspaces/${workspaceId} (apps/console/app/lib/workspace.server.ts:15)"}, "fullDescription": {"text": "`apps/console/app/lib/workspace.server.ts:15` calls `GET https://api/api/v1/workspaces/${workspaceId}` 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/api/v1/workspaces/<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-0c8a14789c159a8b", "name": "Dangling fetch: POST https://auth/orgs/${orgId}/sso/start (apps/console/app/routes/sso.start.tsx:16)", "shortDescription": {"text": "Dangling fetch: POST https://auth/orgs/${orgId}/sso/start (apps/console/app/routes/sso.start.tsx:16)"}, "fullDescription": {"text": "`apps/console/app/routes/sso.start.tsx:16` calls `POST https://auth/orgs/${orgId}/sso/start` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/auth/orgs/<p>/sso/start`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e6a40410517ecf6b", "name": "Dangling fetch: POST https://auth${path} (apps/console/app/routes/login.tsx:49)", "shortDescription": {"text": "Dangling fetch: POST https://auth${path} (apps/console/app/routes/login.tsx:49)"}, "fullDescription": {"text": "`apps/console/app/routes/login.tsx:49` calls `POST https://auth${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:/auth/<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-f7ddcc8789888a24", "name": "Dangling fetch: POST https://auth/token (apps/console/app/routes/login.tsx:69)", "shortDescription": {"text": "Dangling fetch: POST https://auth/token (apps/console/app/routes/login.tsx:69)"}, "fullDescription": {"text": "`apps/console/app/routes/login.tsx:69` calls `POST https://auth/token` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/auth/token`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-111dfbc525112de7", "name": "Dangling fetch: POST https://api/api/v1/shares (apps/console/app/routes/share.tsx:30)", "shortDescription": {"text": "Dangling fetch: POST https://api/api/v1/shares (apps/console/app/routes/share.tsx:30)"}, "fullDescription": {"text": "`apps/console/app/routes/share.tsx:30` calls `POST https://api/api/v1/shares` 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/api/v1/shares`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8bab83100092b370", "name": "Dangling fetch: POST https://auth/verify-email (apps/console/app/routes/verify-email.tsx:19)", "shortDescription": {"text": "Dangling fetch: POST https://auth/verify-email (apps/console/app/routes/verify-email.tsx:19)"}, "fullDescription": {"text": "`apps/console/app/routes/verify-email.tsx:19` calls `POST https://auth/verify-email` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/auth/verify-email`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2e268b9179008315", "name": "Dangling fetch: POST https://auth/oauth/${provider}/start (apps/console/app/routes/oauth.start.tsx:17)", "shortDescription": {"text": "Dangling fetch: POST https://auth/oauth/${provider}/start (apps/console/app/routes/oauth.start.tsx:17)"}, "fullDescription": {"text": "`apps/console/app/routes/oauth.start.tsx:17` calls `POST https://auth/oauth/${provider}/start` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/auth/oauth/<p>/start`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-36139189a35a7b08", "name": "Dangling fetch: GET https://auth${path} (apps/console/app/routes/account-mfa.tsx:19)", "shortDescription": {"text": "Dangling fetch: GET https://auth${path} (apps/console/app/routes/account-mfa.tsx:19)"}, "fullDescription": {"text": "`apps/console/app/routes/account-mfa.tsx:19` calls `GET https://auth${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:/auth/<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-f8b14554aa545f35", "name": "Dangling fetch: GET https://api/api/v1/organizations (apps/console/app/routes/sso-admin.tsx:36)", "shortDescription": {"text": "Dangling fetch: GET https://api/api/v1/organizations (apps/console/app/routes/sso-admin.tsx:36)"}, "fullDescription": {"text": "`apps/console/app/routes/sso-admin.tsx:36` calls `GET https://api/api/v1/organizations` 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/api/v1/organizations`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-94feecfdb3cd8368", "name": "Dangling fetch: GET https://auth/orgs/${params.orgId}/sso/connection (apps/console/app/routes/sso-admin.tsx:57)", "shortDescription": {"text": "Dangling fetch: GET https://auth/orgs/${params.orgId}/sso/connection (apps/console/app/routes/sso-admin.tsx:57)"}, "fullDescription": {"text": "`apps/console/app/routes/sso-admin.tsx:57` calls `GET https://auth/orgs/${params.orgId}/sso/connection` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/auth/orgs/<p>/sso/connection`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0af537e0cdc0cfd4", "name": "Dangling fetch: PUT https://auth/orgs/${params.orgId}/sso/connection (apps/console/app/routes/sso-admin.tsx:90)", "shortDescription": {"text": "Dangling fetch: PUT https://auth/orgs/${params.orgId}/sso/connection (apps/console/app/routes/sso-admin.tsx:90)"}, "fullDescription": {"text": "`apps/console/app/routes/sso-admin.tsx:90` calls `PUT https://auth/orgs/${params.orgId}/sso/connection` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/auth/orgs/<p>/sso/connection`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-962fe36c0db670c2", "name": "Dangling fetch: GET https://api/api/v1/organizations (apps/console/app/routes/saml-admin.tsx:35)", "shortDescription": {"text": "Dangling fetch: GET https://api/api/v1/organizations (apps/console/app/routes/saml-admin.tsx:35)"}, "fullDescription": {"text": "`apps/console/app/routes/saml-admin.tsx:35` calls `GET https://api/api/v1/organizations` 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/api/v1/organizations`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a5f5b4debe6ffa62", "name": "Dangling fetch: GET https://auth/orgs/${params.orgId}/saml/connection (apps/console/app/routes/saml-admin.tsx:58)", "shortDescription": {"text": "Dangling fetch: GET https://auth/orgs/${params.orgId}/saml/connection (apps/console/app/routes/saml-admin.tsx:58)"}, "fullDescription": {"text": "`apps/console/app/routes/saml-admin.tsx:58` calls `GET https://auth/orgs/${params.orgId}/saml/connection` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/auth/orgs/<p>/saml/connection`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e565daf129b1daaf", "name": "Dangling fetch: PUT https://auth/orgs/${params.orgId}/saml/connection (apps/console/app/routes/saml-admin.tsx:89)", "shortDescription": {"text": "Dangling fetch: PUT https://auth/orgs/${params.orgId}/saml/connection (apps/console/app/routes/saml-admin.tsx:89)"}, "fullDescription": {"text": "`apps/console/app/routes/saml-admin.tsx:89` calls `PUT https://auth/orgs/${params.orgId}/saml/connection` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/auth/orgs/<p>/saml/connection`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e10e797713e27c90", "name": "Dangling fetch: GET https://api/api/v1/organizations (apps/console/app/routes/home.tsx:30)", "shortDescription": {"text": "Dangling fetch: GET https://api/api/v1/organizations (apps/console/app/routes/home.tsx:30)"}, "fullDescription": {"text": "`apps/console/app/routes/home.tsx:30` calls `GET https://api/api/v1/organizations` 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/api/v1/organizations`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-20730f25fa48fac8", "name": "Dangling fetch: GET https://auth/me (apps/console/app/routes/home.tsx:33)", "shortDescription": {"text": "Dangling fetch: GET https://auth/me (apps/console/app/routes/home.tsx:33)"}, "fullDescription": {"text": "`apps/console/app/routes/home.tsx:33` calls `GET https://auth/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/auth/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6a542f47a18cafc2", "name": "Dangling fetch: GET https://api/api/v1/organizations/${org.id}/workspaces (apps/console/app/routes/home.tsx:54)", "shortDescription": {"text": "Dangling fetch: GET https://api/api/v1/organizations/${org.id}/workspaces (apps/console/app/routes/home.tsx:54)"}, "fullDescription": {"text": "`apps/console/app/routes/home.tsx:54` calls `GET https://api/api/v1/organizations/${org.id}/workspaces` 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/api/v1/organizations/<p>/workspaces`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-efb55d0383b2ad96", "name": "Dangling fetch: POST https://auth/verify-email/resend (apps/console/app/routes/home.tsx:76)", "shortDescription": {"text": "Dangling fetch: POST https://auth/verify-email/resend (apps/console/app/routes/home.tsx:76)"}, "fullDescription": {"text": "`apps/console/app/routes/home.tsx:76` calls `POST https://auth/verify-email/resend` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/auth/verify-email/resend`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-83918c8c1511c5ba", "name": "Dangling fetch: POST https://api/api/v1/organizations (apps/console/app/routes/home.tsx:92)", "shortDescription": {"text": "Dangling fetch: POST https://api/api/v1/organizations (apps/console/app/routes/home.tsx:92)"}, "fullDescription": {"text": "`apps/console/app/routes/home.tsx:92` calls `POST https://api/api/v1/organizations` 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/api/v1/organizations`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c8dd6ca365dbf39b", "name": "Dangling fetch: POST https://api/api/v1/organizations/${orgId}/workspaces (apps/console/app/routes/home.tsx:103)", "shortDescription": {"text": "Dangling fetch: POST https://api/api/v1/organizations/${orgId}/workspaces (apps/console/app/routes/home.tsx:103)"}, "fullDescription": {"text": "`apps/console/app/routes/home.tsx:103` calls `POST https://api/api/v1/organizations/${orgId}/workspaces` 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/api/v1/organizations/<p>/workspaces`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-586f3af8191624ab", "name": "Dangling fetch: POST https://auth/password/reset (apps/console/app/routes/reset-password.tsx:22)", "shortDescription": {"text": "Dangling fetch: POST https://auth/password/reset (apps/console/app/routes/reset-password.tsx:22)"}, "fullDescription": {"text": "`apps/console/app/routes/reset-password.tsx:22` calls `POST https://auth/password/reset` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/auth/password/reset`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ed853026e12802e7", "name": "Dangling fetch: POST https://auth/orgs/${orgId}/saml/start (apps/console/app/routes/saml.start.tsx:15)", "shortDescription": {"text": "Dangling fetch: POST https://auth/orgs/${orgId}/saml/start (apps/console/app/routes/saml.start.tsx:15)"}, "fullDescription": {"text": "`apps/console/app/routes/saml.start.tsx:15` calls `POST https://auth/orgs/${orgId}/saml/start` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/auth/orgs/<p>/saml/start`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-bb11ece377459bfa", "name": "Dangling fetch: GET https://api/api/v1/workspaces${path} (apps/console/app/routes/environment.tsx:87)", "shortDescription": {"text": "Dangling fetch: GET https://api/api/v1/workspaces${path} (apps/console/app/routes/environment.tsx:87)"}, "fullDescription": {"text": "`apps/console/app/routes/environment.tsx:87` calls `GET https://api/api/v1/workspaces${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/api/v1/workspaces/<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-654e57e861b9ae9d", "name": "Dangling fetch: POST https://api/api/v1/workspaces/${params.workspaceId}/assistant (apps/console/app/routes/assistant.ts", "shortDescription": {"text": "Dangling fetch: POST https://api/api/v1/workspaces/${params.workspaceId}/assistant (apps/console/app/routes/assistant.tsx:32)"}, "fullDescription": {"text": "`apps/console/app/routes/assistant.tsx:32` calls `POST https://api/api/v1/workspaces/${params.workspaceId}/assistant` 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/api/v1/workspaces/<p>/assistant`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0b2e3ca9e8300bf1", "name": "Dangling fetch: GET https://api/api/v1/workspaces/${encodeURIComponent(body.workspaceId)} (apps/console/app/routes/api.r", "shortDescription": {"text": "Dangling fetch: GET https://api/api/v1/workspaces/${encodeURIComponent(body.workspaceId)} (apps/console/app/routes/api.reveal-token.tsx:40)"}, "fullDescription": {"text": "`apps/console/app/routes/api.reveal-token.tsx:40` calls `GET https://api/api/v1/workspaces/${encodeURIComponent(body.workspaceId)}` 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/api/v1/workspaces/<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-87c67477c568db12", "name": "Dangling fetch: POST https://auth/webauthn/auth/options (apps/console/app/routes/api.reveal-token.tsx:52)", "shortDescription": {"text": "Dangling fetch: POST https://auth/webauthn/auth/options (apps/console/app/routes/api.reveal-token.tsx:52)"}, "fullDescription": {"text": "`apps/console/app/routes/api.reveal-token.tsx:52` calls `POST https://auth/webauthn/auth/options` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/auth/webauthn/auth/options`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e4c44addd2e659c5", "name": "Dangling fetch: POST https://auth/reauth (apps/console/app/routes/api.reveal-token.tsx:69)", "shortDescription": {"text": "Dangling fetch: POST https://auth/reauth (apps/console/app/routes/api.reveal-token.tsx:69)"}, "fullDescription": {"text": "`apps/console/app/routes/api.reveal-token.tsx:69` calls `POST https://auth/reauth` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/auth/reauth`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-63c95beb3fc9141e", "name": "Dangling fetch: POST https://auth/reauth (apps/console/app/routes/api.reveal-token.tsx:102)", "shortDescription": {"text": "Dangling fetch: POST https://auth/reauth (apps/console/app/routes/api.reveal-token.tsx:102)"}, "fullDescription": {"text": "`apps/console/app/routes/api.reveal-token.tsx:102` calls `POST https://auth/reauth` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/auth/reauth`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2c9cce39a9052ce8", "name": "Dangling fetch: POST https://api/api/v1/workspaces/${params.workspaceId}/promotion-workflows (apps/console/app/routes/da", "shortDescription": {"text": "Dangling fetch: POST https://api/api/v1/workspaces/${params.workspaceId}/promotion-workflows (apps/console/app/routes/dashboard.compare.tsx:114)"}, "fullDescription": {"text": "`apps/console/app/routes/dashboard.compare.tsx:114` calls `POST https://api/api/v1/workspaces/${params.workspaceId}/promotion-workflows` 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/api/v1/workspaces/<p>/promotion-workflows`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-477cdf587f5d869e", "name": "Dangling fetch: POST https://api/api/v1/workspaces/${params.workspaceId}/promotion-workflows (apps/console/app/routes/da", "shortDescription": {"text": "Dangling fetch: POST https://api/api/v1/workspaces/${params.workspaceId}/promotion-workflows (apps/console/app/routes/dashboard.compare.tsx:136)"}, "fullDescription": {"text": "`apps/console/app/routes/dashboard.compare.tsx:136` calls `POST https://api/api/v1/workspaces/${params.workspaceId}/promotion-workflows` 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/api/v1/workspaces/<p>/promotion-workflows`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-89d0dda7bb9e9617", "name": "Dangling fetch: POST https://auth/orgs/${orgId}/sso/callback (apps/console/app/routes/sso.callback.tsx:28)", "shortDescription": {"text": "Dangling fetch: POST https://auth/orgs/${orgId}/sso/callback (apps/console/app/routes/sso.callback.tsx:28)"}, "fullDescription": {"text": "`apps/console/app/routes/sso.callback.tsx:28` calls `POST https://auth/orgs/${orgId}/sso/callback` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/auth/orgs/<p>/sso/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-14dd46f724333c13", "name": "Dangling fetch: POST https://auth/internal/sso/provision (apps/console/app/routes/sso.callback.tsx:43)", "shortDescription": {"text": "Dangling fetch: POST https://auth/internal/sso/provision (apps/console/app/routes/sso.callback.tsx:43)"}, "fullDescription": {"text": "`apps/console/app/routes/sso.callback.tsx:43` calls `POST https://auth/internal/sso/provision` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/auth/internal/sso/provision`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6ee5a8b27a23fe47", "name": "Dangling fetch: POST https://auth/token (apps/console/app/routes/sso.callback.tsx:52)", "shortDescription": {"text": "Dangling fetch: POST https://auth/token (apps/console/app/routes/sso.callback.tsx:52)"}, "fullDescription": {"text": "`apps/console/app/routes/sso.callback.tsx:52` calls `POST https://auth/token` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/auth/token`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-78fb17a8610aa071", "name": "Dangling fetch: POST https://auth/orgs/${orgId}/saml/acs (apps/console/app/routes/saml.acs.tsx:27)", "shortDescription": {"text": "Dangling fetch: POST https://auth/orgs/${orgId}/saml/acs (apps/console/app/routes/saml.acs.tsx:27)"}, "fullDescription": {"text": "`apps/console/app/routes/saml.acs.tsx:27` calls `POST https://auth/orgs/${orgId}/saml/acs` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/auth/orgs/<p>/saml/acs`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-681a635d6ba908cc", "name": "Dangling fetch: POST https://auth/internal/sso/provision (apps/console/app/routes/saml.acs.tsx:36)", "shortDescription": {"text": "Dangling fetch: POST https://auth/internal/sso/provision (apps/console/app/routes/saml.acs.tsx:36)"}, "fullDescription": {"text": "`apps/console/app/routes/saml.acs.tsx:36` calls `POST https://auth/internal/sso/provision` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/auth/internal/sso/provision`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1a4921493fc87c3b", "name": "Dangling fetch: POST https://auth/token (apps/console/app/routes/saml.acs.tsx:45)", "shortDescription": {"text": "Dangling fetch: POST https://auth/token (apps/console/app/routes/saml.acs.tsx:45)"}, "fullDescription": {"text": "`apps/console/app/routes/saml.acs.tsx:45` calls `POST https://auth/token` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/auth/token`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e4945a76c5fe7999", "name": "Dangling fetch: POST https://auth/password/forgot (apps/console/app/routes/forgot-password.tsx:15)", "shortDescription": {"text": "Dangling fetch: POST https://auth/password/forgot (apps/console/app/routes/forgot-password.tsx:15)"}, "fullDescription": {"text": "`apps/console/app/routes/forgot-password.tsx:15` calls `POST https://auth/password/forgot` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/auth/password/forgot`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-34be63b466fe3c00", "name": "Dangling fetch: GET https://api/api/v1/organizations (apps/console/app/routes/billing.tsx:36)", "shortDescription": {"text": "Dangling fetch: GET https://api/api/v1/organizations (apps/console/app/routes/billing.tsx:36)"}, "fullDescription": {"text": "`apps/console/app/routes/billing.tsx:36` calls `GET https://api/api/v1/organizations` 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/api/v1/organizations`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-322db5f096d73a63", "name": "Dangling fetch: GET https://billing/billing/status?organizationId=${params.orgId} (apps/console/app/routes/billing.tsx:5", "shortDescription": {"text": "Dangling fetch: GET https://billing/billing/status?organizationId=${params.orgId} (apps/console/app/routes/billing.tsx:58)"}, "fullDescription": {"text": "`apps/console/app/routes/billing.tsx:58` calls `GET https://billing/billing/status?organizationId=${params.orgId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/billing/billing/status`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9d863c6727847460", "name": "Dangling fetch: POST https://billing/billing/checkout (apps/console/app/routes/billing.tsx:96)", "shortDescription": {"text": "Dangling fetch: POST https://billing/billing/checkout (apps/console/app/routes/billing.tsx:96)"}, "fullDescription": {"text": "`apps/console/app/routes/billing.tsx:96` calls `POST https://billing/billing/checkout` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/billing/billing/checkout`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c4ee84900760217a", "name": "Dangling fetch: POST https://billing/billing/portal (apps/console/app/routes/billing.tsx:113)", "shortDescription": {"text": "Dangling fetch: POST https://billing/billing/portal (apps/console/app/routes/billing.tsx:113)"}, "fullDescription": {"text": "`apps/console/app/routes/billing.tsx:113` calls `POST https://billing/billing/portal` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/billing/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-033c76098f9179b4", "name": "Dangling fetch: GET https://api/api/v1/organizations (apps/console/app/routes/scim.tsx:28)", "shortDescription": {"text": "Dangling fetch: GET https://api/api/v1/organizations (apps/console/app/routes/scim.tsx:28)"}, "fullDescription": {"text": "`apps/console/app/routes/scim.tsx:28` calls `GET https://api/api/v1/organizations` 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/api/v1/organizations`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6298dbfab97daa89", "name": "Dangling fetch: GET https://api/api/v1/organizations/${params.orgId}/scim-token (apps/console/app/routes/scim.tsx:39)", "shortDescription": {"text": "Dangling fetch: GET https://api/api/v1/organizations/${params.orgId}/scim-token (apps/console/app/routes/scim.tsx:39)"}, "fullDescription": {"text": "`apps/console/app/routes/scim.tsx:39` calls `GET https://api/api/v1/organizations/${params.orgId}/scim-token` 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/api/v1/organizations/<p>/scim-token`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7adcabb2e5533793", "name": "Dangling fetch: GET https://api/api/v1/workspaces${path} (apps/console/app/routes/dashboard.notifications.tsx:56)", "shortDescription": {"text": "Dangling fetch: GET https://api/api/v1/workspaces${path} (apps/console/app/routes/dashboard.notifications.tsx:56)"}, "fullDescription": {"text": "`apps/console/app/routes/dashboard.notifications.tsx:56` calls `GET https://api/api/v1/workspaces${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/api/v1/workspaces/<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-771793388d285047", "name": "Dangling fetch: GET https://api/api/v1/organizations (apps/console/app/routes/domains.tsx:70)", "shortDescription": {"text": "Dangling fetch: GET https://api/api/v1/organizations (apps/console/app/routes/domains.tsx:70)"}, "fullDescription": {"text": "`apps/console/app/routes/domains.tsx:70` calls `GET https://api/api/v1/organizations` 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/api/v1/organizations`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c64bc3e5117d89a7", "name": "Dangling fetch: GET https://api/api/v1/organizations/${params.orgId}/domains (apps/console/app/routes/domains.tsx:82)", "shortDescription": {"text": "Dangling fetch: GET https://api/api/v1/organizations/${params.orgId}/domains (apps/console/app/routes/domains.tsx:82)"}, "fullDescription": {"text": "`apps/console/app/routes/domains.tsx:82` calls `GET https://api/api/v1/organizations/${params.orgId}/domains` 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/api/v1/organizations/<p>/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-3bd4c611b8d5b821", "name": "Dangling fetch: POST https://api/internal/shares/${params.id}/consume (apps/console/app/routes/share.view.tsx:21)", "shortDescription": {"text": "Dangling fetch: POST https://api/internal/shares/${params.id}/consume (apps/console/app/routes/share.view.tsx:21)"}, "fullDescription": {"text": "`apps/console/app/routes/share.view.tsx:21` calls `POST https://api/internal/shares/${params.id}/consume` 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/internal/shares/<p>/consume`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-eb23119c6f3117b9", "name": "Dangling fetch: POST https://auth/webauthn/register/options (apps/console/app/routes/api.passkey.tsx:34)", "shortDescription": {"text": "Dangling fetch: POST https://auth/webauthn/register/options (apps/console/app/routes/api.passkey.tsx:34)"}, "fullDescription": {"text": "`apps/console/app/routes/api.passkey.tsx:34` calls `POST https://auth/webauthn/register/options` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/auth/webauthn/register/options`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-07da48247ab67eec", "name": "Dangling fetch: POST https://auth/webauthn/register/verify (apps/console/app/routes/api.passkey.tsx:55)", "shortDescription": {"text": "Dangling fetch: POST https://auth/webauthn/register/verify (apps/console/app/routes/api.passkey.tsx:55)"}, "fullDescription": {"text": "`apps/console/app/routes/api.passkey.tsx:55` calls `POST https://auth/webauthn/register/verify` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/auth/webauthn/register/verify`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-897c4a40dd89323e", "name": "Dangling fetch: POST https://auth/webauthn/auth/options (apps/console/app/routes/api.passkey.tsx:77)", "shortDescription": {"text": "Dangling fetch: POST https://auth/webauthn/auth/options (apps/console/app/routes/api.passkey.tsx:77)"}, "fullDescription": {"text": "`apps/console/app/routes/api.passkey.tsx:77` calls `POST https://auth/webauthn/auth/options` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/auth/webauthn/auth/options`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-cb567c10966ec769", "name": "Dangling fetch: POST https://auth/webauthn/auth/verify (apps/console/app/routes/api.passkey.tsx:92)", "shortDescription": {"text": "Dangling fetch: POST https://auth/webauthn/auth/verify (apps/console/app/routes/api.passkey.tsx:92)"}, "fullDescription": {"text": "`apps/console/app/routes/api.passkey.tsx:92` calls `POST https://auth/webauthn/auth/verify` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/auth/webauthn/auth/verify`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2c8935ee500ba6f0", "name": "Dangling fetch: POST https://auth/token (apps/console/app/routes/api.passkey.tsx:110)", "shortDescription": {"text": "Dangling fetch: POST https://auth/token (apps/console/app/routes/api.passkey.tsx:110)"}, "fullDescription": {"text": "`apps/console/app/routes/api.passkey.tsx:110` calls `POST https://auth/token` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/auth/token`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e4905fce807399d3", "name": "Dangling fetch: POST https://auth${path} (apps/console/app/routes/login.mfa.tsx:40)", "shortDescription": {"text": "Dangling fetch: POST https://auth${path} (apps/console/app/routes/login.mfa.tsx:40)"}, "fullDescription": {"text": "`apps/console/app/routes/login.mfa.tsx:40` calls `POST https://auth${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:/auth/<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-5b7be94eeb73cbcf", "name": "Dangling fetch: POST https://auth/token (apps/console/app/routes/login.mfa.tsx:49)", "shortDescription": {"text": "Dangling fetch: POST https://auth/token (apps/console/app/routes/login.mfa.tsx:49)"}, "fullDescription": {"text": "`apps/console/app/routes/login.mfa.tsx:49` calls `POST https://auth/token` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/auth/token`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f8fe6dcfcb5bf551", "name": "Dangling fetch: GET https://api/api/v1/organizations (apps/console/app/routes/members.tsx:65)", "shortDescription": {"text": "Dangling fetch: GET https://api/api/v1/organizations (apps/console/app/routes/members.tsx:65)"}, "fullDescription": {"text": "`apps/console/app/routes/members.tsx:65` calls `GET https://api/api/v1/organizations` 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/api/v1/organizations`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-507cc51a0773072a", "name": "Dangling fetch: GET https://api/api/v1/organizations/${params.orgId}/members (apps/console/app/routes/members.tsx:74)", "shortDescription": {"text": "Dangling fetch: GET https://api/api/v1/organizations/${params.orgId}/members (apps/console/app/routes/members.tsx:74)"}, "fullDescription": {"text": "`apps/console/app/routes/members.tsx:74` calls `GET https://api/api/v1/organizations/${params.orgId}/members` 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/api/v1/organizations/<p>/members`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-eb9fb8233aa954a7", "name": "Dangling fetch: GET https://api/api/v1/organizations/${params.orgId}/invitations (apps/console/app/routes/members.tsx:88", "shortDescription": {"text": "Dangling fetch: GET https://api/api/v1/organizations/${params.orgId}/invitations (apps/console/app/routes/members.tsx:88)"}, "fullDescription": {"text": "`apps/console/app/routes/members.tsx:88` calls `GET https://api/api/v1/organizations/${params.orgId}/invitations` 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/api/v1/organizations/<p>/invitations`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-14ff179cd2027230", "name": "Dangling fetch: GET https://api/api/v1/organizations/${params.orgId}/security (apps/console/app/routes/members.tsx:91)", "shortDescription": {"text": "Dangling fetch: GET https://api/api/v1/organizations/${params.orgId}/security (apps/console/app/routes/members.tsx:91)"}, "fullDescription": {"text": "`apps/console/app/routes/members.tsx:91` calls `GET https://api/api/v1/organizations/${params.orgId}/security` 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/api/v1/organizations/<p>/security`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-fbfd8ca4c6b9d102", "name": "Dangling fetch: POST https://api/api/v1/organizations/${params.orgId}/invitations/${id}/resend (apps/console/app/routes/", "shortDescription": {"text": "Dangling fetch: POST https://api/api/v1/organizations/${params.orgId}/invitations/${id}/resend (apps/console/app/routes/members.tsx:139)"}, "fullDescription": {"text": "`apps/console/app/routes/members.tsx:139` calls `POST https://api/api/v1/organizations/${params.orgId}/invitations/${id}/resend` 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/api/v1/organizations/<p>/invitations/<p>/resend`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5ebe7d45b4beb587", "name": "Dangling fetch: PATCH https://api/api/v1/organizations/${params.orgId}/security (apps/console/app/routes/members.tsx:178", "shortDescription": {"text": "Dangling fetch: PATCH https://api/api/v1/organizations/${params.orgId}/security (apps/console/app/routes/members.tsx:178)"}, "fullDescription": {"text": "`apps/console/app/routes/members.tsx:178` calls `PATCH https://api/api/v1/organizations/${params.orgId}/security` 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/api/v1/organizations/<p>/security`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6bcdb077025bd8bb", "name": "Dangling fetch: POST https://auth/oauth/${provider}/callback (apps/console/app/routes/oauth.callback.tsx:26)", "shortDescription": {"text": "Dangling fetch: POST https://auth/oauth/${provider}/callback (apps/console/app/routes/oauth.callback.tsx:26)"}, "fullDescription": {"text": "`apps/console/app/routes/oauth.callback.tsx:26` calls `POST https://auth/oauth/${provider}/callback` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/auth/oauth/<p>/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-6e468a11ddabf6ae", "name": "Dangling fetch: POST https://auth/token (apps/console/app/routes/oauth.callback.tsx:39)", "shortDescription": {"text": "Dangling fetch: POST https://auth/token (apps/console/app/routes/oauth.callback.tsx:39)"}, "fullDescription": {"text": "`apps/console/app/routes/oauth.callback.tsx:39` calls `POST https://auth/token` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/auth/token`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-684f0e83ba7e1558", "name": "Unused endpoint: GET ", "shortDescription": {"text": "Unused endpoint: GET "}, "fullDescription": {"text": "`packages/sso-saml/src/c14n.ts` declares `GET ` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-765b3181318378b8", "name": "Unused endpoint: USE /api/v1/*", "shortDescription": {"text": "Unused endpoint: USE /api/v1/*"}, "fullDescription": {"text": "`apps/api/src/index.ts` declares `USE /api/v1/*` 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-8881940fe74c3240", "name": "Unused endpoint: USE /api/v1/workspaces/:workspaceId/*", "shortDescription": {"text": "Unused endpoint: USE /api/v1/workspaces/:workspaceId/*"}, "fullDescription": {"text": "`apps/api/src/index.ts` declares `USE /api/v1/workspaces/:workspaceId/*` 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-fa553c51f3ff97c2", "name": "Unused endpoint: USE /scim/*", "shortDescription": {"text": "Unused endpoint: USE /scim/*"}, "fullDescription": {"text": "`apps/api/src/index.ts` declares `USE /scim/*` 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-385f12c33ddf1192", "name": "Unused endpoint: USE /mcp/:workspaceId", "shortDescription": {"text": "Unused endpoint: USE /mcp/:workspaceId"}, "fullDescription": {"text": "`apps/api/src/index.ts` declares `USE /mcp/:workspaceId` 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-06e26a5c1e867914", "name": "Unused endpoint: POST /sign-up/email", "shortDescription": {"text": "Unused endpoint: POST /sign-up/email"}, "fullDescription": {"text": "`apps/auth/src/index.ts` declares `POST /sign-up/email` 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-0c3bb6af93b4422a", "name": "Unused endpoint: POST /verify-email", "shortDescription": {"text": "Unused endpoint: POST /verify-email"}, "fullDescription": {"text": "`apps/auth/src/index.ts` declares `POST /verify-email` 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-c463cd061b907cbe", "name": "Unused endpoint: POST /sign-in/email", "shortDescription": {"text": "Unused endpoint: POST /sign-in/email"}, "fullDescription": {"text": "`apps/auth/src/index.ts` declares `POST /sign-in/email` 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-1f0ac8f62c3962a2", "name": "Unused endpoint: POST /mfa/totp/authenticate", "shortDescription": {"text": "Unused endpoint: POST /mfa/totp/authenticate"}, "fullDescription": {"text": "`apps/auth/src/index.ts` declares `POST /mfa/totp/authenticate` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-fd1dc91abf32142d", "name": "Unused endpoint: GET /me", "shortDescription": {"text": "Unused endpoint: GET /me"}, "fullDescription": {"text": "`apps/auth/src/index.ts` declares `GET /me` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-fb2792619b932210", "name": "Unused endpoint: POST /verify-email/resend", "shortDescription": {"text": "Unused endpoint: POST /verify-email/resend"}, "fullDescription": {"text": "`apps/auth/src/index.ts` declares `POST /verify-email/resend` 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-348a16e09461a781", "name": "Unused endpoint: POST /password/forgot", "shortDescription": {"text": "Unused endpoint: POST /password/forgot"}, "fullDescription": {"text": "`apps/auth/src/index.ts` declares `POST /password/forgot` 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-a4b0a2af42d88af2", "name": "Unused endpoint: POST /password/reset", "shortDescription": {"text": "Unused endpoint: POST /password/reset"}, "fullDescription": {"text": "`apps/auth/src/index.ts` declares `POST /password/reset` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c392467ad66119ce", "name": "Unused endpoint: POST /password/change", "shortDescription": {"text": "Unused endpoint: POST /password/change"}, "fullDescription": {"text": "`apps/auth/src/index.ts` declares `POST /password/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-56cd7eb3e77fe1ba", "name": "Unused endpoint: GET /mfa/status", "shortDescription": {"text": "Unused endpoint: GET /mfa/status"}, "fullDescription": {"text": "`apps/auth/src/index.ts` declares `GET /mfa/status` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d24aeba793bf7ba0", "name": "Unused endpoint: POST /mfa/totp/setup", "shortDescription": {"text": "Unused endpoint: POST /mfa/totp/setup"}, "fullDescription": {"text": "`apps/auth/src/index.ts` declares `POST /mfa/totp/setup` 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-504eb02671a5a74d", "name": "Unused endpoint: POST /mfa/totp/confirm", "shortDescription": {"text": "Unused endpoint: POST /mfa/totp/confirm"}, "fullDescription": {"text": "`apps/auth/src/index.ts` declares `POST /mfa/totp/confirm` 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-a16afef578de1632", "name": "Unused endpoint: POST /mfa/totp/disable", "shortDescription": {"text": "Unused endpoint: POST /mfa/totp/disable"}, "fullDescription": {"text": "`apps/auth/src/index.ts` declares `POST /mfa/totp/disable` 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-bd864e3825f21a48", "name": "Unused endpoint: POST /mfa/recovery/authenticate", "shortDescription": {"text": "Unused endpoint: POST /mfa/recovery/authenticate"}, "fullDescription": {"text": "`apps/auth/src/index.ts` declares `POST /mfa/recovery/authenticate` 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-c6ad8fcb4543102e", "name": "Unused endpoint: POST /mfa/recovery/regenerate", "shortDescription": {"text": "Unused endpoint: POST /mfa/recovery/regenerate"}, "fullDescription": {"text": "`apps/auth/src/index.ts` declares `POST /mfa/recovery/regenerate` 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-b15d518d538de57d", "name": "Unused endpoint: GET /sessions", "shortDescription": {"text": "Unused endpoint: GET /sessions"}, "fullDescription": {"text": "`apps/auth/src/index.ts` declares `GET /sessions` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7afca7e8d8045bf3", "name": "Unused endpoint: POST /sessions/revoke-all", "shortDescription": {"text": "Unused endpoint: POST /sessions/revoke-all"}, "fullDescription": {"text": "`apps/auth/src/index.ts` declares `POST /sessions/revoke-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-734e231c5e366e27", "name": "Unused endpoint: POST /sessions/:id/revoke", "shortDescription": {"text": "Unused endpoint: POST /sessions/:id/revoke"}, "fullDescription": {"text": "`apps/auth/src/index.ts` declares `POST /sessions/:id/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-2e80f766ca513362", "name": "Unused endpoint: POST /webauthn/register/options", "shortDescription": {"text": "Unused endpoint: POST /webauthn/register/options"}, "fullDescription": {"text": "`apps/auth/src/index.ts` declares `POST /webauthn/register/options` 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-15215d8c284261c5", "name": "Unused endpoint: POST /webauthn/register/verify", "shortDescription": {"text": "Unused endpoint: POST /webauthn/register/verify"}, "fullDescription": {"text": "`apps/auth/src/index.ts` declares `POST /webauthn/register/verify` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-dc916ff3a58ba55e", "name": "Unused endpoint: POST /webauthn/auth/options", "shortDescription": {"text": "Unused endpoint: POST /webauthn/auth/options"}, "fullDescription": {"text": "`apps/auth/src/index.ts` declares `POST /webauthn/auth/options` 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-f929d6d6414caf4a", "name": "Unused endpoint: POST /webauthn/auth/verify", "shortDescription": {"text": "Unused endpoint: POST /webauthn/auth/verify"}, "fullDescription": {"text": "`apps/auth/src/index.ts` declares `POST /webauthn/auth/verify` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e9616a808b708fdd", "name": "Unused endpoint: POST /reauth", "shortDescription": {"text": "Unused endpoint: POST /reauth"}, "fullDescription": {"text": "`apps/auth/src/index.ts` declares `POST /reauth` 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-fe615b0229fea310", "name": "Unused endpoint: POST /oauth/:provider/start", "shortDescription": {"text": "Unused endpoint: POST /oauth/:provider/start"}, "fullDescription": {"text": "`apps/auth/src/index.ts` declares `POST /oauth/:provider/start` 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-797acda67ac1c983", "name": "Unused endpoint: POST /oauth/:provider/callback", "shortDescription": {"text": "Unused endpoint: POST /oauth/:provider/callback"}, "fullDescription": {"text": "`apps/auth/src/index.ts` declares `POST /oauth/:provider/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-64cbb9739f91f124", "name": "Unused endpoint: POST /sign-out", "shortDescription": {"text": "Unused endpoint: POST /sign-out"}, "fullDescription": {"text": "`apps/auth/src/index.ts` declares `POST /sign-out` 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-1daa53f3c56e6b16", "name": "Unused endpoint: GET /session", "shortDescription": {"text": "Unused endpoint: GET /session"}, "fullDescription": {"text": "`apps/auth/src/index.ts` declares `GET /session` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-358815753e8867f1", "name": "Unused endpoint: POST /token", "shortDescription": {"text": "Unused endpoint: POST /token"}, "fullDescription": {"text": "`apps/auth/src/index.ts` declares `POST /token` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0dcb111defa57ee0", "name": "Unused endpoint: POST /internal/sso/provision", "shortDescription": {"text": "Unused endpoint: POST /internal/sso/provision"}, "fullDescription": {"text": "`apps/auth/src/index.ts` declares `POST /internal/sso/provision` 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-706a85d71c2dc66e", "name": "Unused endpoint: USE /orgs/:orgId/sso/*", "shortDescription": {"text": "Unused endpoint: USE /orgs/:orgId/sso/*"}, "fullDescription": {"text": "`apps/auth/src/sso.ts` declares `USE /orgs/:orgId/sso/*` 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-1a35b53c041acc3c", "name": "Unused endpoint: USE /orgs/:orgId/saml/*", "shortDescription": {"text": "Unused endpoint: USE /orgs/:orgId/saml/*"}, "fullDescription": {"text": "`apps/auth/src/sso.ts` declares `USE /orgs/:orgId/saml/*` 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-94fc026d77c6599a", "name": "Unused endpoint: USE /orgs/:orgId/*", "shortDescription": {"text": "Unused endpoint: USE /orgs/:orgId/*"}, "fullDescription": {"text": "`apps/auth/src/sso.ts` declares `USE /orgs/:orgId/*` 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-a798034b9720c7d0", "name": "Unused endpoint: PUT /orgs/:orgId/sso/connection", "shortDescription": {"text": "Unused endpoint: PUT /orgs/:orgId/sso/connection"}, "fullDescription": {"text": "`apps/auth/src/sso.ts` declares `PUT /orgs/:orgId/sso/connection` 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-15a3af4658d079b4", "name": "Unused endpoint: GET /orgs/:orgId/sso/connection", "shortDescription": {"text": "Unused endpoint: GET /orgs/:orgId/sso/connection"}, "fullDescription": {"text": "`apps/auth/src/sso.ts` declares `GET /orgs/:orgId/sso/connection` 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-661b11b064016bbf", "name": "Unused endpoint: POST /orgs/:orgId/sso/start", "shortDescription": {"text": "Unused endpoint: POST /orgs/:orgId/sso/start"}, "fullDescription": {"text": "`apps/auth/src/sso.ts` declares `POST /orgs/:orgId/sso/start` 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-ceba7a3d8b60baef", "name": "Unused endpoint: POST /orgs/:orgId/sso/callback", "shortDescription": {"text": "Unused endpoint: POST /orgs/:orgId/sso/callback"}, "fullDescription": {"text": "`apps/auth/src/sso.ts` declares `POST /orgs/:orgId/sso/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-350aa621d39c845b", "name": "Unused endpoint: PUT /orgs/:orgId/saml/connection", "shortDescription": {"text": "Unused endpoint: PUT /orgs/:orgId/saml/connection"}, "fullDescription": {"text": "`apps/auth/src/sso.ts` declares `PUT /orgs/:orgId/saml/connection` 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-00c065d5f14fb020", "name": "Unused endpoint: GET /orgs/:orgId/saml/connection", "shortDescription": {"text": "Unused endpoint: GET /orgs/:orgId/saml/connection"}, "fullDescription": {"text": "`apps/auth/src/sso.ts` declares `GET /orgs/:orgId/saml/connection` 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-51cb7905381836d4", "name": "Unused endpoint: POST /orgs/:orgId/saml/start", "shortDescription": {"text": "Unused endpoint: POST /orgs/:orgId/saml/start"}, "fullDescription": {"text": "`apps/auth/src/sso.ts` declares `POST /orgs/:orgId/saml/start` 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-fcbea2477bb68249", "name": "Unused endpoint: POST /orgs/:orgId/saml/acs", "shortDescription": {"text": "Unused endpoint: POST /orgs/:orgId/saml/acs"}, "fullDescription": {"text": "`apps/auth/src/sso.ts` declares `POST /orgs/:orgId/saml/acs` 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-93c52fb582f1c330", "name": "Unused endpoint: USE /v1/*", "shortDescription": {"text": "Unused endpoint: USE /v1/*"}, "fullDescription": {"text": "`apps/delivery/src/index.ts` declares `USE /v1/*` 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-16a781fb1b01bf87", "name": "Unused endpoint: GET /v1/configs/:key", "shortDescription": {"text": "Unused endpoint: GET /v1/configs/:key"}, "fullDescription": {"text": "`apps/delivery/src/index.ts` declares `GET /v1/configs/:key` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-66e54d6652ec0ca8", "name": "Unused endpoint: GET /v1/flags/:key", "shortDescription": {"text": "Unused endpoint: GET /v1/flags/:key"}, "fullDescription": {"text": "`apps/delivery/src/index.ts` declares `GET /v1/flags/:key` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a880a469564699b4", "name": "Unused endpoint: GET /v1/export", "shortDescription": {"text": "Unused endpoint: GET /v1/export"}, "fullDescription": {"text": "`apps/delivery/src/index.ts` declares `GET /v1/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-1bbbc6a824345387", "name": "Unused endpoint: POST /v1/batch", "shortDescription": {"text": "Unused endpoint: POST /v1/batch"}, "fullDescription": {"text": "`apps/delivery/src/index.ts` declares `POST /v1/batch` 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/24628"}, "properties": {"repository": "blakebauman/edgevault", "repoUrl": "https://github.com/blakebauman/edgevault", "branch": "main"}, "results": [{"ruleId": "scanner-0dc8a5512c72fd37", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/cli/src/bin.ts:4"}, "properties": {"repobilityId": "0ad00192f5a924b5", "scanner": "scanner-primary", "fingerprint": "0dc8a5512c72fd37", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-917d8da81ef3552f", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/console/app/routes/account-mfa.tsx:191"}, "properties": {"repobilityId": "643272e737eac03b", "scanner": "scanner-primary", "fingerprint": "917d8da81ef3552f", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-0a69ee2a972fb190", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 edge/control-plane/src/index.ts:69"}, "properties": {"repobilityId": "45b8857e2cfd7700", "scanner": "scanner-primary", "fingerprint": "0a69ee2a972fb190", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7dedef713bca3dea", "level": "warning", "message": {"text": "Insecure pattern 'weak_hash' in packages/auth/src/totp.ts:12"}, "properties": {"repobilityId": "08814bfaf4b4a233", "scanner": "scanner-primary", "fingerprint": "7dedef713bca3dea", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "weak_hash"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/auth/src/totp.ts"}, "region": {"startLine": 12}}}]}, {"ruleId": "scanner-b89bce973b29562d", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in packages/cli/src/index.ts:1"}, "properties": {"repobilityId": "3c049ec071195256", "scanner": "scanner-primary", "fingerprint": "b89bce973b29562d", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/cli/src/index.ts"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-4dff6b01216ad607", "level": "error", "message": {"text": "Possible secret in packages/ai/test/redact.test.ts"}, "properties": {"repobilityId": "22269a6b3f77b98b", "scanner": "scanner-primary", "fingerprint": "4dff6b01216ad607", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/ai/test/redact.test.ts"}, "region": {"startLine": 11}}}]}, {"ruleId": "scanner-5831fd556cf2a3bc", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in apps/console/app/routes/account-mfa.tsx:191"}, "properties": {"repobilityId": "393b1356c5e8c523", "scanner": "scanner-primary", "fingerprint": "5831fd556cf2a3bc", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/console/app/routes/account-mfa.tsx"}, "region": {"startLine": 191}}}]}, {"ruleId": "scanner-0e189771c287db0d", "level": "error", "message": {"text": "Possible secret in apps/delivery/test/delivery.test.ts"}, "properties": {"repobilityId": "f8f18b233de1373d", "scanner": "scanner-primary", "fingerprint": "0e189771c287db0d", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/delivery/test/delivery.test.ts"}, "region": {"startLine": 7}}}]}, {"ruleId": "scanner-cb639d9a10a47b23", "level": "note", "message": {"text": "package.json defines install-time lifecycle scripts"}, "properties": {"repobilityId": "b86179956da3a4a8", "scanner": "scanner-primary", "fingerprint": "cb639d9a10a47b23", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "npm", "install-scripts"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-7b85b0a5c9a918e4", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/crypto/package.json"}, "properties": {"repobilityId": "316ceb684a4f38c1", "scanner": "scanner-primary", "fingerprint": "7b85b0a5c9a918e4", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/crypto/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-7b6e5a9432832ca3", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/config-formats/package.json"}, "properties": {"repobilityId": "e122e6a05f65ab4e", "scanner": "scanner-primary", "fingerprint": "7b6e5a9432832ca3", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/config-formats/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-76fa53011d46d8bb", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/scim/package.json"}, "properties": {"repobilityId": "f1fa8d4cc56a9995", "scanner": "scanner-primary", "fingerprint": "76fa53011d46d8bb", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/scim/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-41b225e183229484", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/auth/package.json"}, "properties": {"repobilityId": "c022328d0892fb4d", "scanner": "scanner-primary", "fingerprint": "41b225e183229484", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/auth/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-8c2e3196a4ef0cdd", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/cli/package.json"}, "properties": {"repobilityId": "2faf23490612d7a6", "scanner": "scanner-primary", "fingerprint": "8c2e3196a4ef0cdd", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/cli/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-cb01c01804de0b47", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/database/package.json"}, "properties": {"repobilityId": "9b313fab9370ec72", "scanner": "scanner-primary", "fingerprint": "cb01c01804de0b47", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/database/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-698bfd157009b1c1", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/edge-protocol/package.json"}, "properties": {"repobilityId": "8f45a7b88779073f", "scanner": "scanner-primary", "fingerprint": "698bfd157009b1c1", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/edge-protocol/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-fe835af57b2413d4", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/diff/package.json"}, "properties": {"repobilityId": "60a42e87d9b72258", "scanner": "scanner-primary", "fingerprint": "fe835af57b2413d4", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/diff/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-1f50989207eeba59", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/realtime/package.json"}, "properties": {"repobilityId": "5bc9ef4d652372e6", "scanner": "scanner-primary", "fingerprint": "1f50989207eeba59", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/realtime/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-80f569ae36a3e3bf", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/ai/package.json"}, "properties": {"repobilityId": "2d5eb1212f62ce31", "scanner": "scanner-primary", "fingerprint": "80f569ae36a3e3bf", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/ai/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-749c9d5c65aad64a", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/refs/package.json"}, "properties": {"repobilityId": "de0712d4a11fcd85", "scanner": "scanner-primary", "fingerprint": "749c9d5c65aad64a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/refs/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-18da59d193df10c2", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/sso-saml/package.json"}, "properties": {"repobilityId": "6b15b7218b3db606", "scanner": "scanner-primary", "fingerprint": "18da59d193df10c2", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/sso-saml/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-ae014485ab255591", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/sdk/package.json"}, "properties": {"repobilityId": "666cbe5826d686db", "scanner": "scanner-primary", "fingerprint": "ae014485ab255591", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/sdk/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-50218c90b43393bb", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/ui/package.json"}, "properties": {"repobilityId": "637e26a8c754e81d", "scanner": "scanner-primary", "fingerprint": "50218c90b43393bb", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/ui/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-d68e07550f722659", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: apps/notify/package.json"}, "properties": {"repobilityId": "f61ebd60a3baff18", "scanner": "scanner-primary", "fingerprint": "d68e07550f722659", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/notify/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-b06b8d86f24c77f9", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: apps/api/package.json"}, "properties": {"repobilityId": "ce77cd34ed0306d4", "scanner": "scanner-primary", "fingerprint": "b06b8d86f24c77f9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-f6667c791bf68546", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: apps/audit/package.json"}, "properties": {"repobilityId": "6c85533165d31978", "scanner": "scanner-primary", "fingerprint": "f6667c791bf68546", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/audit/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-819b1aac40086a97", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: apps/console/package.json"}, "properties": {"repobilityId": "305f86f72288632f", "scanner": "scanner-primary", "fingerprint": "819b1aac40086a97", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/console/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-7002f88f207d84eb", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: apps/auth/package.json"}, "properties": {"repobilityId": "355ed681ded92b27", "scanner": "scanner-primary", "fingerprint": "7002f88f207d84eb", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/auth/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-23203e409e387b14", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: apps/delivery/package.json"}, "properties": {"repobilityId": "948a136c0c8d6a10", "scanner": "scanner-primary", "fingerprint": "23203e409e387b14", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/delivery/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-1ca3f9a1797936a2", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: apps/www/package.json"}, "properties": {"repobilityId": "92f23effe92ea6c1", "scanner": "scanner-primary", "fingerprint": "1ca3f9a1797936a2", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/www/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-b03de626e647c1a5", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: edge/control-plane/package.json"}, "properties": {"repobilityId": "27b77ae7c1ceb4a9", "scanner": "scanner-primary", "fingerprint": "b03de626e647c1a5", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "edge/control-plane/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "032cdaf7b9ae96ae", "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": "345af0ce3dd52c4e", "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": "b06f39a8f95a6eef", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-749d4bc1bd66df5f", "level": "warning", "message": {"text": "Agent instructions exist but release-hardening basics are missing"}, "properties": {"repobilityId": "983655464a91ca5a", "scanner": "scanner-primary", "fingerprint": "749d4bc1bd66df5f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-7fd1bb39f7c88c0e", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/crypto/src/index.ts:25"}, "properties": {"repobilityId": "b92a2dc38f9702be", "scanner": "scanner-primary", "fingerprint": "7fd1bb39f7c88c0e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-98a494a7e61bce6c", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/database/src/queries.ts:329"}, "properties": {"repobilityId": "f754026b17772f11", "scanner": "scanner-primary", "fingerprint": "98a494a7e61bce6c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-743aacaf73ade9dd", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/api/env.d.ts:1"}, "properties": {"repobilityId": "37ab3e71be88b25b", "scanner": "scanner-primary", "fingerprint": "743aacaf73ade9dd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3199d3fa594426fb", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/api/src/custom-hostnames.ts:151"}, "properties": {"repobilityId": "772985f82a450c94", "scanner": "scanner-primary", "fingerprint": "3199d3fa594426fb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f58083cade5e4364", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/api/src/durable-objects/vault.ts:1034"}, "properties": {"repobilityId": "0505d8669e1e8107", "scanner": "scanner-primary", "fingerprint": "f58083cade5e4364", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-81e007c6c672e8ef", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/api/src/database/queries.ts:78"}, "properties": {"repobilityId": "5516611a88386611", "scanner": "scanner-primary", "fingerprint": "81e007c6c672e8ef", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-611781a83f098aa5", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/api/src/middleware/auth.ts:22"}, "properties": {"repobilityId": "a193d70e807dd299", "scanner": "scanner-primary", "fingerprint": "611781a83f098aa5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-02c8d44b42d75fc3", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/api/src/routes/workspaces.ts:390"}, "properties": {"repobilityId": "3756c57d59fd3066", "scanner": "scanner-primary", "fingerprint": "02c8d44b42d75fc3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6fdd8f519ba9e213", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/api/src/routes/workspaces.ts:886"}, "properties": {"repobilityId": "49fdf384a9893378", "scanner": "scanner-primary", "fingerprint": "6fdd8f519ba9e213", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-90ebda090494664b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/api/test/workspace-ws.test.ts:10"}, "properties": {"repobilityId": "71d6febc688fe860", "scanner": "scanner-primary", "fingerprint": "90ebda090494664b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-563d4baa96013c9b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/api/test/health.test.ts:8"}, "properties": {"repobilityId": "a5d052cc90db243a", "scanner": "scanner-primary", "fingerprint": "563d4baa96013c9b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-801662e8f7d846aa", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/api/test/security.test.ts:19"}, "properties": {"repobilityId": "c31a0f181e25a657", "scanner": "scanner-primary", "fingerprint": "801662e8f7d846aa", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-53036f36e313f607", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/api/test/machine.test.ts:26"}, "properties": {"repobilityId": "d6bf2dd05614d92c", "scanner": "scanner-primary", "fingerprint": "53036f36e313f607", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d7abc7eeae33fa50", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/console/workers/app.ts:28"}, "properties": {"repobilityId": "7f87bf67fdf0985c", "scanner": "scanner-primary", "fingerprint": "d7abc7eeae33fa50", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c202d9eacdb6ddc3", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/console/app/lib/session.server.ts:82"}, "properties": {"repobilityId": "f023fb1e8af0d789", "scanner": "scanner-primary", "fingerprint": "c202d9eacdb6ddc3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6427297856aa671b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/console/app/lib/passkey.ts:15"}, "properties": {"repobilityId": "22f6e7bedcf45914", "scanner": "scanner-primary", "fingerprint": "6427297856aa671b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-89968ab5019f01cc", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/console/app/lib/workspace.server.ts:15"}, "properties": {"repobilityId": "3a3420177cb5d603", "scanner": "scanner-primary", "fingerprint": "89968ab5019f01cc", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-863049ce0c46e7ea", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/console/app/routes/sso.start.tsx:16"}, "properties": {"repobilityId": "e4ccec242444d1a9", "scanner": "scanner-primary", "fingerprint": "863049ce0c46e7ea", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-5bd0b28fa4925f08", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/console/app/routes/login.tsx:49"}, "properties": {"repobilityId": "044ccee4979c4026", "scanner": "scanner-primary", "fingerprint": "5bd0b28fa4925f08", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-baa9ddbcf9bc94c7", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/console/app/routes/dashboard.audit.tsx:56"}, "properties": {"repobilityId": "411a3a65ffeed2d4", "scanner": "scanner-primary", "fingerprint": "baa9ddbcf9bc94c7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-67ab5633706b571f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/console/app/routes/share.tsx:30"}, "properties": {"repobilityId": "2ab012e993b5ed44", "scanner": "scanner-primary", "fingerprint": "67ab5633706b571f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2142a95d539e3665", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/console/app/routes/verify-email.tsx:19"}, "properties": {"repobilityId": "660f9aeffcc89fff", "scanner": "scanner-primary", "fingerprint": "2142a95d539e3665", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-84769e6af1bcbb04", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/console/app/routes/oauth.start.tsx:17"}, "properties": {"repobilityId": "f8ec67eaeb0cf28e", "scanner": "scanner-primary", "fingerprint": "84769e6af1bcbb04", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c9470a45587320dc", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/console/app/routes/account-mfa.tsx:19"}, "properties": {"repobilityId": "143406b030c5f221", "scanner": "scanner-primary", "fingerprint": "c9470a45587320dc", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c41726f56e07638b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/console/app/routes/invite.tsx:31"}, "properties": {"repobilityId": "3acdc13927b0f51d", "scanner": "scanner-primary", "fingerprint": "c41726f56e07638b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-419ba4a0d7d7bc9f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/console/app/routes/sso-admin.tsx:36"}, "properties": {"repobilityId": "79690527581021c2", "scanner": "scanner-primary", "fingerprint": "419ba4a0d7d7bc9f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d3d5ae34d7b53e25", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/console/app/routes/saml-admin.tsx:35"}, "properties": {"repobilityId": "75216dc3fdb20235", "scanner": "scanner-primary", "fingerprint": "d3d5ae34d7b53e25", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-5ed35218d82d9666", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/console/app/routes/home.tsx:30"}, "properties": {"repobilityId": "497c366f975815c1", "scanner": "scanner-primary", "fingerprint": "5ed35218d82d9666", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-141b8463bad42c1c", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/console/app/routes/reset-password.tsx:22"}, "properties": {"repobilityId": "82e01bd12b56aade", "scanner": "scanner-primary", "fingerprint": "141b8463bad42c1c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c402871c06efee37", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/console/app/routes/saml.start.tsx:15"}, "properties": {"repobilityId": "4db8682d61cd86ff", "scanner": "scanner-primary", "fingerprint": "c402871c06efee37", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-37a548e806e35baf", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/console/app/routes/environment.tsx:278"}, "properties": {"repobilityId": "818abb6a41830527", "scanner": "scanner-primary", "fingerprint": "37a548e806e35baf", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-180d31b3b6252497", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/console/app/routes/environment.tsx:87"}, "properties": {"repobilityId": "3bfbc5519cc30e2f", "scanner": "scanner-primary", "fingerprint": "180d31b3b6252497", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-14ca8a846046bc03", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/console/app/routes/assistant.tsx:32"}, "properties": {"repobilityId": "b1bda54375f9ad2d", "scanner": "scanner-primary", "fingerprint": "14ca8a846046bc03", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a97e2ff3d431a776", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/console/app/routes/api.reveal-token.tsx:40"}, "properties": {"repobilityId": "589adae557b6aeab", "scanner": "scanner-primary", "fingerprint": "a97e2ff3d431a776", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e2207fb362587253", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/console/app/routes/dashboard.compare.tsx:69"}, "properties": {"repobilityId": "29a556a0515ee415", "scanner": "scanner-primary", "fingerprint": "e2207fb362587253", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e81a64b66f815c6c", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/console/app/routes/sso.callback.tsx:28"}, "properties": {"repobilityId": "a89d24d54952c339", "scanner": "scanner-primary", "fingerprint": "e81a64b66f815c6c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-8df9f10c684fdd75", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/console/app/routes/saml.acs.tsx:27"}, "properties": {"repobilityId": "75f040eeeae9c5bd", "scanner": "scanner-primary", "fingerprint": "8df9f10c684fdd75", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-888a2bc701ae495e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/console/app/routes/forgot-password.tsx:15"}, "properties": {"repobilityId": "ee6dbd07b27b12e1", "scanner": "scanner-primary", "fingerprint": "888a2bc701ae495e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f4e996ba94ba2772", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/console/app/routes/billing.tsx:36"}, "properties": {"repobilityId": "f49e07c9f82a62f2", "scanner": "scanner-primary", "fingerprint": "f4e996ba94ba2772", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-bc6ece4b3f31f87c", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/console/app/routes/scim.tsx:28"}, "properties": {"repobilityId": "ebc199a7b2fa0f0e", "scanner": "scanner-primary", "fingerprint": "bc6ece4b3f31f87c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c5f3290756436b76", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/console/app/routes/dashboard.notifications.tsx:56"}, "properties": {"repobilityId": "1a8af70bb0d3cc33", "scanner": "scanner-primary", "fingerprint": "c5f3290756436b76", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a525f69663ee4686", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/console/app/routes/domains.tsx:70"}, "properties": {"repobilityId": "1129234812c7a79f", "scanner": "scanner-primary", "fingerprint": "a525f69663ee4686", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3d4dc67a464d0d8b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/console/app/routes/share.view.tsx:21"}, "properties": {"repobilityId": "bb520d7830c67220", "scanner": "scanner-primary", "fingerprint": "3d4dc67a464d0d8b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-64da84970a1d0fbe", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/console/app/routes/dashboard.tsx:84"}, "properties": {"repobilityId": "6095344ef262a21b", "scanner": "scanner-primary", "fingerprint": "64da84970a1d0fbe", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-50ff63addf592d00", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/console/app/routes/api.passkey.tsx:34"}, "properties": {"repobilityId": "b5b327593aa9142f", "scanner": "scanner-primary", "fingerprint": "50ff63addf592d00", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9f6c74e71011eb23", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/console/app/routes/login.mfa.tsx:40"}, "properties": {"repobilityId": "96539dc65f59d2e6", "scanner": "scanner-primary", "fingerprint": "9f6c74e71011eb23", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f95426277e0b9ca6", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/console/app/routes/members.tsx:65"}, "properties": {"repobilityId": "96d0cd832664bc41", "scanner": "scanner-primary", "fingerprint": "f95426277e0b9ca6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-adc7dd020c9b1949", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/console/app/routes/oauth.callback.tsx:26"}, "properties": {"repobilityId": "adb38d1d4307e272", "scanner": "scanner-primary", "fingerprint": "adc7dd020c9b1949", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-6a445d0c2205062d", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/auth/src/index.ts:151"}, "properties": {"repobilityId": "a9eb8904ae65a5cb", "scanner": "scanner-primary", "fingerprint": "6a445d0c2205062d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4b02d0da0742e696", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/auth/test/routes.test.ts:23"}, "properties": {"repobilityId": "bd5dc266d6f9631b", "scanner": "scanner-primary", "fingerprint": "4b02d0da0742e696", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b8f88612fda576c9", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/delivery/src/index.ts:102"}, "properties": {"repobilityId": "d069af62da166a8b", "scanner": "scanner-primary", "fingerprint": "b8f88612fda576c9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9f95928976c37655", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/delivery/test/delivery.test.ts:24"}, "properties": {"repobilityId": "1350673902b23318", "scanner": "scanner-primary", "fingerprint": "9f95928976c37655", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2eafc3188c36bb02", "level": "none", "message": {"text": "3 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "bd934ba112b02ffa", "scanner": "scanner-primary", "fingerprint": "2eafc3188c36bb02", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "config-drift"]}}, {"ruleId": "scanner-0b5a23d4d60b229d", "level": "error", "message": {"text": "Dangling fetch: GET https://api.cloudflare.com/client/v4/zones/${config.zoneId}/custom_hostnames${path} (apps/api/src/custom-hostnames.ts:120)"}, "properties": {"repobilityId": "3d75da80a6b62366", "scanner": "scanner-primary", "fingerprint": "0b5a23d4d60b229d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-969fad22d08d4849", "level": "error", "message": {"text": "Dangling fetch: GET https://auth.internal/.well-known/jwks.json (apps/api/src/middleware/auth.ts:22)"}, "properties": {"repobilityId": "056393cc718cca09", "scanner": "scanner-primary", "fingerprint": "969fad22d08d4849", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-04c5e72af9204ef8", "level": "error", "message": {"text": "Dangling fetch: POST /dashboard/${encodeURIComponent(workspaceId)}/assistant (apps/console/app/lib/use-agent-chat.ts:58)"}, "properties": {"repobilityId": "baa80e58a5d9db09", "scanner": "scanner-primary", "fingerprint": "04c5e72af9204ef8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-eb3664637004bdf6", "level": "error", "message": {"text": "Dangling fetch: POST /api/passkey (apps/console/app/lib/passkey.ts:15)"}, "properties": {"repobilityId": "5bbf47987d50ce65", "scanner": "scanner-primary", "fingerprint": "eb3664637004bdf6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-305c95eeba73acfb", "level": "error", "message": {"text": "Dangling fetch: POST /api/reveal-token (apps/console/app/lib/passkey.ts:58)"}, "properties": {"repobilityId": "6183293909395a35", "scanner": "scanner-primary", "fingerprint": "305c95eeba73acfb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d61adaf04525ecd0", "level": "error", "message": {"text": "Dangling fetch: GET https://api/api/v1/workspaces/${workspaceId} (apps/console/app/lib/workspace.server.ts:15)"}, "properties": {"repobilityId": "1047875dba88149d", "scanner": "scanner-primary", "fingerprint": "d61adaf04525ecd0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0c8a14789c159a8b", "level": "error", "message": {"text": "Dangling fetch: POST https://auth/orgs/${orgId}/sso/start (apps/console/app/routes/sso.start.tsx:16)"}, "properties": {"repobilityId": "b987d92b0b03b994", "scanner": "scanner-primary", "fingerprint": "0c8a14789c159a8b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e6a40410517ecf6b", "level": "error", "message": {"text": "Dangling fetch: POST https://auth${path} (apps/console/app/routes/login.tsx:49)"}, "properties": {"repobilityId": "05683ebeeae88dcc", "scanner": "scanner-primary", "fingerprint": "e6a40410517ecf6b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f7ddcc8789888a24", "level": "error", "message": {"text": "Dangling fetch: POST https://auth/token (apps/console/app/routes/login.tsx:69)"}, "properties": {"repobilityId": "16fc515a0a0d2461", "scanner": "scanner-primary", "fingerprint": "f7ddcc8789888a24", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-111dfbc525112de7", "level": "error", "message": {"text": "Dangling fetch: POST https://api/api/v1/shares (apps/console/app/routes/share.tsx:30)"}, "properties": {"repobilityId": "c9acbb11f9e0e3cd", "scanner": "scanner-primary", "fingerprint": "111dfbc525112de7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8bab83100092b370", "level": "error", "message": {"text": "Dangling fetch: POST https://auth/verify-email (apps/console/app/routes/verify-email.tsx:19)"}, "properties": {"repobilityId": "c4bc4336d3ba5900", "scanner": "scanner-primary", "fingerprint": "8bab83100092b370", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2e268b9179008315", "level": "error", "message": {"text": "Dangling fetch: POST https://auth/oauth/${provider}/start (apps/console/app/routes/oauth.start.tsx:17)"}, "properties": {"repobilityId": "ee74f93cd728a7f9", "scanner": "scanner-primary", "fingerprint": "2e268b9179008315", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-36139189a35a7b08", "level": "error", "message": {"text": "Dangling fetch: GET https://auth${path} (apps/console/app/routes/account-mfa.tsx:19)"}, "properties": {"repobilityId": "8027403ff510c3e4", "scanner": "scanner-primary", "fingerprint": "36139189a35a7b08", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f8b14554aa545f35", "level": "error", "message": {"text": "Dangling fetch: GET https://api/api/v1/organizations (apps/console/app/routes/sso-admin.tsx:36)"}, "properties": {"repobilityId": "cdb66530bb5e6b38", "scanner": "scanner-primary", "fingerprint": "f8b14554aa545f35", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-94feecfdb3cd8368", "level": "error", "message": {"text": "Dangling fetch: GET https://auth/orgs/${params.orgId}/sso/connection (apps/console/app/routes/sso-admin.tsx:57)"}, "properties": {"repobilityId": "7214a53592726f87", "scanner": "scanner-primary", "fingerprint": "94feecfdb3cd8368", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0af537e0cdc0cfd4", "level": "error", "message": {"text": "Dangling fetch: PUT https://auth/orgs/${params.orgId}/sso/connection (apps/console/app/routes/sso-admin.tsx:90)"}, "properties": {"repobilityId": "1e6e2c13d52d5f68", "scanner": "scanner-primary", "fingerprint": "0af537e0cdc0cfd4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-962fe36c0db670c2", "level": "error", "message": {"text": "Dangling fetch: GET https://api/api/v1/organizations (apps/console/app/routes/saml-admin.tsx:35)"}, "properties": {"repobilityId": "6e167a1b5a3530b2", "scanner": "scanner-primary", "fingerprint": "962fe36c0db670c2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a5f5b4debe6ffa62", "level": "error", "message": {"text": "Dangling fetch: GET https://auth/orgs/${params.orgId}/saml/connection (apps/console/app/routes/saml-admin.tsx:58)"}, "properties": {"repobilityId": "e8d4f0722727f6a9", "scanner": "scanner-primary", "fingerprint": "a5f5b4debe6ffa62", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e565daf129b1daaf", "level": "error", "message": {"text": "Dangling fetch: PUT https://auth/orgs/${params.orgId}/saml/connection (apps/console/app/routes/saml-admin.tsx:89)"}, "properties": {"repobilityId": "67f66e6f2f4c9acd", "scanner": "scanner-primary", "fingerprint": "e565daf129b1daaf", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e10e797713e27c90", "level": "error", "message": {"text": "Dangling fetch: GET https://api/api/v1/organizations (apps/console/app/routes/home.tsx:30)"}, "properties": {"repobilityId": "3f24166438347719", "scanner": "scanner-primary", "fingerprint": "e10e797713e27c90", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-20730f25fa48fac8", "level": "error", "message": {"text": "Dangling fetch: GET https://auth/me (apps/console/app/routes/home.tsx:33)"}, "properties": {"repobilityId": "14c49d28d90007b1", "scanner": "scanner-primary", "fingerprint": "20730f25fa48fac8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6a542f47a18cafc2", "level": "error", "message": {"text": "Dangling fetch: GET https://api/api/v1/organizations/${org.id}/workspaces (apps/console/app/routes/home.tsx:54)"}, "properties": {"repobilityId": "27dbb8a8f4596168", "scanner": "scanner-primary", "fingerprint": "6a542f47a18cafc2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-efb55d0383b2ad96", "level": "error", "message": {"text": "Dangling fetch: POST https://auth/verify-email/resend (apps/console/app/routes/home.tsx:76)"}, "properties": {"repobilityId": "03fd9ea3816c44c0", "scanner": "scanner-primary", "fingerprint": "efb55d0383b2ad96", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-83918c8c1511c5ba", "level": "error", "message": {"text": "Dangling fetch: POST https://api/api/v1/organizations (apps/console/app/routes/home.tsx:92)"}, "properties": {"repobilityId": "17feb41040deb4a8", "scanner": "scanner-primary", "fingerprint": "83918c8c1511c5ba", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c8dd6ca365dbf39b", "level": "error", "message": {"text": "Dangling fetch: POST https://api/api/v1/organizations/${orgId}/workspaces (apps/console/app/routes/home.tsx:103)"}, "properties": {"repobilityId": "472b681846226634", "scanner": "scanner-primary", "fingerprint": "c8dd6ca365dbf39b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-586f3af8191624ab", "level": "error", "message": {"text": "Dangling fetch: POST https://auth/password/reset (apps/console/app/routes/reset-password.tsx:22)"}, "properties": {"repobilityId": "6877459deaa79d58", "scanner": "scanner-primary", "fingerprint": "586f3af8191624ab", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ed853026e12802e7", "level": "error", "message": {"text": "Dangling fetch: POST https://auth/orgs/${orgId}/saml/start (apps/console/app/routes/saml.start.tsx:15)"}, "properties": {"repobilityId": "06f302c65a04cb2c", "scanner": "scanner-primary", "fingerprint": "ed853026e12802e7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-bb11ece377459bfa", "level": "error", "message": {"text": "Dangling fetch: GET https://api/api/v1/workspaces${path} (apps/console/app/routes/environment.tsx:87)"}, "properties": {"repobilityId": "f54d10db1911b3af", "scanner": "scanner-primary", "fingerprint": "bb11ece377459bfa", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-654e57e861b9ae9d", "level": "error", "message": {"text": "Dangling fetch: POST https://api/api/v1/workspaces/${params.workspaceId}/assistant (apps/console/app/routes/assistant.tsx:32)"}, "properties": {"repobilityId": "3b759e05d4311391", "scanner": "scanner-primary", "fingerprint": "654e57e861b9ae9d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0b2e3ca9e8300bf1", "level": "error", "message": {"text": "Dangling fetch: GET https://api/api/v1/workspaces/${encodeURIComponent(body.workspaceId)} (apps/console/app/routes/api.reveal-token.tsx:40)"}, "properties": {"repobilityId": "6a08b20162ab79ce", "scanner": "scanner-primary", "fingerprint": "0b2e3ca9e8300bf1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-87c67477c568db12", "level": "error", "message": {"text": "Dangling fetch: POST https://auth/webauthn/auth/options (apps/console/app/routes/api.reveal-token.tsx:52)"}, "properties": {"repobilityId": "43f46a4384bf0152", "scanner": "scanner-primary", "fingerprint": "87c67477c568db12", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e4c44addd2e659c5", "level": "error", "message": {"text": "Dangling fetch: POST https://auth/reauth (apps/console/app/routes/api.reveal-token.tsx:69)"}, "properties": {"repobilityId": "61630149e4ae398a", "scanner": "scanner-primary", "fingerprint": "e4c44addd2e659c5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-63c95beb3fc9141e", "level": "error", "message": {"text": "Dangling fetch: POST https://auth/reauth (apps/console/app/routes/api.reveal-token.tsx:102)"}, "properties": {"repobilityId": "befd382fc4715512", "scanner": "scanner-primary", "fingerprint": "63c95beb3fc9141e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2c9cce39a9052ce8", "level": "error", "message": {"text": "Dangling fetch: POST https://api/api/v1/workspaces/${params.workspaceId}/promotion-workflows (apps/console/app/routes/dashboard.compare.tsx:114)"}, "properties": {"repobilityId": "65129958178b0d0e", "scanner": "scanner-primary", "fingerprint": "2c9cce39a9052ce8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-477cdf587f5d869e", "level": "error", "message": {"text": "Dangling fetch: POST https://api/api/v1/workspaces/${params.workspaceId}/promotion-workflows (apps/console/app/routes/dashboard.compare.tsx:136)"}, "properties": {"repobilityId": "31e062197a50981f", "scanner": "scanner-primary", "fingerprint": "477cdf587f5d869e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-89d0dda7bb9e9617", "level": "error", "message": {"text": "Dangling fetch: POST https://auth/orgs/${orgId}/sso/callback (apps/console/app/routes/sso.callback.tsx:28)"}, "properties": {"repobilityId": "661f748196960eec", "scanner": "scanner-primary", "fingerprint": "89d0dda7bb9e9617", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-14dd46f724333c13", "level": "error", "message": {"text": "Dangling fetch: POST https://auth/internal/sso/provision (apps/console/app/routes/sso.callback.tsx:43)"}, "properties": {"repobilityId": "a837d35b85240743", "scanner": "scanner-primary", "fingerprint": "14dd46f724333c13", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6ee5a8b27a23fe47", "level": "error", "message": {"text": "Dangling fetch: POST https://auth/token (apps/console/app/routes/sso.callback.tsx:52)"}, "properties": {"repobilityId": "c0e6eaeee4e33c43", "scanner": "scanner-primary", "fingerprint": "6ee5a8b27a23fe47", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-78fb17a8610aa071", "level": "error", "message": {"text": "Dangling fetch: POST https://auth/orgs/${orgId}/saml/acs (apps/console/app/routes/saml.acs.tsx:27)"}, "properties": {"repobilityId": "a2e82380dfc9ca26", "scanner": "scanner-primary", "fingerprint": "78fb17a8610aa071", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-681a635d6ba908cc", "level": "error", "message": {"text": "Dangling fetch: POST https://auth/internal/sso/provision (apps/console/app/routes/saml.acs.tsx:36)"}, "properties": {"repobilityId": "9250038d5b6d6ccb", "scanner": "scanner-primary", "fingerprint": "681a635d6ba908cc", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1a4921493fc87c3b", "level": "error", "message": {"text": "Dangling fetch: POST https://auth/token (apps/console/app/routes/saml.acs.tsx:45)"}, "properties": {"repobilityId": "51c4ac04f689ad53", "scanner": "scanner-primary", "fingerprint": "1a4921493fc87c3b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e4945a76c5fe7999", "level": "error", "message": {"text": "Dangling fetch: POST https://auth/password/forgot (apps/console/app/routes/forgot-password.tsx:15)"}, "properties": {"repobilityId": "d8b465bf75fbb516", "scanner": "scanner-primary", "fingerprint": "e4945a76c5fe7999", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-34be63b466fe3c00", "level": "error", "message": {"text": "Dangling fetch: GET https://api/api/v1/organizations (apps/console/app/routes/billing.tsx:36)"}, "properties": {"repobilityId": "2693ce85b7f2bf47", "scanner": "scanner-primary", "fingerprint": "34be63b466fe3c00", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-322db5f096d73a63", "level": "error", "message": {"text": "Dangling fetch: GET https://billing/billing/status?organizationId=${params.orgId} (apps/console/app/routes/billing.tsx:58)"}, "properties": {"repobilityId": "0657d19a38fab053", "scanner": "scanner-primary", "fingerprint": "322db5f096d73a63", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9d863c6727847460", "level": "error", "message": {"text": "Dangling fetch: POST https://billing/billing/checkout (apps/console/app/routes/billing.tsx:96)"}, "properties": {"repobilityId": "a46b917aebba3d9c", "scanner": "scanner-primary", "fingerprint": "9d863c6727847460", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c4ee84900760217a", "level": "error", "message": {"text": "Dangling fetch: POST https://billing/billing/portal (apps/console/app/routes/billing.tsx:113)"}, "properties": {"repobilityId": "9b4945b7df79dfab", "scanner": "scanner-primary", "fingerprint": "c4ee84900760217a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-033c76098f9179b4", "level": "error", "message": {"text": "Dangling fetch: GET https://api/api/v1/organizations (apps/console/app/routes/scim.tsx:28)"}, "properties": {"repobilityId": "c558c778f8033ee0", "scanner": "scanner-primary", "fingerprint": "033c76098f9179b4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6298dbfab97daa89", "level": "error", "message": {"text": "Dangling fetch: GET https://api/api/v1/organizations/${params.orgId}/scim-token (apps/console/app/routes/scim.tsx:39)"}, "properties": {"repobilityId": "14c79194b93265f6", "scanner": "scanner-primary", "fingerprint": "6298dbfab97daa89", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7adcabb2e5533793", "level": "error", "message": {"text": "Dangling fetch: GET https://api/api/v1/workspaces${path} (apps/console/app/routes/dashboard.notifications.tsx:56)"}, "properties": {"repobilityId": "63eaaba82dc85d68", "scanner": "scanner-primary", "fingerprint": "7adcabb2e5533793", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-771793388d285047", "level": "error", "message": {"text": "Dangling fetch: GET https://api/api/v1/organizations (apps/console/app/routes/domains.tsx:70)"}, "properties": {"repobilityId": "b0b23777caae8158", "scanner": "scanner-primary", "fingerprint": "771793388d285047", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c64bc3e5117d89a7", "level": "error", "message": {"text": "Dangling fetch: GET https://api/api/v1/organizations/${params.orgId}/domains (apps/console/app/routes/domains.tsx:82)"}, "properties": {"repobilityId": "a9e9f9845cdb8c86", "scanner": "scanner-primary", "fingerprint": "c64bc3e5117d89a7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3bd4c611b8d5b821", "level": "error", "message": {"text": "Dangling fetch: POST https://api/internal/shares/${params.id}/consume (apps/console/app/routes/share.view.tsx:21)"}, "properties": {"repobilityId": "67e8874bdcae1c96", "scanner": "scanner-primary", "fingerprint": "3bd4c611b8d5b821", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-eb23119c6f3117b9", "level": "error", "message": {"text": "Dangling fetch: POST https://auth/webauthn/register/options (apps/console/app/routes/api.passkey.tsx:34)"}, "properties": {"repobilityId": "17687ea261addd4d", "scanner": "scanner-primary", "fingerprint": "eb23119c6f3117b9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-07da48247ab67eec", "level": "error", "message": {"text": "Dangling fetch: POST https://auth/webauthn/register/verify (apps/console/app/routes/api.passkey.tsx:55)"}, "properties": {"repobilityId": "1218fd72abd77b03", "scanner": "scanner-primary", "fingerprint": "07da48247ab67eec", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-897c4a40dd89323e", "level": "error", "message": {"text": "Dangling fetch: POST https://auth/webauthn/auth/options (apps/console/app/routes/api.passkey.tsx:77)"}, "properties": {"repobilityId": "12793bb4f6846139", "scanner": "scanner-primary", "fingerprint": "897c4a40dd89323e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-cb567c10966ec769", "level": "error", "message": {"text": "Dangling fetch: POST https://auth/webauthn/auth/verify (apps/console/app/routes/api.passkey.tsx:92)"}, "properties": {"repobilityId": "357e816df5b98f8a", "scanner": "scanner-primary", "fingerprint": "cb567c10966ec769", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2c8935ee500ba6f0", "level": "error", "message": {"text": "Dangling fetch: POST https://auth/token (apps/console/app/routes/api.passkey.tsx:110)"}, "properties": {"repobilityId": "e453001a4e82a9bd", "scanner": "scanner-primary", "fingerprint": "2c8935ee500ba6f0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e4905fce807399d3", "level": "error", "message": {"text": "Dangling fetch: POST https://auth${path} (apps/console/app/routes/login.mfa.tsx:40)"}, "properties": {"repobilityId": "68fb829e983abc5a", "scanner": "scanner-primary", "fingerprint": "e4905fce807399d3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5b7be94eeb73cbcf", "level": "error", "message": {"text": "Dangling fetch: POST https://auth/token (apps/console/app/routes/login.mfa.tsx:49)"}, "properties": {"repobilityId": "b0fea17a712a1d30", "scanner": "scanner-primary", "fingerprint": "5b7be94eeb73cbcf", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f8fe6dcfcb5bf551", "level": "error", "message": {"text": "Dangling fetch: GET https://api/api/v1/organizations (apps/console/app/routes/members.tsx:65)"}, "properties": {"repobilityId": "00aaac45437c8c29", "scanner": "scanner-primary", "fingerprint": "f8fe6dcfcb5bf551", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-507cc51a0773072a", "level": "error", "message": {"text": "Dangling fetch: GET https://api/api/v1/organizations/${params.orgId}/members (apps/console/app/routes/members.tsx:74)"}, "properties": {"repobilityId": "ca04ddc66d3843b9", "scanner": "scanner-primary", "fingerprint": "507cc51a0773072a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-eb9fb8233aa954a7", "level": "error", "message": {"text": "Dangling fetch: GET https://api/api/v1/organizations/${params.orgId}/invitations (apps/console/app/routes/members.tsx:88)"}, "properties": {"repobilityId": "1ae41f85c9820ddb", "scanner": "scanner-primary", "fingerprint": "eb9fb8233aa954a7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-14ff179cd2027230", "level": "error", "message": {"text": "Dangling fetch: GET https://api/api/v1/organizations/${params.orgId}/security (apps/console/app/routes/members.tsx:91)"}, "properties": {"repobilityId": "845d2fad9e32c0f8", "scanner": "scanner-primary", "fingerprint": "14ff179cd2027230", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-fbfd8ca4c6b9d102", "level": "error", "message": {"text": "Dangling fetch: POST https://api/api/v1/organizations/${params.orgId}/invitations/${id}/resend (apps/console/app/routes/members.tsx:139)"}, "properties": {"repobilityId": "131d533518c851a4", "scanner": "scanner-primary", "fingerprint": "fbfd8ca4c6b9d102", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5ebe7d45b4beb587", "level": "error", "message": {"text": "Dangling fetch: PATCH https://api/api/v1/organizations/${params.orgId}/security (apps/console/app/routes/members.tsx:178)"}, "properties": {"repobilityId": "fbb0ff31b45195ce", "scanner": "scanner-primary", "fingerprint": "5ebe7d45b4beb587", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6bcdb077025bd8bb", "level": "error", "message": {"text": "Dangling fetch: POST https://auth/oauth/${provider}/callback (apps/console/app/routes/oauth.callback.tsx:26)"}, "properties": {"repobilityId": "5553f7e226c586d4", "scanner": "scanner-primary", "fingerprint": "6bcdb077025bd8bb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6e468a11ddabf6ae", "level": "error", "message": {"text": "Dangling fetch: POST https://auth/token (apps/console/app/routes/oauth.callback.tsx:39)"}, "properties": {"repobilityId": "d29bf3a4da1b2d3a", "scanner": "scanner-primary", "fingerprint": "6e468a11ddabf6ae", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-684f0e83ba7e1558", "level": "note", "message": {"text": "Unused endpoint: GET "}, "properties": {"repobilityId": "aaed21cc12f19f32", "scanner": "scanner-primary", "fingerprint": "684f0e83ba7e1558", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-765b3181318378b8", "level": "note", "message": {"text": "Unused endpoint: USE /api/v1/*"}, "properties": {"repobilityId": "58f0c82e8a7fa480", "scanner": "scanner-primary", "fingerprint": "765b3181318378b8", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8881940fe74c3240", "level": "note", "message": {"text": "Unused endpoint: USE /api/v1/workspaces/:workspaceId/*"}, "properties": {"repobilityId": "9b5f00b5e1f05a14", "scanner": "scanner-primary", "fingerprint": "8881940fe74c3240", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-fa553c51f3ff97c2", "level": "note", "message": {"text": "Unused endpoint: USE /scim/*"}, "properties": {"repobilityId": "13dafdd2b794404a", "scanner": "scanner-primary", "fingerprint": "fa553c51f3ff97c2", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-385f12c33ddf1192", "level": "note", "message": {"text": "Unused endpoint: USE /mcp/:workspaceId"}, "properties": {"repobilityId": "0e85c7aedfc7eb4a", "scanner": "scanner-primary", "fingerprint": "385f12c33ddf1192", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-06e26a5c1e867914", "level": "note", "message": {"text": "Unused endpoint: POST /sign-up/email"}, "properties": {"repobilityId": "1e07dda96a26c9c4", "scanner": "scanner-primary", "fingerprint": "06e26a5c1e867914", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-0c3bb6af93b4422a", "level": "note", "message": {"text": "Unused endpoint: POST /verify-email"}, "properties": {"repobilityId": "47ec3540c82ce456", "scanner": "scanner-primary", "fingerprint": "0c3bb6af93b4422a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c463cd061b907cbe", "level": "note", "message": {"text": "Unused endpoint: POST /sign-in/email"}, "properties": {"repobilityId": "c528ccd7927ffb85", "scanner": "scanner-primary", "fingerprint": "c463cd061b907cbe", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1f0ac8f62c3962a2", "level": "note", "message": {"text": "Unused endpoint: POST /mfa/totp/authenticate"}, "properties": {"repobilityId": "e8fdf7630efb0166", "scanner": "scanner-primary", "fingerprint": "1f0ac8f62c3962a2", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-fd1dc91abf32142d", "level": "note", "message": {"text": "Unused endpoint: GET /me"}, "properties": {"repobilityId": "985687ea2b926c87", "scanner": "scanner-primary", "fingerprint": "fd1dc91abf32142d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-fb2792619b932210", "level": "note", "message": {"text": "Unused endpoint: POST /verify-email/resend"}, "properties": {"repobilityId": "3ca3fb03054fa1cb", "scanner": "scanner-primary", "fingerprint": "fb2792619b932210", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-348a16e09461a781", "level": "note", "message": {"text": "Unused endpoint: POST /password/forgot"}, "properties": {"repobilityId": "ecaa7969f23984f0", "scanner": "scanner-primary", "fingerprint": "348a16e09461a781", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a4b0a2af42d88af2", "level": "note", "message": {"text": "Unused endpoint: POST /password/reset"}, "properties": {"repobilityId": "b531e40944950c54", "scanner": "scanner-primary", "fingerprint": "a4b0a2af42d88af2", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c392467ad66119ce", "level": "note", "message": {"text": "Unused endpoint: POST /password/change"}, "properties": {"repobilityId": "b2e48adb4f7f1d8a", "scanner": "scanner-primary", "fingerprint": "c392467ad66119ce", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-56cd7eb3e77fe1ba", "level": "note", "message": {"text": "Unused endpoint: GET /mfa/status"}, "properties": {"repobilityId": "2243cd1a79fa64be", "scanner": "scanner-primary", "fingerprint": "56cd7eb3e77fe1ba", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d24aeba793bf7ba0", "level": "note", "message": {"text": "Unused endpoint: POST /mfa/totp/setup"}, "properties": {"repobilityId": "16bcca77d7d42964", "scanner": "scanner-primary", "fingerprint": "d24aeba793bf7ba0", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-504eb02671a5a74d", "level": "note", "message": {"text": "Unused endpoint: POST /mfa/totp/confirm"}, "properties": {"repobilityId": "6d51789757dfcac4", "scanner": "scanner-primary", "fingerprint": "504eb02671a5a74d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a16afef578de1632", "level": "note", "message": {"text": "Unused endpoint: POST /mfa/totp/disable"}, "properties": {"repobilityId": "ef1d38a67dd4422b", "scanner": "scanner-primary", "fingerprint": "a16afef578de1632", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-bd864e3825f21a48", "level": "note", "message": {"text": "Unused endpoint: POST /mfa/recovery/authenticate"}, "properties": {"repobilityId": "482caffa56b6c74e", "scanner": "scanner-primary", "fingerprint": "bd864e3825f21a48", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c6ad8fcb4543102e", "level": "note", "message": {"text": "Unused endpoint: POST /mfa/recovery/regenerate"}, "properties": {"repobilityId": "c97fb2194b8feb10", "scanner": "scanner-primary", "fingerprint": "c6ad8fcb4543102e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b15d518d538de57d", "level": "note", "message": {"text": "Unused endpoint: GET /sessions"}, "properties": {"repobilityId": "2e3b1f9d489c78ac", "scanner": "scanner-primary", "fingerprint": "b15d518d538de57d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7afca7e8d8045bf3", "level": "note", "message": {"text": "Unused endpoint: POST /sessions/revoke-all"}, "properties": {"repobilityId": "77252115119a13d5", "scanner": "scanner-primary", "fingerprint": "7afca7e8d8045bf3", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-734e231c5e366e27", "level": "note", "message": {"text": "Unused endpoint: POST /sessions/:id/revoke"}, "properties": {"repobilityId": "dc5f659860636a7a", "scanner": "scanner-primary", "fingerprint": "734e231c5e366e27", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2e80f766ca513362", "level": "note", "message": {"text": "Unused endpoint: POST /webauthn/register/options"}, "properties": {"repobilityId": "729f5a217faa2674", "scanner": "scanner-primary", "fingerprint": "2e80f766ca513362", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-15215d8c284261c5", "level": "note", "message": {"text": "Unused endpoint: POST /webauthn/register/verify"}, "properties": {"repobilityId": "14233d0598f050df", "scanner": "scanner-primary", "fingerprint": "15215d8c284261c5", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-dc916ff3a58ba55e", "level": "note", "message": {"text": "Unused endpoint: POST /webauthn/auth/options"}, "properties": {"repobilityId": "6b2df8d5865683b7", "scanner": "scanner-primary", "fingerprint": "dc916ff3a58ba55e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f929d6d6414caf4a", "level": "note", "message": {"text": "Unused endpoint: POST /webauthn/auth/verify"}, "properties": {"repobilityId": "fdd2ec11445553ed", "scanner": "scanner-primary", "fingerprint": "f929d6d6414caf4a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e9616a808b708fdd", "level": "note", "message": {"text": "Unused endpoint: POST /reauth"}, "properties": {"repobilityId": "90bdc6d2afcd4e8d", "scanner": "scanner-primary", "fingerprint": "e9616a808b708fdd", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-fe615b0229fea310", "level": "note", "message": {"text": "Unused endpoint: POST /oauth/:provider/start"}, "properties": {"repobilityId": "aae89bdc37ff0007", "scanner": "scanner-primary", "fingerprint": "fe615b0229fea310", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-797acda67ac1c983", "level": "note", "message": {"text": "Unused endpoint: POST /oauth/:provider/callback"}, "properties": {"repobilityId": "f3df85f0283b437c", "scanner": "scanner-primary", "fingerprint": "797acda67ac1c983", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-64cbb9739f91f124", "level": "note", "message": {"text": "Unused endpoint: POST /sign-out"}, "properties": {"repobilityId": "ff5ec6ce03edb5e1", "scanner": "scanner-primary", "fingerprint": "64cbb9739f91f124", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1daa53f3c56e6b16", "level": "note", "message": {"text": "Unused endpoint: GET /session"}, "properties": {"repobilityId": "ad3b592fa67f1c8d", "scanner": "scanner-primary", "fingerprint": "1daa53f3c56e6b16", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-358815753e8867f1", "level": "note", "message": {"text": "Unused endpoint: POST /token"}, "properties": {"repobilityId": "370f49571dae6b9e", "scanner": "scanner-primary", "fingerprint": "358815753e8867f1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-0dcb111defa57ee0", "level": "note", "message": {"text": "Unused endpoint: POST /internal/sso/provision"}, "properties": {"repobilityId": "951d372e3c1960fe", "scanner": "scanner-primary", "fingerprint": "0dcb111defa57ee0", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-706a85d71c2dc66e", "level": "note", "message": {"text": "Unused endpoint: USE /orgs/:orgId/sso/*"}, "properties": {"repobilityId": "384c8feacfd8cb9d", "scanner": "scanner-primary", "fingerprint": "706a85d71c2dc66e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1a35b53c041acc3c", "level": "note", "message": {"text": "Unused endpoint: USE /orgs/:orgId/saml/*"}, "properties": {"repobilityId": "5f3a33c242256333", "scanner": "scanner-primary", "fingerprint": "1a35b53c041acc3c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-94fc026d77c6599a", "level": "note", "message": {"text": "Unused endpoint: USE /orgs/:orgId/*"}, "properties": {"repobilityId": "c0c39e2522280af6", "scanner": "scanner-primary", "fingerprint": "94fc026d77c6599a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a798034b9720c7d0", "level": "note", "message": {"text": "Unused endpoint: PUT /orgs/:orgId/sso/connection"}, "properties": {"repobilityId": "e6adc4dad321f6a1", "scanner": "scanner-primary", "fingerprint": "a798034b9720c7d0", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-15a3af4658d079b4", "level": "note", "message": {"text": "Unused endpoint: GET /orgs/:orgId/sso/connection"}, "properties": {"repobilityId": "6b2b82972ec985df", "scanner": "scanner-primary", "fingerprint": "15a3af4658d079b4", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-661b11b064016bbf", "level": "note", "message": {"text": "Unused endpoint: POST /orgs/:orgId/sso/start"}, "properties": {"repobilityId": "21751dc4b0441173", "scanner": "scanner-primary", "fingerprint": "661b11b064016bbf", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ceba7a3d8b60baef", "level": "note", "message": {"text": "Unused endpoint: POST /orgs/:orgId/sso/callback"}, "properties": {"repobilityId": "fc3158b41d388938", "scanner": "scanner-primary", "fingerprint": "ceba7a3d8b60baef", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-350aa621d39c845b", "level": "note", "message": {"text": "Unused endpoint: PUT /orgs/:orgId/saml/connection"}, "properties": {"repobilityId": "26fbbb25e040c12d", "scanner": "scanner-primary", "fingerprint": "350aa621d39c845b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-00c065d5f14fb020", "level": "note", "message": {"text": "Unused endpoint: GET /orgs/:orgId/saml/connection"}, "properties": {"repobilityId": "9bc48ed76773bdce", "scanner": "scanner-primary", "fingerprint": "00c065d5f14fb020", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-51cb7905381836d4", "level": "note", "message": {"text": "Unused endpoint: POST /orgs/:orgId/saml/start"}, "properties": {"repobilityId": "6d3f7ebdb9d4056d", "scanner": "scanner-primary", "fingerprint": "51cb7905381836d4", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-fcbea2477bb68249", "level": "note", "message": {"text": "Unused endpoint: POST /orgs/:orgId/saml/acs"}, "properties": {"repobilityId": "25825f0eebe539fe", "scanner": "scanner-primary", "fingerprint": "fcbea2477bb68249", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-93c52fb582f1c330", "level": "note", "message": {"text": "Unused endpoint: USE /v1/*"}, "properties": {"repobilityId": "dbb72c3fef7a2de7", "scanner": "scanner-primary", "fingerprint": "93c52fb582f1c330", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-16a781fb1b01bf87", "level": "note", "message": {"text": "Unused endpoint: GET /v1/configs/:key"}, "properties": {"repobilityId": "6c555ed0d548e370", "scanner": "scanner-primary", "fingerprint": "16a781fb1b01bf87", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-66e54d6652ec0ca8", "level": "note", "message": {"text": "Unused endpoint: GET /v1/flags/:key"}, "properties": {"repobilityId": "badf270b422bc22b", "scanner": "scanner-primary", "fingerprint": "66e54d6652ec0ca8", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a880a469564699b4", "level": "note", "message": {"text": "Unused endpoint: GET /v1/export"}, "properties": {"repobilityId": "8f9dbe7e2c5f2675", "scanner": "scanner-primary", "fingerprint": "a880a469564699b4", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1bbbc6a824345387", "level": "note", "message": {"text": "Unused endpoint: POST /v1/batch"}, "properties": {"repobilityId": "0daea2a373139221", "scanner": "scanner-primary", "fingerprint": "1bbbc6a824345387", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}