{"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-ccaae615c8a23978", "name": "Stray `console.log` in TS/JS \u2014 scripts/backtest/conservativeFloorDiagnostic.ts:511", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/backtest/conservativeFloorDiagnostic.ts:511"}, "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-6516b7dfbeb87324", "name": "Stray `console.log` in TS/JS \u2014 scripts/backtest/consistencyLabel.ts:141", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/backtest/consistencyLabel.ts:141"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-81f04bba195e7bda", "name": "Stray `console.log` in TS/JS \u2014 scripts/backtest/consistencyRatios.ts:138", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/backtest/consistencyRatios.ts:138"}, "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-b3831715e28eeab0", "name": "Stray `console.log` in TS/JS \u2014 scripts/backtest/runBacktest.ts:62", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/backtest/runBacktest.ts:62"}, "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-33ca5012b5cefea0", "name": "Stray `console.log` in TS/JS \u2014 scripts/backtest/consistencyExtractFull.ts:98", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/backtest/consistencyExtractFull.ts:98"}, "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-0c6baa182b1ba44c", "name": "Stray `console.log` in TS/JS \u2014 scripts/backtest/consistencyExtract.ts:105", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/backtest/consistencyExtract.ts:105"}, "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-cb3793d4905c2e8a", "name": "Stray `console.log` in TS/JS \u2014 scripts/backtest/parameterSweep.ts:125", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/backtest/parameterSweep.ts:125"}, "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-f302db13456de9a4", "name": "Stray `console.log` in TS/JS \u2014 scripts/backtest/slopeBacktest.ts:126", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/backtest/slopeBacktest.ts:126"}, "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-d6a230a8653f39a9", "name": "Stray `console.log` in TS/JS \u2014 scripts/wodify/classSigninProbe.ts:406", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/wodify/classSigninProbe.ts:406"}, "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-61ca40b197fba6e0", "name": "Stray `console.log` in TS/JS \u2014 scripts/wodify/clientsMembershipStateDiscovery.ts:901", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/wodify/clientsMembershipStateDiscovery.ts:901"}, "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-7471210df6f03e25", "name": "Stray `console.log` in TS/JS \u2014 scripts/wodify/clientsMembershipStartDiscovery.ts:635", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/wodify/clientsMembershipStartDiscovery.ts:635"}, "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-85873de7a7a570c0", "name": "Stray `console.log` in TS/JS \u2014 scripts/wodify/signinsShapeDiscovery.ts:354", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/wodify/signinsShapeDiscovery.ts:354"}, "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-3c75b715f2a1474a", "name": "Stray `console.log` in TS/JS \u2014 scripts/wodify/silentChurnDuesPreview.ts:979", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/wodify/silentChurnDuesPreview.ts:979"}, "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-b0f726be315f9552", "name": "Stray `console.log` in TS/JS \u2014 scripts/wodify/clientStatusVocab.ts:376", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/wodify/clientStatusVocab.ts:376"}, "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-cadf070deef143a1", "name": "Stray `console.log` in TS/JS \u2014 scripts/wodify/clientsRecencyProbe.ts:581", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/wodify/clientsRecencyProbe.ts:581"}, "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-845ed2f9f17bbf49", "name": "Stray `console.log` in TS/JS \u2014 scripts/wodify/clientsShapeDiscovery.ts:448", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/wodify/clientsShapeDiscovery.ts:448"}, "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-f697636064283eff", "name": "Stray `console.log` in TS/JS \u2014 scripts/wodify/clientSigninsProbe.ts:742", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/wodify/clientSigninsProbe.ts:742"}, "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-9456d501e04294f8", "name": "Stray `console.log` in TS/JS \u2014 scripts/assistant-replay/rubricReview.ts:249", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/assistant-replay/rubricReview.ts:249"}, "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-c2cb3dd028d354c6", "name": "Stray `console.log` in TS/JS \u2014 scripts/assistant-replay/runReplay.ts:465", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/assistant-replay/runReplay.ts:465"}, "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-c7c5b6221b2dec29", "name": "Stray `console.log` in TS/JS \u2014 src/components/CashFlowForecastModule.tsx:465", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/components/CashFlowForecastModule.tsx:465"}, "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-aa5d3aebb005e04e", "name": "TODO/FIXME marker in shipping code \u2014 src/lib/dataSanity.ts:218", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/lib/dataSanity.ts:218"}, "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-1c64c68d99376da3", "name": "Stray `console.log` in TS/JS \u2014 src/pages/Dashboard.tsx:973", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/pages/Dashboard.tsx:973"}, "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-166dff3c3df6a10e", "name": "ORM models found but no DB engine detected", "shortDescription": {"text": "ORM models found but no DB engine detected"}, "fullDescription": {"text": "The repo defines tables/models but no DB connection string was found. Likely lives in env vars or a config file the scanner didn't read."}, "properties": {"scanner": "scanner-primary", "layer": "data", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6a591c7d408e0fbc", "name": "Privileged port 12 in use", "shortDescription": {"text": "Privileged port 12 in use"}, "fullDescription": {"text": "Port 12 is privileged (<1024). Make sure the service runs with the right caps or front it with a non-privileged port via a load balancer."}, "properties": {"scanner": "scanner-primary", "layer": "network", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-27924aa79fa4a517", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@v6 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c1e62c8a8becdce0", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@v6 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-11fe6710547243fb", "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-57e0f54e819c5641", "name": "Very large file: scripts/wodify/clientsMembershipStateDiscovery.ts (1182 lines)", "shortDescription": {"text": "Very large file: scripts/wodify/clientsMembershipStateDiscovery.ts (1182 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-56f0f0765e8d55d4", "name": "Very large file: scripts/wodify/silentChurnDuesPreview.ts (1254 lines)", "shortDescription": {"text": "Very large file: scripts/wodify/silentChurnDuesPreview.ts (1254 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-0a4cda9847e4359d", "name": "Very large file: src/components/GymPage.tsx (1143 lines)", "shortDescription": {"text": "Very large file: src/components/GymPage.tsx (1143 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-3342d1f0dfb57124", "name": "Very large file: src/components/CashFlowForecastModule.tsx (1536 lines)", "shortDescription": {"text": "Very large file: src/components/CashFlowForecastModule.tsx (1536 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-11be89565253f99b", "name": "Very large file: src/lib/kpis/compute.ts (2681 lines)", "shortDescription": {"text": "Very large file: src/lib/kpis/compute.ts (2681 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-08ef61f36a411997", "name": "Very large file: src/pages/Dashboard.tsx (5161 lines)", "shortDescription": {"text": "Very large file: src/pages/Dashboard.tsx (5161 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-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 181 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 50 placeholder/mock markers across 21 source files. This often means the repo looks complete while core flows still use generated scaffolding or fake data."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9d79c4077342a7d0", "name": "Runtime service client appears to use placeholder configuration", "shortDescription": {"text": "Runtime service client appears to use placeholder configuration"}, "fullDescription": {"text": "A runtime source file appears to wire Supabase/Firebase/AI/payment-style clients to placeholder URLs, keys, or fallback values. In the Fable corpus this often means the UI/API shape is present while the backend service is not actually configured."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2d0c7b7ab8f8aacf", "name": "Critical user flow still appears backed by mock or placeholder data", "shortDescription": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "fullDescription": {"text": "A payment/auth/admin/order/billing-style flow contains mock, fake, TODO, dummy, or placeholder markers in runtime source. In the Fable corpus this is a high-leverage completeness smell: the app can look finished while the money, identity, or tenant flow is still scaffolded."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-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-f42378056c0edda0", "name": "Commented-code block (5 lines) in scripts/backtest/walkForward.ts:4", "shortDescription": {"text": "Commented-code block (5 lines) in scripts/backtest/walkForward.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cbe651cdf139f0d8", "name": "Commented-code block (5 lines) in scripts/wodify/classSigninProbe.ts:60", "shortDescription": {"text": "Commented-code block (5 lines) in scripts/wodify/classSigninProbe.ts:60"}, "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-b6dfd03ba2b16b87", "name": "Commented-code block (6 lines) in scripts/wodify/clientsMembershipStateDiscovery.ts:113", "shortDescription": {"text": "Commented-code block (6 lines) in scripts/wodify/clientsMembershipStateDiscovery.ts:113"}, "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-547747264e7926e0", "name": "Commented-code block (5 lines) in scripts/wodify/clientsMembershipStartDiscovery.ts:104", "shortDescription": {"text": "Commented-code block (5 lines) in scripts/wodify/clientsMembershipStartDiscovery.ts:104"}, "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-6d048d1040cbe706", "name": "Commented-code block (6 lines) in scripts/wodify/silentChurnDuesPreview.ts:136", "shortDescription": {"text": "Commented-code block (6 lines) in scripts/wodify/silentChurnDuesPreview.ts:136"}, "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-2b1881beae56c353", "name": "Commented-code block (8 lines) in scripts/wodify/clientsRecencyProbe.ts:538", "shortDescription": {"text": "Commented-code block (8 lines) in scripts/wodify/clientsRecencyProbe.ts:538"}, "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-fac0fb1898b2ff7e", "name": "Commented-code block (5 lines) in scripts/assistant-replay/runReplay.ts:78", "shortDescription": {"text": "Commented-code block (5 lines) in scripts/assistant-replay/runReplay.ts:78"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-546ab876cab0a721", "name": "Commented-code block (10 lines) in supabase/functions/sync-wodify-retention/index.ts:3", "shortDescription": {"text": "Commented-code block (10 lines) in supabase/functions/sync-wodify-retention/index.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-0ff09edaa3a5a181", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/sync-wodify-retention/index.ts:136", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/sync-wodify-retention/index.ts:136"}, "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-bbd208f5f6f287ce", "name": "Commented-code block (5 lines) in supabase/functions/ai-proxy/index.ts:3", "shortDescription": {"text": "Commented-code block (5 lines) in supabase/functions/ai-proxy/index.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-4a164d64727ce853", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/ai-proxy/index.ts:74", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/ai-proxy/index.ts:74"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-60cb5a595d25a6d0", "name": "Commented-code block (5 lines) in src/components/PayrollEfficiencyCard.tsx:67", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/PayrollEfficiencyCard.tsx:67"}, "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-35924ff0e1af296d", "name": "Commented-code block (7 lines) in src/components/IncomeExpenseCard.tsx:111", "shortDescription": {"text": "Commented-code block (7 lines) in src/components/IncomeExpenseCard.tsx:111"}, "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-423ba687c9c0fc44", "name": "Commented-code block (5 lines) in src/components/CashReserveCalendarCard.tsx:168", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/CashReserveCalendarCard.tsx:168"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-03832295122f5daf", "name": "Commented-code block (12 lines) in src/components/GymPage.tsx:1", "shortDescription": {"text": "Commented-code block (12 lines) in src/components/GymPage.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-d22c836f2389bd96", "name": "Commented-code block (5 lines) in src/components/OperatingReserveCard.tsx:28", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/OperatingReserveCard.tsx:28"}, "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-52aa334546dde00a", "name": "Commented-code block (5 lines) in src/components/NextOwnerDistributionCardLab.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/NextOwnerDistributionCardLab.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-cffa45d7e120bece", "name": "Commented-code block (7 lines) in src/components/ProjectedCashBalanceChart.tsx:94", "shortDescription": {"text": "Commented-code block (7 lines) in src/components/ProjectedCashBalanceChart.tsx:94"}, "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-d3235fe4dab713d4", "name": "Commented-code block (9 lines) in src/components/TransactionSearchDrawer.tsx:5", "shortDescription": {"text": "Commented-code block (9 lines) in src/components/TransactionSearchDrawer.tsx: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-4895283bb965952a", "name": "Commented-code block (9 lines) in src/components/CashTrendHero.tsx:50", "shortDescription": {"text": "Commented-code block (9 lines) in src/components/CashTrendHero.tsx:50"}, "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-17547418f0f2bab6", "name": "Commented-code block (5 lines) in src/components/LoadingScreen.tsx:19", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/LoadingScreen.tsx:19"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1cffc7b2cce7bce7", "name": "Commented-code block (5 lines) in src/components/CfoAssistantCard.tsx:79", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/CfoAssistantCard.tsx:79"}, "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-4db8d6ff8bab2bd9", "name": "Commented-code block (6 lines) in src/components/BusinessValuationCard.tsx:30", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/BusinessValuationCard.tsx:30"}, "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-4eade4fcc1951444", "name": "Commented-code block (6 lines) in src/components/IncomeExpenseTransactionsDrawer.tsx:4", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/IncomeExpenseTransactionsDrawer.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-0316b49427aa6677", "name": "Commented-code block (5 lines) in src/components/OwnerDistributionsChart.tsx:300", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/OwnerDistributionsChart.tsx:300"}, "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-c75e9db24f20c91d", "name": "Commented-code block (5 lines) in src/components/DrawerShell.tsx:3", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/DrawerShell.tsx: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-b1b930f946a59674", "name": "Commented-code block (5 lines) in src/components/CashFlowForecastModule.tsx:577", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/CashFlowForecastModule.tsx:577"}, "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-108a591ad2708d33", "name": "Commented-code block (7 lines) in src/components/TopExpensesTransactionsDrawer.tsx:4", "shortDescription": {"text": "Commented-code block (7 lines) in src/components/TopExpensesTransactionsDrawer.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-dd2707c76f0884bf", "name": "Commented-code block (5 lines) in src/components/CashOnHandCard.tsx:87", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/CashOnHandCard.tsx:87"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-50882444202d38cd", "name": "Commented-code block (6 lines) in src/components/TopCategoriesCard.tsx:50", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/TopCategoriesCard.tsx:50"}, "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-61c667202d689d2a", "name": "Commented-code block (7 lines) in src/components/TransactionTable.tsx:4", "shortDescription": {"text": "Commented-code block (7 lines) in src/components/TransactionTable.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-9b8b90fb8555551c", "name": "Commented-code block (7 lines) in src/lib/cashFlow.ts:28", "shortDescription": {"text": "Commented-code block (7 lines) in src/lib/cashFlow.ts:28"}, "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-fa9f8d2ecb0b6c8a", "name": "Commented-code block (6 lines) in src/lib/dataSanity.test.ts:123", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/dataSanity.test.ts:123"}, "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-13e29edea4a6a21d", "name": "Commented-code block (6 lines) in src/lib/priorities/ai.ts:223", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/priorities/ai.ts:223"}, "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-b49213de21ba5ee9", "name": "Commented-code block (5 lines) in src/lib/priorities/copy.ts:228", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/priorities/copy.ts:228"}, "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-0ad54cfd1d2ef9d1", "name": "Commented-code block (6 lines) in src/lib/priorities/signals.ts:33", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/priorities/signals.ts:33"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c924274c7ed3f322", "name": "Commented-code block (5 lines) in src/lib/charts/niceTicks.ts:112", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/charts/niceTicks.ts:112"}, "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-93ab74a171200ed9", "name": "Commented-code block (6 lines) in src/lib/commitments/anchor.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/commitments/anchor.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-aac9ff850c59f233", "name": "Commented-code block (7 lines) in src/lib/commitments/groundedSummary.ts:1", "shortDescription": {"text": "Commented-code block (7 lines) in src/lib/commitments/groundedSummary.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ca0c8e8b8cb888a9", "name": "Commented-code block (10 lines) in src/lib/commitments/summaryCache.ts:10", "shortDescription": {"text": "Commented-code block (10 lines) in src/lib/commitments/summaryCache.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-df939dde5ab241ff", "name": "Commented-code block (5 lines) in src/lib/commitments/watchMetrics.ts:21", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/commitments/watchMetrics.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-c57c65c910319981", "name": "Commented-code block (8 lines) in src/lib/commitments/reserveWarningCommitment.ts:14", "shortDescription": {"text": "Commented-code block (8 lines) in src/lib/commitments/reserveWarningCommitment.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-390acb75eafe15b4", "name": "Commented-code block (8 lines) in src/lib/commitments/devSeam.ts:4", "shortDescription": {"text": "Commented-code block (8 lines) in src/lib/commitments/devSeam.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1c6b5467adbc51b3", "name": "Commented-code block (5 lines) in src/lib/commitments/templater.ts:6", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/commitments/templater.ts:6"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3e872ba2d8508c01", "name": "Commented-code block (7 lines) in src/lib/commitments/cadence.ts:3", "shortDescription": {"text": "Commented-code block (7 lines) in src/lib/commitments/cadence.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-d1bedc501c9aac0d", "name": "Commented-code block (6 lines) in src/lib/commitments/copyGrounding.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/commitments/copyGrounding.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-106db1aa77ee1157", "name": "Commented-code block (6 lines) in src/lib/commitments/execute.ts:3", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/commitments/execute.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-668f00340794aa1d", "name": "Commented-code block (6 lines) in src/lib/commitments/targetGrounding.ts:4", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/commitments/targetGrounding.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-437085fbe51ddc41", "name": "Commented-code block (5 lines) in src/lib/ui/reserveFooterCopy.ts:3", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/ui/reserveFooterCopy.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-4b0f74cf22690ca1", "name": "Commented-code block (5 lines) in src/lib/gym/churnRiskByTenure.ts:3", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/gym/churnRiskByTenure.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-8e80aac28e9feaf8", "name": "Commented-code block (5 lines) in src/lib/gym/memberMovement.test.ts:5", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/gym/memberMovement.test.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-51ba97347a24762d", "name": "Commented-code block (5 lines) in src/lib/gym/churnRiskByTenure.knownBase.test.ts:5", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/gym/churnRiskByTenure.knownBase.test.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-8274ef6f4db4be01", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/gym/wodifyRetentionSync.ts:49", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/gym/wodifyRetentionSync.ts:49"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0f0e469352d86c70", "name": "Commented-code block (6 lines) in src/lib/gym/silentChurn.ts:13", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/gym/silentChurn.ts:13"}, "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-b57c8890d2a6be6d", "name": "Commented-code block (6 lines) in src/lib/gym/silentChurnDuesView.test.ts:3", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/gym/silentChurnDuesView.test.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-95eef1d03b31854c", "name": "Commented-code block (8 lines) in src/lib/gym/silentChurnDuesView.ts:3", "shortDescription": {"text": "Commented-code block (8 lines) in src/lib/gym/silentChurnDuesView.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-0055b9bd0566634b", "name": "Commented-code block (5 lines) in src/lib/gym/memberFixture.ts:8", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/gym/memberFixture.ts:8"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f4d128bfe20e8577", "name": "Commented-code block (5 lines) in src/lib/gym/retentionAggregateView.ts:3", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/gym/retentionAggregateView.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-eb5bc3a4d28f6093", "name": "Commented-code block (5 lines) in src/lib/gym/fetchRetentionAggregate.test.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/gym/fetchRetentionAggregate.test.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-bfc81ac158733187", "name": "Commented-code block (6 lines) in src/lib/gym/retentionAggregateView.test.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/gym/retentionAggregateView.test.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-28a9107b15cf27e7", "name": "Commented-code block (6 lines) in src/lib/gym/retentionRates.ts:3", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/gym/retentionRates.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-f567a6afe9f03f49", "name": "Commented-code block (5 lines) in src/lib/gym/tenureBands.ts:5", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/gym/tenureBands.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-8638eae4f203a7e2", "name": "Commented-code block (7 lines) in src/lib/gym/wodifyRetentionAggregate.ts:1", "shortDescription": {"text": "Commented-code block (7 lines) in src/lib/gym/wodifyRetentionAggregate.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-98395d14d41af726", "name": "Commented-code block (6 lines) in src/lib/gym/fetchRetentionAggregate.ts:3", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/gym/fetchRetentionAggregate.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-b0dcca236d0a6afa", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/gym/fetchRetentionAggregate.ts:243", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/gym/fetchRetentionAggregate.ts:243"}, "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-aa0b1b99e9ef377f", "name": "Commented-code block (7 lines) in src/lib/gym/silentChurnLiveView.test.ts:3", "shortDescription": {"text": "Commented-code block (7 lines) in src/lib/gym/silentChurnLiveView.test.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-2facfa043a4b6dba", "name": "Commented-code block (8 lines) in src/lib/gym/memberMovement.ts:3", "shortDescription": {"text": "Commented-code block (8 lines) in src/lib/gym/memberMovement.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-4cc8a78c7f6d086e", "name": "Commented-code block (6 lines) in src/lib/gym/segmentExplorer.test.ts:16", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/gym/segmentExplorer.test.ts:16"}, "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-380b5290ab8987bc", "name": "Commented-code block (5 lines) in src/lib/gym/churnRiskByTenure.test.ts:10", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/gym/churnRiskByTenure.test.ts:10"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7b74f969da389468", "name": "Commented-code block (11 lines) in src/lib/gym/segmentExplorer.ts:3", "shortDescription": {"text": "Commented-code block (11 lines) in src/lib/gym/segmentExplorer.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-3f98238e280aa24f", "name": "Commented-code block (5 lines) in src/lib/gym/wodifyRetentionAggregate.test.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/gym/wodifyRetentionAggregate.test.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-04071bf89c532af0", "name": "Commented-code block (6 lines) in src/lib/forecast/extendComposedProjection.test.ts:99", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/forecast/extendComposedProjection.test.ts:99"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f25ecd441f499877", "name": "Commented-code block (5 lines) in src/lib/forecast/generateRenewalEventId.ts:8", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/forecast/generateRenewalEventId.ts:8"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-596f5fee8f7199b3", "name": "Commented-code block (9 lines) in src/lib/forecast/generateRenewalEvents.ts:8", "shortDescription": {"text": "Commented-code block (9 lines) in src/lib/forecast/generateRenewalEvents.ts:8"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e14c509a82d71887", "name": "Commented-code block (5 lines) in src/lib/kpis/digHere.ts:142", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/kpis/digHere.ts:142"}, "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-808f0c0aba2484f6", "name": "Commented-code block (14 lines) in src/lib/kpis/categoryCadence.ts:27", "shortDescription": {"text": "Commented-code block (14 lines) in src/lib/kpis/categoryCadence.ts:27"}, "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-d91c5db05698a484", "name": "Commented-code block (11 lines) in src/lib/kpis/sustainabilityRows.ts:6", "shortDescription": {"text": "Commented-code block (11 lines) in src/lib/kpis/sustainabilityRows.ts:6"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a17f5f8d9697617e", "name": "Commented-code block (7 lines) in src/lib/kpis/businessValuation.test.ts:572", "shortDescription": {"text": "Commented-code block (7 lines) in src/lib/kpis/businessValuation.test.ts:572"}, "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-bb4a21a10bbbdec9", "name": "Commented-code block (7 lines) in src/lib/kpis/reserveCoverageDelta.test.ts:9", "shortDescription": {"text": "Commented-code block (7 lines) in src/lib/kpis/reserveCoverageDelta.test.ts:9"}, "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-5e095e9c6fc8aed6", "name": "Commented-code block (6 lines) in src/lib/kpis/sustainabilityRows.test.ts:62", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/kpis/sustainabilityRows.test.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-09d4b0bafed7cc5c", "name": "Legacy-named symbol `flatOld` in src/lib/kpis/cashReserveCalendar.test.ts:108", "shortDescription": {"text": "Legacy-named symbol `flatOld` in src/lib/kpis/cashReserveCalendar.test.ts:108"}, "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-c653bbd51deb6442", "name": "Commented-code block (5 lines) in src/lib/kpis/cashReserveCalendar.test.ts:101", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/kpis/cashReserveCalendar.test.ts:101"}, "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-987ead467198b54b", "name": "Commented-code block (9 lines) in src/lib/kpis/efficiencyOpportunities.ts:63", "shortDescription": {"text": "Commented-code block (9 lines) in src/lib/kpis/efficiencyOpportunities.ts:63"}, "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-0a202ee3afa4865e", "name": "Commented-code block (5 lines) in src/lib/kpis/compute.ts:827", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/kpis/compute.ts:827"}, "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-516916a79adf6767", "name": "Commented-code block (8 lines) in src/lib/kpis/valuationProjection.ts:16", "shortDescription": {"text": "Commented-code block (8 lines) in src/lib/kpis/valuationProjection.ts:16"}, "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-2cd078faeedc3203", "name": "Commented-code block (8 lines) in src/lib/kpis/businessValuation.ts:3", "shortDescription": {"text": "Commented-code block (8 lines) in src/lib/kpis/businessValuation.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-33e7b10058a4ef64", "name": "Commented-code block (5 lines) in src/lib/kpis/efficiencyOpportunities.test.ts:5", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/kpis/efficiencyOpportunities.test.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-5a5a2524db537ca8", "name": "Legacy-named symbol `banner__copy` in src/pages/Dashboard.tsx:3740", "shortDescription": {"text": "Legacy-named symbol `banner__copy` in src/pages/Dashboard.tsx:3740"}, "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-04bb25fc399d9021", "name": "Commented-code block (5 lines) in src/pages/Dashboard.tsx:193", "shortDescription": {"text": "Commented-code block (5 lines) in src/pages/Dashboard.tsx:193"}, "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-05a5a7d87ee2a443", "name": "Commented-code block (6 lines) in src/context/RetentionSettingsContext.tsx:15", "shortDescription": {"text": "Commented-code block (6 lines) in src/context/RetentionSettingsContext.tsx: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-319e66a630e14977", "name": "2 env vars used in code but missing from .env.example", "shortDescription": {"text": "2 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `DEV`, `WODIFY_API_KEY`. Add them (with a placeholder/comment) to .env.example so onboarding doesn't break."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7064cd9925eeb9c6", "name": "Frontend route `/*` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `/*` has no Link/navigate to it \u2014 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}}]}}, "automationDetails": {"id": "repobility/22590"}, "properties": {"repository": "wcpeixoto/wx-cfo-scorecard", "repoUrl": "https://github.com/wcpeixoto/wx-cfo-scorecard", "branch": "main"}, "results": [{"ruleId": "scanner-ccaae615c8a23978", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/backtest/conservativeFloorDiagnostic.ts:511"}, "properties": {"repobilityId": "5a13250d66b9921d", "scanner": "scanner-primary", "fingerprint": "ccaae615c8a23978", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6516b7dfbeb87324", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/backtest/consistencyLabel.ts:141"}, "properties": {"repobilityId": "54e3a5ae57ec848a", "scanner": "scanner-primary", "fingerprint": "6516b7dfbeb87324", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-81f04bba195e7bda", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/backtest/consistencyRatios.ts:138"}, "properties": {"repobilityId": "530d323a3f0c2b3c", "scanner": "scanner-primary", "fingerprint": "81f04bba195e7bda", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b3831715e28eeab0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/backtest/runBacktest.ts:62"}, "properties": {"repobilityId": "a8eb5eef815097cb", "scanner": "scanner-primary", "fingerprint": "b3831715e28eeab0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-33ca5012b5cefea0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/backtest/consistencyExtractFull.ts:98"}, "properties": {"repobilityId": "e8075851b324afae", "scanner": "scanner-primary", "fingerprint": "33ca5012b5cefea0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0c6baa182b1ba44c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/backtest/consistencyExtract.ts:105"}, "properties": {"repobilityId": "3e99ada29bc2e697", "scanner": "scanner-primary", "fingerprint": "0c6baa182b1ba44c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-cb3793d4905c2e8a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/backtest/parameterSweep.ts:125"}, "properties": {"repobilityId": "07015185b6963867", "scanner": "scanner-primary", "fingerprint": "cb3793d4905c2e8a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f302db13456de9a4", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/backtest/slopeBacktest.ts:126"}, "properties": {"repobilityId": "41b7949a3287a086", "scanner": "scanner-primary", "fingerprint": "f302db13456de9a4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d6a230a8653f39a9", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/wodify/classSigninProbe.ts:406"}, "properties": {"repobilityId": "c83698f7675906e7", "scanner": "scanner-primary", "fingerprint": "d6a230a8653f39a9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-61ca40b197fba6e0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/wodify/clientsMembershipStateDiscovery.ts:901"}, "properties": {"repobilityId": "ba2103671809dd25", "scanner": "scanner-primary", "fingerprint": "61ca40b197fba6e0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7471210df6f03e25", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/wodify/clientsMembershipStartDiscovery.ts:635"}, "properties": {"repobilityId": "70f987be010d6ba7", "scanner": "scanner-primary", "fingerprint": "7471210df6f03e25", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-85873de7a7a570c0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/wodify/signinsShapeDiscovery.ts:354"}, "properties": {"repobilityId": "5d92a8ac9e907590", "scanner": "scanner-primary", "fingerprint": "85873de7a7a570c0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3c75b715f2a1474a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/wodify/silentChurnDuesPreview.ts:979"}, "properties": {"repobilityId": "df799e0c5c7ef2c0", "scanner": "scanner-primary", "fingerprint": "3c75b715f2a1474a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b0f726be315f9552", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/wodify/clientStatusVocab.ts:376"}, "properties": {"repobilityId": "06dd50c6bc48b822", "scanner": "scanner-primary", "fingerprint": "b0f726be315f9552", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-cadf070deef143a1", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/wodify/clientsRecencyProbe.ts:581"}, "properties": {"repobilityId": "52105634237ac0f3", "scanner": "scanner-primary", "fingerprint": "cadf070deef143a1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-845ed2f9f17bbf49", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/wodify/clientsShapeDiscovery.ts:448"}, "properties": {"repobilityId": "4a0c933b075a8fc9", "scanner": "scanner-primary", "fingerprint": "845ed2f9f17bbf49", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f697636064283eff", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/wodify/clientSigninsProbe.ts:742"}, "properties": {"repobilityId": "00f043e87d1e04c3", "scanner": "scanner-primary", "fingerprint": "f697636064283eff", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9456d501e04294f8", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/assistant-replay/rubricReview.ts:249"}, "properties": {"repobilityId": "314b0e99ed73e9ab", "scanner": "scanner-primary", "fingerprint": "9456d501e04294f8", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c2cb3dd028d354c6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/assistant-replay/runReplay.ts:465"}, "properties": {"repobilityId": "d3374e67011ec688", "scanner": "scanner-primary", "fingerprint": "c2cb3dd028d354c6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c7c5b6221b2dec29", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/components/CashFlowForecastModule.tsx:465"}, "properties": {"repobilityId": "785298b9fe3aa727", "scanner": "scanner-primary", "fingerprint": "c7c5b6221b2dec29", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-aa5d3aebb005e04e", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/lib/dataSanity.ts:218"}, "properties": {"repobilityId": "43addb1ee7bc6067", "scanner": "scanner-primary", "fingerprint": "aa5d3aebb005e04e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-1c64c68d99376da3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/pages/Dashboard.tsx:973"}, "properties": {"repobilityId": "1ddde7412bada3f1", "scanner": "scanner-primary", "fingerprint": "1c64c68d99376da3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-166dff3c3df6a10e", "level": "warning", "message": {"text": "ORM models found but no DB engine detected"}, "properties": {"repobilityId": "cda36de65e114635", "scanner": "scanner-primary", "fingerprint": "166dff3c3df6a10e", "layer": "data", "severity": "medium", "confidence": 1.0, "tags": ["coverage"]}}, {"ruleId": "scanner-6a591c7d408e0fbc", "level": "warning", "message": {"text": "Privileged port 12 in use"}, "properties": {"repobilityId": "65e7eefa33f2def4", "scanner": "scanner-primary", "fingerprint": "6a591c7d408e0fbc", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/tenure-snapshot.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "97a9a5de61d82fcd", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 18}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "4a63b1fd6887cae9", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 20}}}]}, {"ruleId": "scanner-c1e62c8a8becdce0", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "8f8590f706abc550", "scanner": "scanner-primary", "fingerprint": "c1e62c8a8becdce0", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/deploy-pages.yml"}, "region": {"startLine": 23}}}]}, {"ruleId": "scanner-c1e62c8a8becdce0", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "9c39994a0b757821", "scanner": "scanner-primary", "fingerprint": "c1e62c8a8becdce0", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/deploy-pages.yml"}, "region": {"startLine": 26}}}]}, {"ruleId": "scanner-c1e62c8a8becdce0", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "ea23ca974c8a5571", "scanner": "scanner-primary", "fingerprint": "c1e62c8a8becdce0", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/deploy-pages.yml"}, "region": {"startLine": 42}}}]}, {"ruleId": "scanner-c1e62c8a8becdce0", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "b5fb77394efa7420", "scanner": "scanner-primary", "fingerprint": "c1e62c8a8becdce0", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/deploy-pages.yml"}, "region": {"startLine": 45}}}]}, {"ruleId": "scanner-c1e62c8a8becdce0", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "9438d873113cd8c4", "scanner": "scanner-primary", "fingerprint": "c1e62c8a8becdce0", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/deploy-pages.yml"}, "region": {"startLine": 59}}}]}, {"ruleId": "scanner-11fe6710547243fb", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "c88f07fd35b9711f", "scanner": "scanner-primary", "fingerprint": "11fe6710547243fb", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/deploy-pages.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-57e0f54e819c5641", "level": "note", "message": {"text": "Very large file: scripts/wodify/clientsMembershipStateDiscovery.ts (1182 lines)"}, "properties": {"repobilityId": "cfd8946cb946c6dd", "scanner": "scanner-primary", "fingerprint": "57e0f54e819c5641", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-56f0f0765e8d55d4", "level": "note", "message": {"text": "Very large file: scripts/wodify/silentChurnDuesPreview.ts (1254 lines)"}, "properties": {"repobilityId": "ac8d4cffe8cef3b1", "scanner": "scanner-primary", "fingerprint": "56f0f0765e8d55d4", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-0a4cda9847e4359d", "level": "note", "message": {"text": "Very large file: src/components/GymPage.tsx (1143 lines)"}, "properties": {"repobilityId": "61be37ceb1729357", "scanner": "scanner-primary", "fingerprint": "0a4cda9847e4359d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-3342d1f0dfb57124", "level": "note", "message": {"text": "Very large file: src/components/CashFlowForecastModule.tsx (1536 lines)"}, "properties": {"repobilityId": "3ace22435602d193", "scanner": "scanner-primary", "fingerprint": "3342d1f0dfb57124", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-11be89565253f99b", "level": "note", "message": {"text": "Very large file: src/lib/kpis/compute.ts (2681 lines)"}, "properties": {"repobilityId": "571e7e367a4f0e05", "scanner": "scanner-primary", "fingerprint": "11be89565253f99b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-08ef61f36a411997", "level": "note", "message": {"text": "Very large file: src/pages/Dashboard.tsx (5161 lines)"}, "properties": {"repobilityId": "65f65cb5d9f24cc9", "scanner": "scanner-primary", "fingerprint": "08ef61f36a411997", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-141b30a41e03817b", "level": "note", "message": {"text": "No license file detected"}, "properties": {"repobilityId": "808bbad5c3f2b41b", "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": "331f1fc84464652f", "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": "02b146fae6c49ba1", "scanner": "scanner-primary", "fingerprint": "72b2a6250083a784", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "incomplete", "generated-repo-pattern"]}}, {"ruleId": "scanner-9d79c4077342a7d0", "level": "warning", "message": {"text": "Runtime service client appears to use placeholder configuration"}, "properties": {"repobilityId": "fd2b498b2a3919e7", "scanner": "scanner-primary", "fingerprint": "9d79c4077342a7d0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "runtime-config", "service-client", "generated-repo-pattern"]}}, {"ruleId": "scanner-2d0c7b7ab8f8aacf", "level": "warning", "message": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "properties": {"repobilityId": "a35b22f014c43a7e", "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": "d3213a97b7505687", "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": "85c558eafb304890", "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": "b93d5b8d790ab0f2", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-f42378056c0edda0", "level": "none", "message": {"text": "Commented-code block (5 lines) in scripts/backtest/walkForward.ts:4"}, "properties": {"repobilityId": "b25d6559abb2538b", "scanner": "scanner-primary", "fingerprint": "f42378056c0edda0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cbe651cdf139f0d8", "level": "none", "message": {"text": "Commented-code block (5 lines) in scripts/wodify/classSigninProbe.ts:60"}, "properties": {"repobilityId": "694a3b3dff2b0d26", "scanner": "scanner-primary", "fingerprint": "cbe651cdf139f0d8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b6dfd03ba2b16b87", "level": "none", "message": {"text": "Commented-code block (6 lines) in scripts/wodify/clientsMembershipStateDiscovery.ts:113"}, "properties": {"repobilityId": "f5e8376fd9ba6ed8", "scanner": "scanner-primary", "fingerprint": "b6dfd03ba2b16b87", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-547747264e7926e0", "level": "none", "message": {"text": "Commented-code block (5 lines) in scripts/wodify/clientsMembershipStartDiscovery.ts:104"}, "properties": {"repobilityId": "6510c1b42bd846fd", "scanner": "scanner-primary", "fingerprint": "547747264e7926e0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6d048d1040cbe706", "level": "none", "message": {"text": "Commented-code block (6 lines) in scripts/wodify/silentChurnDuesPreview.ts:136"}, "properties": {"repobilityId": "417715fb310d377a", "scanner": "scanner-primary", "fingerprint": "6d048d1040cbe706", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2b1881beae56c353", "level": "none", "message": {"text": "Commented-code block (8 lines) in scripts/wodify/clientsRecencyProbe.ts:538"}, "properties": {"repobilityId": "382b758aecc4da59", "scanner": "scanner-primary", "fingerprint": "2b1881beae56c353", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fac0fb1898b2ff7e", "level": "none", "message": {"text": "Commented-code block (5 lines) in scripts/assistant-replay/runReplay.ts:78"}, "properties": {"repobilityId": "a6f788b874238a8a", "scanner": "scanner-primary", "fingerprint": "fac0fb1898b2ff7e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-546ab876cab0a721", "level": "none", "message": {"text": "Commented-code block (10 lines) in supabase/functions/sync-wodify-retention/index.ts:3"}, "properties": {"repobilityId": "78d848f5ee65fc33", "scanner": "scanner-primary", "fingerprint": "546ab876cab0a721", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0ff09edaa3a5a181", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/sync-wodify-retention/index.ts:136"}, "properties": {"repobilityId": "1f4d101502f8cb41", "scanner": "scanner-primary", "fingerprint": "0ff09edaa3a5a181", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-bbd208f5f6f287ce", "level": "none", "message": {"text": "Commented-code block (5 lines) in supabase/functions/ai-proxy/index.ts:3"}, "properties": {"repobilityId": "04103e4693cd6232", "scanner": "scanner-primary", "fingerprint": "bbd208f5f6f287ce", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4a164d64727ce853", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/ai-proxy/index.ts:74"}, "properties": {"repobilityId": "f02c70a9fa9dffe3", "scanner": "scanner-primary", "fingerprint": "4a164d64727ce853", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-60cb5a595d25a6d0", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/PayrollEfficiencyCard.tsx:67"}, "properties": {"repobilityId": "4516565dab3495ec", "scanner": "scanner-primary", "fingerprint": "60cb5a595d25a6d0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-35924ff0e1af296d", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/components/IncomeExpenseCard.tsx:111"}, "properties": {"repobilityId": "19b54e0cc59f1d49", "scanner": "scanner-primary", "fingerprint": "35924ff0e1af296d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-423ba687c9c0fc44", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/CashReserveCalendarCard.tsx:168"}, "properties": {"repobilityId": "d0aa99a5d4c15a9a", "scanner": "scanner-primary", "fingerprint": "423ba687c9c0fc44", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-03832295122f5daf", "level": "none", "message": {"text": "Commented-code block (12 lines) in src/components/GymPage.tsx:1"}, "properties": {"repobilityId": "10436639d5f5466a", "scanner": "scanner-primary", "fingerprint": "03832295122f5daf", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d22c836f2389bd96", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/OperatingReserveCard.tsx:28"}, "properties": {"repobilityId": "3b21f01953377f01", "scanner": "scanner-primary", "fingerprint": "d22c836f2389bd96", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-52aa334546dde00a", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/NextOwnerDistributionCardLab.tsx:1"}, "properties": {"repobilityId": "5d7ae6ed68123a6a", "scanner": "scanner-primary", "fingerprint": "52aa334546dde00a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cffa45d7e120bece", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/components/ProjectedCashBalanceChart.tsx:94"}, "properties": {"repobilityId": "49cef9af0eef0767", "scanner": "scanner-primary", "fingerprint": "cffa45d7e120bece", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d3235fe4dab713d4", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/components/TransactionSearchDrawer.tsx:5"}, "properties": {"repobilityId": "ffe8b3d2d024bb23", "scanner": "scanner-primary", "fingerprint": "d3235fe4dab713d4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4895283bb965952a", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/components/CashTrendHero.tsx:50"}, "properties": {"repobilityId": "7cd1c880f60b7368", "scanner": "scanner-primary", "fingerprint": "4895283bb965952a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-17547418f0f2bab6", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/LoadingScreen.tsx:19"}, "properties": {"repobilityId": "3d43cd56bcb8fbcf", "scanner": "scanner-primary", "fingerprint": "17547418f0f2bab6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1cffc7b2cce7bce7", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/CfoAssistantCard.tsx:79"}, "properties": {"repobilityId": "2b427c476f6be321", "scanner": "scanner-primary", "fingerprint": "1cffc7b2cce7bce7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4db8d6ff8bab2bd9", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/BusinessValuationCard.tsx:30"}, "properties": {"repobilityId": "e0aa7b21b01fb2fd", "scanner": "scanner-primary", "fingerprint": "4db8d6ff8bab2bd9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4eade4fcc1951444", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/IncomeExpenseTransactionsDrawer.tsx:4"}, "properties": {"repobilityId": "9bbec46dabf5e981", "scanner": "scanner-primary", "fingerprint": "4eade4fcc1951444", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0316b49427aa6677", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/OwnerDistributionsChart.tsx:300"}, "properties": {"repobilityId": "1e4fa4aabad0f4d5", "scanner": "scanner-primary", "fingerprint": "0316b49427aa6677", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c75e9db24f20c91d", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/DrawerShell.tsx:3"}, "properties": {"repobilityId": "2f022c2235cf4ac9", "scanner": "scanner-primary", "fingerprint": "c75e9db24f20c91d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b1b930f946a59674", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/CashFlowForecastModule.tsx:577"}, "properties": {"repobilityId": "44afb8d16742799a", "scanner": "scanner-primary", "fingerprint": "b1b930f946a59674", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-108a591ad2708d33", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/components/TopExpensesTransactionsDrawer.tsx:4"}, "properties": {"repobilityId": "cb353ae74acc705e", "scanner": "scanner-primary", "fingerprint": "108a591ad2708d33", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-dd2707c76f0884bf", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/CashOnHandCard.tsx:87"}, "properties": {"repobilityId": "6b7bd8bdd817a575", "scanner": "scanner-primary", "fingerprint": "dd2707c76f0884bf", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-50882444202d38cd", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/TopCategoriesCard.tsx:50"}, "properties": {"repobilityId": "925925760333478e", "scanner": "scanner-primary", "fingerprint": "50882444202d38cd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-61c667202d689d2a", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/components/TransactionTable.tsx:4"}, "properties": {"repobilityId": "c7eb27a07f3c1dee", "scanner": "scanner-primary", "fingerprint": "61c667202d689d2a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9b8b90fb8555551c", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/lib/cashFlow.ts:28"}, "properties": {"repobilityId": "f0e53c320f49b08e", "scanner": "scanner-primary", "fingerprint": "9b8b90fb8555551c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fa9f8d2ecb0b6c8a", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/dataSanity.test.ts:123"}, "properties": {"repobilityId": "b7ee724a14031848", "scanner": "scanner-primary", "fingerprint": "fa9f8d2ecb0b6c8a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-13e29edea4a6a21d", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/priorities/ai.ts:223"}, "properties": {"repobilityId": "087dfffa598a7427", "scanner": "scanner-primary", "fingerprint": "13e29edea4a6a21d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b49213de21ba5ee9", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/priorities/copy.ts:228"}, "properties": {"repobilityId": "27ae2fc90316f2ac", "scanner": "scanner-primary", "fingerprint": "b49213de21ba5ee9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0ad54cfd1d2ef9d1", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/priorities/signals.ts:33"}, "properties": {"repobilityId": "11bed3d9ecf5e8fb", "scanner": "scanner-primary", "fingerprint": "0ad54cfd1d2ef9d1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c924274c7ed3f322", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/charts/niceTicks.ts:112"}, "properties": {"repobilityId": "be04865958e4be29", "scanner": "scanner-primary", "fingerprint": "c924274c7ed3f322", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-93ab74a171200ed9", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/commitments/anchor.ts:1"}, "properties": {"repobilityId": "8438ceec65cb21c9", "scanner": "scanner-primary", "fingerprint": "93ab74a171200ed9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-aac9ff850c59f233", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/lib/commitments/groundedSummary.ts:1"}, "properties": {"repobilityId": "b67d0f9782aff9ed", "scanner": "scanner-primary", "fingerprint": "aac9ff850c59f233", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ca0c8e8b8cb888a9", "level": "none", "message": {"text": "Commented-code block (10 lines) in src/lib/commitments/summaryCache.ts:10"}, "properties": {"repobilityId": "24167ffdb2fb31a0", "scanner": "scanner-primary", "fingerprint": "ca0c8e8b8cb888a9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-df939dde5ab241ff", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/commitments/watchMetrics.ts:21"}, "properties": {"repobilityId": "7bb13c4114f9d8a2", "scanner": "scanner-primary", "fingerprint": "df939dde5ab241ff", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c57c65c910319981", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/lib/commitments/reserveWarningCommitment.ts:14"}, "properties": {"repobilityId": "322c1481582ad993", "scanner": "scanner-primary", "fingerprint": "c57c65c910319981", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-390acb75eafe15b4", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/lib/commitments/devSeam.ts:4"}, "properties": {"repobilityId": "d0c89997f03f195a", "scanner": "scanner-primary", "fingerprint": "390acb75eafe15b4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1c6b5467adbc51b3", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/commitments/templater.ts:6"}, "properties": {"repobilityId": "d913311f89e79e6b", "scanner": "scanner-primary", "fingerprint": "1c6b5467adbc51b3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3e872ba2d8508c01", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/lib/commitments/cadence.ts:3"}, "properties": {"repobilityId": "f0cf1d4ebb65f81a", "scanner": "scanner-primary", "fingerprint": "3e872ba2d8508c01", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d1bedc501c9aac0d", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/commitments/copyGrounding.ts:1"}, "properties": {"repobilityId": "411575bc5ccddbd3", "scanner": "scanner-primary", "fingerprint": "d1bedc501c9aac0d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-106db1aa77ee1157", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/commitments/execute.ts:3"}, "properties": {"repobilityId": "b2b4fc48075d4903", "scanner": "scanner-primary", "fingerprint": "106db1aa77ee1157", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-668f00340794aa1d", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/commitments/targetGrounding.ts:4"}, "properties": {"repobilityId": "7e41b72415f10b7b", "scanner": "scanner-primary", "fingerprint": "668f00340794aa1d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-437085fbe51ddc41", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/ui/reserveFooterCopy.ts:3"}, "properties": {"repobilityId": "f192c1d1b89754e1", "scanner": "scanner-primary", "fingerprint": "437085fbe51ddc41", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4b0f74cf22690ca1", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/gym/churnRiskByTenure.ts:3"}, "properties": {"repobilityId": "74b1fcfc1c6d5d55", "scanner": "scanner-primary", "fingerprint": "4b0f74cf22690ca1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8e80aac28e9feaf8", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/gym/memberMovement.test.ts:5"}, "properties": {"repobilityId": "d04743f57b908cab", "scanner": "scanner-primary", "fingerprint": "8e80aac28e9feaf8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-51ba97347a24762d", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/gym/churnRiskByTenure.knownBase.test.ts:5"}, "properties": {"repobilityId": "56b5ef202e7a34c7", "scanner": "scanner-primary", "fingerprint": "51ba97347a24762d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8274ef6f4db4be01", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/gym/wodifyRetentionSync.ts:49"}, "properties": {"repobilityId": "a14024b98eee10db", "scanner": "scanner-primary", "fingerprint": "8274ef6f4db4be01", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-0f0e469352d86c70", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/gym/silentChurn.ts:13"}, "properties": {"repobilityId": "d49f90a0ef15e6a5", "scanner": "scanner-primary", "fingerprint": "0f0e469352d86c70", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b57c8890d2a6be6d", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/gym/silentChurnDuesView.test.ts:3"}, "properties": {"repobilityId": "530c5cbd1908bed2", "scanner": "scanner-primary", "fingerprint": "b57c8890d2a6be6d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-95eef1d03b31854c", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/lib/gym/silentChurnDuesView.ts:3"}, "properties": {"repobilityId": "2d195c7ae60c0053", "scanner": "scanner-primary", "fingerprint": "95eef1d03b31854c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0055b9bd0566634b", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/gym/memberFixture.ts:8"}, "properties": {"repobilityId": "5d273bac9dc32e4d", "scanner": "scanner-primary", "fingerprint": "0055b9bd0566634b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f4d128bfe20e8577", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/gym/retentionAggregateView.ts:3"}, "properties": {"repobilityId": "56cb7ae746b1645b", "scanner": "scanner-primary", "fingerprint": "f4d128bfe20e8577", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-eb5bc3a4d28f6093", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/gym/fetchRetentionAggregate.test.ts:1"}, "properties": {"repobilityId": "17f63a0d44b0ef7a", "scanner": "scanner-primary", "fingerprint": "eb5bc3a4d28f6093", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bfc81ac158733187", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/gym/retentionAggregateView.test.ts:1"}, "properties": {"repobilityId": "7f96c8ea2de553e0", "scanner": "scanner-primary", "fingerprint": "bfc81ac158733187", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-28a9107b15cf27e7", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/gym/retentionRates.ts:3"}, "properties": {"repobilityId": "17d192980bc52051", "scanner": "scanner-primary", "fingerprint": "28a9107b15cf27e7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f567a6afe9f03f49", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/gym/tenureBands.ts:5"}, "properties": {"repobilityId": "2734a98e4b0893ab", "scanner": "scanner-primary", "fingerprint": "f567a6afe9f03f49", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8638eae4f203a7e2", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/lib/gym/wodifyRetentionAggregate.ts:1"}, "properties": {"repobilityId": "c98d7105eb2b0017", "scanner": "scanner-primary", "fingerprint": "8638eae4f203a7e2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-98395d14d41af726", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/gym/fetchRetentionAggregate.ts:3"}, "properties": {"repobilityId": "8961e38a74175472", "scanner": "scanner-primary", "fingerprint": "98395d14d41af726", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b0dcca236d0a6afa", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/gym/fetchRetentionAggregate.ts:243"}, "properties": {"repobilityId": "c4749eab1c321750", "scanner": "scanner-primary", "fingerprint": "b0dcca236d0a6afa", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-aa0b1b99e9ef377f", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/lib/gym/silentChurnLiveView.test.ts:3"}, "properties": {"repobilityId": "19aa53b01225dc80", "scanner": "scanner-primary", "fingerprint": "aa0b1b99e9ef377f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2facfa043a4b6dba", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/lib/gym/memberMovement.ts:3"}, "properties": {"repobilityId": "0ea13821d5953988", "scanner": "scanner-primary", "fingerprint": "2facfa043a4b6dba", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4cc8a78c7f6d086e", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/gym/segmentExplorer.test.ts:16"}, "properties": {"repobilityId": "a87fb5bbb0e5d1d9", "scanner": "scanner-primary", "fingerprint": "4cc8a78c7f6d086e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-380b5290ab8987bc", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/gym/churnRiskByTenure.test.ts:10"}, "properties": {"repobilityId": "6493aadbc49c934e", "scanner": "scanner-primary", "fingerprint": "380b5290ab8987bc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7b74f969da389468", "level": "none", "message": {"text": "Commented-code block (11 lines) in src/lib/gym/segmentExplorer.ts:3"}, "properties": {"repobilityId": "bb91c7bcb6904bae", "scanner": "scanner-primary", "fingerprint": "7b74f969da389468", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3f98238e280aa24f", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/gym/wodifyRetentionAggregate.test.ts:1"}, "properties": {"repobilityId": "02dd402ecf1d3588", "scanner": "scanner-primary", "fingerprint": "3f98238e280aa24f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-04071bf89c532af0", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/forecast/extendComposedProjection.test.ts:99"}, "properties": {"repobilityId": "2f2814e78cacb9c1", "scanner": "scanner-primary", "fingerprint": "04071bf89c532af0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f25ecd441f499877", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/forecast/generateRenewalEventId.ts:8"}, "properties": {"repobilityId": "6df5402f392865a0", "scanner": "scanner-primary", "fingerprint": "f25ecd441f499877", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-596f5fee8f7199b3", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/lib/forecast/generateRenewalEvents.ts:8"}, "properties": {"repobilityId": "f92b358e263ab56e", "scanner": "scanner-primary", "fingerprint": "596f5fee8f7199b3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e14c509a82d71887", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/kpis/digHere.ts:142"}, "properties": {"repobilityId": "88a8684958c679d0", "scanner": "scanner-primary", "fingerprint": "e14c509a82d71887", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-808f0c0aba2484f6", "level": "none", "message": {"text": "Commented-code block (14 lines) in src/lib/kpis/categoryCadence.ts:27"}, "properties": {"repobilityId": "49ffddbcf43dec3c", "scanner": "scanner-primary", "fingerprint": "808f0c0aba2484f6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d91c5db05698a484", "level": "none", "message": {"text": "Commented-code block (11 lines) in src/lib/kpis/sustainabilityRows.ts:6"}, "properties": {"repobilityId": "8615924c17666ef6", "scanner": "scanner-primary", "fingerprint": "d91c5db05698a484", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a17f5f8d9697617e", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/lib/kpis/businessValuation.test.ts:572"}, "properties": {"repobilityId": "4e501823957c6c9a", "scanner": "scanner-primary", "fingerprint": "a17f5f8d9697617e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bb4a21a10bbbdec9", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/lib/kpis/reserveCoverageDelta.test.ts:9"}, "properties": {"repobilityId": "80bb07f8278fb205", "scanner": "scanner-primary", "fingerprint": "bb4a21a10bbbdec9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5e095e9c6fc8aed6", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/kpis/sustainabilityRows.test.ts:62"}, "properties": {"repobilityId": "8c6472fcd314298d", "scanner": "scanner-primary", "fingerprint": "5e095e9c6fc8aed6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-09d4b0bafed7cc5c", "level": "note", "message": {"text": "Legacy-named symbol `flatOld` in src/lib/kpis/cashReserveCalendar.test.ts:108"}, "properties": {"repobilityId": "1e6e36761a50e3bd", "scanner": "scanner-primary", "fingerprint": "09d4b0bafed7cc5c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-c653bbd51deb6442", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/kpis/cashReserveCalendar.test.ts:101"}, "properties": {"repobilityId": "4a96623ecb87cb2f", "scanner": "scanner-primary", "fingerprint": "c653bbd51deb6442", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-987ead467198b54b", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/lib/kpis/efficiencyOpportunities.ts:63"}, "properties": {"repobilityId": "ab6512468c41ea16", "scanner": "scanner-primary", "fingerprint": "987ead467198b54b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0a202ee3afa4865e", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/kpis/compute.ts:827"}, "properties": {"repobilityId": "f1a0a216d181829a", "scanner": "scanner-primary", "fingerprint": "0a202ee3afa4865e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-516916a79adf6767", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/lib/kpis/valuationProjection.ts:16"}, "properties": {"repobilityId": "6cbd5c09dfb49caf", "scanner": "scanner-primary", "fingerprint": "516916a79adf6767", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2cd078faeedc3203", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/lib/kpis/businessValuation.ts:3"}, "properties": {"repobilityId": "1ff750a2fc573354", "scanner": "scanner-primary", "fingerprint": "2cd078faeedc3203", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-33e7b10058a4ef64", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/kpis/efficiencyOpportunities.test.ts:5"}, "properties": {"repobilityId": "ff1d51d2712b785a", "scanner": "scanner-primary", "fingerprint": "33e7b10058a4ef64", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5a5a2524db537ca8", "level": "note", "message": {"text": "Legacy-named symbol `banner__copy` in src/pages/Dashboard.tsx:3740"}, "properties": {"repobilityId": "9aa94c9fbdb66c93", "scanner": "scanner-primary", "fingerprint": "5a5a2524db537ca8", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-04bb25fc399d9021", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/pages/Dashboard.tsx:193"}, "properties": {"repobilityId": "7972e11cae38c696", "scanner": "scanner-primary", "fingerprint": "04bb25fc399d9021", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-05a5a7d87ee2a443", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/context/RetentionSettingsContext.tsx:15"}, "properties": {"repobilityId": "df2ab9366f381953", "scanner": "scanner-primary", "fingerprint": "05a5a7d87ee2a443", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-319e66a630e14977", "level": "none", "message": {"text": "2 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "d838d1fc5d8231c9", "scanner": "scanner-primary", "fingerprint": "319e66a630e14977", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "config-drift"]}}, {"ruleId": "scanner-7064cd9925eeb9c6", "level": "warning", "message": {"text": "Frontend route `/*` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "eb928b698e0c5cc3", "scanner": "scanner-primary", "fingerprint": "7064cd9925eeb9c6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}]}]}