{"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-bead75b0f9233e05", "name": "No API endpoints detected", "shortDescription": {"text": "No API endpoints detected"}, "fullDescription": {"text": "The scanner did not find FastAPI/Flask/Express/NestJS/GraphQL/gRPC routes. If this repo exposes APIs, the framework may be unsupported."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3a76a53de7d509f7", "name": "Stray `console.log` in TS/JS \u2014 scripts/prove-backfill-live.ts:72", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/prove-backfill-live.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-30bef299ac7898c9", "name": "Stray `console.log` in TS/JS \u2014 scripts/prove-discovery-live.ts:24", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/prove-discovery-live.ts:24"}, "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-9b359473009f252f", "name": "Stray `console.log` in TS/JS \u2014 scripts/backfill-actuals.ts:359", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/backfill-actuals.ts:359"}, "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-6c851647469205fd", "name": "Stray `console.log` in TS/JS \u2014 scripts/check-db.ts:186", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-db.ts:186"}, "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-6eb1e279e80c4087", "name": "Stray `console.log` in TS/JS \u2014 supabase/functions/_shared/runJob.ts:93", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/_shared/runJob.ts:93"}, "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-01feff6846eec4b6", "name": "Insecure pattern 'node_child_process' in scripts/backup-db.ts:12", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/backup-db.ts:12"}, "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-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-96b074eb0971eff5", "name": "Node manifest has dependencies but no lockfile: packages/trading/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/trading/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-286c28febd1253f2", "name": "Node manifest has dependencies but no lockfile: packages/io/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/io/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-28e92806c0db3cd2", "name": "Node manifest has dependencies but no lockfile: packages/core/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/core/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4a9eb7dc7c6e3880", "name": "Node manifest has dependencies but no lockfile: apps/web/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: apps/web/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3ab5d313dda8e5f9", "name": "Debug logging residue appears in source files", "shortDescription": {"text": "Debug logging residue appears in source files"}, "fullDescription": {"text": "Found 42 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 15 placeholder/mock markers across 5 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-b9088664ace7f748", "name": "Composite production-readiness gap", "shortDescription": {"text": "Composite production-readiness gap"}, "fullDescription": {"text": "Multiple low-cost hardening controls are missing together: license, lockfile. Opus verification showed these co-occurring gaps are a better readiness signal than reading each flag in isolation."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d0eff16aad0b1443", "name": "Commented-code block (6 lines) in packages/trading/src/executor.ts:62", "shortDescription": {"text": "Commented-code block (6 lines) in packages/trading/src/executor.ts:62"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-799cd3357ac61480", "name": "Commented-code block (5 lines) in packages/trading/test/invariants.test.ts:65", "shortDescription": {"text": "Commented-code block (5 lines) in packages/trading/test/invariants.test.ts:65"}, "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-40ce33c887e9f328", "name": "Commented-code block (5 lines) in packages/core/src/distributions/nowcast.ts:57", "shortDescription": {"text": "Commented-code block (5 lines) in packages/core/src/distributions/nowcast.ts:57"}, "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-dd1ab72529106b6b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/smoke-live-apis.ts:240", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/smoke-live-apis.ts:240"}, "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-b1f6c0793b41569a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/prove-backfill-live.ts:97", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/prove-backfill-live.ts:97"}, "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-b8fc6e6230c46a7c", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/backfill-actuals.ts:350", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/backfill-actuals.ts:350"}, "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-5dda85030526582b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/seed-stations.ts:127", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/seed-stations.ts:127"}, "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-099f1ec34a7f22b9", "name": "Commented-code block (5 lines) in supabase/tests/migrations.test.ts:58", "shortDescription": {"text": "Commented-code block (5 lines) in supabase/tests/migrations.test.ts:58"}, "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-f72913e86b116c14", "name": "Commented-code block (6 lines) in supabase/tests/poll-markets.test.ts:304", "shortDescription": {"text": "Commented-code block (6 lines) in supabase/tests/poll-markets.test.ts:304"}, "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-22b212b9e8bf839c", "name": "Commented-code block (7 lines) in supabase/functions/execute-bet/index.ts:14", "shortDescription": {"text": "Commented-code block (7 lines) in supabase/functions/execute-bet/index.ts:14"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1c1beba7046eaa78", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/execute-bet/index.ts:37", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/execute-bet/index.ts:37"}, "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-f8abdc3a202512fa", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/poll-markets/index.ts:35", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/poll-markets/index.ts:35"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-5a7f247d880a6035", "name": "Commented-code block (7 lines) in supabase/functions/poll-markets/handler.ts:197", "shortDescription": {"text": "Commented-code block (7 lines) in supabase/functions/poll-markets/handler.ts:197"}, "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-ad6eafddb63b4e63", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/poll-markets/handler.ts:326", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/poll-markets/handler.ts:326"}, "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-e7bca1c04f5afe17", "name": "Commented-code block (6 lines) in supabase/functions/_shared/db.ts:34", "shortDescription": {"text": "Commented-code block (6 lines) in supabase/functions/_shared/db.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-64900ac20b81a2ba", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/fetch-actuals/index.ts:27", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/fetch-actuals/index.ts:27"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d34787fc912c7e60", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/src/lib/loaders.ts:364", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/src/lib/loaders.ts:364"}, "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-cc6262f685d754b6", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/src/lib/api/prod.ts:69", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/src/lib/api/prod.ts:69"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}]}}, "automationDetails": {"id": "repobility/25275"}, "properties": {"repository": "davidg-rgb/polyweather", "repoUrl": "https://github.com/davidg-rgb/polyweather", "branch": "main"}, "results": [{"ruleId": "scanner-bead75b0f9233e05", "level": "none", "message": {"text": "No API endpoints detected"}, "properties": {"repobilityId": "0f8bb852027c38f8", "scanner": "scanner-primary", "fingerprint": "bead75b0f9233e05", "layer": "api", "severity": "info", "confidence": 1.0, "tags": ["coverage"]}}, {"ruleId": "scanner-3a76a53de7d509f7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/prove-backfill-live.ts:72"}, "properties": {"repobilityId": "bde88cd6d5653a52", "scanner": "scanner-primary", "fingerprint": "3a76a53de7d509f7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-30bef299ac7898c9", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/prove-discovery-live.ts:24"}, "properties": {"repobilityId": "1aa4fb2f673d72e3", "scanner": "scanner-primary", "fingerprint": "30bef299ac7898c9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9b359473009f252f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/backfill-actuals.ts:359"}, "properties": {"repobilityId": "776159818bb1385d", "scanner": "scanner-primary", "fingerprint": "9b359473009f252f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6c851647469205fd", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-db.ts:186"}, "properties": {"repobilityId": "65969f3f2a8e8353", "scanner": "scanner-primary", "fingerprint": "6c851647469205fd", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6eb1e279e80c4087", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/_shared/runJob.ts:93"}, "properties": {"repobilityId": "e67def34e5f2080c", "scanner": "scanner-primary", "fingerprint": "6eb1e279e80c4087", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-01feff6846eec4b6", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/backup-db.ts:12"}, "properties": {"repobilityId": "b05b22f434285911", "scanner": "scanner-primary", "fingerprint": "01feff6846eec4b6", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/backup-db.ts"}, "region": {"startLine": 12}}}]}, {"ruleId": "scanner-141b30a41e03817b", "level": "note", "message": {"text": "No license file detected"}, "properties": {"repobilityId": "83a9bd364df60528", "scanner": "scanner-primary", "fingerprint": "141b30a41e03817b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["license", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-96b074eb0971eff5", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/trading/package.json"}, "properties": {"repobilityId": "860f1ef27e70086c", "scanner": "scanner-primary", "fingerprint": "96b074eb0971eff5", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/trading/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-286c28febd1253f2", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/io/package.json"}, "properties": {"repobilityId": "bdf3aef0f28c2de0", "scanner": "scanner-primary", "fingerprint": "286c28febd1253f2", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/io/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-28e92806c0db3cd2", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/core/package.json"}, "properties": {"repobilityId": "8640e46be7e3f9b2", "scanner": "scanner-primary", "fingerprint": "28e92806c0db3cd2", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/core/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-4a9eb7dc7c6e3880", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: apps/web/package.json"}, "properties": {"repobilityId": "6c1704bf24cf19ac", "scanner": "scanner-primary", "fingerprint": "4a9eb7dc7c6e3880", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/web/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "4d99a83ac072cb40", "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": "5d42a28c7274a3ff", "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": "f7a462cb157702f2", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-b9088664ace7f748", "level": "note", "message": {"text": "Composite production-readiness gap"}, "properties": {"repobilityId": "18ee8d446b6b7b34", "scanner": "scanner-primary", "fingerprint": "b9088664ace7f748", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["production-readiness", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-d0eff16aad0b1443", "level": "none", "message": {"text": "Commented-code block (6 lines) in packages/trading/src/executor.ts:62"}, "properties": {"repobilityId": "88fcd4e04c6c8bd3", "scanner": "scanner-primary", "fingerprint": "d0eff16aad0b1443", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-799cd3357ac61480", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/trading/test/invariants.test.ts:65"}, "properties": {"repobilityId": "ca66f6f9b7142112", "scanner": "scanner-primary", "fingerprint": "799cd3357ac61480", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-40ce33c887e9f328", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/core/src/distributions/nowcast.ts:57"}, "properties": {"repobilityId": "a02bc423d76d3d36", "scanner": "scanner-primary", "fingerprint": "40ce33c887e9f328", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-dd1ab72529106b6b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/smoke-live-apis.ts:240"}, "properties": {"repobilityId": "a1a2862afef5a58d", "scanner": "scanner-primary", "fingerprint": "dd1ab72529106b6b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b1f6c0793b41569a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/prove-backfill-live.ts:97"}, "properties": {"repobilityId": "da06400955b9da3d", "scanner": "scanner-primary", "fingerprint": "b1f6c0793b41569a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b8fc6e6230c46a7c", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/backfill-actuals.ts:350"}, "properties": {"repobilityId": "49b794e1277d027b", "scanner": "scanner-primary", "fingerprint": "b8fc6e6230c46a7c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-5dda85030526582b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/seed-stations.ts:127"}, "properties": {"repobilityId": "287056ba69bc5ce1", "scanner": "scanner-primary", "fingerprint": "5dda85030526582b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-099f1ec34a7f22b9", "level": "none", "message": {"text": "Commented-code block (5 lines) in supabase/tests/migrations.test.ts:58"}, "properties": {"repobilityId": "0c2eb04beba95299", "scanner": "scanner-primary", "fingerprint": "099f1ec34a7f22b9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f72913e86b116c14", "level": "none", "message": {"text": "Commented-code block (6 lines) in supabase/tests/poll-markets.test.ts:304"}, "properties": {"repobilityId": "f9aa40564d7a973c", "scanner": "scanner-primary", "fingerprint": "f72913e86b116c14", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-22b212b9e8bf839c", "level": "none", "message": {"text": "Commented-code block (7 lines) in supabase/functions/execute-bet/index.ts:14"}, "properties": {"repobilityId": "4355a7c92b70e821", "scanner": "scanner-primary", "fingerprint": "22b212b9e8bf839c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1c1beba7046eaa78", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/execute-bet/index.ts:37"}, "properties": {"repobilityId": "47c88975bb0e0e17", "scanner": "scanner-primary", "fingerprint": "1c1beba7046eaa78", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f8abdc3a202512fa", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/poll-markets/index.ts:35"}, "properties": {"repobilityId": "04392e2580c43934", "scanner": "scanner-primary", "fingerprint": "f8abdc3a202512fa", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-5a7f247d880a6035", "level": "none", "message": {"text": "Commented-code block (7 lines) in supabase/functions/poll-markets/handler.ts:197"}, "properties": {"repobilityId": "bf8af2c1a0428db9", "scanner": "scanner-primary", "fingerprint": "5a7f247d880a6035", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ad6eafddb63b4e63", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/poll-markets/handler.ts:326"}, "properties": {"repobilityId": "e1b07d4092f5a04d", "scanner": "scanner-primary", "fingerprint": "ad6eafddb63b4e63", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e7bca1c04f5afe17", "level": "none", "message": {"text": "Commented-code block (6 lines) in supabase/functions/_shared/db.ts:34"}, "properties": {"repobilityId": "7169a155f841477b", "scanner": "scanner-primary", "fingerprint": "e7bca1c04f5afe17", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-64900ac20b81a2ba", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/fetch-actuals/index.ts:27"}, "properties": {"repobilityId": "313260348c6646b0", "scanner": "scanner-primary", "fingerprint": "64900ac20b81a2ba", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d34787fc912c7e60", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/src/lib/loaders.ts:364"}, "properties": {"repobilityId": "6014935ad1ca7165", "scanner": "scanner-primary", "fingerprint": "d34787fc912c7e60", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-cc6262f685d754b6", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/src/lib/api/prod.ts:69"}, "properties": {"repobilityId": "9370130bc3773b86", "scanner": "scanner-primary", "fingerprint": "cc6262f685d754b6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}]}]}