{"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-3fdf61cb384b4a75", "name": "Stray `console.log` in TS/JS \u2014 scripts/generate-all-videos.js:51", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/generate-all-videos.js:51"}, "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-b93c9d86850bcea2", "name": "Stray `console.log` in TS/JS \u2014 scripts/generate-social-assets.js:122", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/generate-social-assets.js:122"}, "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-1b41b0cb5d8ab9b4", "name": "Stray `console.log` in TS/JS \u2014 scripts/generate-content-json.js:882", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/generate-content-json.js:882"}, "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-69d58274c5142f51", "name": "Stray `console.log` in TS/JS \u2014 scripts/generate-social-video.js:118", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/generate-social-video.js:118"}, "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-1e97985e1a6f2e37", "name": "Stray `console.log` in TS/JS \u2014 marketing/automation/scripts/bluesky-promo.ts:72", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 marketing/automation/scripts/bluesky-promo.ts:72"}, "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-89273d5bd7a72949", "name": "Stray `console.log` in TS/JS \u2014 marketing/automation/scripts/social-launch.ts:67", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 marketing/automation/scripts/social-launch.ts:67"}, "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-169ac9e009e2253d", "name": "Stray `console.log` in TS/JS \u2014 marketing/automation/src/run.ts:92", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 marketing/automation/src/run.ts:92"}, "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-288029c4e1edeb5b", "name": "Stray `console.log` in TS/JS \u2014 marketing/automation/src/seo.ts:207", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 marketing/automation/src/seo.ts:207"}, "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-a9169b2a514ce5f7", "name": "Stray `console.log` in TS/JS \u2014 marketing/automation/src/engage.ts:111", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 marketing/automation/src/engage.ts:111"}, "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-a77d4962e2fb46bf", "name": "Stray `console.log` in TS/JS \u2014 marketing/automation/src/post.ts:228", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 marketing/automation/src/post.ts:228"}, "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-bf9837eb346592cf", "name": "Stray `console.log` in TS/JS \u2014 marketing/automation/src/batch.ts:96", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 marketing/automation/src/batch.ts:96"}, "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-9da68dd3ee301cc8", "name": "Stray `console.log` in TS/JS \u2014 mobile/scripts/generate-icons.js:67", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 mobile/scripts/generate-icons.js:67"}, "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-d98e62a0a092d690", "name": "Stray `console.log` in TS/JS \u2014 cloudflare/worker-configuration.d.ts:203", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 cloudflare/worker-configuration.d.ts:203"}, "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-56eb593d0f23975c", "name": "TODO/FIXME marker in shipping code \u2014 cloudflare/frontend/src/loom/components/AppFrame.tsx:24", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 cloudflare/frontend/src/loom/components/AppFrame.tsx:24"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-52f5e88ed6ee4396", "name": "Icon-only button without accessible name \u2014 cloudflare/frontend/src/pages/QandA.tsx:321", "shortDescription": {"text": "Icon-only button without accessible name \u2014 cloudflare/frontend/src/pages/QandA.tsx:321"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-711ebecb3500abd0", "name": "Stray `console.log` in TS/JS \u2014 cloudflare/frontend/e2e/regression.spec.ts:312", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 cloudflare/frontend/e2e/regression.spec.ts:312"}, "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-ccbf801ce968f6c7", "name": "Stray `console.log` in TS/JS \u2014 cloudflare/frontend/e2e/04-pwa-install.spec.ts:109", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 cloudflare/frontend/e2e/04-pwa-install.spec.ts:109"}, "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-5ae6fadbde2b2aec", "name": "Stray `console.log` in TS/JS \u2014 cloudflare/worker/sim/lifetime.test.ts:314", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 cloudflare/worker/sim/lifetime.test.ts:314"}, "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-8f655bfba309479f", "name": "Stray `console.log` in TS/JS \u2014 cloudflare/worker/src/index.ts:930", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 cloudflare/worker/src/index.ts:930"}, "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-8fc01b091945a33c", "name": "Stray `console.log` in TS/JS \u2014 cloudflare/worker/src/routes/ai.ts:226", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 cloudflare/worker/src/routes/ai.ts:226"}, "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-2b13d3ca8d4f32c2", "name": "Stray `console.log` in TS/JS \u2014 cloudflare/worker/src/routes/admin.ts:2273", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 cloudflare/worker/src/routes/admin.ts:2273"}, "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-da15b126117a6eb8", "name": "TODO/FIXME marker in shipping code \u2014 cloudflare/worker/src/routes/inherit.ts:166", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 cloudflare/worker/src/routes/inherit.ts:166"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2b36adfe49f01655", "name": "Stray `console.log` in TS/JS \u2014 cloudflare/worker/src/services/pushSender.ts:251", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 cloudflare/worker/src/services/pushSender.ts:251"}, "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-1b91bc39474b6b01", "name": "Stray `console.log` in TS/JS \u2014 cloudflare/worker/src/services/mailbox-bounce-detector.ts:325", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 cloudflare/worker/src/services/mailbox-bounce-detector.ts:325"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-fbbf66070e31094f", "name": "Stray `console.log` in TS/JS \u2014 cloudflare/worker/src/crons/scheduled-deletion.ts:87", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 cloudflare/worker/src/crons/scheduled-deletion.ts:87"}, "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-087da633482560ee", "name": "Stray `console.log` in TS/JS \u2014 cloudflare/worker/src/jobs/adoption-jobs.ts:2328", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 cloudflare/worker/src/jobs/adoption-jobs.ts:2328"}, "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-6bf10a052ecd80c4", "name": "Stray `console.log` in TS/JS \u2014 backend/src/utils/seed.ts:39", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 backend/src/utils/seed.ts:39"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4b1dea4e3d2b02f9", "name": "Stray `console.log` in TS/JS \u2014 backend/src/routes/support.ts:486", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 backend/src/routes/support.ts:486"}, "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-ea20cde10874b8d8", "name": "Stray `console.log` in TS/JS \u2014 backend/src/routes/notifications.ts:194", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 backend/src/routes/notifications.ts:194"}, "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-c40e9fffbd9aead0", "name": "Dockerfile runs as root: cloudflare/frontend/Dockerfile", "shortDescription": {"text": "Dockerfile runs as root: cloudflare/frontend/Dockerfile"}, "fullDescription": {"text": "No non-root USER set. Containers running as root expand the blast radius of any vulnerability inside the image."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e67b44e758c7741e", "name": "Docker base image is tag-pinned but not digest-pinned: node:20-alpine", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: node:20-alpine"}, "fullDescription": {"text": "Container tags can be retagged upstream. Pin production base images to a reviewed digest (`image@sha256:...`) when reproducibility and supply-chain integrity matter."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1f66ad88286ca30a", "name": "Dockerfile runs as root: backend/Dockerfile", "shortDescription": {"text": "Dockerfile runs as root: backend/Dockerfile"}, "fullDescription": {"text": "No non-root USER set. Containers running as root expand the blast radius of any vulnerability inside the image."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4e3420f08c109bd9", "name": "Docker base image is tag-pinned but not digest-pinned: node:20-slim", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: node:20-slim"}, "fullDescription": {"text": "Container tags can be retagged upstream. Pin production base images to a reviewed digest (`image@sha256:...`) when reproducibility and supply-chain integrity matter."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-aa5acaa49eb8315b", "name": "Containers defined but no K8s/orchestration manifest found", "shortDescription": {"text": "Containers defined but no K8s/orchestration manifest found"}, "fullDescription": {"text": "Repo has Dockerfiles/compose but no Kubernetes/Nomad manifests. If the target deployment is K8s, the manifests may live in a separate ops repo."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9ea97b42fc767ef6", "name": "Runtime dotenv file present in repo: cloudflare/frontend/.env.production", "shortDescription": {"text": "Runtime dotenv file present in repo: cloudflare/frontend/.env.production"}, "fullDescription": {"text": "`cloudflare/frontend/.env.production` looks like a runtime dotenv file. It contains secret-looking assignments for VITE_VAPID_PUBLIC_KEY. Move real values to a secret manager and keep only `.env.example` style templates in source control."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-60bd7273e6307ef8", "name": "Insecure pattern 'node_child_process' in scripts/generate-tiktok.mjs:23", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/generate-tiktok.mjs:23"}, "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-12234c3178e27a19", "name": "Insecure pattern 'node_child_process' in scripts/generate-social-video.js:17", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/generate-social-video.js:17"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-365c2c23a7ffbde2", "name": "Possible secret in mobile/src/screens/SignupScreen.tsx", "shortDescription": {"text": "Possible secret in mobile/src/screens/SignupScreen.tsx"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-9432733d1416c2ce", "name": "Possible secret in mobile/src/screens/LoginScreen.tsx", "shortDescription": {"text": "Possible secret in mobile/src/screens/LoginScreen.tsx"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-26abc60a07ad683d", "name": "Insecure pattern 'exec_used' in cloudflare/worker-configuration.d.ts:2997", "shortDescription": {"text": "Insecure pattern 'exec_used' in cloudflare/worker-configuration.d.ts:2997"}, "fullDescription": {"text": "Found a known-risky pattern (exec_used). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f63162f3f2618c18", "name": "Insecure pattern 'local_storage_auth_token' in cloudflare/frontend/scripts/live-seeded-shots.mjs:189", "shortDescription": {"text": "Insecure pattern 'local_storage_auth_token' in cloudflare/frontend/scripts/live-seeded-shots.mjs:189"}, "fullDescription": {"text": "Found a known-risky pattern (local_storage_auth_token). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-66c9a475faa490c3", "name": "Insecure pattern 'cors_wildcard' in cloudflare/frontend/scripts/live-seeded-shots.mjs:199", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in cloudflare/frontend/scripts/live-seeded-shots.mjs:199"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b5c52f86333926cf", "name": "Insecure pattern 'local_storage_auth_token' in cloudflare/frontend/scripts/mock-authed-shots.mjs:10", "shortDescription": {"text": "Insecure pattern 'local_storage_auth_token' in cloudflare/frontend/scripts/mock-authed-shots.mjs:10"}, "fullDescription": {"text": "Found a known-risky pattern (local_storage_auth_token). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-184712d557f8085e", "name": "Insecure pattern 'cors_wildcard' in cloudflare/frontend/scripts/mock-authed-shots.mjs:24", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in cloudflare/frontend/scripts/mock-authed-shots.mjs:24"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-122b5f5da0ede8f1", "name": "Insecure pattern 'local_storage_auth_token' in cloudflare/frontend/scripts/audit-pages.mjs:25", "shortDescription": {"text": "Insecure pattern 'local_storage_auth_token' in cloudflare/frontend/scripts/audit-pages.mjs:25"}, "fullDescription": {"text": "Found a known-risky pattern (local_storage_auth_token). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-603d8459737d6068", "name": "Insecure pattern 'direct_innerhtml_assignment' in cloudflare/frontend/public/offline-boot.js:34", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in cloudflare/frontend/public/offline-boot.js:34"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-8d1174941c496430", "name": "Insecure pattern 'direct_innerhtml_assignment' in cloudflare/frontend/src/loom/components/ClothWeave.tsx:396", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in cloudflare/frontend/src/loom/components/ClothWeave.tsx:396"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f68a82d1eab8cca1", "name": "Insecure pattern 'direct_innerhtml_assignment' in cloudflare/frontend/src/loom/components/CosmicLoom.tsx:336", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in cloudflare/frontend/src/loom/components/CosmicLoom.tsx:336"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b958a96820c4f540", "name": "Insecure pattern 'local_storage_auth_token' in cloudflare/frontend/src/pages/AdminLogin.tsx:17", "shortDescription": {"text": "Insecure pattern 'local_storage_auth_token' in cloudflare/frontend/src/pages/AdminLogin.tsx:17"}, "fullDescription": {"text": "Found a known-risky pattern (local_storage_auth_token). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2e8391e1a733a2a2", "name": "Possible secret in cloudflare/frontend/src/pages/Signup.tsx", "shortDescription": {"text": "Possible secret in cloudflare/frontend/src/pages/Signup.tsx"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-9e91494196505035", "name": "Insecure pattern 'local_storage_auth_token' in cloudflare/frontend/src/pages/GiftReceive.tsx:67", "shortDescription": {"text": "Insecure pattern 'local_storage_auth_token' in cloudflare/frontend/src/pages/GiftReceive.tsx:67"}, "fullDescription": {"text": "Found a known-risky pattern (local_storage_auth_token). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-57f785c41324de12", "name": "Insecure pattern 'local_storage_auth_token' in cloudflare/frontend/src/services/api.ts:12", "shortDescription": {"text": "Insecure pattern 'local_storage_auth_token' in cloudflare/frontend/src/services/api.ts:12"}, "fullDescription": {"text": "Found a known-risky pattern (local_storage_auth_token). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-bc90ca87ae274159", "name": "Possible secret in cloudflare/frontend/e2e/regression.spec.ts", "shortDescription": {"text": "Possible secret in cloudflare/frontend/e2e/regression.spec.ts"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-103c263de9e87962", "name": "Insecure pattern 'local_storage_auth_token' in cloudflare/frontend/e2e/regression.spec.ts:64", "shortDescription": {"text": "Insecure pattern 'local_storage_auth_token' in cloudflare/frontend/e2e/regression.spec.ts:64"}, "fullDescription": {"text": "Found a known-risky pattern (local_storage_auth_token). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-89b705396e59b6ac", "name": "Possible secret in cloudflare/frontend/e2e/verify-cloth-nav.spec.ts", "shortDescription": {"text": "Possible secret in cloudflare/frontend/e2e/verify-cloth-nav.spec.ts"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-524d191a7a73cda1", "name": "Possible secret in cloudflare/frontend/e2e/auth.spec.ts", "shortDescription": {"text": "Possible secret in cloudflare/frontend/e2e/auth.spec.ts"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-790b0a17eb1e4bdb", "name": "Possible secret in cloudflare/frontend/e2e/verify-fixes.spec.ts", "shortDescription": {"text": "Possible secret in cloudflare/frontend/e2e/verify-fixes.spec.ts"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-b16d47aabc5405f0", "name": "Possible secret in cloudflare/frontend/e2e/05-nav-smoke.spec.ts", "shortDescription": {"text": "Possible secret in cloudflare/frontend/e2e/05-nav-smoke.spec.ts"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-dced07f1821ab31b", "name": "Insecure pattern 'cors_wildcard' in cloudflare/worker/src/routes/voice.ts:250", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in cloudflare/worker/src/routes/voice.ts:250"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-62c66535031b72e2", "name": "Insecure pattern 'private_key_in_repo' in cloudflare/worker/src/services/pushSender.ts:53", "shortDescription": {"text": "Insecure pattern 'private_key_in_repo' in cloudflare/worker/src/services/pushSender.ts:53"}, "fullDescription": {"text": "Found a known-risky pattern (private_key_in_repo). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-f7618c833d42aeed", "name": "GitHub Actions workflow grants broad write permissions", "shortDescription": {"text": "GitHub Actions workflow grants broad write permissions"}, "fullDescription": {"text": "CI tokens with write permissions increase blast radius when an action, dependency, or PR workflow is compromised. Prefer job-level least-privilege permissions."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e74f294b720edd78", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ef86a4ab3a187eb2", "name": "GitHub Actions workflow grants broad write permissions", "shortDescription": {"text": "GitHub Actions workflow grants broad write permissions"}, "fullDescription": {"text": "CI tokens with write permissions increase blast radius when an action, dependency, or PR workflow is compromised. Prefer job-level least-privilege permissions."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-40dba48ffd6bded2", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-59d7cdc8cf834675", "name": "GitHub Actions workflow grants broad write permissions", "shortDescription": {"text": "GitHub Actions workflow grants broad write permissions"}, "fullDescription": {"text": "CI tokens with write permissions increase blast radius when an action, dependency, or PR workflow is compromised. Prefer job-level least-privilege permissions."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-65728889296e9b63", "name": "Very large file: cloudflare/worker-configuration.d.ts (12856 lines)", "shortDescription": {"text": "Very large file: cloudflare/worker-configuration.d.ts (12856 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8b8953aa84d03840", "name": "Very large file: cloudflare/frontend/src/pages/AdminDashboard.tsx (2101 lines)", "shortDescription": {"text": "Very large file: cloudflare/frontend/src/pages/AdminDashboard.tsx (2101 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0f0c4f509f66fb7b", "name": "Very large file: cloudflare/frontend/src/pages/Compose.tsx (1658 lines)", "shortDescription": {"text": "Very large file: cloudflare/frontend/src/pages/Compose.tsx (1658 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-195f83d6d9bb59ed", "name": "Very large file: cloudflare/worker/src/index.ts (1700 lines)", "shortDescription": {"text": "Very large file: cloudflare/worker/src/index.ts (1700 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e1470b75ef86ad09", "name": "Very large file: cloudflare/worker/src/email-templates.ts (1268 lines)", "shortDescription": {"text": "Very large file: cloudflare/worker/src/email-templates.ts (1268 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-66f41df4c33d7753", "name": "Very large file: cloudflare/worker/src/routes/billing.ts (1284 lines)", "shortDescription": {"text": "Very large file: cloudflare/worker/src/routes/billing.ts (1284 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-110198d1794f50aa", "name": "Very large file: cloudflare/worker/src/routes/export.ts (1675 lines)", "shortDescription": {"text": "Very large file: cloudflare/worker/src/routes/export.ts (1675 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5d08495c83d34f40", "name": "Very large file: cloudflare/worker/src/routes/admin.ts (2730 lines)", "shortDescription": {"text": "Very large file: cloudflare/worker/src/routes/admin.ts (2730 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-dd682e5e2cdc834f", "name": "Very large file: cloudflare/worker/src/jobs/adoption-jobs.ts (2344 lines)", "shortDescription": {"text": "Very large file: cloudflare/worker/src/jobs/adoption-jobs.ts (2344 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6893a6c8b0861585", "name": "Very low test-to-source ratio", "shortDescription": {"text": "Very low test-to-source ratio"}, "fullDescription": {"text": "18 test file(s) for 328 source file(s) (ratio 0.05). Consider adding integration or unit tests for critical paths."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-141b30a41e03817b", "name": "No license file detected", "shortDescription": {"text": "No license file detected"}, "fullDescription": {"text": "No LICENSE/COPYING/NOTICE file was found. Generated repositories often omit licensing, which blocks reuse and automated intake."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3ab5d313dda8e5f9", "name": "Debug logging residue appears in source files", "shortDescription": {"text": "Debug logging residue appears in source files"}, "fullDescription": {"text": "Found 255 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 219 placeholder/mock markers across 69 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 license. Treat this as a contract gap: the agent is guided, but the generated output is not yet guarded by the controls that make it repeatable."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ea8f3013f588db25", "name": "Shallow git history limits provenance confidence", "shortDescription": {"text": "Shallow git history limits provenance confidence"}, "fullDescription": {"text": "The repository is a shallow clone. Origin/evolution analysis cannot distinguish fresh generation, imported legacy code, or long-lived human code with high confidence."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8424db9c75e04ba4", "name": "Very short observed git history", "shortDescription": {"text": "Very short observed git history"}, "fullDescription": {"text": "The repo has multiple source files but two or fewer visible commits. This is not a failure by itself, but it lowers confidence in evolution-based diagnosis."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f75f13de4b6c61cd", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/update-social-profiles.mjs:30", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/update-social-profiles.mjs: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-6074da46761b1c98", "name": "Commented-code block (5 lines) in scripts/generate-tiktok.mjs:242", "shortDescription": {"text": "Commented-code block (5 lines) in scripts/generate-tiktok.mjs:242"}, "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-72b9600722e02f51", "name": "`fetch()` without try/.catch or AbortSignal \u2014 marketing/automation/scripts/bluesky-promo.ts:39", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 marketing/automation/scripts/bluesky-promo.ts:39"}, "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-5dde402368939cfe", "name": "`fetch()` without try/.catch or AbortSignal \u2014 marketing/automation/scripts/social-launch.ts:41", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 marketing/automation/scripts/social-launch.ts:41"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-fdb3c949ae537842", "name": "Commented-code block (7 lines) in marketing/automation/src/run.ts:3", "shortDescription": {"text": "Commented-code block (7 lines) in marketing/automation/src/run.ts:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9e13cc5f8b4b9e7c", "name": "`fetch()` without try/.catch or AbortSignal \u2014 marketing/automation/src/run.ts:322", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 marketing/automation/src/run.ts:322"}, "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-64f605b419b2adaa", "name": "Commented-code block (6 lines) in marketing/automation/src/image.ts:5", "shortDescription": {"text": "Commented-code block (6 lines) in marketing/automation/src/image.ts:5"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-258a7660b6a5a43f", "name": "Commented-code block (6 lines) in marketing/automation/src/variants.ts:88", "shortDescription": {"text": "Commented-code block (6 lines) in marketing/automation/src/variants.ts:88"}, "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-2bfbdb93d3f76ec7", "name": "Commented-code block (8 lines) in marketing/automation/src/hashtags.ts:3", "shortDescription": {"text": "Commented-code block (8 lines) in marketing/automation/src/hashtags.ts:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b2a3ed4828431238", "name": "Commented-code block (5 lines) in marketing/automation/src/generate.ts:15", "shortDescription": {"text": "Commented-code block (5 lines) in marketing/automation/src/generate.ts:15"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6dc9ab151084e022", "name": "`fetch()` without try/.catch or AbortSignal \u2014 marketing/automation/src/generate.ts:153", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 marketing/automation/src/generate.ts:153"}, "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-b9a9eb723691e6db", "name": "Commented-code block (11 lines) in marketing/automation/src/themes.ts:7", "shortDescription": {"text": "Commented-code block (11 lines) in marketing/automation/src/themes.ts:7"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6e4d54b25bffecd7", "name": "Commented-code block (5 lines) in marketing/automation/src/engage.ts:3", "shortDescription": {"text": "Commented-code block (5 lines) in marketing/automation/src/engage.ts:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-16d3ac51f10b304b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 marketing/automation/src/metrics.ts:31", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 marketing/automation/src/metrics.ts: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-7ae7e59b2e1d8f5f", "name": "Commented-code block (6 lines) in marketing/automation/src/post.ts:5", "shortDescription": {"text": "Commented-code block (6 lines) in marketing/automation/src/post.ts:5"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9e167610c8170cac", "name": "`fetch()` without try/.catch or AbortSignal \u2014 marketing/automation/src/post.ts:300", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 marketing/automation/src/post.ts:300"}, "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-b8b307f30585c045", "name": "Legacy-named symbol `certIssuerDNLegacy` in cloudflare/worker-configuration.d.ts:10446", "shortDescription": {"text": "Legacy-named symbol `certIssuerDNLegacy` in cloudflare/worker-configuration.d.ts:10446"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-10aa3189ede8f24f", "name": "Commented-code block (8 lines) in cloudflare/worker-configuration.d.ts:11338", "shortDescription": {"text": "Commented-code block (8 lines) in cloudflare/worker-configuration.d.ts:11338"}, "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-9be55fb9952fd7fe", "name": "`fetch()` without try/.catch or AbortSignal \u2014 cloudflare/worker-configuration.d.ts:336", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 cloudflare/worker-configuration.d.ts:336"}, "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-a024fcce8172f676", "name": "Commented-code block (6 lines) in cloudflare/frontend/tailwind.config.js:76", "shortDescription": {"text": "Commented-code block (6 lines) in cloudflare/frontend/tailwind.config.js:76"}, "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-fa55af70277722bb", "name": "Commented-code block (5 lines) in cloudflare/frontend/public/splash-boot.js:1", "shortDescription": {"text": "Commented-code block (5 lines) in cloudflare/frontend/public/splash-boot.js: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-23062789d696b648", "name": "Commented-code block (5 lines) in cloudflare/frontend/public/sw.js:134", "shortDescription": {"text": "Commented-code block (5 lines) in cloudflare/frontend/public/sw.js:134"}, "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-5e5181a5b9151b4e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 cloudflare/frontend/public/sw.js:123", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 cloudflare/frontend/public/sw.js:123"}, "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-620da3a5d85daa1f", "name": "Commented-code block (6 lines) in cloudflare/frontend/src/main.tsx:25", "shortDescription": {"text": "Commented-code block (6 lines) in cloudflare/frontend/src/main.tsx: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-04c8baa3f5bef39e", "name": "Commented-code block (5 lines) in cloudflare/frontend/src/loom/components/ClothBackdrop.tsx:62", "shortDescription": {"text": "Commented-code block (5 lines) in cloudflare/frontend/src/loom/components/ClothBackdrop.tsx:62"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1446b61bfc68005f", "name": "Commented-code block (7 lines) in cloudflare/frontend/src/loom/components/AppFrame.tsx:4", "shortDescription": {"text": "Commented-code block (7 lines) in cloudflare/frontend/src/loom/components/AppFrame.tsx:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-bce3d706f9766751", "name": "Commented-code block (5 lines) in cloudflare/frontend/src/loom/components/TapestryCanvas.tsx:329", "shortDescription": {"text": "Commented-code block (5 lines) in cloudflare/frontend/src/loom/components/TapestryCanvas.tsx: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-145efd89ef9e1707", "name": "Commented-code block (5 lines) in cloudflare/frontend/src/loom/components/HLogo.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in cloudflare/frontend/src/loom/components/HLogo.tsx: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-446eaccac60fc808", "name": "`fetch()` without try/.catch or AbortSignal \u2014 cloudflare/frontend/src/loom/components/ComposerChrome.tsx:76", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 cloudflare/frontend/src/loom/components/ComposerChrome.tsx:76"}, "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-a142f5cd4cfcbda9", "name": "Commented-code block (5 lines) in cloudflare/frontend/src/lib/registerSW.ts:20", "shortDescription": {"text": "Commented-code block (5 lines) in cloudflare/frontend/src/lib/registerSW.ts:20"}, "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-e25f0888c6f3628b", "name": "Legacy-named symbol `refetchGoldLegacy` in cloudflare/frontend/src/pages/AdminDashboard.tsx:170", "shortDescription": {"text": "Legacy-named symbol `refetchGoldLegacy` in cloudflare/frontend/src/pages/AdminDashboard.tsx:170"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ab5185c3b1246c59", "name": "`fetch()` without try/.catch or AbortSignal \u2014 cloudflare/frontend/src/pages/AdminDashboard.tsx:148", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 cloudflare/frontend/src/pages/AdminDashboard.tsx:148"}, "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-ad38cba79b1786fa", "name": "`fetch()` without try/.catch or AbortSignal \u2014 cloudflare/frontend/src/pages/Record.tsx:252", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 cloudflare/frontend/src/pages/Record.tsx:252"}, "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-ec37c0fb9b3b21cf", "name": "Commented-code block (5 lines) in cloudflare/frontend/src/pages/ReadingRoom.tsx:62", "shortDescription": {"text": "Commented-code block (5 lines) in cloudflare/frontend/src/pages/ReadingRoom.tsx:62"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-877f3c115276a73f", "name": "Legacy-named symbol `isGoldLegacy` in cloudflare/frontend/src/pages/GoldLegacyRedeem.tsx:19", "shortDescription": {"text": "Legacy-named symbol `isGoldLegacy` in cloudflare/frontend/src/pages/GoldLegacyRedeem.tsx:19"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-adc8c7643c8d8dcd", "name": "Commented-code block (5 lines) in cloudflare/frontend/src/services/api.ts:45", "shortDescription": {"text": "Commented-code block (5 lines) in cloudflare/frontend/src/services/api.ts:45"}, "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-ab6d9d5fe6f06f5b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 cloudflare/frontend/src/services/encryptionService.ts:99", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 cloudflare/frontend/src/services/encryptionService.ts:99"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-406ea7ab4b363a91", "name": "Commented-code block (6 lines) in cloudflare/frontend/e2e/regression.spec.ts:92", "shortDescription": {"text": "Commented-code block (6 lines) in cloudflare/frontend/e2e/regression.spec.ts:92"}, "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-427e3fb62935ac2b", "name": "Commented-code block (5 lines) in cloudflare/frontend/e2e/01-public-routes.spec.ts:34", "shortDescription": {"text": "Commented-code block (5 lines) in cloudflare/frontend/e2e/01-public-routes.spec.ts:34"}, "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-e45c7843590d5a4e", "name": "Commented-code block (5 lines) in cloudflare/worker/src/index.ts:308", "shortDescription": {"text": "Commented-code block (5 lines) in cloudflare/worker/src/index.ts:308"}, "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-3866a4fce4eefe4f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 cloudflare/worker/src/index.ts:1637", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 cloudflare/worker/src/index.ts:1637"}, "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-6c3e8c9b49a6f254", "name": "`fetch()` without try/.catch or AbortSignal \u2014 cloudflare/worker/src/__tests__/health.worker.test.ts:18", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 cloudflare/worker/src/__tests__/health.worker.test.ts:18"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d52d5d473f9916df", "name": "`fetch()` without try/.catch or AbortSignal \u2014 cloudflare/worker/src/__tests__/gift-vouchers.worker.test.ts:24", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 cloudflare/worker/src/__tests__/gift-vouchers.worker.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-86733d92bb209733", "name": "`fetch()` without try/.catch or AbortSignal \u2014 cloudflare/worker/src/__tests__/auth.worker.test.ts:17", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 cloudflare/worker/src/__tests__/auth.worker.test.ts:17"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f0392328974998b8", "name": "Commented-code block (5 lines) in cloudflare/worker/src/routes/ai.ts:825", "shortDescription": {"text": "Commented-code block (5 lines) in cloudflare/worker/src/routes/ai.ts:825"}, "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-a44ad742492b51f6", "name": "Legacy-named symbol `isGoldLegacy` in cloudflare/worker/src/routes/auth.ts:68", "shortDescription": {"text": "Legacy-named symbol `isGoldLegacy` in cloudflare/worker/src/routes/auth.ts:68"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-cc09f20419f11919", "name": "Commented-code block (7 lines) in cloudflare/worker/src/routes/books.ts:90", "shortDescription": {"text": "Commented-code block (7 lines) in cloudflare/worker/src/routes/books.ts:90"}, "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-29b89328060c73af", "name": "Commented-code block (5 lines) in cloudflare/worker/src/routes/threads.ts:185", "shortDescription": {"text": "Commented-code block (5 lines) in cloudflare/worker/src/routes/threads.ts:185"}, "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-ae4fe7e9e96463d2", "name": "`fetch()` without try/.catch or AbortSignal \u2014 cloudflare/worker/src/routes/partners.ts:558", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 cloudflare/worker/src/routes/partners.ts:558"}, "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-2b4df6b45c67e1c8", "name": "`fetch()` without try/.catch or AbortSignal \u2014 cloudflare/worker/src/routes/q4-features.ts:225", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 cloudflare/worker/src/routes/q4-features.ts:225"}, "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-30ae050ba66c4c18", "name": "Commented-code block (10 lines) in cloudflare/worker/src/routes/billing.ts:77", "shortDescription": {"text": "Commented-code block (10 lines) in cloudflare/worker/src/routes/billing.ts:77"}, "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-9b153c54275bd44a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 cloudflare/worker/src/routes/billing.ts:658", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 cloudflare/worker/src/routes/billing.ts:658"}, "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-025c0d4056ec162d", "name": "Commented-code block (5 lines) in cloudflare/worker/src/routes/social.ts:21", "shortDescription": {"text": "Commented-code block (5 lines) in cloudflare/worker/src/routes/social.ts:21"}, "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-7248e529118617b6", "name": "`fetch()` without try/.catch or AbortSignal \u2014 cloudflare/worker/src/routes/influencers.ts:530", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 cloudflare/worker/src/routes/influencers.ts:530"}, "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-5ae59b7843d50938", "name": "`fetch()` without try/.catch or AbortSignal \u2014 cloudflare/worker/src/routes/social-import.ts:390", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 cloudflare/worker/src/routes/social-import.ts:390"}, "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-98ce03f64a115d21", "name": "Commented-code block (6 lines) in cloudflare/worker/src/routes/family.ts:353", "shortDescription": {"text": "Commented-code block (6 lines) in cloudflare/worker/src/routes/family.ts:353"}, "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-56967ffb9a18485a", "name": "Commented-code block (5 lines) in cloudflare/worker/src/routes/letters.ts:224", "shortDescription": {"text": "Commented-code block (5 lines) in cloudflare/worker/src/routes/letters.ts:224"}, "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-6824df78c29e1e5b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 cloudflare/worker/src/routes/admin.ts:45", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 cloudflare/worker/src/routes/admin.ts:45"}, "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-b89838548efe9816", "name": "Legacy-named symbol `safeOld` in cloudflare/worker/src/routes/settings.ts:378", "shortDescription": {"text": "Legacy-named symbol `safeOld` in cloudflare/worker/src/routes/settings.ts:378"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9995d29041e32ee2", "name": "`fetch()` without try/.catch or AbortSignal \u2014 cloudflare/worker/src/routes/settings.ts:904", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 cloudflare/worker/src/routes/settings.ts:904"}, "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-0c39ac33c9bc1222", "name": "Legacy-named symbol `isLegacy` in cloudflare/worker/src/routes/gift-vouchers.ts:186", "shortDescription": {"text": "Legacy-named symbol `isLegacy` in cloudflare/worker/src/routes/gift-vouchers.ts:186"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-031be19d46ed2b02", "name": "Commented-code block (5 lines) in cloudflare/worker/src/routes/founders.ts:64", "shortDescription": {"text": "Commented-code block (5 lines) in cloudflare/worker/src/routes/founders.ts:64"}, "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-30a9d440e4d13d5a", "name": "Commented-code block (6 lines) in cloudflare/worker/src/routes/inherit.ts:159", "shortDescription": {"text": "Commented-code block (6 lines) in cloudflare/worker/src/routes/inherit.ts:159"}, "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-2a651e8a8d45431b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 cloudflare/worker/src/services/archive.ts:152", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 cloudflare/worker/src/services/archive.ts:152"}, "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-e08ca1c51a59b7b3", "name": "`fetch()` without try/.catch or AbortSignal \u2014 cloudflare/worker/src/services/pushSender.ts:105", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 cloudflare/worker/src/services/pushSender.ts:105"}, "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-bb5f91f75932422d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 cloudflare/worker/src/services/mailbox-bounce-detector.ts:95", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 cloudflare/worker/src/services/mailbox-bounce-detector.ts:95"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d39c55943391ac55", "name": "Commented-code block (5 lines) in cloudflare/worker/src/services/book.ts:319", "shortDescription": {"text": "Commented-code block (5 lines) in cloudflare/worker/src/services/book.ts:319"}, "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-87fd7f9f46e36acb", "name": "`fetch()` without try/.catch or AbortSignal \u2014 cloudflare/worker/src/services/book.ts:104", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 cloudflare/worker/src/services/book.ts:104"}, "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-13e8eededa72b868", "name": "`fetch()` without try/.catch or AbortSignal \u2014 cloudflare/worker/src/services/webPushSender.ts:186", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 cloudflare/worker/src/services/webPushSender.ts:186"}, "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-44f354b93cf2cb5d", "name": "Commented-code block (8 lines) in cloudflare/worker/src/crons/time-locks.ts:124", "shortDescription": {"text": "Commented-code block (8 lines) in cloudflare/worker/src/crons/time-locks.ts:124"}, "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-4ce411f9891651da", "name": "`fetch()` without try/.catch or AbortSignal \u2014 cloudflare/worker/src/crons/social-posting.ts:58", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 cloudflare/worker/src/crons/social-posting.ts:58"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-33f83c0f4956c80f", "name": "Commented-code block (5 lines) in cloudflare/worker/src/jobs/adoption-jobs.ts:10", "shortDescription": {"text": "Commented-code block (5 lines) in cloudflare/worker/src/jobs/adoption-jobs.ts:10"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5f7f470b9f5aefe1", "name": "`fetch()` without try/.catch or AbortSignal \u2014 cloudflare/worker/src/jobs/adoption-jobs.ts:746", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 cloudflare/worker/src/jobs/adoption-jobs.ts:746"}, "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-9d7d436ad43990f9", "name": "Commented-code block (9 lines) in backend/src/routes/support.ts:488", "shortDescription": {"text": "Commented-code block (9 lines) in backend/src/routes/support.ts:488"}, "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-c8b6bba042c7d447", "name": "`fetch()` without try/.catch or AbortSignal \u2014 backend/src/routes/support.ts:489", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 backend/src/routes/support.ts:489"}, "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-15ec4b2c89617eab", "name": "Commented-code block (6 lines) in backend/src/services/auth.service.ts:275", "shortDescription": {"text": "Commented-code block (6 lines) in backend/src/services/auth.service.ts:275"}, "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-5f6b9f4e8b9bdd4f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 backend/src/services/tinyllm.service.ts:67", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 backend/src/services/tinyllm.service.ts:67"}, "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-a260e355ea7d9f89", "name": "32 env vars used in code but missing from .env.example", "shortDescription": {"text": "32 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `ADMIN_JWT_SECRET`, `AUDIT_AUTH`, `AYRSHARE_API_KEY`, `BASE`, `BASE_URL`, `CI`, `CLOUDFLARE_AI_MODEL`, `DRY_RUN` + 24 more. Add them (with a placeholder/comment) to .env.example so onboarding doesn't break."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-84bea003625603ef", "name": "Frontend route `/daily` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `/daily` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4c75ca9ea3fc82e8", "name": "Frontend route `/founders-wall` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `/founders-wall` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f6551252f696d365", "name": "Frontend route `/founder/welcome` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `/founder/welcome` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2ea16ec28f80557c", "name": "Frontend route `/memory-room/:token` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `/memory-room/:token` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-deed5e848bb1f9d1", "name": "Frontend route `/story/:token` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `/story/:token` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-36bb48ce0dc75a7e", "name": "Frontend route `/inherit/:token` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `/inherit/:token` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0736a34d39373799", "name": "Frontend route `/verify-email` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `/verify-email` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-86ef2f344b94631a", "name": "Frontend route `/join` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `/join` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c2de90adc9cd923d", "name": "Frontend route `/gift/redeem` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `/gift/redeem` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a69e95ca6dbcc143", "name": "Frontend route `/gift/success` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `/gift/success` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-57b8380cf327abe3", "name": "Frontend route `/gold/redeem` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `/gold/redeem` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-5928192bf43e9512", "name": "Frontend route `/card/:id` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `/card/:id` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9a8d2919106b5660", "name": "Frontend route `/m/:token` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `/m/:token` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3de817789a8f26df", "name": "Frontend route `/gift-memory/:token` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `/gift-memory/:token` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ef068334d3cef68e", "name": "Frontend route `/showcase` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `/showcase` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-bfa4ab511855d1a0", "name": "Frontend route `/inheritance/:token` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `/inheritance/:token` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c7297d808814ba2d", "name": "Frontend route `/for/wedding-day` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `/for/wedding-day` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-57ee75d3f0d837db", "name": "Frontend route `/for/eighteenth-birthday` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `/for/eighteenth-birthday` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6b7926cf7a29a174", "name": "Frontend route `/for/after-i-go` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `/for/after-i-go` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f930c70edc88f94b", "name": "Frontend route `/for/grandchildren` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `/for/grandchildren` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-29befe6248764d09", "name": "Frontend route `/for/voice-for-the-unborn` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `/for/voice-for-the-unborn` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-446041a9bae1b0a2", "name": "Frontend route `/reset-password` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `/reset-password` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a942561a20298704", "name": "Frontend route `/family/:id` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `/family/:id` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-95eccc1344cd7e05", "name": "Frontend route `/person/:id` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `/person/:id` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f9ee29f916798a3a", "name": "Frontend route `/quick` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `/quick` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-1dd15748178086a0", "name": "Frontend route `/wrapped/:year` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `/wrapped/:year` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-744735974b28109e", "name": "Frontend route `/future-letter` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `/future-letter` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-229be37ef502ca0d", "name": "Frontend route `/legacy-plan` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `/legacy-plan` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-5d38378c8797af15", "name": "Frontend route `/story-artifacts` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `/story-artifacts` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c585456e44cf831a", "name": "Frontend route `/recipient-experience` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `/recipient-experience` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-40c092e031c2647b", "name": "Frontend route `/streaks` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `/streaks` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0af1a41a2916e321", "name": "Frontend route `/referrals` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `/referrals` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-cf0fd6e45984aba1", "name": "Frontend route `/memorials` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `/memorials` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-5310d5c73a7af6cf", "name": "Frontend route `/memory-cards` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `/memory-cards` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-579a9a782d8a951c", "name": "Frontend route `/onboarding` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `/onboarding` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-1d84bc7177b4564e", "name": "Frontend route `/inbox` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `/inbox` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ab71cb1b9dbd4e55", "name": "Frontend route `/qa` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `/qa` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-1d5be9d52309c05f", "name": "Frontend route `/invite` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `/invite` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6215571535de99cf", "name": "Frontend route `/interview` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `/interview` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-af25e4a877ec68f7", "name": "Frontend route `/time-capsules` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `/time-capsules` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-71d84f9cac0b905c", "name": "Frontend route `/memory-map` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `/memory-map` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a7baf9f7a5ffa9cc", "name": "Frontend route `/book-builder/success` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `/book-builder/success` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-63737148be03c41c", "name": "Frontend route `/family-feed` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `/family-feed` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-52129644d5130195", "name": "Frontend route `/on-this-day` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `/on-this-day` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-42d01d6f65319961", "name": "Frontend route `/gift-a-memory` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `/gift-a-memory` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-054092541fb677e5", "name": "Frontend route `/threads/:id` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `/threads/:id` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d67c68f369ccea07", "name": "Frontend route `/threads/:id/compose` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `/threads/:id/compose` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-7f34e2d7f89fbb2e", "name": "Frontend route `/admin` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `/admin` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a7f24bb7cc0a71d8", "name": "Frontend route `/loom/compose` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `/loom/compose` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f7f0fd3dd2a81426", "name": "Frontend route `/loom/kin` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `/loom/kin` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2d4ebbef1124a0df", "name": "Frontend route `/loom/voice` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `/loom/voice` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-eacdca1af5d32437", "name": "Dangling fetch: POST https://bsky.social/xrpc/com.atproto.server.createSession (scripts/update-social-profiles.mjs:30)", "shortDescription": {"text": "Dangling fetch: POST https://bsky.social/xrpc/com.atproto.server.createSession (scripts/update-social-profiles.mjs:30)"}, "fullDescription": {"text": "`scripts/update-social-profiles.mjs:30` calls `POST https://bsky.social/xrpc/com.atproto.server.createSession` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/bsky.social/xrpc/com.atproto.server.createsession`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-841a9a6a5e302f07", "name": "Dangling fetch: POST https://bsky.social/xrpc/com.atproto.repo.uploadBlob (scripts/update-social-profiles.mjs:41)", "shortDescription": {"text": "Dangling fetch: POST https://bsky.social/xrpc/com.atproto.repo.uploadBlob (scripts/update-social-profiles.mjs:41)"}, "fullDescription": {"text": "`scripts/update-social-profiles.mjs:41` calls `POST https://bsky.social/xrpc/com.atproto.repo.uploadBlob` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/bsky.social/xrpc/com.atproto.repo.uploadblob`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-33e340164fc70129", "name": "Dangling fetch: POST https://bsky.social/xrpc/com.atproto.repo.putRecord (scripts/update-social-profiles.mjs:61)", "shortDescription": {"text": "Dangling fetch: POST https://bsky.social/xrpc/com.atproto.repo.putRecord (scripts/update-social-profiles.mjs:61)"}, "fullDescription": {"text": "`scripts/update-social-profiles.mjs:61` calls `POST https://bsky.social/xrpc/com.atproto.repo.putRecord` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/bsky.social/xrpc/com.atproto.repo.putrecord`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-10bdf02b1b2deb6e", "name": "Dangling fetch: POST https://graph.facebook.com/v21.0/${pageId}/photos (scripts/update-social-profiles.mjs:102)", "shortDescription": {"text": "Dangling fetch: POST https://graph.facebook.com/v21.0/${pageId}/photos (scripts/update-social-profiles.mjs:102)"}, "fullDescription": {"text": "`scripts/update-social-profiles.mjs:102` calls `POST https://graph.facebook.com/v21.0/${pageId}/photos` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/graph.facebook.com/v21.0/<p>/photos`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a769e4e1a5158c14", "name": "Dangling fetch: POST https://bsky.social/xrpc/com.atproto.server.createSession (marketing/automation/scripts/bluesky-pro", "shortDescription": {"text": "Dangling fetch: POST https://bsky.social/xrpc/com.atproto.server.createSession (marketing/automation/scripts/bluesky-promo.ts:39)"}, "fullDescription": {"text": "`marketing/automation/scripts/bluesky-promo.ts:39` calls `POST https://bsky.social/xrpc/com.atproto.server.createSession` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/bsky.social/xrpc/com.atproto.server.createsession`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-12893f13d7d54ecc", "name": "Dangling fetch: POST https://bsky.social/xrpc/com.atproto.repo.uploadBlob (marketing/automation/scripts/bluesky-promo.ts", "shortDescription": {"text": "Dangling fetch: POST https://bsky.social/xrpc/com.atproto.repo.uploadBlob (marketing/automation/scripts/bluesky-promo.ts:56)"}, "fullDescription": {"text": "`marketing/automation/scripts/bluesky-promo.ts:56` calls `POST https://bsky.social/xrpc/com.atproto.repo.uploadBlob` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/bsky.social/xrpc/com.atproto.repo.uploadblob`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-014435ac4b959c63", "name": "Dangling fetch: POST https://bsky.social/xrpc/com.atproto.repo.createRecord (marketing/automation/scripts/bluesky-promo.", "shortDescription": {"text": "Dangling fetch: POST https://bsky.social/xrpc/com.atproto.repo.createRecord (marketing/automation/scripts/bluesky-promo.ts:111)"}, "fullDescription": {"text": "`marketing/automation/scripts/bluesky-promo.ts:111` calls `POST https://bsky.social/xrpc/com.atproto.repo.createRecord` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/bsky.social/xrpc/com.atproto.repo.createrecord`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d5bd8c50e559e12d", "name": "Dangling fetch: POST https://bsky.social/xrpc/com.atproto.server.createSession (marketing/automation/scripts/social-laun", "shortDescription": {"text": "Dangling fetch: POST https://bsky.social/xrpc/com.atproto.server.createSession (marketing/automation/scripts/social-launch.ts:41)"}, "fullDescription": {"text": "`marketing/automation/scripts/social-launch.ts:41` calls `POST https://bsky.social/xrpc/com.atproto.server.createSession` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/bsky.social/xrpc/com.atproto.server.createsession`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f94d795da9f96d81", "name": "Dangling fetch: POST https://bsky.social/xrpc/com.atproto.repo.uploadBlob (marketing/automation/scripts/social-launch.ts", "shortDescription": {"text": "Dangling fetch: POST https://bsky.social/xrpc/com.atproto.repo.uploadBlob (marketing/automation/scripts/social-launch.ts:56)"}, "fullDescription": {"text": "`marketing/automation/scripts/social-launch.ts:56` calls `POST https://bsky.social/xrpc/com.atproto.repo.uploadBlob` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/bsky.social/xrpc/com.atproto.repo.uploadblob`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b22690413661194c", "name": "Dangling fetch: GET https://bsky.social/xrpc/com.atproto.repo.getRecord?repo=${s.did}&collection=app.bsky.actor.profile&", "shortDescription": {"text": "Dangling fetch: GET https://bsky.social/xrpc/com.atproto.repo.getRecord?repo=${s.did}&collection=app.bsky.actor.profile&rkey=self (marketing/automation/scripts/social-launch.ts:71)"}, "fullDescription": {"text": "`marketing/automation/scripts/social-launch.ts:71` calls `GET https://bsky.social/xrpc/com.atproto.repo.getRecord?repo=${s.did}&collection=app.bsky.actor.profile&rkey=self` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/bsky.social/xrpc/com.atproto.repo.getrecord`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1276b898e4ff2b14", "name": "Dangling fetch: POST https://bsky.social/xrpc/com.atproto.repo.putRecord (marketing/automation/scripts/social-launch.ts:", "shortDescription": {"text": "Dangling fetch: POST https://bsky.social/xrpc/com.atproto.repo.putRecord (marketing/automation/scripts/social-launch.ts:75)"}, "fullDescription": {"text": "`marketing/automation/scripts/social-launch.ts:75` calls `POST https://bsky.social/xrpc/com.atproto.repo.putRecord` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/bsky.social/xrpc/com.atproto.repo.putrecord`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-498ade07f90dc281", "name": "Dangling fetch: POST https://bsky.social/xrpc/com.atproto.repo.createRecord (marketing/automation/scripts/social-launch.", "shortDescription": {"text": "Dangling fetch: POST https://bsky.social/xrpc/com.atproto.repo.createRecord (marketing/automation/scripts/social-launch.ts:125)"}, "fullDescription": {"text": "`marketing/automation/scripts/social-launch.ts:125` calls `POST https://bsky.social/xrpc/com.atproto.repo.createRecord` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/bsky.social/xrpc/com.atproto.repo.createrecord`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-dfffad69bd5b8f6c", "name": "Dangling fetch: POST https://graph.facebook.com/v21.0/${pageId}/picture (marketing/automation/scripts/social-launch.ts:1", "shortDescription": {"text": "Dangling fetch: POST https://graph.facebook.com/v21.0/${pageId}/picture (marketing/automation/scripts/social-launch.ts:144)"}, "fullDescription": {"text": "`marketing/automation/scripts/social-launch.ts:144` calls `POST https://graph.facebook.com/v21.0/${pageId}/picture` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/graph.facebook.com/v21.0/<p>/picture`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-950868d8c98efb2d", "name": "Dangling fetch: POST https://graph.facebook.com/v21.0/${pageId}/photos (marketing/automation/scripts/social-launch.ts:17", "shortDescription": {"text": "Dangling fetch: POST https://graph.facebook.com/v21.0/${pageId}/photos (marketing/automation/scripts/social-launch.ts:170)"}, "fullDescription": {"text": "`marketing/automation/scripts/social-launch.ts:170` calls `POST https://graph.facebook.com/v21.0/${pageId}/photos` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/graph.facebook.com/v21.0/<p>/photos`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-955bce88cc197aa6", "name": "Dangling fetch: POST https://graph.facebook.com/v21.0/${j.id}/comments (marketing/automation/scripts/social-launch.ts:17", "shortDescription": {"text": "Dangling fetch: POST https://graph.facebook.com/v21.0/${j.id}/comments (marketing/automation/scripts/social-launch.ts:176)"}, "fullDescription": {"text": "`marketing/automation/scripts/social-launch.ts:176` calls `POST https://graph.facebook.com/v21.0/${j.id}/comments` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/graph.facebook.com/v21.0/<p>/comments`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-bdec5369e63641c1", "name": "Dangling fetch: POST https://graph.facebook.com/v21.0/${igUserId}/media (marketing/automation/scripts/social-launch.ts:2", "shortDescription": {"text": "Dangling fetch: POST https://graph.facebook.com/v21.0/${igUserId}/media (marketing/automation/scripts/social-launch.ts:206)"}, "fullDescription": {"text": "`marketing/automation/scripts/social-launch.ts:206` calls `POST https://graph.facebook.com/v21.0/${igUserId}/media` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/graph.facebook.com/v21.0/<p>/media`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c9948b696336a5fb", "name": "Dangling fetch: POST https://graph.facebook.com/v21.0/${igUserId}/media_publish (marketing/automation/scripts/social-lau", "shortDescription": {"text": "Dangling fetch: POST https://graph.facebook.com/v21.0/${igUserId}/media_publish (marketing/automation/scripts/social-launch.ts:210)"}, "fullDescription": {"text": "`marketing/automation/scripts/social-launch.ts:210` calls `POST https://graph.facebook.com/v21.0/${igUserId}/media_publish` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/graph.facebook.com/v21.0/<p>/media_publish`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9e9c12b42cd0f266", "name": "Dangling fetch: POST https://api.pinterest.com/v5/pins (marketing/automation/scripts/social-launch.ts:238)", "shortDescription": {"text": "Dangling fetch: POST https://api.pinterest.com/v5/pins (marketing/automation/scripts/social-launch.ts:238)"}, "fullDescription": {"text": "`marketing/automation/scripts/social-launch.ts:238` calls `POST https://api.pinterest.com/v5/pins` 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.pinterest.com/v5/pins`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-40f44e3402e9905e", "name": "Dangling fetch: POST https://bsky.social/xrpc/com.atproto.server.createSession (marketing/automation/src/run.ts:307)", "shortDescription": {"text": "Dangling fetch: POST https://bsky.social/xrpc/com.atproto.server.createSession (marketing/automation/src/run.ts:307)"}, "fullDescription": {"text": "`marketing/automation/src/run.ts:307` calls `POST https://bsky.social/xrpc/com.atproto.server.createSession` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/bsky.social/xrpc/com.atproto.server.createsession`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-35dbb9f0651de592", "name": "Dangling fetch: GET https://heirloom.blue/icons/icon-512.png (marketing/automation/src/run.ts:322)", "shortDescription": {"text": "Dangling fetch: GET https://heirloom.blue/icons/icon-512.png (marketing/automation/src/run.ts:322)"}, "fullDescription": {"text": "`marketing/automation/src/run.ts:322` calls `GET https://heirloom.blue/icons/icon-512.png` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/heirloom.blue/icons/icon-512.png`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b5e3d05d5aa4b354", "name": "Dangling fetch: POST https://bsky.social/xrpc/com.atproto.repo.uploadBlob (marketing/automation/src/run.ts:327)", "shortDescription": {"text": "Dangling fetch: POST https://bsky.social/xrpc/com.atproto.repo.uploadBlob (marketing/automation/src/run.ts:327)"}, "fullDescription": {"text": "`marketing/automation/src/run.ts:327` calls `POST https://bsky.social/xrpc/com.atproto.repo.uploadBlob` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/bsky.social/xrpc/com.atproto.repo.uploadblob`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9e6337e397e5ee79", "name": "Dangling fetch: GET https://bsky.social/xrpc/com.atproto.repo.getRecord?repo=${sess.did}&collection=app.bsky.actor.profi", "shortDescription": {"text": "Dangling fetch: GET https://bsky.social/xrpc/com.atproto.repo.getRecord?repo=${sess.did}&collection=app.bsky.actor.profile&rkey=self (marketing/automation/src/run.ts:337)"}, "fullDescription": {"text": "`marketing/automation/src/run.ts:337` calls `GET https://bsky.social/xrpc/com.atproto.repo.getRecord?repo=${sess.did}&collection=app.bsky.actor.profile&rkey=self` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/bsky.social/xrpc/com.atproto.repo.getrecord`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f8f79a5a51fb8415", "name": "Dangling fetch: POST https://bsky.social/xrpc/com.atproto.repo.putRecord (marketing/automation/src/run.ts:352)", "shortDescription": {"text": "Dangling fetch: POST https://bsky.social/xrpc/com.atproto.repo.putRecord (marketing/automation/src/run.ts:352)"}, "fullDescription": {"text": "`marketing/automation/src/run.ts:352` calls `POST https://bsky.social/xrpc/com.atproto.repo.putRecord` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/bsky.social/xrpc/com.atproto.repo.putrecord`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ec175e8b7b65b24f", "name": "Dangling fetch: POST https://bsky.social/xrpc/com.atproto.server.createSession (marketing/automation/src/run.ts:367)", "shortDescription": {"text": "Dangling fetch: POST https://bsky.social/xrpc/com.atproto.server.createSession (marketing/automation/src/run.ts:367)"}, "fullDescription": {"text": "`marketing/automation/src/run.ts:367` calls `POST https://bsky.social/xrpc/com.atproto.server.createSession` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/bsky.social/xrpc/com.atproto.server.createsession`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e9a86e111e5094ec", "name": "Dangling fetch: POST https://bsky.social/xrpc/com.atproto.repo.deleteRecord (marketing/automation/src/run.ts:390)", "shortDescription": {"text": "Dangling fetch: POST https://bsky.social/xrpc/com.atproto.repo.deleteRecord (marketing/automation/src/run.ts:390)"}, "fullDescription": {"text": "`marketing/automation/src/run.ts:390` calls `POST https://bsky.social/xrpc/com.atproto.repo.deleteRecord` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/bsky.social/xrpc/com.atproto.repo.deleterecord`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9fca38c5c4631c27", "name": "Dangling fetch: POST https://api.cloudflare.com/client/v4/accounts/${account}/ai/run/${CLOUDFLARE_MODEL} (marketing/auto", "shortDescription": {"text": "Dangling fetch: POST https://api.cloudflare.com/client/v4/accounts/${account}/ai/run/${CLOUDFLARE_MODEL} (marketing/automation/src/generate.ts:153)"}, "fullDescription": {"text": "`marketing/automation/src/generate.ts:153` calls `POST https://api.cloudflare.com/client/v4/accounts/${account}/ai/run/${CLOUDFLARE_MODEL}` 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/accounts/<p>/ai/run/<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-b2916465cb75ef65", "name": "Dangling fetch: POST https://bsky.social/xrpc/com.atproto.server.createSession (marketing/automation/src/engage.ts:76)", "shortDescription": {"text": "Dangling fetch: POST https://bsky.social/xrpc/com.atproto.server.createSession (marketing/automation/src/engage.ts:76)"}, "fullDescription": {"text": "`marketing/automation/src/engage.ts:76` calls `POST https://bsky.social/xrpc/com.atproto.server.createSession` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/bsky.social/xrpc/com.atproto.server.createsession`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-674c1aad11b11ff5", "name": "Dangling fetch: GET https://app.ayrshare.com/api/analytics/post?id=${id} (marketing/automation/src/metrics.ts:31)", "shortDescription": {"text": "Dangling fetch: GET https://app.ayrshare.com/api/analytics/post?id=${id} (marketing/automation/src/metrics.ts:31)"}, "fullDescription": {"text": "`marketing/automation/src/metrics.ts:31` calls `GET https://app.ayrshare.com/api/analytics/post?id=${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/app.ayrshare.com/api/analytics/post`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6f95710ac420fad6", "name": "Dangling fetch: POST https://graph.facebook.com/v21.0/${json.id}/comments (marketing/automation/src/post.ts:236)", "shortDescription": {"text": "Dangling fetch: POST https://graph.facebook.com/v21.0/${json.id}/comments (marketing/automation/src/post.ts:236)"}, "fullDescription": {"text": "`marketing/automation/src/post.ts:236` calls `POST https://graph.facebook.com/v21.0/${json.id}/comments` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/graph.facebook.com/v21.0/<p>/comments`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-69cc00871e265cb6", "name": "Dangling fetch: POST https://graph.facebook.com/v21.0/${igUserId}/media (marketing/automation/src/post.ts:263)", "shortDescription": {"text": "Dangling fetch: POST https://graph.facebook.com/v21.0/${igUserId}/media (marketing/automation/src/post.ts:263)"}, "fullDescription": {"text": "`marketing/automation/src/post.ts:263` calls `POST https://graph.facebook.com/v21.0/${igUserId}/media` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/graph.facebook.com/v21.0/<p>/media`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4ea0d6538029f041", "name": "Dangling fetch: POST https://graph.facebook.com/v21.0/${igUserId}/media_publish (marketing/automation/src/post.ts:272)", "shortDescription": {"text": "Dangling fetch: POST https://graph.facebook.com/v21.0/${igUserId}/media_publish (marketing/automation/src/post.ts:272)"}, "fullDescription": {"text": "`marketing/automation/src/post.ts:272` calls `POST https://graph.facebook.com/v21.0/${igUserId}/media_publish` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/graph.facebook.com/v21.0/<p>/media_publish`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-65ff4d72a7a77986", "name": "Dangling fetch: POST https://api.linkedin.com/v2/ugcPosts (marketing/automation/src/post.ts:300)", "shortDescription": {"text": "Dangling fetch: POST https://api.linkedin.com/v2/ugcPosts (marketing/automation/src/post.ts:300)"}, "fullDescription": {"text": "`marketing/automation/src/post.ts:300` calls `POST https://api.linkedin.com/v2/ugcPosts` 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.linkedin.com/v2/ugcposts`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-87b686628996bc07", "name": "Dangling fetch: POST https://api.pinterest.com/v5/pins (marketing/automation/src/post.ts:321)", "shortDescription": {"text": "Dangling fetch: POST https://api.pinterest.com/v5/pins (marketing/automation/src/post.ts:321)"}, "fullDescription": {"text": "`marketing/automation/src/post.ts:321` calls `POST https://api.pinterest.com/v5/pins` 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.pinterest.com/v5/pins`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7c7e312f22c60333", "name": "Dangling fetch: POST https://bsky.social/xrpc/com.atproto.repo.uploadBlob (marketing/automation/src/post.ts:351)", "shortDescription": {"text": "Dangling fetch: POST https://bsky.social/xrpc/com.atproto.repo.uploadBlob (marketing/automation/src/post.ts:351)"}, "fullDescription": {"text": "`marketing/automation/src/post.ts:351` calls `POST https://bsky.social/xrpc/com.atproto.repo.uploadBlob` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/bsky.social/xrpc/com.atproto.repo.uploadblob`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3237a1afa9ff417c", "name": "Dangling fetch: POST https://bsky.social/xrpc/com.atproto.server.createSession (marketing/automation/src/post.ts:380)", "shortDescription": {"text": "Dangling fetch: POST https://bsky.social/xrpc/com.atproto.server.createSession (marketing/automation/src/post.ts:380)"}, "fullDescription": {"text": "`marketing/automation/src/post.ts:380` calls `POST https://bsky.social/xrpc/com.atproto.server.createSession` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/bsky.social/xrpc/com.atproto.server.createsession`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c2ec683cc86763be", "name": "Dangling fetch: POST https://bsky.social/xrpc/com.atproto.repo.createRecord (marketing/automation/src/post.ts:461)", "shortDescription": {"text": "Dangling fetch: POST https://bsky.social/xrpc/com.atproto.repo.createRecord (marketing/automation/src/post.ts:461)"}, "fullDescription": {"text": "`marketing/automation/src/post.ts:461` calls `POST https://bsky.social/xrpc/com.atproto.repo.createRecord` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/bsky.social/xrpc/com.atproto.repo.createrecord`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e6c36014602c5b8f", "name": "Dangling fetch: POST https://api.resend.com/emails (cloudflare/worker/src/utils/email.ts:174)", "shortDescription": {"text": "Dangling fetch: POST https://api.resend.com/emails (cloudflare/worker/src/utils/email.ts:174)"}, "fullDescription": {"text": "`cloudflare/worker/src/utils/email.ts:174` calls `POST https://api.resend.com/emails` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.resend.com/emails`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1c3756c1315ed31f", "name": "Dangling fetch: POST https://api.stripe.com/v1/checkout/sessions (cloudflare/worker/src/routes/books.ts:181)", "shortDescription": {"text": "Dangling fetch: POST https://api.stripe.com/v1/checkout/sessions (cloudflare/worker/src/routes/books.ts:181)"}, "fullDescription": {"text": "`cloudflare/worker/src/routes/books.ts:181` calls `POST https://api.stripe.com/v1/checkout/sessions` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.stripe.com/v1/checkout/sessions`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-41fbe3b405cced3a", "name": "Dangling fetch: POST https://api.stripe.com/v1/checkout/sessions (cloudflare/worker/src/routes/partners.ts:558)", "shortDescription": {"text": "Dangling fetch: POST https://api.stripe.com/v1/checkout/sessions (cloudflare/worker/src/routes/partners.ts:558)"}, "fullDescription": {"text": "`cloudflare/worker/src/routes/partners.ts:558` calls `POST https://api.stripe.com/v1/checkout/sessions` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.stripe.com/v1/checkout/sessions`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1ce738d0c920b5c6", "name": "Dangling fetch: POST https://api.stripe.com/v1/checkout/sessions (cloudflare/worker/src/routes/billing.ts:658)", "shortDescription": {"text": "Dangling fetch: POST https://api.stripe.com/v1/checkout/sessions (cloudflare/worker/src/routes/billing.ts:658)"}, "fullDescription": {"text": "`cloudflare/worker/src/routes/billing.ts:658` calls `POST https://api.stripe.com/v1/checkout/sessions` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.stripe.com/v1/checkout/sessions`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-311f0b635a4b1b16", "name": "Dangling fetch: POST https://api.stripe.com/v1/subscriptions/${sub.stripe_subscription_id} (cloudflare/worker/src/routes", "shortDescription": {"text": "Dangling fetch: POST https://api.stripe.com/v1/subscriptions/${sub.stripe_subscription_id} (cloudflare/worker/src/routes/billing.ts:702)"}, "fullDescription": {"text": "`cloudflare/worker/src/routes/billing.ts:702` calls `POST https://api.stripe.com/v1/subscriptions/${sub.stripe_subscription_id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.stripe.com/v1/subscriptions/<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-745e45e389c1e2c4", "name": "Dangling fetch: POST https://api.stripe.com/v1/subscriptions/${sub.stripe_subscription_id} (cloudflare/worker/src/routes", "shortDescription": {"text": "Dangling fetch: POST https://api.stripe.com/v1/subscriptions/${sub.stripe_subscription_id} (cloudflare/worker/src/routes/billing.ts:736)"}, "fullDescription": {"text": "`cloudflare/worker/src/routes/billing.ts:736` calls `POST https://api.stripe.com/v1/subscriptions/${sub.stripe_subscription_id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.stripe.com/v1/subscriptions/<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-aa633a59f73b041d", "name": "Dangling fetch: GET https://api.stripe.com/v1/customers?email=${encodeURIComponent(user.email as string)}&limit=1 (cloud", "shortDescription": {"text": "Dangling fetch: GET https://api.stripe.com/v1/customers?email=${encodeURIComponent(user.email as string)}&limit=1 (cloudflare/worker/src/routes/billing.ts:784)"}, "fullDescription": {"text": "`cloudflare/worker/src/routes/billing.ts:784` calls `GET https://api.stripe.com/v1/customers?email=${encodeURIComponent(user.email as string)}&limit=1` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.stripe.com/v1/customers`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e049336fec9dbdf5", "name": "Dangling fetch: POST https://api.stripe.com/v1/billing_portal/sessions (cloudflare/worker/src/routes/billing.ts:796)", "shortDescription": {"text": "Dangling fetch: POST https://api.stripe.com/v1/billing_portal/sessions (cloudflare/worker/src/routes/billing.ts:796)"}, "fullDescription": {"text": "`cloudflare/worker/src/routes/billing.ts:796` calls `POST https://api.stripe.com/v1/billing_portal/sessions` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.stripe.com/v1/billing_portal/sessions`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-67beca1c9a96ff71", "name": "Dangling fetch: POST https://api.stripe.com/v1/accounts (cloudflare/worker/src/routes/influencers.ts:495)", "shortDescription": {"text": "Dangling fetch: POST https://api.stripe.com/v1/accounts (cloudflare/worker/src/routes/influencers.ts:495)"}, "fullDescription": {"text": "`cloudflare/worker/src/routes/influencers.ts:495` calls `POST https://api.stripe.com/v1/accounts` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.stripe.com/v1/accounts`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ddbd78fdd60ceb46", "name": "Dangling fetch: POST https://api.stripe.com/v1/account_links (cloudflare/worker/src/routes/influencers.ts:530)", "shortDescription": {"text": "Dangling fetch: POST https://api.stripe.com/v1/account_links (cloudflare/worker/src/routes/influencers.ts:530)"}, "fullDescription": {"text": "`cloudflare/worker/src/routes/influencers.ts:530` calls `POST https://api.stripe.com/v1/account_links` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.stripe.com/v1/account_links`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a1bb15f27a7904d2", "name": "Dangling fetch: POST https://api.stripe.com/v1/account_links (cloudflare/worker/src/routes/influencers.ts:582)", "shortDescription": {"text": "Dangling fetch: POST https://api.stripe.com/v1/account_links (cloudflare/worker/src/routes/influencers.ts:582)"}, "fullDescription": {"text": "`cloudflare/worker/src/routes/influencers.ts:582` calls `POST https://api.stripe.com/v1/account_links` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.stripe.com/v1/account_links`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e510614fa53cf276", "name": "Dangling fetch: GET https://api.stripe.com/v1/accounts/${influencer.stripe_account_id} (cloudflare/worker/src/routes/inf", "shortDescription": {"text": "Dangling fetch: GET https://api.stripe.com/v1/accounts/${influencer.stripe_account_id} (cloudflare/worker/src/routes/influencers.ts:625)"}, "fullDescription": {"text": "`cloudflare/worker/src/routes/influencers.ts:625` calls `GET https://api.stripe.com/v1/accounts/${influencer.stripe_account_id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.stripe.com/v1/accounts/<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-6d51e7c84b660af2", "name": "Dangling fetch: POST https://api.stripe.com/v1/subscriptions?customer=${stripeCustomerId}&status=active&limit=5 (cloudfl", "shortDescription": {"text": "Dangling fetch: POST https://api.stripe.com/v1/subscriptions?customer=${stripeCustomerId}&status=active&limit=5 (cloudflare/worker/src/routes/settings.ts:897)"}, "fullDescription": {"text": "`cloudflare/worker/src/routes/settings.ts:897` calls `POST https://api.stripe.com/v1/subscriptions?customer=${stripeCustomerId}&status=active&limit=5` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.stripe.com/v1/subscriptions`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-25daeca46aa8a7b2", "name": "Dangling fetch: DELETE https://api.stripe.com/v1/customers/${stripeCustomerId} (cloudflare/worker/src/routes/settings.ts", "shortDescription": {"text": "Dangling fetch: DELETE https://api.stripe.com/v1/customers/${stripeCustomerId} (cloudflare/worker/src/routes/settings.ts:919)"}, "fullDescription": {"text": "`cloudflare/worker/src/routes/settings.ts:919` calls `DELETE https://api.stripe.com/v1/customers/${stripeCustomerId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.stripe.com/v1/customers/<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-7e0be63770682d10", "name": "Dangling fetch: POST https://api.stripe.com/v1/checkout/sessions (cloudflare/worker/src/routes/gift-vouchers.ts:230)", "shortDescription": {"text": "Dangling fetch: POST https://api.stripe.com/v1/checkout/sessions (cloudflare/worker/src/routes/gift-vouchers.ts:230)"}, "fullDescription": {"text": "`cloudflare/worker/src/routes/gift-vouchers.ts:230` calls `POST https://api.stripe.com/v1/checkout/sessions` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.stripe.com/v1/checkout/sessions`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-56ef92921fbe7b30", "name": "Dangling fetch: POST https://api.stripe.com/v1/checkout/sessions (cloudflare/worker/src/routes/founders.ts:73)", "shortDescription": {"text": "Dangling fetch: POST https://api.stripe.com/v1/checkout/sessions (cloudflare/worker/src/routes/founders.ts:73)"}, "fullDescription": {"text": "`cloudflare/worker/src/routes/founders.ts:73` calls `POST https://api.stripe.com/v1/checkout/sessions` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.stripe.com/v1/checkout/sessions`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8d0d57092e42f84d", "name": "Dangling fetch: POST https://api.web3.storage/upload (cloudflare/worker/src/services/archive.ts:152)", "shortDescription": {"text": "Dangling fetch: POST https://api.web3.storage/upload (cloudflare/worker/src/services/archive.ts:152)"}, "fullDescription": {"text": "`cloudflare/worker/src/services/archive.ts:152` calls `POST https://api.web3.storage/upload` 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.web3.storage/upload`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5bafbbeb253b5ab2", "name": "Dangling fetch: POST https://api.pinata.cloud/pinning/pinJSONToIPFS (cloudflare/worker/src/services/archive.ts:169)", "shortDescription": {"text": "Dangling fetch: POST https://api.pinata.cloud/pinning/pinJSONToIPFS (cloudflare/worker/src/services/archive.ts:169)"}, "fullDescription": {"text": "`cloudflare/worker/src/services/archive.ts:169` calls `POST https://api.pinata.cloud/pinning/pinJSONToIPFS` 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.pinata.cloud/pinning/pinjsontoipfs`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c940dfeb62b98d73", "name": "Dangling fetch: HEAD https://cloudflare-ipfs.com/ipfs/${p.snapshot_cid} (cloudflare/worker/src/services/archive.ts:247)", "shortDescription": {"text": "Dangling fetch: HEAD https://cloudflare-ipfs.com/ipfs/${p.snapshot_cid} (cloudflare/worker/src/services/archive.ts:247)"}, "fullDescription": {"text": "`cloudflare/worker/src/services/archive.ts:247` calls `HEAD https://cloudflare-ipfs.com/ipfs/${p.snapshot_cid}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/cloudflare-ipfs.com/ipfs/<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-b9755d2ad9f33fd8", "name": "Dangling fetch: POST https://oauth2.googleapis.com/token (cloudflare/worker/src/services/pushSender.ts:179)", "shortDescription": {"text": "Dangling fetch: POST https://oauth2.googleapis.com/token (cloudflare/worker/src/services/pushSender.ts:179)"}, "fullDescription": {"text": "`cloudflare/worker/src/services/pushSender.ts:179` calls `POST https://oauth2.googleapis.com/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:/oauth2.googleapis.com/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-17fa6f0a85e19521", "name": "Dangling fetch: DELETE https://api.stripe.com/v1/customers/${stripeCustomerId} (cloudflare/worker/src/crons/scheduled-de", "shortDescription": {"text": "Dangling fetch: DELETE https://api.stripe.com/v1/customers/${stripeCustomerId} (cloudflare/worker/src/crons/scheduled-deletion.ts:37)"}, "fullDescription": {"text": "`cloudflare/worker/src/crons/scheduled-deletion.ts:37` calls `DELETE https://api.stripe.com/v1/customers/${stripeCustomerId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.stripe.com/v1/customers/<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-fd9a5dec1e93033f", "name": "Dangling fetch: POST https://open.tiktokapis.com/v2/research/video/query/?fields=username,follower_count,region_code,bio", "shortDescription": {"text": "Dangling fetch: POST https://open.tiktokapis.com/v2/research/video/query/?fields=username,follower_count,region_code,bio_description (cloudflare/worker/src/jobs/adoption-jobs.ts:658)"}, "fullDescription": {"text": "`cloudflare/worker/src/jobs/adoption-jobs.ts:658` calls `POST https://open.tiktokapis.com/v2/research/video/query/?fields=username,follower_count,region_code,bio_description` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/open.tiktokapis.com/v2/research/video/query`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1dc75e2af8fd6068", "name": "Dangling fetch: POST https://open.tiktokapis.com/v2/research/user/info/?fields=bio_description (cloudflare/worker/src/jo", "shortDescription": {"text": "Dangling fetch: POST https://open.tiktokapis.com/v2/research/user/info/?fields=bio_description (cloudflare/worker/src/jobs/adoption-jobs.ts:840)"}, "fullDescription": {"text": "`cloudflare/worker/src/jobs/adoption-jobs.ts:840` calls `POST https://open.tiktokapis.com/v2/research/user/info/?fields=bio_description` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/open.tiktokapis.com/v2/research/user/info`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-249a2896427d725d", "name": "Dangling fetch: POST https://api.stripe.com/v1/transfers (cloudflare/worker/src/jobs/adoption-jobs.ts:1497)", "shortDescription": {"text": "Dangling fetch: POST https://api.stripe.com/v1/transfers (cloudflare/worker/src/jobs/adoption-jobs.ts:1497)"}, "fullDescription": {"text": "`cloudflare/worker/src/jobs/adoption-jobs.ts:1497` calls `POST https://api.stripe.com/v1/transfers` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.stripe.com/v1/transfers`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8fdbacfe9430a6ed", "name": "Unused endpoint: POST /auth/login", "shortDescription": {"text": "Unused endpoint: POST /auth/login"}, "fullDescription": {"text": "`mobile/src/services/api.ts` declares `POST /auth/login` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4a12d5ed34c864c6", "name": "Unused endpoint: POST /auth/signup", "shortDescription": {"text": "Unused endpoint: POST /auth/signup"}, "fullDescription": {"text": "`mobile/src/services/api.ts` declares `POST /auth/signup` 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-ac42422b23e45104", "name": "Unused endpoint: GET /auth/me", "shortDescription": {"text": "Unused endpoint: GET /auth/me"}, "fullDescription": {"text": "`mobile/src/services/api.ts` declares `GET /auth/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-9143464946a01de5", "name": "Unused endpoint: PUT /auth/profile", "shortDescription": {"text": "Unused endpoint: PUT /auth/profile"}, "fullDescription": {"text": "`mobile/src/services/api.ts` declares `PUT /auth/profile` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-bf0e2bdcf4f50610", "name": "Unused endpoint: GET /memories", "shortDescription": {"text": "Unused endpoint: GET /memories"}, "fullDescription": {"text": "`mobile/src/services/api.ts` declares `GET /memories` 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-54d5652d376f7633", "name": "Unused endpoint: POST /memories", "shortDescription": {"text": "Unused endpoint: POST /memories"}, "fullDescription": {"text": "`mobile/src/services/api.ts` declares `POST /memories` 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-e207905b2217d900", "name": "Unused endpoint: GET /voice", "shortDescription": {"text": "Unused endpoint: GET /voice"}, "fullDescription": {"text": "`mobile/src/services/api.ts` declares `GET /voice` 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-1e31e6c47ac525d3", "name": "Unused endpoint: POST /voice", "shortDescription": {"text": "Unused endpoint: POST /voice"}, "fullDescription": {"text": "`mobile/src/services/api.ts` declares `POST /voice` 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-d9686ce89ab3892a", "name": "Unused endpoint: GET /letters", "shortDescription": {"text": "Unused endpoint: GET /letters"}, "fullDescription": {"text": "`mobile/src/services/api.ts` declares `GET /letters` 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-abcb719f827e3822", "name": "Unused endpoint: POST /letters", "shortDescription": {"text": "Unused endpoint: POST /letters"}, "fullDescription": {"text": "`mobile/src/services/api.ts` declares `POST /letters` 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-b9a17d61120f5fe3", "name": "Unused endpoint: GET /family", "shortDescription": {"text": "Unused endpoint: GET /family"}, "fullDescription": {"text": "`mobile/src/services/api.ts` declares `GET /family` 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-13bcd80948dbb3e0", "name": "Unused endpoint: POST /family", "shortDescription": {"text": "Unused endpoint: POST /family"}, "fullDescription": {"text": "`mobile/src/services/api.ts` declares `POST /family` 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-0268ef7bb526542f", "name": "Unused endpoint: GET /legacy/score", "shortDescription": {"text": "Unused endpoint: GET /legacy/score"}, "fullDescription": {"text": "`mobile/src/services/api.ts` declares `GET /legacy/score` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-226f5390a91293d2", "name": "Unused endpoint: POST /push/web-subscribe", "shortDescription": {"text": "Unused endpoint: POST /push/web-subscribe"}, "fullDescription": {"text": "`cloudflare/frontend/src/lib/webPush.ts` declares `POST /push/web-subscribe` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1cde74b1ea72f549", "name": "Unused endpoint: POST /gift-vouchers/redeem", "shortDescription": {"text": "Unused endpoint: POST /gift-vouchers/redeem"}, "fullDescription": {"text": "`cloudflare/frontend/src/pages/GiftRedeem.tsx` declares `POST /gift-vouchers/redeem` 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-5219264ce6d227dd", "name": "Unused endpoint: GET /life-events", "shortDescription": {"text": "Unused endpoint: GET /life-events"}, "fullDescription": {"text": "`cloudflare/frontend/src/pages/LifeEvents.tsx` declares `GET /life-events` 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-66ecc651d5273207", "name": "Unused endpoint: POST /life-events", "shortDescription": {"text": "Unused endpoint: POST /life-events"}, "fullDescription": {"text": "`cloudflare/frontend/src/pages/LifeEvents.tsx` declares `POST /life-events` 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-000756c5ab0ce3c7", "name": "Unused endpoint: GET /legacy-plan", "shortDescription": {"text": "Unused endpoint: GET /legacy-plan"}, "fullDescription": {"text": "`cloudflare/frontend/src/pages/LegacyPlan.tsx` declares `GET /legacy-plan` 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-9b69db7fea2751a3", "name": "Unused endpoint: POST /legacy-plan/items", "shortDescription": {"text": "Unused endpoint: POST /legacy-plan/items"}, "fullDescription": {"text": "`cloudflare/frontend/src/pages/LegacyPlan.tsx` declares `POST /legacy-plan/items` 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-51873c56661a5816", "name": "Unused endpoint: PATCH /legacy-plan/share", "shortDescription": {"text": "Unused endpoint: PATCH /legacy-plan/share"}, "fullDescription": {"text": "`cloudflare/frontend/src/pages/LegacyPlan.tsx` declares `PATCH /legacy-plan/share` 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-b1521a5505973709", "name": "Unused endpoint: GET /story-artifacts", "shortDescription": {"text": "Unused endpoint: GET /story-artifacts"}, "fullDescription": {"text": "`cloudflare/frontend/src/pages/StoryArtifact.tsx` declares `GET /story-artifacts` 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-c821e200664089f4", "name": "Unused endpoint: POST /story-artifacts", "shortDescription": {"text": "Unused endpoint: POST /story-artifacts"}, "fullDescription": {"text": "`cloudflare/frontend/src/pages/StoryArtifact.tsx` declares `POST /story-artifacts` 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-8292c0931391749a", "name": "Unused endpoint: POST /auth/register", "shortDescription": {"text": "Unused endpoint: POST /auth/register"}, "fullDescription": {"text": "`cloudflare/frontend/src/services/api.ts` declares `POST /auth/register` 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-c059f57186114027", "name": "Unused endpoint: POST /auth/logout", "shortDescription": {"text": "Unused endpoint: POST /auth/logout"}, "fullDescription": {"text": "`cloudflare/frontend/src/services/api.ts` declares `POST /auth/logout` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b36892106ecdc9aa", "name": "Unused endpoint: POST /auth/refresh", "shortDescription": {"text": "Unused endpoint: POST /auth/refresh"}, "fullDescription": {"text": "`cloudflare/frontend/src/services/api.ts` declares `POST /auth/refresh` 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-e2fe5b92648ca462", "name": "Unused endpoint: POST /auth/forgot-password", "shortDescription": {"text": "Unused endpoint: POST /auth/forgot-password"}, "fullDescription": {"text": "`cloudflare/frontend/src/services/api.ts` declares `POST /auth/forgot-password` 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-deb8df763a50c73a", "name": "Unused endpoint: POST /auth/reset-password", "shortDescription": {"text": "Unused endpoint: POST /auth/reset-password"}, "fullDescription": {"text": "`cloudflare/frontend/src/services/api.ts` declares `POST /auth/reset-password` 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-9b90a04019d1c892", "name": "Unused endpoint: GET /memories/map", "shortDescription": {"text": "Unused endpoint: GET /memories/map"}, "fullDescription": {"text": "`cloudflare/frontend/src/services/api.ts` declares `GET /memories/map` 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-e6f355f2c6c95fa0", "name": "Unused endpoint: GET /memories/stats/summary", "shortDescription": {"text": "Unused endpoint: GET /memories/stats/summary"}, "fullDescription": {"text": "`cloudflare/frontend/src/services/api.ts` declares `GET /memories/stats/summary` 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-99e0d2baa433c13d", "name": "Unused endpoint: POST /memories/upload-url", "shortDescription": {"text": "Unused endpoint: POST /memories/upload-url"}, "fullDescription": {"text": "`cloudflare/frontend/src/services/api.ts` declares `POST /memories/upload-url` 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-cf1d037aea30207e", "name": "Unused endpoint: GET /memories/received", "shortDescription": {"text": "Unused endpoint: GET /memories/received"}, "fullDescription": {"text": "`cloudflare/frontend/src/services/api.ts` declares `GET /memories/received` 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-602fc953d42181c6", "name": "Unused endpoint: POST /letters/ai-suggest", "shortDescription": {"text": "Unused endpoint: POST /letters/ai-suggest"}, "fullDescription": {"text": "`cloudflare/frontend/src/services/api.ts` declares `POST /letters/ai-suggest` 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-3dec150d1ae5d57f", "name": "Unused endpoint: GET /letters/awaiting-me", "shortDescription": {"text": "Unused endpoint: GET /letters/awaiting-me"}, "fullDescription": {"text": "`cloudflare/frontend/src/services/api.ts` declares `GET /letters/awaiting-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-769d71bd7e51939a", "name": "Unused endpoint: GET /letters/received", "shortDescription": {"text": "Unused endpoint: GET /letters/received"}, "fullDescription": {"text": "`cloudflare/frontend/src/services/api.ts` declares `GET /letters/received` 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-41d1e5caffd01ef7", "name": "Unused endpoint: GET /voice/stats", "shortDescription": {"text": "Unused endpoint: GET /voice/stats"}, "fullDescription": {"text": "`cloudflare/frontend/src/services/api.ts` declares `GET /voice/stats` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0c1f920edda6c052", "name": "Unused endpoint: GET /voice/prompts/list", "shortDescription": {"text": "Unused endpoint: GET /voice/prompts/list"}, "fullDescription": {"text": "`cloudflare/frontend/src/services/api.ts` declares `GET /voice/prompts/list` 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-2fd293bb7dd517dd", "name": "Unused endpoint: POST /voice/upload-url", "shortDescription": {"text": "Unused endpoint: POST /voice/upload-url"}, "fullDescription": {"text": "`cloudflare/frontend/src/services/api.ts` declares `POST /voice/upload-url` 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-7d06ec413dc802c8", "name": "Unused endpoint: GET /billing/subscription", "shortDescription": {"text": "Unused endpoint: GET /billing/subscription"}, "fullDescription": {"text": "`cloudflare/frontend/src/services/api.ts` declares `GET /billing/subscription` 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-c8236eac795dbcc6", "name": "Unused endpoint: GET /billing/limits", "shortDescription": {"text": "Unused endpoint: GET /billing/limits"}, "fullDescription": {"text": "`cloudflare/frontend/src/services/api.ts` declares `GET /billing/limits` 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-fe04496aab15c6e5", "name": "Unused endpoint: GET /billing/pricing", "shortDescription": {"text": "Unused endpoint: GET /billing/pricing"}, "fullDescription": {"text": "`cloudflare/frontend/src/services/api.ts` declares `GET /billing/pricing` 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-747d120f647f5364", "name": "Unused endpoint: POST /billing/checkout", "shortDescription": {"text": "Unused endpoint: POST /billing/checkout"}, "fullDescription": {"text": "`cloudflare/frontend/src/services/api.ts` declares `POST /billing/checkout` 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-cd4ff0d2ce9b28ec", "name": "Unused endpoint: POST /billing/cancel", "shortDescription": {"text": "Unused endpoint: POST /billing/cancel"}, "fullDescription": {"text": "`cloudflare/frontend/src/services/api.ts` declares `POST /billing/cancel` 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-589634278f2427b7", "name": "Unused endpoint: POST /billing/portal", "shortDescription": {"text": "Unused endpoint: POST /billing/portal"}, "fullDescription": {"text": "`cloudflare/frontend/src/services/api.ts` declares `POST /billing/portal` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d2db8dd0510cd105", "name": "Unused endpoint: PATCH /billing/currency", "shortDescription": {"text": "Unused endpoint: PATCH /billing/currency"}, "fullDescription": {"text": "`cloudflare/frontend/src/services/api.ts` declares `PATCH /billing/currency` 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-8df4ce4cdff2f93c", "name": "Unused endpoint: POST /gifts/send", "shortDescription": {"text": "Unused endpoint: POST /gifts/send"}, "fullDescription": {"text": "`cloudflare/frontend/src/services/api.ts` declares `POST /gifts/send` 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-e6303b02ff1ade87", "name": "Unused endpoint: GET /capsules", "shortDescription": {"text": "Unused endpoint: GET /capsules"}, "fullDescription": {"text": "`cloudflare/frontend/src/services/api.ts` declares `GET /capsules` 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-350be91f48c5081a", "name": "Unused endpoint: POST /capsules", "shortDescription": {"text": "Unused endpoint: POST /capsules"}, "fullDescription": {"text": "`cloudflare/frontend/src/services/api.ts` declares `POST /capsules` 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-f9199e3e25961660", "name": "Unused endpoint: GET /engagement/legacy-score", "shortDescription": {"text": "Unused endpoint: GET /engagement/legacy-score"}, "fullDescription": {"text": "`cloudflare/frontend/src/services/api.ts` declares `GET /engagement/legacy-score` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7ba26056836239de", "name": "Unused endpoint: GET /engagement/family-feed", "shortDescription": {"text": "Unused endpoint: GET /engagement/family-feed"}, "fullDescription": {"text": "`cloudflare/frontend/src/services/api.ts` declares `GET /engagement/family-feed` 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-f7a7e672abfa361f", "name": "Unused endpoint: GET /memory-cards/on-this-day", "shortDescription": {"text": "Unused endpoint: GET /memory-cards/on-this-day"}, "fullDescription": {"text": "`cloudflare/frontend/src/services/api.ts` declares `GET /memory-cards/on-this-day` 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/18058"}, "properties": {"repository": "Reshigan/Heirloom", "repoUrl": "https://github.com/Reshigan/Heirloom", "branch": "main"}, "results": [{"ruleId": "scanner-3fdf61cb384b4a75", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/generate-all-videos.js:51"}, "properties": {"repobilityId": "e233355effacb35f", "scanner": "scanner-primary", "fingerprint": "3fdf61cb384b4a75", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b93c9d86850bcea2", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/generate-social-assets.js:122"}, "properties": {"repobilityId": "9297c2e8096c75c6", "scanner": "scanner-primary", "fingerprint": "b93c9d86850bcea2", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1b41b0cb5d8ab9b4", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/generate-content-json.js:882"}, "properties": {"repobilityId": "446c95e293b969f2", "scanner": "scanner-primary", "fingerprint": "1b41b0cb5d8ab9b4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-69d58274c5142f51", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/generate-social-video.js:118"}, "properties": {"repobilityId": "df3c5546def29238", "scanner": "scanner-primary", "fingerprint": "69d58274c5142f51", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1e97985e1a6f2e37", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 marketing/automation/scripts/bluesky-promo.ts:72"}, "properties": {"repobilityId": "09f316d2283b141b", "scanner": "scanner-primary", "fingerprint": "1e97985e1a6f2e37", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-89273d5bd7a72949", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 marketing/automation/scripts/social-launch.ts:67"}, "properties": {"repobilityId": "9d4a1c7ec459e91f", "scanner": "scanner-primary", "fingerprint": "89273d5bd7a72949", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-169ac9e009e2253d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 marketing/automation/src/run.ts:92"}, "properties": {"repobilityId": "83a14750af0452c5", "scanner": "scanner-primary", "fingerprint": "169ac9e009e2253d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-288029c4e1edeb5b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 marketing/automation/src/seo.ts:207"}, "properties": {"repobilityId": "bd1f33718669d081", "scanner": "scanner-primary", "fingerprint": "288029c4e1edeb5b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a9169b2a514ce5f7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 marketing/automation/src/engage.ts:111"}, "properties": {"repobilityId": "c21263ef1f17aa7d", "scanner": "scanner-primary", "fingerprint": "a9169b2a514ce5f7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a77d4962e2fb46bf", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 marketing/automation/src/post.ts:228"}, "properties": {"repobilityId": "a4d0fedabe9f0b5d", "scanner": "scanner-primary", "fingerprint": "a77d4962e2fb46bf", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-bf9837eb346592cf", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 marketing/automation/src/batch.ts:96"}, "properties": {"repobilityId": "59e5a7473c703e9f", "scanner": "scanner-primary", "fingerprint": "bf9837eb346592cf", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9da68dd3ee301cc8", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 mobile/scripts/generate-icons.js:67"}, "properties": {"repobilityId": "a53727ddfb53a302", "scanner": "scanner-primary", "fingerprint": "9da68dd3ee301cc8", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d98e62a0a092d690", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 cloudflare/worker-configuration.d.ts:203"}, "properties": {"repobilityId": "f8e8b8b417671f90", "scanner": "scanner-primary", "fingerprint": "d98e62a0a092d690", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-56eb593d0f23975c", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 cloudflare/frontend/src/loom/components/AppFrame.tsx:24"}, "properties": {"repobilityId": "abbb6ffb40122ec1", "scanner": "scanner-primary", "fingerprint": "56eb593d0f23975c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-52f5e88ed6ee4396", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 cloudflare/frontend/src/pages/QandA.tsx:321"}, "properties": {"repobilityId": "4edebbce82eefbb3", "scanner": "scanner-primary", "fingerprint": "52f5e88ed6ee4396", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-711ebecb3500abd0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 cloudflare/frontend/e2e/regression.spec.ts:312"}, "properties": {"repobilityId": "0a1d71b2528d845a", "scanner": "scanner-primary", "fingerprint": "711ebecb3500abd0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ccbf801ce968f6c7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 cloudflare/frontend/e2e/04-pwa-install.spec.ts:109"}, "properties": {"repobilityId": "1ee7b43d0f7d934c", "scanner": "scanner-primary", "fingerprint": "ccbf801ce968f6c7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5ae6fadbde2b2aec", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 cloudflare/worker/sim/lifetime.test.ts:314"}, "properties": {"repobilityId": "fa8ac560d792dda7", "scanner": "scanner-primary", "fingerprint": "5ae6fadbde2b2aec", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8f655bfba309479f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 cloudflare/worker/src/index.ts:930"}, "properties": {"repobilityId": "6261b1f39a595125", "scanner": "scanner-primary", "fingerprint": "8f655bfba309479f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8fc01b091945a33c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 cloudflare/worker/src/routes/ai.ts:226"}, "properties": {"repobilityId": "5c2fad6fba09283d", "scanner": "scanner-primary", "fingerprint": "8fc01b091945a33c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2b13d3ca8d4f32c2", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 cloudflare/worker/src/routes/admin.ts:2273"}, "properties": {"repobilityId": "e872494f1a49eea1", "scanner": "scanner-primary", "fingerprint": "2b13d3ca8d4f32c2", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-da15b126117a6eb8", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 cloudflare/worker/src/routes/inherit.ts:166"}, "properties": {"repobilityId": "0d19fb5f2411e45d", "scanner": "scanner-primary", "fingerprint": "da15b126117a6eb8", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-2b36adfe49f01655", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 cloudflare/worker/src/services/pushSender.ts:251"}, "properties": {"repobilityId": "9c81a4a1cf84485b", "scanner": "scanner-primary", "fingerprint": "2b36adfe49f01655", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1b91bc39474b6b01", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 cloudflare/worker/src/services/mailbox-bounce-detector.ts:325"}, "properties": {"repobilityId": "1a4c3cea2c3621f8", "scanner": "scanner-primary", "fingerprint": "1b91bc39474b6b01", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-fbbf66070e31094f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 cloudflare/worker/src/crons/scheduled-deletion.ts:87"}, "properties": {"repobilityId": "ea64be2b2960b2a9", "scanner": "scanner-primary", "fingerprint": "fbbf66070e31094f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-087da633482560ee", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 cloudflare/worker/src/jobs/adoption-jobs.ts:2328"}, "properties": {"repobilityId": "e38e7fb4210b1e31", "scanner": "scanner-primary", "fingerprint": "087da633482560ee", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6bf10a052ecd80c4", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 backend/src/utils/seed.ts:39"}, "properties": {"repobilityId": "b48ad1c1a3eee3fa", "scanner": "scanner-primary", "fingerprint": "6bf10a052ecd80c4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4b1dea4e3d2b02f9", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 backend/src/routes/support.ts:486"}, "properties": {"repobilityId": "4b6e280fbce88261", "scanner": "scanner-primary", "fingerprint": "4b1dea4e3d2b02f9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ea20cde10874b8d8", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 backend/src/routes/notifications.ts:194"}, "properties": {"repobilityId": "d5a75c144d3f68b7", "scanner": "scanner-primary", "fingerprint": "ea20cde10874b8d8", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c40e9fffbd9aead0", "level": "warning", "message": {"text": "Dockerfile runs as root: cloudflare/frontend/Dockerfile"}, "properties": {"repobilityId": "5c0ce9cb505092a4", "scanner": "scanner-primary", "fingerprint": "c40e9fffbd9aead0", "layer": "hardware", "severity": "medium", "confidence": 1.0, "tags": ["security", "container"]}}, {"ruleId": "scanner-e67b44e758c7741e", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: node:20-alpine"}, "properties": {"repobilityId": "bd34a2baaa908e15", "scanner": "scanner-primary", "fingerprint": "e67b44e758c7741e", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "cloudflare/frontend/Dockerfile"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-1f66ad88286ca30a", "level": "warning", "message": {"text": "Dockerfile runs as root: backend/Dockerfile"}, "properties": {"repobilityId": "7afd2b0e8a8c9eeb", "scanner": "scanner-primary", "fingerprint": "1f66ad88286ca30a", "layer": "hardware", "severity": "medium", "confidence": 1.0, "tags": ["security", "container"]}}, {"ruleId": "scanner-4e3420f08c109bd9", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: node:20-slim"}, "properties": {"repobilityId": "dabdbd9410e8b1a5", "scanner": "scanner-primary", "fingerprint": "4e3420f08c109bd9", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/Dockerfile"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-aa5acaa49eb8315b", "level": "note", "message": {"text": "Containers defined but no K8s/orchestration manifest found"}, "properties": {"repobilityId": "b230ea9b68736081", "scanner": "scanner-primary", "fingerprint": "aa5acaa49eb8315b", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["coverage", "deployment"]}}, {"ruleId": "scanner-9ea97b42fc767ef6", "level": "error", "message": {"text": "Runtime dotenv file present in repo: cloudflare/frontend/.env.production"}, "properties": {"repobilityId": "4467dd06755e0e1b", "scanner": "scanner-primary", "fingerprint": "9ea97b42fc767ef6", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets", "config", "env-file", "runtime-env", "env_file_with_secret"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "cloudflare/frontend/.env.production"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-60bd7273e6307ef8", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/generate-tiktok.mjs:23"}, "properties": {"repobilityId": "407fb6220e0a9943", "scanner": "scanner-primary", "fingerprint": "60bd7273e6307ef8", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/generate-tiktok.mjs"}, "region": {"startLine": 23}}}]}, {"ruleId": "scanner-12234c3178e27a19", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/generate-social-video.js:17"}, "properties": {"repobilityId": "d955795ac4745051", "scanner": "scanner-primary", "fingerprint": "12234c3178e27a19", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/generate-social-video.js"}, "region": {"startLine": 17}}}]}, {"ruleId": "scanner-365c2c23a7ffbde2", "level": "error", "message": {"text": "Possible secret in mobile/src/screens/SignupScreen.tsx"}, "properties": {"repobilityId": "1111b856e24f6c98", "scanner": "scanner-primary", "fingerprint": "365c2c23a7ffbde2", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "mobile/src/screens/SignupScreen.tsx"}, "region": {"startLine": 46}}}]}, {"ruleId": "scanner-365c2c23a7ffbde2", "level": "error", "message": {"text": "Possible secret in mobile/src/screens/SignupScreen.tsx"}, "properties": {"repobilityId": "1111b856e24f6c98", "scanner": "scanner-primary", "fingerprint": "365c2c23a7ffbde2", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "mobile/src/screens/SignupScreen.tsx"}, "region": {"startLine": 48}}}]}, {"ruleId": "scanner-365c2c23a7ffbde2", "level": "error", "message": {"text": "Possible secret in mobile/src/screens/SignupScreen.tsx"}, "properties": {"repobilityId": "1111b856e24f6c98", "scanner": "scanner-primary", "fingerprint": "365c2c23a7ffbde2", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "mobile/src/screens/SignupScreen.tsx"}, "region": {"startLine": 52}}}]}, {"ruleId": "scanner-9432733d1416c2ce", "level": "error", "message": {"text": "Possible secret in mobile/src/screens/LoginScreen.tsx"}, "properties": {"repobilityId": "20b9ccb87c0f3278", "scanner": "scanner-primary", "fingerprint": "9432733d1416c2ce", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "mobile/src/screens/LoginScreen.tsx"}, "region": {"startLine": 40}}}]}, {"ruleId": "scanner-26abc60a07ad683d", "level": "error", "message": {"text": "Insecure pattern 'exec_used' in cloudflare/worker-configuration.d.ts:2997"}, "properties": {"repobilityId": "e4307388af85607b", "scanner": "scanner-primary", "fingerprint": "26abc60a07ad683d", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["owasp", "exec_used"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "cloudflare/worker-configuration.d.ts"}, "region": {"startLine": 2997}}}]}, {"ruleId": "scanner-f63162f3f2618c18", "level": "warning", "message": {"text": "Insecure pattern 'local_storage_auth_token' in cloudflare/frontend/scripts/live-seeded-shots.mjs:189"}, "properties": {"repobilityId": "bd343bb3db127870", "scanner": "scanner-primary", "fingerprint": "f63162f3f2618c18", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "local_storage_auth_token"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "cloudflare/frontend/scripts/live-seeded-shots.mjs"}, "region": {"startLine": 189}}}]}, {"ruleId": "scanner-66c9a475faa490c3", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in cloudflare/frontend/scripts/live-seeded-shots.mjs:199"}, "properties": {"repobilityId": "e298b8a66ad00996", "scanner": "scanner-primary", "fingerprint": "66c9a475faa490c3", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "cloudflare/frontend/scripts/live-seeded-shots.mjs"}, "region": {"startLine": 199}}}]}, {"ruleId": "scanner-b5c52f86333926cf", "level": "warning", "message": {"text": "Insecure pattern 'local_storage_auth_token' in cloudflare/frontend/scripts/mock-authed-shots.mjs:10"}, "properties": {"repobilityId": "e01b9e8d15958f95", "scanner": "scanner-primary", "fingerprint": "b5c52f86333926cf", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "local_storage_auth_token"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "cloudflare/frontend/scripts/mock-authed-shots.mjs"}, "region": {"startLine": 10}}}]}, {"ruleId": "scanner-184712d557f8085e", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in cloudflare/frontend/scripts/mock-authed-shots.mjs:24"}, "properties": {"repobilityId": "2d742433ab78b9c6", "scanner": "scanner-primary", "fingerprint": "184712d557f8085e", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "cloudflare/frontend/scripts/mock-authed-shots.mjs"}, "region": {"startLine": 24}}}]}, {"ruleId": "scanner-122b5f5da0ede8f1", "level": "warning", "message": {"text": "Insecure pattern 'local_storage_auth_token' in cloudflare/frontend/scripts/audit-pages.mjs:25"}, "properties": {"repobilityId": "5d1f7301d0a7c1f4", "scanner": "scanner-primary", "fingerprint": "122b5f5da0ede8f1", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "local_storage_auth_token"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "cloudflare/frontend/scripts/audit-pages.mjs"}, "region": {"startLine": 25}}}]}, {"ruleId": "scanner-603d8459737d6068", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in cloudflare/frontend/public/offline-boot.js:34"}, "properties": {"repobilityId": "853d95664b31f9f3", "scanner": "scanner-primary", "fingerprint": "603d8459737d6068", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "cloudflare/frontend/public/offline-boot.js"}, "region": {"startLine": 34}}}]}, {"ruleId": "scanner-8d1174941c496430", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in cloudflare/frontend/src/loom/components/ClothWeave.tsx:396"}, "properties": {"repobilityId": "de7414445f2b1b7e", "scanner": "scanner-primary", "fingerprint": "8d1174941c496430", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "cloudflare/frontend/src/loom/components/ClothWeave.tsx"}, "region": {"startLine": 396}}}]}, {"ruleId": "scanner-f68a82d1eab8cca1", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in cloudflare/frontend/src/loom/components/CosmicLoom.tsx:336"}, "properties": {"repobilityId": "b4889df2c2d5f452", "scanner": "scanner-primary", "fingerprint": "f68a82d1eab8cca1", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "cloudflare/frontend/src/loom/components/CosmicLoom.tsx"}, "region": {"startLine": 336}}}]}, {"ruleId": "scanner-b958a96820c4f540", "level": "warning", "message": {"text": "Insecure pattern 'local_storage_auth_token' in cloudflare/frontend/src/pages/AdminLogin.tsx:17"}, "properties": {"repobilityId": "a5be3a136ac906a4", "scanner": "scanner-primary", "fingerprint": "b958a96820c4f540", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "local_storage_auth_token"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "cloudflare/frontend/src/pages/AdminLogin.tsx"}, "region": {"startLine": 17}}}]}, {"ruleId": "scanner-2e8391e1a733a2a2", "level": "error", "message": {"text": "Possible secret in cloudflare/frontend/src/pages/Signup.tsx"}, "properties": {"repobilityId": "ff4066441f0836d4", "scanner": "scanner-primary", "fingerprint": "2e8391e1a733a2a2", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "cloudflare/frontend/src/pages/Signup.tsx"}, "region": {"startLine": 91}}}]}, {"ruleId": "scanner-2e8391e1a733a2a2", "level": "error", "message": {"text": "Possible secret in cloudflare/frontend/src/pages/Signup.tsx"}, "properties": {"repobilityId": "ff4066441f0836d4", "scanner": "scanner-primary", "fingerprint": "2e8391e1a733a2a2", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "cloudflare/frontend/src/pages/Signup.tsx"}, "region": {"startLine": 92}}}]}, {"ruleId": "scanner-9e91494196505035", "level": "warning", "message": {"text": "Insecure pattern 'local_storage_auth_token' in cloudflare/frontend/src/pages/GiftReceive.tsx:67"}, "properties": {"repobilityId": "81a9846ac82f09d4", "scanner": "scanner-primary", "fingerprint": "9e91494196505035", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "local_storage_auth_token"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "cloudflare/frontend/src/pages/GiftReceive.tsx"}, "region": {"startLine": 67}}}]}, {"ruleId": "scanner-57f785c41324de12", "level": "warning", "message": {"text": "Insecure pattern 'local_storage_auth_token' in cloudflare/frontend/src/services/api.ts:12"}, "properties": {"repobilityId": "c635036702de181e", "scanner": "scanner-primary", "fingerprint": "57f785c41324de12", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "local_storage_auth_token"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "cloudflare/frontend/src/services/api.ts"}, "region": {"startLine": 12}}}]}, {"ruleId": "scanner-bc90ca87ae274159", "level": "error", "message": {"text": "Possible secret in cloudflare/frontend/e2e/regression.spec.ts"}, "properties": {"repobilityId": "0b92d7c64ec5a033", "scanner": "scanner-primary", "fingerprint": "bc90ca87ae274159", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "cloudflare/frontend/e2e/regression.spec.ts"}, "region": {"startLine": 172}}}]}, {"ruleId": "scanner-103c263de9e87962", "level": "warning", "message": {"text": "Insecure pattern 'local_storage_auth_token' in cloudflare/frontend/e2e/regression.spec.ts:64"}, "properties": {"repobilityId": "cb58e7a91d946e36", "scanner": "scanner-primary", "fingerprint": "103c263de9e87962", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "local_storage_auth_token"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "cloudflare/frontend/e2e/regression.spec.ts"}, "region": {"startLine": 64}}}]}, {"ruleId": "scanner-89b705396e59b6ac", "level": "error", "message": {"text": "Possible secret in cloudflare/frontend/e2e/verify-cloth-nav.spec.ts"}, "properties": {"repobilityId": "8d162b5d0374b611", "scanner": "scanner-primary", "fingerprint": "89b705396e59b6ac", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "cloudflare/frontend/e2e/verify-cloth-nav.spec.ts"}, "region": {"startLine": 15}}}]}, {"ruleId": "scanner-524d191a7a73cda1", "level": "error", "message": {"text": "Possible secret in cloudflare/frontend/e2e/auth.spec.ts"}, "properties": {"repobilityId": "7d1a24884d0e9e01", "scanner": "scanner-primary", "fingerprint": "524d191a7a73cda1", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "cloudflare/frontend/e2e/auth.spec.ts"}, "region": {"startLine": 54}}}]}, {"ruleId": "scanner-790b0a17eb1e4bdb", "level": "error", "message": {"text": "Possible secret in cloudflare/frontend/e2e/verify-fixes.spec.ts"}, "properties": {"repobilityId": "4557758a316ee855", "scanner": "scanner-primary", "fingerprint": "790b0a17eb1e4bdb", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "cloudflare/frontend/e2e/verify-fixes.spec.ts"}, "region": {"startLine": 10}}}]}, {"ruleId": "scanner-b16d47aabc5405f0", "level": "error", "message": {"text": "Possible secret in cloudflare/frontend/e2e/05-nav-smoke.spec.ts"}, "properties": {"repobilityId": "0c7da6323ff5468f", "scanner": "scanner-primary", "fingerprint": "b16d47aabc5405f0", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "cloudflare/frontend/e2e/05-nav-smoke.spec.ts"}, "region": {"startLine": 16}}}]}, {"ruleId": "scanner-dced07f1821ab31b", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in cloudflare/worker/src/routes/voice.ts:250"}, "properties": {"repobilityId": "f59c800514532c8c", "scanner": "scanner-primary", "fingerprint": "dced07f1821ab31b", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "cloudflare/worker/src/routes/voice.ts"}, "region": {"startLine": 250}}}]}, {"ruleId": "scanner-62c66535031b72e2", "level": "error", "message": {"text": "Insecure pattern 'private_key_in_repo' in cloudflare/worker/src/services/pushSender.ts:53"}, "properties": {"repobilityId": "1d07aebc84812110", "scanner": "scanner-primary", "fingerprint": "62c66535031b72e2", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["owasp", "private_key_in_repo"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "cloudflare/worker/src/services/pushSender.ts"}, "region": {"startLine": 53}}}]}, {"ruleId": "scanner-f7618c833d42aeed", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "9d46e840210286ed", "scanner": "scanner-primary", "fingerprint": "f7618c833d42aeed", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/social-autopost.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-e74f294b720edd78", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "c3cca0f15059a609", "scanner": "scanner-primary", "fingerprint": "e74f294b720edd78", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/pr-checks.yml"}, "region": {"startLine": 13}}}]}, {"ruleId": "scanner-e74f294b720edd78", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "c3cca0f15059a609", "scanner": "scanner-primary", "fingerprint": "e74f294b720edd78", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/pr-checks.yml"}, "region": {"startLine": 56}}}]}, {"ruleId": "scanner-e74f294b720edd78", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "4b44d8cf41d0de5d", "scanner": "scanner-primary", "fingerprint": "e74f294b720edd78", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/pr-checks.yml"}, "region": {"startLine": 59}}}]}, {"ruleId": "scanner-e74f294b720edd78", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "c3cca0f15059a609", "scanner": "scanner-primary", "fingerprint": "e74f294b720edd78", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/pr-checks.yml"}, "region": {"startLine": 77}}}]}, {"ruleId": "scanner-e74f294b720edd78", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "4b44d8cf41d0de5d", "scanner": "scanner-primary", "fingerprint": "e74f294b720edd78", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/pr-checks.yml"}, "region": {"startLine": 80}}}]}, {"ruleId": "scanner-e74f294b720edd78", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "c3cca0f15059a609", "scanner": "scanner-primary", "fingerprint": "e74f294b720edd78", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/pr-checks.yml"}, "region": {"startLine": 101}}}]}, {"ruleId": "scanner-e74f294b720edd78", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "4b44d8cf41d0de5d", "scanner": "scanner-primary", "fingerprint": "e74f294b720edd78", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/pr-checks.yml"}, "region": {"startLine": 104}}}]}, {"ruleId": "scanner-e74f294b720edd78", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "c3cca0f15059a609", "scanner": "scanner-primary", "fingerprint": "e74f294b720edd78", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/pr-checks.yml"}, "region": {"startLine": 125}}}]}, {"ruleId": "scanner-e74f294b720edd78", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "4b44d8cf41d0de5d", "scanner": "scanner-primary", "fingerprint": "e74f294b720edd78", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/pr-checks.yml"}, "region": {"startLine": 128}}}]}, {"ruleId": "scanner-ef86a4ab3a187eb2", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "3d5f5c6849fcca32", "scanner": "scanner-primary", "fingerprint": "ef86a4ab3a187eb2", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/social-promo.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-40dba48ffd6bded2", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "1538935628a25bd0", "scanner": "scanner-primary", "fingerprint": "40dba48ffd6bded2", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/d1-backup.yml"}, "region": {"startLine": 20}}}]}, {"ruleId": "scanner-40dba48ffd6bded2", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "adac27da467cf64d", "scanner": "scanner-primary", "fingerprint": "40dba48ffd6bded2", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/d1-backup.yml"}, "region": {"startLine": 23}}}]}, {"ruleId": "scanner-40dba48ffd6bded2", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "1079d082b243be59", "scanner": "scanner-primary", "fingerprint": "40dba48ffd6bded2", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/d1-backup.yml"}, "region": {"startLine": 69}}}]}, {"ruleId": "scanner-59d7cdc8cf834675", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "4290445ac19eaaca", "scanner": "scanner-primary", "fingerprint": "59d7cdc8cf834675", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/social-batch.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-65728889296e9b63", "level": "note", "message": {"text": "Very large file: cloudflare/worker-configuration.d.ts (12856 lines)"}, "properties": {"repobilityId": "5425bd34839a5374", "scanner": "scanner-primary", "fingerprint": "65728889296e9b63", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-8b8953aa84d03840", "level": "note", "message": {"text": "Very large file: cloudflare/frontend/src/pages/AdminDashboard.tsx (2101 lines)"}, "properties": {"repobilityId": "cf0071aa80cfd37f", "scanner": "scanner-primary", "fingerprint": "8b8953aa84d03840", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-0f0c4f509f66fb7b", "level": "note", "message": {"text": "Very large file: cloudflare/frontend/src/pages/Compose.tsx (1658 lines)"}, "properties": {"repobilityId": "1352b102dd296295", "scanner": "scanner-primary", "fingerprint": "0f0c4f509f66fb7b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-195f83d6d9bb59ed", "level": "note", "message": {"text": "Very large file: cloudflare/worker/src/index.ts (1700 lines)"}, "properties": {"repobilityId": "8ffdc3be8749c497", "scanner": "scanner-primary", "fingerprint": "195f83d6d9bb59ed", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-e1470b75ef86ad09", "level": "note", "message": {"text": "Very large file: cloudflare/worker/src/email-templates.ts (1268 lines)"}, "properties": {"repobilityId": "33e6820328afd2f5", "scanner": "scanner-primary", "fingerprint": "e1470b75ef86ad09", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-66f41df4c33d7753", "level": "note", "message": {"text": "Very large file: cloudflare/worker/src/routes/billing.ts (1284 lines)"}, "properties": {"repobilityId": "09275e5f47d38dad", "scanner": "scanner-primary", "fingerprint": "66f41df4c33d7753", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-110198d1794f50aa", "level": "note", "message": {"text": "Very large file: cloudflare/worker/src/routes/export.ts (1675 lines)"}, "properties": {"repobilityId": "e0e3b152d8bf52d7", "scanner": "scanner-primary", "fingerprint": "110198d1794f50aa", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-5d08495c83d34f40", "level": "note", "message": {"text": "Very large file: cloudflare/worker/src/routes/admin.ts (2730 lines)"}, "properties": {"repobilityId": "ceea7a183b02579a", "scanner": "scanner-primary", "fingerprint": "5d08495c83d34f40", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-dd682e5e2cdc834f", "level": "note", "message": {"text": "Very large file: cloudflare/worker/src/jobs/adoption-jobs.ts (2344 lines)"}, "properties": {"repobilityId": "1a1cd6a98d32504f", "scanner": "scanner-primary", "fingerprint": "dd682e5e2cdc834f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-6893a6c8b0861585", "level": "warning", "message": {"text": "Very low test-to-source ratio"}, "properties": {"repobilityId": "54a7de3f06314bf0", "scanner": "scanner-primary", "fingerprint": "6893a6c8b0861585", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["tests", "coverage"]}}, {"ruleId": "scanner-141b30a41e03817b", "level": "note", "message": {"text": "No license file detected"}, "properties": {"repobilityId": "6f74f9267f3bb5e4", "scanner": "scanner-primary", "fingerprint": "141b30a41e03817b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["license", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "42199102c526295e", "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": "0c049da3b3ba8ea5", "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": "84c98c92da40c85a", "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": "6237ed06e6e052f4", "scanner": "scanner-primary", "fingerprint": "749d4bc1bd66df5f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-ea8f3013f588db25", "level": "note", "message": {"text": "Shallow git history limits provenance confidence"}, "properties": {"repobilityId": "94a4e5c73a13cf48", "scanner": "scanner-primary", "fingerprint": "ea8f3013f588db25", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-8424db9c75e04ba4", "level": "none", "message": {"text": "Very short observed git history"}, "properties": {"repobilityId": "f5083ea0da44e9de", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-f75f13de4b6c61cd", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/update-social-profiles.mjs:30"}, "properties": {"repobilityId": "e7792fd15220e7ed", "scanner": "scanner-primary", "fingerprint": "f75f13de4b6c61cd", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-6074da46761b1c98", "level": "none", "message": {"text": "Commented-code block (5 lines) in scripts/generate-tiktok.mjs:242"}, "properties": {"repobilityId": "38a24aeaa5bebc42", "scanner": "scanner-primary", "fingerprint": "6074da46761b1c98", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-72b9600722e02f51", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 marketing/automation/scripts/bluesky-promo.ts:39"}, "properties": {"repobilityId": "9bdf9e022d817d41", "scanner": "scanner-primary", "fingerprint": "72b9600722e02f51", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-5dde402368939cfe", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 marketing/automation/scripts/social-launch.ts:41"}, "properties": {"repobilityId": "651f1bf81ad10d6d", "scanner": "scanner-primary", "fingerprint": "5dde402368939cfe", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-fdb3c949ae537842", "level": "none", "message": {"text": "Commented-code block (7 lines) in marketing/automation/src/run.ts:3"}, "properties": {"repobilityId": "19b9f440959208de", "scanner": "scanner-primary", "fingerprint": "fdb3c949ae537842", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9e13cc5f8b4b9e7c", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 marketing/automation/src/run.ts:322"}, "properties": {"repobilityId": "236b523547d21cab", "scanner": "scanner-primary", "fingerprint": "9e13cc5f8b4b9e7c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-64f605b419b2adaa", "level": "none", "message": {"text": "Commented-code block (6 lines) in marketing/automation/src/image.ts:5"}, "properties": {"repobilityId": "e68705575902734b", "scanner": "scanner-primary", "fingerprint": "64f605b419b2adaa", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-258a7660b6a5a43f", "level": "none", "message": {"text": "Commented-code block (6 lines) in marketing/automation/src/variants.ts:88"}, "properties": {"repobilityId": "7e7164082e490037", "scanner": "scanner-primary", "fingerprint": "258a7660b6a5a43f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2bfbdb93d3f76ec7", "level": "none", "message": {"text": "Commented-code block (8 lines) in marketing/automation/src/hashtags.ts:3"}, "properties": {"repobilityId": "bcf42ef1451d7d32", "scanner": "scanner-primary", "fingerprint": "2bfbdb93d3f76ec7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b2a3ed4828431238", "level": "none", "message": {"text": "Commented-code block (5 lines) in marketing/automation/src/generate.ts:15"}, "properties": {"repobilityId": "53a90477b4b11ce7", "scanner": "scanner-primary", "fingerprint": "b2a3ed4828431238", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6dc9ab151084e022", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 marketing/automation/src/generate.ts:153"}, "properties": {"repobilityId": "06ddb6a9bf4da40a", "scanner": "scanner-primary", "fingerprint": "6dc9ab151084e022", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b9a9eb723691e6db", "level": "none", "message": {"text": "Commented-code block (11 lines) in marketing/automation/src/themes.ts:7"}, "properties": {"repobilityId": "931d58f286f5bc8f", "scanner": "scanner-primary", "fingerprint": "b9a9eb723691e6db", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6e4d54b25bffecd7", "level": "none", "message": {"text": "Commented-code block (5 lines) in marketing/automation/src/engage.ts:3"}, "properties": {"repobilityId": "4d71d0554e0bfb66", "scanner": "scanner-primary", "fingerprint": "6e4d54b25bffecd7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-16d3ac51f10b304b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 marketing/automation/src/metrics.ts:31"}, "properties": {"repobilityId": "3fc9ea2e0439e1e6", "scanner": "scanner-primary", "fingerprint": "16d3ac51f10b304b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-7ae7e59b2e1d8f5f", "level": "none", "message": {"text": "Commented-code block (6 lines) in marketing/automation/src/post.ts:5"}, "properties": {"repobilityId": "7ea3ae9c83ad0249", "scanner": "scanner-primary", "fingerprint": "7ae7e59b2e1d8f5f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9e167610c8170cac", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 marketing/automation/src/post.ts:300"}, "properties": {"repobilityId": "5687c785a3adba2a", "scanner": "scanner-primary", "fingerprint": "9e167610c8170cac", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b8b307f30585c045", "level": "note", "message": {"text": "Legacy-named symbol `certIssuerDNLegacy` in cloudflare/worker-configuration.d.ts:10446"}, "properties": {"repobilityId": "ba8e02b544e14ed3", "scanner": "scanner-primary", "fingerprint": "b8b307f30585c045", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-10aa3189ede8f24f", "level": "none", "message": {"text": "Commented-code block (8 lines) in cloudflare/worker-configuration.d.ts:11338"}, "properties": {"repobilityId": "7766da7e723b7449", "scanner": "scanner-primary", "fingerprint": "10aa3189ede8f24f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9be55fb9952fd7fe", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 cloudflare/worker-configuration.d.ts:336"}, "properties": {"repobilityId": "7fcf008c15f4946d", "scanner": "scanner-primary", "fingerprint": "9be55fb9952fd7fe", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a024fcce8172f676", "level": "none", "message": {"text": "Commented-code block (6 lines) in cloudflare/frontend/tailwind.config.js:76"}, "properties": {"repobilityId": "67f46bc9f7b9cde5", "scanner": "scanner-primary", "fingerprint": "a024fcce8172f676", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fa55af70277722bb", "level": "none", "message": {"text": "Commented-code block (5 lines) in cloudflare/frontend/public/splash-boot.js:1"}, "properties": {"repobilityId": "2fe9af3279767a65", "scanner": "scanner-primary", "fingerprint": "fa55af70277722bb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-23062789d696b648", "level": "none", "message": {"text": "Commented-code block (5 lines) in cloudflare/frontend/public/sw.js:134"}, "properties": {"repobilityId": "99edf97f19f48354", "scanner": "scanner-primary", "fingerprint": "23062789d696b648", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5e5181a5b9151b4e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 cloudflare/frontend/public/sw.js:123"}, "properties": {"repobilityId": "72821eb486b826c6", "scanner": "scanner-primary", "fingerprint": "5e5181a5b9151b4e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-620da3a5d85daa1f", "level": "none", "message": {"text": "Commented-code block (6 lines) in cloudflare/frontend/src/main.tsx:25"}, "properties": {"repobilityId": "f7d5ecfcdb2fd36f", "scanner": "scanner-primary", "fingerprint": "620da3a5d85daa1f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-04c8baa3f5bef39e", "level": "none", "message": {"text": "Commented-code block (5 lines) in cloudflare/frontend/src/loom/components/ClothBackdrop.tsx:62"}, "properties": {"repobilityId": "c37f87655e1d736f", "scanner": "scanner-primary", "fingerprint": "04c8baa3f5bef39e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1446b61bfc68005f", "level": "none", "message": {"text": "Commented-code block (7 lines) in cloudflare/frontend/src/loom/components/AppFrame.tsx:4"}, "properties": {"repobilityId": "a06364198e88eed0", "scanner": "scanner-primary", "fingerprint": "1446b61bfc68005f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bce3d706f9766751", "level": "none", "message": {"text": "Commented-code block (5 lines) in cloudflare/frontend/src/loom/components/TapestryCanvas.tsx:329"}, "properties": {"repobilityId": "8c392eebb7de3e9e", "scanner": "scanner-primary", "fingerprint": "bce3d706f9766751", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-145efd89ef9e1707", "level": "none", "message": {"text": "Commented-code block (5 lines) in cloudflare/frontend/src/loom/components/HLogo.tsx:1"}, "properties": {"repobilityId": "5c228bc6f553911f", "scanner": "scanner-primary", "fingerprint": "145efd89ef9e1707", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-446eaccac60fc808", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 cloudflare/frontend/src/loom/components/ComposerChrome.tsx:76"}, "properties": {"repobilityId": "3e2bd09eeff354f0", "scanner": "scanner-primary", "fingerprint": "446eaccac60fc808", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a142f5cd4cfcbda9", "level": "none", "message": {"text": "Commented-code block (5 lines) in cloudflare/frontend/src/lib/registerSW.ts:20"}, "properties": {"repobilityId": "8a3db4b39324c045", "scanner": "scanner-primary", "fingerprint": "a142f5cd4cfcbda9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e25f0888c6f3628b", "level": "note", "message": {"text": "Legacy-named symbol `refetchGoldLegacy` in cloudflare/frontend/src/pages/AdminDashboard.tsx:170"}, "properties": {"repobilityId": "3c3216ec34865399", "scanner": "scanner-primary", "fingerprint": "e25f0888c6f3628b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-ab5185c3b1246c59", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 cloudflare/frontend/src/pages/AdminDashboard.tsx:148"}, "properties": {"repobilityId": "72d99ba82fde3859", "scanner": "scanner-primary", "fingerprint": "ab5185c3b1246c59", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ad38cba79b1786fa", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 cloudflare/frontend/src/pages/Record.tsx:252"}, "properties": {"repobilityId": "749c986f98540d6b", "scanner": "scanner-primary", "fingerprint": "ad38cba79b1786fa", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ec37c0fb9b3b21cf", "level": "none", "message": {"text": "Commented-code block (5 lines) in cloudflare/frontend/src/pages/ReadingRoom.tsx:62"}, "properties": {"repobilityId": "1fcd8f761fe52f20", "scanner": "scanner-primary", "fingerprint": "ec37c0fb9b3b21cf", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-877f3c115276a73f", "level": "note", "message": {"text": "Legacy-named symbol `isGoldLegacy` in cloudflare/frontend/src/pages/GoldLegacyRedeem.tsx:19"}, "properties": {"repobilityId": "19f984d21bbfad13", "scanner": "scanner-primary", "fingerprint": "877f3c115276a73f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-adc8c7643c8d8dcd", "level": "none", "message": {"text": "Commented-code block (5 lines) in cloudflare/frontend/src/services/api.ts:45"}, "properties": {"repobilityId": "f8c763c2f3a44ffa", "scanner": "scanner-primary", "fingerprint": "adc8c7643c8d8dcd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ab6d9d5fe6f06f5b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 cloudflare/frontend/src/services/encryptionService.ts:99"}, "properties": {"repobilityId": "01e1464b9474f670", "scanner": "scanner-primary", "fingerprint": "ab6d9d5fe6f06f5b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-406ea7ab4b363a91", "level": "none", "message": {"text": "Commented-code block (6 lines) in cloudflare/frontend/e2e/regression.spec.ts:92"}, "properties": {"repobilityId": "a48e92b94262cf53", "scanner": "scanner-primary", "fingerprint": "406ea7ab4b363a91", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-427e3fb62935ac2b", "level": "none", "message": {"text": "Commented-code block (5 lines) in cloudflare/frontend/e2e/01-public-routes.spec.ts:34"}, "properties": {"repobilityId": "f171031fec499456", "scanner": "scanner-primary", "fingerprint": "427e3fb62935ac2b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e45c7843590d5a4e", "level": "none", "message": {"text": "Commented-code block (5 lines) in cloudflare/worker/src/index.ts:308"}, "properties": {"repobilityId": "d84bf221088e0d8f", "scanner": "scanner-primary", "fingerprint": "e45c7843590d5a4e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3866a4fce4eefe4f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 cloudflare/worker/src/index.ts:1637"}, "properties": {"repobilityId": "a0f3094c9f0c8231", "scanner": "scanner-primary", "fingerprint": "3866a4fce4eefe4f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-6c3e8c9b49a6f254", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 cloudflare/worker/src/__tests__/health.worker.test.ts:18"}, "properties": {"repobilityId": "c66b7faced01a152", "scanner": "scanner-primary", "fingerprint": "6c3e8c9b49a6f254", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d52d5d473f9916df", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 cloudflare/worker/src/__tests__/gift-vouchers.worker.test.ts:24"}, "properties": {"repobilityId": "05f6f9815cd59122", "scanner": "scanner-primary", "fingerprint": "d52d5d473f9916df", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-86733d92bb209733", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 cloudflare/worker/src/__tests__/auth.worker.test.ts:17"}, "properties": {"repobilityId": "c73cc615d886aed0", "scanner": "scanner-primary", "fingerprint": "86733d92bb209733", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f0392328974998b8", "level": "none", "message": {"text": "Commented-code block (5 lines) in cloudflare/worker/src/routes/ai.ts:825"}, "properties": {"repobilityId": "495d65a00de9778e", "scanner": "scanner-primary", "fingerprint": "f0392328974998b8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a44ad742492b51f6", "level": "note", "message": {"text": "Legacy-named symbol `isGoldLegacy` in cloudflare/worker/src/routes/auth.ts:68"}, "properties": {"repobilityId": "ffbe21d16ca837b9", "scanner": "scanner-primary", "fingerprint": "a44ad742492b51f6", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-cc09f20419f11919", "level": "none", "message": {"text": "Commented-code block (7 lines) in cloudflare/worker/src/routes/books.ts:90"}, "properties": {"repobilityId": "f18b17736885b867", "scanner": "scanner-primary", "fingerprint": "cc09f20419f11919", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-29b89328060c73af", "level": "none", "message": {"text": "Commented-code block (5 lines) in cloudflare/worker/src/routes/threads.ts:185"}, "properties": {"repobilityId": "c4aaff30688e8fa1", "scanner": "scanner-primary", "fingerprint": "29b89328060c73af", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ae4fe7e9e96463d2", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 cloudflare/worker/src/routes/partners.ts:558"}, "properties": {"repobilityId": "c41f3383299adfc6", "scanner": "scanner-primary", "fingerprint": "ae4fe7e9e96463d2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2b4df6b45c67e1c8", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 cloudflare/worker/src/routes/q4-features.ts:225"}, "properties": {"repobilityId": "0c20cc8df22da986", "scanner": "scanner-primary", "fingerprint": "2b4df6b45c67e1c8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-30ae050ba66c4c18", "level": "none", "message": {"text": "Commented-code block (10 lines) in cloudflare/worker/src/routes/billing.ts:77"}, "properties": {"repobilityId": "314f984dd8f53b7e", "scanner": "scanner-primary", "fingerprint": "30ae050ba66c4c18", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9b153c54275bd44a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 cloudflare/worker/src/routes/billing.ts:658"}, "properties": {"repobilityId": "fe48bef832c30839", "scanner": "scanner-primary", "fingerprint": "9b153c54275bd44a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-025c0d4056ec162d", "level": "none", "message": {"text": "Commented-code block (5 lines) in cloudflare/worker/src/routes/social.ts:21"}, "properties": {"repobilityId": "960f7b1324c77869", "scanner": "scanner-primary", "fingerprint": "025c0d4056ec162d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7248e529118617b6", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 cloudflare/worker/src/routes/influencers.ts:530"}, "properties": {"repobilityId": "dcb20476ca9979c5", "scanner": "scanner-primary", "fingerprint": "7248e529118617b6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-5ae59b7843d50938", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 cloudflare/worker/src/routes/social-import.ts:390"}, "properties": {"repobilityId": "e6093f9a1864ac2d", "scanner": "scanner-primary", "fingerprint": "5ae59b7843d50938", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-98ce03f64a115d21", "level": "none", "message": {"text": "Commented-code block (6 lines) in cloudflare/worker/src/routes/family.ts:353"}, "properties": {"repobilityId": "c44982db324d56c3", "scanner": "scanner-primary", "fingerprint": "98ce03f64a115d21", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-56967ffb9a18485a", "level": "none", "message": {"text": "Commented-code block (5 lines) in cloudflare/worker/src/routes/letters.ts:224"}, "properties": {"repobilityId": "5a8ebc179ad7ca77", "scanner": "scanner-primary", "fingerprint": "56967ffb9a18485a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6824df78c29e1e5b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 cloudflare/worker/src/routes/admin.ts:45"}, "properties": {"repobilityId": "b71cf9f548a59f9f", "scanner": "scanner-primary", "fingerprint": "6824df78c29e1e5b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b89838548efe9816", "level": "note", "message": {"text": "Legacy-named symbol `safeOld` in cloudflare/worker/src/routes/settings.ts:378"}, "properties": {"repobilityId": "4c3fa77dcda13f1a", "scanner": "scanner-primary", "fingerprint": "b89838548efe9816", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-9995d29041e32ee2", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 cloudflare/worker/src/routes/settings.ts:904"}, "properties": {"repobilityId": "56f043418ffb94e1", "scanner": "scanner-primary", "fingerprint": "9995d29041e32ee2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-0c39ac33c9bc1222", "level": "note", "message": {"text": "Legacy-named symbol `isLegacy` in cloudflare/worker/src/routes/gift-vouchers.ts:186"}, "properties": {"repobilityId": "5cdd2ad518dd381e", "scanner": "scanner-primary", "fingerprint": "0c39ac33c9bc1222", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-031be19d46ed2b02", "level": "none", "message": {"text": "Commented-code block (5 lines) in cloudflare/worker/src/routes/founders.ts:64"}, "properties": {"repobilityId": "3f87dd856a9ba1a4", "scanner": "scanner-primary", "fingerprint": "031be19d46ed2b02", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-30a9d440e4d13d5a", "level": "none", "message": {"text": "Commented-code block (6 lines) in cloudflare/worker/src/routes/inherit.ts:159"}, "properties": {"repobilityId": "c84530c5b91c594c", "scanner": "scanner-primary", "fingerprint": "30a9d440e4d13d5a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2a651e8a8d45431b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 cloudflare/worker/src/services/archive.ts:152"}, "properties": {"repobilityId": "bbf8dd557009bf86", "scanner": "scanner-primary", "fingerprint": "2a651e8a8d45431b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e08ca1c51a59b7b3", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 cloudflare/worker/src/services/pushSender.ts:105"}, "properties": {"repobilityId": "feb396064809eb47", "scanner": "scanner-primary", "fingerprint": "e08ca1c51a59b7b3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-bb5f91f75932422d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 cloudflare/worker/src/services/mailbox-bounce-detector.ts:95"}, "properties": {"repobilityId": "40a497e06823f7a2", "scanner": "scanner-primary", "fingerprint": "bb5f91f75932422d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d39c55943391ac55", "level": "none", "message": {"text": "Commented-code block (5 lines) in cloudflare/worker/src/services/book.ts:319"}, "properties": {"repobilityId": "0dcc6eeba1b91b49", "scanner": "scanner-primary", "fingerprint": "d39c55943391ac55", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-87fd7f9f46e36acb", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 cloudflare/worker/src/services/book.ts:104"}, "properties": {"repobilityId": "f080912164e24867", "scanner": "scanner-primary", "fingerprint": "87fd7f9f46e36acb", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-13e8eededa72b868", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 cloudflare/worker/src/services/webPushSender.ts:186"}, "properties": {"repobilityId": "ebd78b6337d21654", "scanner": "scanner-primary", "fingerprint": "13e8eededa72b868", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-44f354b93cf2cb5d", "level": "none", "message": {"text": "Commented-code block (8 lines) in cloudflare/worker/src/crons/time-locks.ts:124"}, "properties": {"repobilityId": "f554264eea4c05ce", "scanner": "scanner-primary", "fingerprint": "44f354b93cf2cb5d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4ce411f9891651da", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 cloudflare/worker/src/crons/social-posting.ts:58"}, "properties": {"repobilityId": "0000ae5e57ce0cf9", "scanner": "scanner-primary", "fingerprint": "4ce411f9891651da", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-33f83c0f4956c80f", "level": "none", "message": {"text": "Commented-code block (5 lines) in cloudflare/worker/src/jobs/adoption-jobs.ts:10"}, "properties": {"repobilityId": "61f8d87babe31a10", "scanner": "scanner-primary", "fingerprint": "33f83c0f4956c80f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5f7f470b9f5aefe1", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 cloudflare/worker/src/jobs/adoption-jobs.ts:746"}, "properties": {"repobilityId": "ff82983f430f22a0", "scanner": "scanner-primary", "fingerprint": "5f7f470b9f5aefe1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9d7d436ad43990f9", "level": "none", "message": {"text": "Commented-code block (9 lines) in backend/src/routes/support.ts:488"}, "properties": {"repobilityId": "a0b4002e70bdd5e4", "scanner": "scanner-primary", "fingerprint": "9d7d436ad43990f9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c8b6bba042c7d447", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 backend/src/routes/support.ts:489"}, "properties": {"repobilityId": "2ae69669b55174bf", "scanner": "scanner-primary", "fingerprint": "c8b6bba042c7d447", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-15ec4b2c89617eab", "level": "none", "message": {"text": "Commented-code block (6 lines) in backend/src/services/auth.service.ts:275"}, "properties": {"repobilityId": "c9e9d49e2db71314", "scanner": "scanner-primary", "fingerprint": "15ec4b2c89617eab", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5f6b9f4e8b9bdd4f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 backend/src/services/tinyllm.service.ts:67"}, "properties": {"repobilityId": "42152c0ff27fd114", "scanner": "scanner-primary", "fingerprint": "5f6b9f4e8b9bdd4f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a260e355ea7d9f89", "level": "note", "message": {"text": "32 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "e735cee6f43259c2", "scanner": "scanner-primary", "fingerprint": "a260e355ea7d9f89", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "config-drift"]}}, {"ruleId": "scanner-84bea003625603ef", "level": "warning", "message": {"text": "Frontend route `/daily` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx"}, "properties": {"repobilityId": "71e737c7c97cd044", "scanner": "scanner-primary", "fingerprint": "84bea003625603ef", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-4c75ca9ea3fc82e8", "level": "warning", "message": {"text": "Frontend route `/founders-wall` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx"}, "properties": {"repobilityId": "07365e79342b4c2e", "scanner": "scanner-primary", "fingerprint": "4c75ca9ea3fc82e8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-f6551252f696d365", "level": "warning", "message": {"text": "Frontend route `/founder/welcome` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx"}, "properties": {"repobilityId": "8418e3e2a9c60432", "scanner": "scanner-primary", "fingerprint": "f6551252f696d365", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-2ea16ec28f80557c", "level": "warning", "message": {"text": "Frontend route `/memory-room/:token` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx"}, "properties": {"repobilityId": "d82d39ff9f47d38a", "scanner": "scanner-primary", "fingerprint": "2ea16ec28f80557c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-deed5e848bb1f9d1", "level": "warning", "message": {"text": "Frontend route `/story/:token` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx"}, "properties": {"repobilityId": "357c971d0410e6e2", "scanner": "scanner-primary", "fingerprint": "deed5e848bb1f9d1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-36bb48ce0dc75a7e", "level": "warning", "message": {"text": "Frontend route `/inherit/:token` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx"}, "properties": {"repobilityId": "e5fc9ad66879eea7", "scanner": "scanner-primary", "fingerprint": "36bb48ce0dc75a7e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-0736a34d39373799", "level": "warning", "message": {"text": "Frontend route `/verify-email` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx"}, "properties": {"repobilityId": "633251901abe64b5", "scanner": "scanner-primary", "fingerprint": "0736a34d39373799", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-86ef2f344b94631a", "level": "warning", "message": {"text": "Frontend route `/join` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx"}, "properties": {"repobilityId": "6756a6a5b9998329", "scanner": "scanner-primary", "fingerprint": "86ef2f344b94631a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-c2de90adc9cd923d", "level": "warning", "message": {"text": "Frontend route `/gift/redeem` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx"}, "properties": {"repobilityId": "70d099d924aa17c3", "scanner": "scanner-primary", "fingerprint": "c2de90adc9cd923d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-a69e95ca6dbcc143", "level": "warning", "message": {"text": "Frontend route `/gift/success` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx"}, "properties": {"repobilityId": "a9f6a5fab52a1421", "scanner": "scanner-primary", "fingerprint": "a69e95ca6dbcc143", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-57b8380cf327abe3", "level": "warning", "message": {"text": "Frontend route `/gold/redeem` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx"}, "properties": {"repobilityId": "98fea6b939c3bedb", "scanner": "scanner-primary", "fingerprint": "57b8380cf327abe3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-5928192bf43e9512", "level": "warning", "message": {"text": "Frontend route `/card/:id` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx"}, "properties": {"repobilityId": "cf307f8e727d8dc8", "scanner": "scanner-primary", "fingerprint": "5928192bf43e9512", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-9a8d2919106b5660", "level": "warning", "message": {"text": "Frontend route `/m/:token` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx"}, "properties": {"repobilityId": "7a482d2e8e47ce04", "scanner": "scanner-primary", "fingerprint": "9a8d2919106b5660", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-3de817789a8f26df", "level": "warning", "message": {"text": "Frontend route `/gift-memory/:token` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx"}, "properties": {"repobilityId": "332a819502da153c", "scanner": "scanner-primary", "fingerprint": "3de817789a8f26df", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-ef068334d3cef68e", "level": "warning", "message": {"text": "Frontend route `/showcase` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx"}, "properties": {"repobilityId": "d7c1b43ae5209801", "scanner": "scanner-primary", "fingerprint": "ef068334d3cef68e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-bfa4ab511855d1a0", "level": "warning", "message": {"text": "Frontend route `/inheritance/:token` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx"}, "properties": {"repobilityId": "d37a46f96fd99b7b", "scanner": "scanner-primary", "fingerprint": "bfa4ab511855d1a0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-c7297d808814ba2d", "level": "warning", "message": {"text": "Frontend route `/for/wedding-day` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx"}, "properties": {"repobilityId": "567ff970b3122051", "scanner": "scanner-primary", "fingerprint": "c7297d808814ba2d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-57ee75d3f0d837db", "level": "warning", "message": {"text": "Frontend route `/for/eighteenth-birthday` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx"}, "properties": {"repobilityId": "7e4e4801cd6ec02d", "scanner": "scanner-primary", "fingerprint": "57ee75d3f0d837db", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-6b7926cf7a29a174", "level": "warning", "message": {"text": "Frontend route `/for/after-i-go` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx"}, "properties": {"repobilityId": "0286c63496094168", "scanner": "scanner-primary", "fingerprint": "6b7926cf7a29a174", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-f930c70edc88f94b", "level": "warning", "message": {"text": "Frontend route `/for/grandchildren` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx"}, "properties": {"repobilityId": "e6af8b8124d48ab4", "scanner": "scanner-primary", "fingerprint": "f930c70edc88f94b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-29befe6248764d09", "level": "warning", "message": {"text": "Frontend route `/for/voice-for-the-unborn` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx"}, "properties": {"repobilityId": "6861f3d15e97204b", "scanner": "scanner-primary", "fingerprint": "29befe6248764d09", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-446041a9bae1b0a2", "level": "warning", "message": {"text": "Frontend route `/reset-password` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx"}, "properties": {"repobilityId": "51d7ca1c29792ea0", "scanner": "scanner-primary", "fingerprint": "446041a9bae1b0a2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-a942561a20298704", "level": "warning", "message": {"text": "Frontend route `/family/:id` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx"}, "properties": {"repobilityId": "ffef1e249b87d9cc", "scanner": "scanner-primary", "fingerprint": "a942561a20298704", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-95eccc1344cd7e05", "level": "warning", "message": {"text": "Frontend route `/person/:id` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx"}, "properties": {"repobilityId": "03d7cb486794e559", "scanner": "scanner-primary", "fingerprint": "95eccc1344cd7e05", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-f9ee29f916798a3a", "level": "warning", "message": {"text": "Frontend route `/quick` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx"}, "properties": {"repobilityId": "a24e3d0903ab16f7", "scanner": "scanner-primary", "fingerprint": "f9ee29f916798a3a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-1dd15748178086a0", "level": "warning", "message": {"text": "Frontend route `/wrapped/:year` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx"}, "properties": {"repobilityId": "38ae3ffadbec4653", "scanner": "scanner-primary", "fingerprint": "1dd15748178086a0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-744735974b28109e", "level": "warning", "message": {"text": "Frontend route `/future-letter` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx"}, "properties": {"repobilityId": "62cad654d0b10f47", "scanner": "scanner-primary", "fingerprint": "744735974b28109e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-229be37ef502ca0d", "level": "warning", "message": {"text": "Frontend route `/legacy-plan` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx"}, "properties": {"repobilityId": "3955a3b1bd709f32", "scanner": "scanner-primary", "fingerprint": "229be37ef502ca0d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-5d38378c8797af15", "level": "warning", "message": {"text": "Frontend route `/story-artifacts` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx"}, "properties": {"repobilityId": "1731073c6cfc9277", "scanner": "scanner-primary", "fingerprint": "5d38378c8797af15", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-c585456e44cf831a", "level": "warning", "message": {"text": "Frontend route `/recipient-experience` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx"}, "properties": {"repobilityId": "46226ef503bf1b75", "scanner": "scanner-primary", "fingerprint": "c585456e44cf831a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-40c092e031c2647b", "level": "warning", "message": {"text": "Frontend route `/streaks` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx"}, "properties": {"repobilityId": "58499c34df2a9707", "scanner": "scanner-primary", "fingerprint": "40c092e031c2647b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-0af1a41a2916e321", "level": "warning", "message": {"text": "Frontend route `/referrals` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx"}, "properties": {"repobilityId": "019adf9574fdf151", "scanner": "scanner-primary", "fingerprint": "0af1a41a2916e321", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-cf0fd6e45984aba1", "level": "warning", "message": {"text": "Frontend route `/memorials` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx"}, "properties": {"repobilityId": "6a25fdaa17dbf1ec", "scanner": "scanner-primary", "fingerprint": "cf0fd6e45984aba1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-5310d5c73a7af6cf", "level": "warning", "message": {"text": "Frontend route `/memory-cards` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx"}, "properties": {"repobilityId": "6a8cc1e340a43824", "scanner": "scanner-primary", "fingerprint": "5310d5c73a7af6cf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-579a9a782d8a951c", "level": "warning", "message": {"text": "Frontend route `/onboarding` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx"}, "properties": {"repobilityId": "bbef9d0e5812eee4", "scanner": "scanner-primary", "fingerprint": "579a9a782d8a951c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-1d84bc7177b4564e", "level": "warning", "message": {"text": "Frontend route `/inbox` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx"}, "properties": {"repobilityId": "7bedacf28d787c59", "scanner": "scanner-primary", "fingerprint": "1d84bc7177b4564e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-ab71cb1b9dbd4e55", "level": "warning", "message": {"text": "Frontend route `/qa` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx"}, "properties": {"repobilityId": "53c42627f3a47445", "scanner": "scanner-primary", "fingerprint": "ab71cb1b9dbd4e55", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-1d5be9d52309c05f", "level": "warning", "message": {"text": "Frontend route `/invite` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx"}, "properties": {"repobilityId": "f6681f7a3d21b69e", "scanner": "scanner-primary", "fingerprint": "1d5be9d52309c05f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-6215571535de99cf", "level": "warning", "message": {"text": "Frontend route `/interview` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx"}, "properties": {"repobilityId": "686280ffa28ead47", "scanner": "scanner-primary", "fingerprint": "6215571535de99cf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-af25e4a877ec68f7", "level": "warning", "message": {"text": "Frontend route `/time-capsules` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx"}, "properties": {"repobilityId": "f588ec8d6eac65bd", "scanner": "scanner-primary", "fingerprint": "af25e4a877ec68f7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-71d84f9cac0b905c", "level": "warning", "message": {"text": "Frontend route `/memory-map` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx"}, "properties": {"repobilityId": "3577129cc05e6a41", "scanner": "scanner-primary", "fingerprint": "71d84f9cac0b905c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-a7baf9f7a5ffa9cc", "level": "warning", "message": {"text": "Frontend route `/book-builder/success` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx"}, "properties": {"repobilityId": "2d2dc5da1453b36c", "scanner": "scanner-primary", "fingerprint": "a7baf9f7a5ffa9cc", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-63737148be03c41c", "level": "warning", "message": {"text": "Frontend route `/family-feed` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx"}, "properties": {"repobilityId": "a151dc6c0d213586", "scanner": "scanner-primary", "fingerprint": "63737148be03c41c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-52129644d5130195", "level": "warning", "message": {"text": "Frontend route `/on-this-day` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx"}, "properties": {"repobilityId": "ef998bf15d6a867e", "scanner": "scanner-primary", "fingerprint": "52129644d5130195", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-42d01d6f65319961", "level": "warning", "message": {"text": "Frontend route `/gift-a-memory` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx"}, "properties": {"repobilityId": "70af56b1800c12fa", "scanner": "scanner-primary", "fingerprint": "42d01d6f65319961", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-054092541fb677e5", "level": "warning", "message": {"text": "Frontend route `/threads/:id` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx"}, "properties": {"repobilityId": "1a963faadd4f5b76", "scanner": "scanner-primary", "fingerprint": "054092541fb677e5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-d67c68f369ccea07", "level": "warning", "message": {"text": "Frontend route `/threads/:id/compose` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx"}, "properties": {"repobilityId": "2e0a98714e706235", "scanner": "scanner-primary", "fingerprint": "d67c68f369ccea07", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-7f34e2d7f89fbb2e", "level": "warning", "message": {"text": "Frontend route `/admin` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx"}, "properties": {"repobilityId": "a865c79884d14eab", "scanner": "scanner-primary", "fingerprint": "7f34e2d7f89fbb2e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-a7f24bb7cc0a71d8", "level": "warning", "message": {"text": "Frontend route `/loom/compose` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx"}, "properties": {"repobilityId": "5327f2785d4cf3ff", "scanner": "scanner-primary", "fingerprint": "a7f24bb7cc0a71d8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-f7f0fd3dd2a81426", "level": "warning", "message": {"text": "Frontend route `/loom/kin` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx"}, "properties": {"repobilityId": "868345bb800e66c2", "scanner": "scanner-primary", "fingerprint": "f7f0fd3dd2a81426", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-2d4ebbef1124a0df", "level": "warning", "message": {"text": "Frontend route `/loom/voice` has no Link/navigate to it \u2014 cloudflare/frontend/src/App.tsx"}, "properties": {"repobilityId": "77b0829239f2c2ae", "scanner": "scanner-primary", "fingerprint": "2d4ebbef1124a0df", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-eacdca1af5d32437", "level": "error", "message": {"text": "Dangling fetch: POST https://bsky.social/xrpc/com.atproto.server.createSession (scripts/update-social-profiles.mjs:30)"}, "properties": {"repobilityId": "0584fd080854dd43", "scanner": "scanner-primary", "fingerprint": "eacdca1af5d32437", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-841a9a6a5e302f07", "level": "error", "message": {"text": "Dangling fetch: POST https://bsky.social/xrpc/com.atproto.repo.uploadBlob (scripts/update-social-profiles.mjs:41)"}, "properties": {"repobilityId": "0d2e27f99515352e", "scanner": "scanner-primary", "fingerprint": "841a9a6a5e302f07", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-33e340164fc70129", "level": "error", "message": {"text": "Dangling fetch: POST https://bsky.social/xrpc/com.atproto.repo.putRecord (scripts/update-social-profiles.mjs:61)"}, "properties": {"repobilityId": "6c24f09f5d12f49a", "scanner": "scanner-primary", "fingerprint": "33e340164fc70129", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-10bdf02b1b2deb6e", "level": "error", "message": {"text": "Dangling fetch: POST https://graph.facebook.com/v21.0/${pageId}/photos (scripts/update-social-profiles.mjs:102)"}, "properties": {"repobilityId": "c9c72c8aacd68d46", "scanner": "scanner-primary", "fingerprint": "10bdf02b1b2deb6e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a769e4e1a5158c14", "level": "error", "message": {"text": "Dangling fetch: POST https://bsky.social/xrpc/com.atproto.server.createSession (marketing/automation/scripts/bluesky-promo.ts:39)"}, "properties": {"repobilityId": "099a4c65b375a3a0", "scanner": "scanner-primary", "fingerprint": "a769e4e1a5158c14", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-12893f13d7d54ecc", "level": "error", "message": {"text": "Dangling fetch: POST https://bsky.social/xrpc/com.atproto.repo.uploadBlob (marketing/automation/scripts/bluesky-promo.ts:56)"}, "properties": {"repobilityId": "be0bf35eb21eb30d", "scanner": "scanner-primary", "fingerprint": "12893f13d7d54ecc", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-014435ac4b959c63", "level": "error", "message": {"text": "Dangling fetch: POST https://bsky.social/xrpc/com.atproto.repo.createRecord (marketing/automation/scripts/bluesky-promo.ts:111)"}, "properties": {"repobilityId": "6bcc58fe81ff6104", "scanner": "scanner-primary", "fingerprint": "014435ac4b959c63", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d5bd8c50e559e12d", "level": "error", "message": {"text": "Dangling fetch: POST https://bsky.social/xrpc/com.atproto.server.createSession (marketing/automation/scripts/social-launch.ts:41)"}, "properties": {"repobilityId": "d412e8c5be9e875b", "scanner": "scanner-primary", "fingerprint": "d5bd8c50e559e12d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f94d795da9f96d81", "level": "error", "message": {"text": "Dangling fetch: POST https://bsky.social/xrpc/com.atproto.repo.uploadBlob (marketing/automation/scripts/social-launch.ts:56)"}, "properties": {"repobilityId": "ec4cd3df82290bfb", "scanner": "scanner-primary", "fingerprint": "f94d795da9f96d81", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b22690413661194c", "level": "error", "message": {"text": "Dangling fetch: GET https://bsky.social/xrpc/com.atproto.repo.getRecord?repo=${s.did}&collection=app.bsky.actor.profile&rkey=self (marketing/automation/scripts/social-launch.ts:71)"}, "properties": {"repobilityId": "5b2c8f5d1e11d5c9", "scanner": "scanner-primary", "fingerprint": "b22690413661194c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1276b898e4ff2b14", "level": "error", "message": {"text": "Dangling fetch: POST https://bsky.social/xrpc/com.atproto.repo.putRecord (marketing/automation/scripts/social-launch.ts:75)"}, "properties": {"repobilityId": "52e63c4613afbca4", "scanner": "scanner-primary", "fingerprint": "1276b898e4ff2b14", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-498ade07f90dc281", "level": "error", "message": {"text": "Dangling fetch: POST https://bsky.social/xrpc/com.atproto.repo.createRecord (marketing/automation/scripts/social-launch.ts:125)"}, "properties": {"repobilityId": "8330a881b1ca0608", "scanner": "scanner-primary", "fingerprint": "498ade07f90dc281", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-dfffad69bd5b8f6c", "level": "error", "message": {"text": "Dangling fetch: POST https://graph.facebook.com/v21.0/${pageId}/picture (marketing/automation/scripts/social-launch.ts:144)"}, "properties": {"repobilityId": "2293bf44d6c6d3e8", "scanner": "scanner-primary", "fingerprint": "dfffad69bd5b8f6c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-950868d8c98efb2d", "level": "error", "message": {"text": "Dangling fetch: POST https://graph.facebook.com/v21.0/${pageId}/photos (marketing/automation/scripts/social-launch.ts:170)"}, "properties": {"repobilityId": "d7bde9d4c500371c", "scanner": "scanner-primary", "fingerprint": "950868d8c98efb2d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-955bce88cc197aa6", "level": "error", "message": {"text": "Dangling fetch: POST https://graph.facebook.com/v21.0/${j.id}/comments (marketing/automation/scripts/social-launch.ts:176)"}, "properties": {"repobilityId": "f302869c1c34fa3b", "scanner": "scanner-primary", "fingerprint": "955bce88cc197aa6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-bdec5369e63641c1", "level": "error", "message": {"text": "Dangling fetch: POST https://graph.facebook.com/v21.0/${igUserId}/media (marketing/automation/scripts/social-launch.ts:206)"}, "properties": {"repobilityId": "489cd7ee6da89e78", "scanner": "scanner-primary", "fingerprint": "bdec5369e63641c1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c9948b696336a5fb", "level": "error", "message": {"text": "Dangling fetch: POST https://graph.facebook.com/v21.0/${igUserId}/media_publish (marketing/automation/scripts/social-launch.ts:210)"}, "properties": {"repobilityId": "93979b01f869e029", "scanner": "scanner-primary", "fingerprint": "c9948b696336a5fb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9e9c12b42cd0f266", "level": "error", "message": {"text": "Dangling fetch: POST https://api.pinterest.com/v5/pins (marketing/automation/scripts/social-launch.ts:238)"}, "properties": {"repobilityId": "423147e4ff2bda8f", "scanner": "scanner-primary", "fingerprint": "9e9c12b42cd0f266", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-40f44e3402e9905e", "level": "error", "message": {"text": "Dangling fetch: POST https://bsky.social/xrpc/com.atproto.server.createSession (marketing/automation/src/run.ts:307)"}, "properties": {"repobilityId": "d70651f6b93dc1aa", "scanner": "scanner-primary", "fingerprint": "40f44e3402e9905e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-35dbb9f0651de592", "level": "error", "message": {"text": "Dangling fetch: GET https://heirloom.blue/icons/icon-512.png (marketing/automation/src/run.ts:322)"}, "properties": {"repobilityId": "13734f3e729b6a9b", "scanner": "scanner-primary", "fingerprint": "35dbb9f0651de592", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b5e3d05d5aa4b354", "level": "error", "message": {"text": "Dangling fetch: POST https://bsky.social/xrpc/com.atproto.repo.uploadBlob (marketing/automation/src/run.ts:327)"}, "properties": {"repobilityId": "815d25ba02ad2619", "scanner": "scanner-primary", "fingerprint": "b5e3d05d5aa4b354", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9e6337e397e5ee79", "level": "error", "message": {"text": "Dangling fetch: GET https://bsky.social/xrpc/com.atproto.repo.getRecord?repo=${sess.did}&collection=app.bsky.actor.profile&rkey=self (marketing/automation/src/run.ts:337)"}, "properties": {"repobilityId": "0f31391b2862bdf2", "scanner": "scanner-primary", "fingerprint": "9e6337e397e5ee79", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f8f79a5a51fb8415", "level": "error", "message": {"text": "Dangling fetch: POST https://bsky.social/xrpc/com.atproto.repo.putRecord (marketing/automation/src/run.ts:352)"}, "properties": {"repobilityId": "66937d9773407d36", "scanner": "scanner-primary", "fingerprint": "f8f79a5a51fb8415", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ec175e8b7b65b24f", "level": "error", "message": {"text": "Dangling fetch: POST https://bsky.social/xrpc/com.atproto.server.createSession (marketing/automation/src/run.ts:367)"}, "properties": {"repobilityId": "90c79493bec4e20c", "scanner": "scanner-primary", "fingerprint": "ec175e8b7b65b24f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e9a86e111e5094ec", "level": "error", "message": {"text": "Dangling fetch: POST https://bsky.social/xrpc/com.atproto.repo.deleteRecord (marketing/automation/src/run.ts:390)"}, "properties": {"repobilityId": "8837ab816f868411", "scanner": "scanner-primary", "fingerprint": "e9a86e111e5094ec", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9fca38c5c4631c27", "level": "error", "message": {"text": "Dangling fetch: POST https://api.cloudflare.com/client/v4/accounts/${account}/ai/run/${CLOUDFLARE_MODEL} (marketing/automation/src/generate.ts:153)"}, "properties": {"repobilityId": "cc2f8ffce43f7e24", "scanner": "scanner-primary", "fingerprint": "9fca38c5c4631c27", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b2916465cb75ef65", "level": "error", "message": {"text": "Dangling fetch: POST https://bsky.social/xrpc/com.atproto.server.createSession (marketing/automation/src/engage.ts:76)"}, "properties": {"repobilityId": "af19fb2f011ad51f", "scanner": "scanner-primary", "fingerprint": "b2916465cb75ef65", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-674c1aad11b11ff5", "level": "error", "message": {"text": "Dangling fetch: GET https://app.ayrshare.com/api/analytics/post?id=${id} (marketing/automation/src/metrics.ts:31)"}, "properties": {"repobilityId": "a196c22de7ce3ee7", "scanner": "scanner-primary", "fingerprint": "674c1aad11b11ff5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6f95710ac420fad6", "level": "error", "message": {"text": "Dangling fetch: POST https://graph.facebook.com/v21.0/${json.id}/comments (marketing/automation/src/post.ts:236)"}, "properties": {"repobilityId": "b19d6cdca4f86789", "scanner": "scanner-primary", "fingerprint": "6f95710ac420fad6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-69cc00871e265cb6", "level": "error", "message": {"text": "Dangling fetch: POST https://graph.facebook.com/v21.0/${igUserId}/media (marketing/automation/src/post.ts:263)"}, "properties": {"repobilityId": "8abf1ba5a2db1474", "scanner": "scanner-primary", "fingerprint": "69cc00871e265cb6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4ea0d6538029f041", "level": "error", "message": {"text": "Dangling fetch: POST https://graph.facebook.com/v21.0/${igUserId}/media_publish (marketing/automation/src/post.ts:272)"}, "properties": {"repobilityId": "c2608f76f0b37df6", "scanner": "scanner-primary", "fingerprint": "4ea0d6538029f041", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-65ff4d72a7a77986", "level": "error", "message": {"text": "Dangling fetch: POST https://api.linkedin.com/v2/ugcPosts (marketing/automation/src/post.ts:300)"}, "properties": {"repobilityId": "2b6f1442bfd4f09b", "scanner": "scanner-primary", "fingerprint": "65ff4d72a7a77986", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-87b686628996bc07", "level": "error", "message": {"text": "Dangling fetch: POST https://api.pinterest.com/v5/pins (marketing/automation/src/post.ts:321)"}, "properties": {"repobilityId": "dc6d8c468c931d2f", "scanner": "scanner-primary", "fingerprint": "87b686628996bc07", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7c7e312f22c60333", "level": "error", "message": {"text": "Dangling fetch: POST https://bsky.social/xrpc/com.atproto.repo.uploadBlob (marketing/automation/src/post.ts:351)"}, "properties": {"repobilityId": "8e01a39ba318952a", "scanner": "scanner-primary", "fingerprint": "7c7e312f22c60333", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3237a1afa9ff417c", "level": "error", "message": {"text": "Dangling fetch: POST https://bsky.social/xrpc/com.atproto.server.createSession (marketing/automation/src/post.ts:380)"}, "properties": {"repobilityId": "6eb8a020832a59b8", "scanner": "scanner-primary", "fingerprint": "3237a1afa9ff417c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c2ec683cc86763be", "level": "error", "message": {"text": "Dangling fetch: POST https://bsky.social/xrpc/com.atproto.repo.createRecord (marketing/automation/src/post.ts:461)"}, "properties": {"repobilityId": "cc7d6c669933044c", "scanner": "scanner-primary", "fingerprint": "c2ec683cc86763be", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e6c36014602c5b8f", "level": "error", "message": {"text": "Dangling fetch: POST https://api.resend.com/emails (cloudflare/worker/src/utils/email.ts:174)"}, "properties": {"repobilityId": "9e20df737cb008ae", "scanner": "scanner-primary", "fingerprint": "e6c36014602c5b8f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1c3756c1315ed31f", "level": "error", "message": {"text": "Dangling fetch: POST https://api.stripe.com/v1/checkout/sessions (cloudflare/worker/src/routes/books.ts:181)"}, "properties": {"repobilityId": "a055a77fcef2ac51", "scanner": "scanner-primary", "fingerprint": "1c3756c1315ed31f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-41fbe3b405cced3a", "level": "error", "message": {"text": "Dangling fetch: POST https://api.stripe.com/v1/checkout/sessions (cloudflare/worker/src/routes/partners.ts:558)"}, "properties": {"repobilityId": "16a71903525b0321", "scanner": "scanner-primary", "fingerprint": "41fbe3b405cced3a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1ce738d0c920b5c6", "level": "error", "message": {"text": "Dangling fetch: POST https://api.stripe.com/v1/checkout/sessions (cloudflare/worker/src/routes/billing.ts:658)"}, "properties": {"repobilityId": "953be4b0cf12a0dd", "scanner": "scanner-primary", "fingerprint": "1ce738d0c920b5c6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-311f0b635a4b1b16", "level": "error", "message": {"text": "Dangling fetch: POST https://api.stripe.com/v1/subscriptions/${sub.stripe_subscription_id} (cloudflare/worker/src/routes/billing.ts:702)"}, "properties": {"repobilityId": "aa49f2b2a2a94d34", "scanner": "scanner-primary", "fingerprint": "311f0b635a4b1b16", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-745e45e389c1e2c4", "level": "error", "message": {"text": "Dangling fetch: POST https://api.stripe.com/v1/subscriptions/${sub.stripe_subscription_id} (cloudflare/worker/src/routes/billing.ts:736)"}, "properties": {"repobilityId": "8b8b88dc6fb301d4", "scanner": "scanner-primary", "fingerprint": "745e45e389c1e2c4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-aa633a59f73b041d", "level": "error", "message": {"text": "Dangling fetch: GET https://api.stripe.com/v1/customers?email=${encodeURIComponent(user.email as string)}&limit=1 (cloudflare/worker/src/routes/billing.ts:784)"}, "properties": {"repobilityId": "c5106251142196b8", "scanner": "scanner-primary", "fingerprint": "aa633a59f73b041d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e049336fec9dbdf5", "level": "error", "message": {"text": "Dangling fetch: POST https://api.stripe.com/v1/billing_portal/sessions (cloudflare/worker/src/routes/billing.ts:796)"}, "properties": {"repobilityId": "e8de4668ca3584a9", "scanner": "scanner-primary", "fingerprint": "e049336fec9dbdf5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-67beca1c9a96ff71", "level": "error", "message": {"text": "Dangling fetch: POST https://api.stripe.com/v1/accounts (cloudflare/worker/src/routes/influencers.ts:495)"}, "properties": {"repobilityId": "0ca30d763e730e6a", "scanner": "scanner-primary", "fingerprint": "67beca1c9a96ff71", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ddbd78fdd60ceb46", "level": "error", "message": {"text": "Dangling fetch: POST https://api.stripe.com/v1/account_links (cloudflare/worker/src/routes/influencers.ts:530)"}, "properties": {"repobilityId": "f452dcc860ed734f", "scanner": "scanner-primary", "fingerprint": "ddbd78fdd60ceb46", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a1bb15f27a7904d2", "level": "error", "message": {"text": "Dangling fetch: POST https://api.stripe.com/v1/account_links (cloudflare/worker/src/routes/influencers.ts:582)"}, "properties": {"repobilityId": "ff3d15a2f4d6a8ba", "scanner": "scanner-primary", "fingerprint": "a1bb15f27a7904d2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e510614fa53cf276", "level": "error", "message": {"text": "Dangling fetch: GET https://api.stripe.com/v1/accounts/${influencer.stripe_account_id} (cloudflare/worker/src/routes/influencers.ts:625)"}, "properties": {"repobilityId": "775d737718777551", "scanner": "scanner-primary", "fingerprint": "e510614fa53cf276", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6d51e7c84b660af2", "level": "error", "message": {"text": "Dangling fetch: POST https://api.stripe.com/v1/subscriptions?customer=${stripeCustomerId}&status=active&limit=5 (cloudflare/worker/src/routes/settings.ts:897)"}, "properties": {"repobilityId": "cda5d1111687d314", "scanner": "scanner-primary", "fingerprint": "6d51e7c84b660af2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-25daeca46aa8a7b2", "level": "error", "message": {"text": "Dangling fetch: DELETE https://api.stripe.com/v1/customers/${stripeCustomerId} (cloudflare/worker/src/routes/settings.ts:919)"}, "properties": {"repobilityId": "5fd224bd29308890", "scanner": "scanner-primary", "fingerprint": "25daeca46aa8a7b2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7e0be63770682d10", "level": "error", "message": {"text": "Dangling fetch: POST https://api.stripe.com/v1/checkout/sessions (cloudflare/worker/src/routes/gift-vouchers.ts:230)"}, "properties": {"repobilityId": "a604acba89c2fbf1", "scanner": "scanner-primary", "fingerprint": "7e0be63770682d10", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-56ef92921fbe7b30", "level": "error", "message": {"text": "Dangling fetch: POST https://api.stripe.com/v1/checkout/sessions (cloudflare/worker/src/routes/founders.ts:73)"}, "properties": {"repobilityId": "7378163b6ab6a804", "scanner": "scanner-primary", "fingerprint": "56ef92921fbe7b30", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8d0d57092e42f84d", "level": "error", "message": {"text": "Dangling fetch: POST https://api.web3.storage/upload (cloudflare/worker/src/services/archive.ts:152)"}, "properties": {"repobilityId": "1a9e1fed7098eb39", "scanner": "scanner-primary", "fingerprint": "8d0d57092e42f84d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5bafbbeb253b5ab2", "level": "error", "message": {"text": "Dangling fetch: POST https://api.pinata.cloud/pinning/pinJSONToIPFS (cloudflare/worker/src/services/archive.ts:169)"}, "properties": {"repobilityId": "cd54a00f843ea62a", "scanner": "scanner-primary", "fingerprint": "5bafbbeb253b5ab2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c940dfeb62b98d73", "level": "error", "message": {"text": "Dangling fetch: HEAD https://cloudflare-ipfs.com/ipfs/${p.snapshot_cid} (cloudflare/worker/src/services/archive.ts:247)"}, "properties": {"repobilityId": "4aeac2a79f789804", "scanner": "scanner-primary", "fingerprint": "c940dfeb62b98d73", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b9755d2ad9f33fd8", "level": "error", "message": {"text": "Dangling fetch: POST https://oauth2.googleapis.com/token (cloudflare/worker/src/services/pushSender.ts:179)"}, "properties": {"repobilityId": "e3dc364b1259910f", "scanner": "scanner-primary", "fingerprint": "b9755d2ad9f33fd8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-17fa6f0a85e19521", "level": "error", "message": {"text": "Dangling fetch: DELETE https://api.stripe.com/v1/customers/${stripeCustomerId} (cloudflare/worker/src/crons/scheduled-deletion.ts:37)"}, "properties": {"repobilityId": "3942d7adcfbe58b5", "scanner": "scanner-primary", "fingerprint": "17fa6f0a85e19521", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-fd9a5dec1e93033f", "level": "error", "message": {"text": "Dangling fetch: POST https://open.tiktokapis.com/v2/research/video/query/?fields=username,follower_count,region_code,bio_description (cloudflare/worker/src/jobs/adoption-jobs.ts:658)"}, "properties": {"repobilityId": "0fe830a89a3a76a8", "scanner": "scanner-primary", "fingerprint": "fd9a5dec1e93033f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1dc75e2af8fd6068", "level": "error", "message": {"text": "Dangling fetch: POST https://open.tiktokapis.com/v2/research/user/info/?fields=bio_description (cloudflare/worker/src/jobs/adoption-jobs.ts:840)"}, "properties": {"repobilityId": "cbabcf257c8084d8", "scanner": "scanner-primary", "fingerprint": "1dc75e2af8fd6068", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-249a2896427d725d", "level": "error", "message": {"text": "Dangling fetch: POST https://api.stripe.com/v1/transfers (cloudflare/worker/src/jobs/adoption-jobs.ts:1497)"}, "properties": {"repobilityId": "e1a2f317b7b47c06", "scanner": "scanner-primary", "fingerprint": "249a2896427d725d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8fdbacfe9430a6ed", "level": "note", "message": {"text": "Unused endpoint: POST /auth/login"}, "properties": {"repobilityId": "0b09c4138926ca56", "scanner": "scanner-primary", "fingerprint": "8fdbacfe9430a6ed", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-4a12d5ed34c864c6", "level": "note", "message": {"text": "Unused endpoint: POST /auth/signup"}, "properties": {"repobilityId": "b5ae4e011fd4a0b3", "scanner": "scanner-primary", "fingerprint": "4a12d5ed34c864c6", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ac42422b23e45104", "level": "note", "message": {"text": "Unused endpoint: GET /auth/me"}, "properties": {"repobilityId": "474ab4f9e3c2be9e", "scanner": "scanner-primary", "fingerprint": "ac42422b23e45104", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-9143464946a01de5", "level": "note", "message": {"text": "Unused endpoint: PUT /auth/profile"}, "properties": {"repobilityId": "93063e6cea6d6c5f", "scanner": "scanner-primary", "fingerprint": "9143464946a01de5", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-bf0e2bdcf4f50610", "level": "note", "message": {"text": "Unused endpoint: GET /memories"}, "properties": {"repobilityId": "c5662e0668bef808", "scanner": "scanner-primary", "fingerprint": "bf0e2bdcf4f50610", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-54d5652d376f7633", "level": "note", "message": {"text": "Unused endpoint: POST /memories"}, "properties": {"repobilityId": "5250a56b1aa66970", "scanner": "scanner-primary", "fingerprint": "54d5652d376f7633", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e207905b2217d900", "level": "note", "message": {"text": "Unused endpoint: GET /voice"}, "properties": {"repobilityId": "183867c4d93562fb", "scanner": "scanner-primary", "fingerprint": "e207905b2217d900", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1e31e6c47ac525d3", "level": "note", "message": {"text": "Unused endpoint: POST /voice"}, "properties": {"repobilityId": "29d67828b2202ebf", "scanner": "scanner-primary", "fingerprint": "1e31e6c47ac525d3", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d9686ce89ab3892a", "level": "note", "message": {"text": "Unused endpoint: GET /letters"}, "properties": {"repobilityId": "1de06ca1f0d5cd8e", "scanner": "scanner-primary", "fingerprint": "d9686ce89ab3892a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-abcb719f827e3822", "level": "note", "message": {"text": "Unused endpoint: POST /letters"}, "properties": {"repobilityId": "8848b0b6c139fc5f", "scanner": "scanner-primary", "fingerprint": "abcb719f827e3822", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b9a17d61120f5fe3", "level": "note", "message": {"text": "Unused endpoint: GET /family"}, "properties": {"repobilityId": "c4e26729fec354d5", "scanner": "scanner-primary", "fingerprint": "b9a17d61120f5fe3", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-13bcd80948dbb3e0", "level": "note", "message": {"text": "Unused endpoint: POST /family"}, "properties": {"repobilityId": "ed6da1039b71984e", "scanner": "scanner-primary", "fingerprint": "13bcd80948dbb3e0", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-0268ef7bb526542f", "level": "note", "message": {"text": "Unused endpoint: GET /legacy/score"}, "properties": {"repobilityId": "b1d841f67d2ae44b", "scanner": "scanner-primary", "fingerprint": "0268ef7bb526542f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-226f5390a91293d2", "level": "note", "message": {"text": "Unused endpoint: POST /push/web-subscribe"}, "properties": {"repobilityId": "c5025fe7b62d2a76", "scanner": "scanner-primary", "fingerprint": "226f5390a91293d2", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1cde74b1ea72f549", "level": "note", "message": {"text": "Unused endpoint: POST /gift-vouchers/redeem"}, "properties": {"repobilityId": "66e6fb5093a04ce2", "scanner": "scanner-primary", "fingerprint": "1cde74b1ea72f549", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5219264ce6d227dd", "level": "note", "message": {"text": "Unused endpoint: GET /life-events"}, "properties": {"repobilityId": "92e777bbcf13a622", "scanner": "scanner-primary", "fingerprint": "5219264ce6d227dd", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-66ecc651d5273207", "level": "note", "message": {"text": "Unused endpoint: POST /life-events"}, "properties": {"repobilityId": "2853ad075e0c0568", "scanner": "scanner-primary", "fingerprint": "66ecc651d5273207", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-000756c5ab0ce3c7", "level": "note", "message": {"text": "Unused endpoint: GET /legacy-plan"}, "properties": {"repobilityId": "ac585debc6029005", "scanner": "scanner-primary", "fingerprint": "000756c5ab0ce3c7", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-9b69db7fea2751a3", "level": "note", "message": {"text": "Unused endpoint: POST /legacy-plan/items"}, "properties": {"repobilityId": "9fa07dc15de7369b", "scanner": "scanner-primary", "fingerprint": "9b69db7fea2751a3", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-51873c56661a5816", "level": "note", "message": {"text": "Unused endpoint: PATCH /legacy-plan/share"}, "properties": {"repobilityId": "17c78b147cd24232", "scanner": "scanner-primary", "fingerprint": "51873c56661a5816", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b1521a5505973709", "level": "note", "message": {"text": "Unused endpoint: GET /story-artifacts"}, "properties": {"repobilityId": "aacd2965993d3f92", "scanner": "scanner-primary", "fingerprint": "b1521a5505973709", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c821e200664089f4", "level": "note", "message": {"text": "Unused endpoint: POST /story-artifacts"}, "properties": {"repobilityId": "95bd6538be178627", "scanner": "scanner-primary", "fingerprint": "c821e200664089f4", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8292c0931391749a", "level": "note", "message": {"text": "Unused endpoint: POST /auth/register"}, "properties": {"repobilityId": "d112945691c242eb", "scanner": "scanner-primary", "fingerprint": "8292c0931391749a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c059f57186114027", "level": "note", "message": {"text": "Unused endpoint: POST /auth/logout"}, "properties": {"repobilityId": "8f898b26e741276c", "scanner": "scanner-primary", "fingerprint": "c059f57186114027", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b36892106ecdc9aa", "level": "note", "message": {"text": "Unused endpoint: POST /auth/refresh"}, "properties": {"repobilityId": "8fcfca5942a4a197", "scanner": "scanner-primary", "fingerprint": "b36892106ecdc9aa", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e2fe5b92648ca462", "level": "note", "message": {"text": "Unused endpoint: POST /auth/forgot-password"}, "properties": {"repobilityId": "b570d3add2a45f9b", "scanner": "scanner-primary", "fingerprint": "e2fe5b92648ca462", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-deb8df763a50c73a", "level": "note", "message": {"text": "Unused endpoint: POST /auth/reset-password"}, "properties": {"repobilityId": "3e729583f8b6b1f3", "scanner": "scanner-primary", "fingerprint": "deb8df763a50c73a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-9b90a04019d1c892", "level": "note", "message": {"text": "Unused endpoint: GET /memories/map"}, "properties": {"repobilityId": "14c1acedb7ef1b9e", "scanner": "scanner-primary", "fingerprint": "9b90a04019d1c892", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e6f355f2c6c95fa0", "level": "note", "message": {"text": "Unused endpoint: GET /memories/stats/summary"}, "properties": {"repobilityId": "88c7896648e0217a", "scanner": "scanner-primary", "fingerprint": "e6f355f2c6c95fa0", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-99e0d2baa433c13d", "level": "note", "message": {"text": "Unused endpoint: POST /memories/upload-url"}, "properties": {"repobilityId": "07e6cc22f47e563c", "scanner": "scanner-primary", "fingerprint": "99e0d2baa433c13d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-cf1d037aea30207e", "level": "note", "message": {"text": "Unused endpoint: GET /memories/received"}, "properties": {"repobilityId": "69d18094d133eb7c", "scanner": "scanner-primary", "fingerprint": "cf1d037aea30207e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-602fc953d42181c6", "level": "note", "message": {"text": "Unused endpoint: POST /letters/ai-suggest"}, "properties": {"repobilityId": "feaa0fd493c7d91c", "scanner": "scanner-primary", "fingerprint": "602fc953d42181c6", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3dec150d1ae5d57f", "level": "note", "message": {"text": "Unused endpoint: GET /letters/awaiting-me"}, "properties": {"repobilityId": "dcef0bd8e4e646b5", "scanner": "scanner-primary", "fingerprint": "3dec150d1ae5d57f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-769d71bd7e51939a", "level": "note", "message": {"text": "Unused endpoint: GET /letters/received"}, "properties": {"repobilityId": "56aee0ec7ca9a0b5", "scanner": "scanner-primary", "fingerprint": "769d71bd7e51939a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-41d1e5caffd01ef7", "level": "note", "message": {"text": "Unused endpoint: GET /voice/stats"}, "properties": {"repobilityId": "ab47f676fb38e785", "scanner": "scanner-primary", "fingerprint": "41d1e5caffd01ef7", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-0c1f920edda6c052", "level": "note", "message": {"text": "Unused endpoint: GET /voice/prompts/list"}, "properties": {"repobilityId": "a8a53ec051492d49", "scanner": "scanner-primary", "fingerprint": "0c1f920edda6c052", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2fd293bb7dd517dd", "level": "note", "message": {"text": "Unused endpoint: POST /voice/upload-url"}, "properties": {"repobilityId": "6ad39cd32e54af7e", "scanner": "scanner-primary", "fingerprint": "2fd293bb7dd517dd", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7d06ec413dc802c8", "level": "note", "message": {"text": "Unused endpoint: GET /billing/subscription"}, "properties": {"repobilityId": "fd1c22e0f4354926", "scanner": "scanner-primary", "fingerprint": "7d06ec413dc802c8", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c8236eac795dbcc6", "level": "note", "message": {"text": "Unused endpoint: GET /billing/limits"}, "properties": {"repobilityId": "38549d8d23c12c27", "scanner": "scanner-primary", "fingerprint": "c8236eac795dbcc6", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-fe04496aab15c6e5", "level": "note", "message": {"text": "Unused endpoint: GET /billing/pricing"}, "properties": {"repobilityId": "9eb09ed6a5c30473", "scanner": "scanner-primary", "fingerprint": "fe04496aab15c6e5", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-747d120f647f5364", "level": "note", "message": {"text": "Unused endpoint: POST /billing/checkout"}, "properties": {"repobilityId": "27419476fecd9a09", "scanner": "scanner-primary", "fingerprint": "747d120f647f5364", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-cd4ff0d2ce9b28ec", "level": "note", "message": {"text": "Unused endpoint: POST /billing/cancel"}, "properties": {"repobilityId": "01685c1517ad1758", "scanner": "scanner-primary", "fingerprint": "cd4ff0d2ce9b28ec", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-589634278f2427b7", "level": "note", "message": {"text": "Unused endpoint: POST /billing/portal"}, "properties": {"repobilityId": "ea9922caf1f7ae28", "scanner": "scanner-primary", "fingerprint": "589634278f2427b7", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d2db8dd0510cd105", "level": "note", "message": {"text": "Unused endpoint: PATCH /billing/currency"}, "properties": {"repobilityId": "9f8c055e858fecc1", "scanner": "scanner-primary", "fingerprint": "d2db8dd0510cd105", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8df4ce4cdff2f93c", "level": "note", "message": {"text": "Unused endpoint: POST /gifts/send"}, "properties": {"repobilityId": "9820b86993e62d69", "scanner": "scanner-primary", "fingerprint": "8df4ce4cdff2f93c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e6303b02ff1ade87", "level": "note", "message": {"text": "Unused endpoint: GET /capsules"}, "properties": {"repobilityId": "e361007460f8d3ec", "scanner": "scanner-primary", "fingerprint": "e6303b02ff1ade87", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-350be91f48c5081a", "level": "note", "message": {"text": "Unused endpoint: POST /capsules"}, "properties": {"repobilityId": "ec3262b83051dd0f", "scanner": "scanner-primary", "fingerprint": "350be91f48c5081a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f9199e3e25961660", "level": "note", "message": {"text": "Unused endpoint: GET /engagement/legacy-score"}, "properties": {"repobilityId": "9cdbd680c75e1558", "scanner": "scanner-primary", "fingerprint": "f9199e3e25961660", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7ba26056836239de", "level": "note", "message": {"text": "Unused endpoint: GET /engagement/family-feed"}, "properties": {"repobilityId": "dd96317a990f654d", "scanner": "scanner-primary", "fingerprint": "7ba26056836239de", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f7a7e672abfa361f", "level": "note", "message": {"text": "Unused endpoint: GET /memory-cards/on-this-day"}, "properties": {"repobilityId": "478e4656a151797d", "scanner": "scanner-primary", "fingerprint": "f7a7e672abfa361f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}