{"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-97242fd8933f4373", "name": "Stray `console.log` in TS/JS \u2014 generate-onboarding-voices.js:249", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 generate-onboarding-voices.js: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-55eea5d5e9b9169e", "name": "TODO/FIXME marker in shipping code \u2014 app/hub/weight.tsx:315", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 app/hub/weight.tsx:315"}, "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-ecd4cffdcc8531e1", "name": "`truncate` class without `title=` for hover reveal \u2014 web/src/app/(os)/os/habits/page.tsx:151", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 web/src/app/(os)/os/habits/page.tsx:151"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d0ea46dd4248e62f", "name": "`truncate` class without `title=` for hover reveal \u2014 web/src/app/(os)/os/journal/page.tsx:146", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 web/src/app/(os)/os/journal/page.tsx:146"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a5be55edacdb5ce0", "name": "`truncate` class without `title=` for hover reveal \u2014 web/src/app/(os)/os/analytics/AnalyticsClient.tsx:276", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 web/src/app/(os)/os/analytics/AnalyticsClient.tsx:276"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9b0a7423c542268e", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 web/src/components/ui/Celebration.tsx:300", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 web/src/components/ui/Celebration.tsx:300"}, "fullDescription": {"text": "Open XSS surface unless the input is provably trusted. Replace with explicit JSX or sanitize via a vetted library.\n\nWhy: OWASP basics. Already partially flagged by the security analyzer.\nRule id: fq.dangerous-html"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-03cb7ad8e048956a", "name": "Stray `console.log` in TS/JS \u2014 web/src/db/sqlite/sqlite-worker.ts:62", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 web/src/db/sqlite/sqlite-worker.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-025a3526b4414fe7", "name": "TODO/FIXME marker in shipping code \u2014 mobile-saas/app/(auth)/login.tsx:37", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 mobile-saas/app/(auth)/login.tsx:37"}, "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-191d4a9767eedbfc", "name": "TODO/FIXME marker in shipping code \u2014 mobile-saas/app/(auth)/forgot-password.tsx:28", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 mobile-saas/app/(auth)/forgot-password.tsx:28"}, "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-294df233316f28f7", "name": "Insecure pattern 'exec_used' in src/db/sqlite/migrator.ts:13", "shortDescription": {"text": "Insecure pattern 'exec_used' in src/db/sqlite/migrator.ts:13"}, "fullDescription": {"text": "Found a known-risky pattern (exec_used). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a988680ed4670f62", "name": "Insecure pattern 'exec_used' in web/CLAUDE.md:276", "shortDescription": {"text": "Insecure pattern 'exec_used' in web/CLAUDE.md:276"}, "fullDescription": {"text": "Found a known-risky pattern (exec_used). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-bd7736e01e229eae", "name": "Insecure pattern 'dangerous_innerhtml' in web/src/components/ui/Celebration.tsx:300", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in web/src/components/ui/Celebration.tsx:300"}, "fullDescription": {"text": "Found a known-risky pattern (dangerous_innerhtml). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ca27fd5ff596f7c5", "name": "Insecure pattern 'exec_used' in web/src/db/sqlite/sqlite-worker.ts:30", "shortDescription": {"text": "Insecure pattern 'exec_used' in web/src/db/sqlite/sqlite-worker.ts:30"}, "fullDescription": {"text": "Found a known-risky pattern (exec_used). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c459bb6b11bbe0d2", "name": "Insecure pattern 'exec_used' in web/src/db/sqlite/migrator.ts:13", "shortDescription": {"text": "Insecure pattern 'exec_used' in web/src/db/sqlite/migrator.ts:13"}, "fullDescription": {"text": "Found a known-risky pattern (exec_used). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2d94a64329779077", "name": "Insecure pattern 'exec_used' in web/src/db/sqlite/client-types.ts:14", "shortDescription": {"text": "Insecure pattern 'exec_used' in web/src/db/sqlite/client-types.ts:14"}, "fullDescription": {"text": "Found a known-risky pattern (exec_used). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1cfd021532dfd7a7", "name": "Insecure pattern 'exec_used' in mobile-saas/src/db/sqlite/migrator.ts:13", "shortDescription": {"text": "Insecure pattern 'exec_used' in mobile-saas/src/db/sqlite/migrator.ts:13"}, "fullDescription": {"text": "Found a known-risky pattern (exec_used). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-05648831575524ad", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "android-actions/setup-android@v3 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": "medium", "confidence": 1.0}}, {"id": "scanner-33dfce00db7d271e", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "android-actions/setup-android@v3 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": "medium", "confidence": 1.0}}, {"id": "scanner-b573889654d37e73", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/setup-node@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-edba90d420724284", "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-00c9996645291adf", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "android-actions/setup-android@v3 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": "medium", "confidence": 1.0}}, {"id": "scanner-350babdba9f2f097", "name": "Very large file: app/hub/workouts.tsx (2658 lines)", "shortDescription": {"text": "Very large file: app/hub/workouts.tsx (2658 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-f0d725b3a58e9af4", "name": "Very large file: app/hub/sleep.tsx (1723 lines)", "shortDescription": {"text": "Very large file: app/hub/sleep.tsx (1723 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-19cab3549583e724", "name": "Very large file: app/hub/cashflow.tsx (1662 lines)", "shortDescription": {"text": "Very large file: app/hub/cashflow.tsx (1662 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-5651785e0abe31d8", "name": "Very large file: src/types/supabase.ts (2066 lines)", "shortDescription": {"text": "Very large file: src/types/supabase.ts (2066 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-dc664657043a29a0", "name": "Very large file: shared/types/supabase.ts (2066 lines)", "shortDescription": {"text": "Very large file: shared/types/supabase.ts (2066 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-2e01944e09435c16", "name": "Very large file: mobile-saas/src/types/supabase.ts (2066 lines)", "shortDescription": {"text": "Very large file: mobile-saas/src/types/supabase.ts (2066 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6893a6c8b0861585", "name": "Very low test-to-source ratio", "shortDescription": {"text": "Very low test-to-source ratio"}, "fullDescription": {"text": "43 test file(s) for 777 source file(s) (ratio 0.06). Consider adding integration or unit tests for critical paths."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "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 30 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 113 placeholder/mock markers across 58 source files. This often means the repo looks complete while core flows still use generated scaffolding or fake data."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2d0c7b7ab8f8aacf", "name": "Critical user flow still appears backed by mock or placeholder data", "shortDescription": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "fullDescription": {"text": "A payment/auth/admin/order/billing-style flow contains mock, fake, TODO, dummy, or placeholder markers in runtime source. In the Fable corpus this is a high-leverage completeness smell: the app can look finished while the money, identity, or tenant flow is still scaffolded."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3e3497e7a098a8e0", "name": "Agent authority lacks a verifier contract: shared/CLAUDE.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: shared/CLAUDE.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4c571ccb122e1d0a", "name": "Agent instruction/config may expose a secret: web/CLAUDE.md", "shortDescription": {"text": "Agent instruction/config may expose a secret: web/CLAUDE.md"}, "fullDescription": {"text": "Agent-facing files are routinely pasted into LLM/tool contexts. Move literal tokens, keys, and passwords into a secret manager or document them as placeholders only."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-09238f0f294ebf5d", "name": "Agent authority lacks a verifier contract: web/CLAUDE.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: web/CLAUDE.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-04f63a227f017e85", "name": "Agent instruction/config may expose a secret: web/.claude/skills/titan-web/skill.md", "shortDescription": {"text": "Agent instruction/config may expose a secret: web/.claude/skills/titan-web/skill.md"}, "fullDescription": {"text": "Agent-facing files are routinely pasted into LLM/tool contexts. Move literal tokens, keys, and passwords into a secret manager or document them as placeholders only."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0362f4b166787e62", "name": "Agent authority lacks a verifier contract: web/.claude/skills/titan-web/skill.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: web/.claude/skills/titan-web/skill.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a66d962b7a56c2d4", "name": "Agent instruction/config may expose a secret: mobile-saas/.claude/skills/titan-mobile-saas/SKILL.md", "shortDescription": {"text": "Agent instruction/config may expose a secret: mobile-saas/.claude/skills/titan-mobile-saas/SKILL.md"}, "fullDescription": {"text": "Agent-facing files are routinely pasted into LLM/tool contexts. Move literal tokens, keys, and passwords into a secret manager or document them as placeholders only."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ddf5f7921e54fe70", "name": "Agent instruction/config may expose a secret: .claude/skills/titan-dev/SKILL.md", "shortDescription": {"text": "Agent instruction/config may expose a secret: .claude/skills/titan-dev/SKILL.md"}, "fullDescription": {"text": "Agent-facing files are routinely pasted into LLM/tool contexts. Move literal tokens, keys, and passwords into a secret manager or document them as placeholders only."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4b2dea7c197cb96d", "name": "Legacy-named symbol `eleven_multilingual_v2` in generate-onboarding-voices.js:27", "shortDescription": {"text": "Legacy-named symbol `eleven_multilingual_v2` in generate-onboarding-voices.js:27"}, "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-105856c6fbafc9bd", "name": "`fetch()` without try/.catch or AbortSignal \u2014 generate-onboarding-voices.js:211", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 generate-onboarding-voices.js:211"}, "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-97f341b65c1dfd0b", "name": "Commented-code block (6 lines) in jest.config.js:17", "shortDescription": {"text": "Commented-code block (6 lines) in jest.config.js:17"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e5d5cd58de729b4c", "name": "Commented-code block (5 lines) in app/_layout.tsx:20", "shortDescription": {"text": "Commented-code block (5 lines) in app/_layout.tsx:20"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-96e90d4ef9bcf77f", "name": "Commented-code block (5 lines) in app/(tabs)/track.tsx:61", "shortDescription": {"text": "Commented-code block (5 lines) in app/(tabs)/track.tsx:61"}, "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-f4a31a28124cbe7c", "name": "Commented-code block (7 lines) in app/(tabs)/index.tsx:270", "shortDescription": {"text": "Commented-code block (7 lines) in app/(tabs)/index.tsx:270"}, "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-1fd505983f3e7691", "name": "Commented-code block (5 lines) in app/hub/workouts.tsx:1214", "shortDescription": {"text": "Commented-code block (5 lines) in app/hub/workouts.tsx:1214"}, "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-eb28cbc62266bf5c", "name": "Commented-code block (6 lines) in app/hub/sleep.tsx:44", "shortDescription": {"text": "Commented-code block (6 lines) in app/hub/sleep.tsx:44"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2a3411bafc3c6829", "name": "Commented-code block (5 lines) in app/hub/settings.tsx:400", "shortDescription": {"text": "Commented-code block (5 lines) in app/hub/settings.tsx:400"}, "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-ba34aa9af5311f46", "name": "Commented-code block (8 lines) in app/(auth)/login.tsx:53", "shortDescription": {"text": "Commented-code block (8 lines) in app/(auth)/login.tsx:53"}, "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-431a46d89db1c0bb", "name": "Commented-code block (5 lines) in app/(auth)/email-login.tsx:65", "shortDescription": {"text": "Commented-code block (5 lines) in app/(auth)/email-login.tsx:65"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c04d8b877df95a75", "name": "Commented-code block (5 lines) in app/(auth)/signup.tsx:72", "shortDescription": {"text": "Commented-code block (5 lines) in app/(auth)/signup.tsx:72"}, "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-38fa3a4ceb5b4d7f", "name": "Commented-code block (5 lines) in src/hooks/queries/useProfile.ts:109", "shortDescription": {"text": "Commented-code block (5 lines) in src/hooks/queries/useProfile.ts:109"}, "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-ead80fe8fc3f9069", "name": "Commented-code block (6 lines) in src/components/v2/walkthrough/WalkthroughSummary.tsx:97", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/v2/walkthrough/WalkthroughSummary.tsx:97"}, "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-2b10a4afae5657a7", "name": "Commented-code block (5 lines) in src/components/v2/story/FirstLaunchCinematic.tsx:164", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/v2/story/FirstLaunchCinematic.tsx:164"}, "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-314dc31e88487449", "name": "Commented-code block (5 lines) in src/components/v2/onboarding/BeatReveal.tsx:259", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/v2/onboarding/BeatReveal.tsx:259"}, "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-a6dc37a910464319", "name": "Commented-code block (7 lines) in src/components/v2/onboarding/CinematicOnboarding.tsx:142", "shortDescription": {"text": "Commented-code block (7 lines) in src/components/v2/onboarding/CinematicOnboarding.tsx: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-c29fd3a9536c3238", "name": "Commented-code block (6 lines) in src/db/gamification.ts:3", "shortDescription": {"text": "Commented-code block (6 lines) in src/db/gamification.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-4b57b7361900cac6", "name": "Commented-code block (7 lines) in src/db/sqlite/column-types.ts:7", "shortDescription": {"text": "Commented-code block (7 lines) in src/db/sqlite/column-types.ts:7"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-425db3d63559436c", "name": "Commented-code block (7 lines) in src/db/sqlite/migrator.ts:28", "shortDescription": {"text": "Commented-code block (7 lines) in src/db/sqlite/migrator.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-0564e67729ea9e92", "name": "Commented-code block (6 lines) in src/lib/scoring-v2.ts:28", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/scoring-v2.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-c5d50d6b55713bd7", "name": "Commented-code block (5 lines) in src/lib/protocol-integrity.ts:147", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/protocol-integrity.ts:147"}, "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-aecf1aaed2317065", "name": "Commented-code block (5 lines) in src/lib/achievement-checker.ts:235", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/achievement-checker.ts:235"}, "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-7f89bce005a1e648", "name": "Commented-code block (5 lines) in src/lib/sleep-helpers.ts:76", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/sleep-helpers.ts:76"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e279e86a3ee7bf3d", "name": "Commented-code block (5 lines) in src/lib/supabase.ts:51", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/supabase.ts:51"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f616593199251755", "name": "Commented-code block (5 lines) in src/services/tasks.ts:185", "shortDescription": {"text": "Commented-code block (5 lines) in src/services/tasks.ts:185"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a14a8744ef308b65", "name": "Commented-code block (5 lines) in src/services/boss-challenges.ts:93", "shortDescription": {"text": "Commented-code block (5 lines) in src/services/boss-challenges.ts:93"}, "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-3bfb48bb4eb16ab2", "name": "Commented-code block (5 lines) in src/__tests__/lib/skill-tree-evaluator.test.ts:491", "shortDescription": {"text": "Commented-code block (5 lines) in src/__tests__/lib/skill-tree-evaluator.test.ts:491"}, "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-a406e25b0cb9c193", "name": "Commented-code block (8 lines) in src/__tests__/services/tasks.test.ts:258", "shortDescription": {"text": "Commented-code block (8 lines) in src/__tests__/services/tasks.test.ts:258"}, "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-7120f8f0dbac1aa5", "name": "Commented-code block (6 lines) in shared/db/gamification.ts:3", "shortDescription": {"text": "Commented-code block (6 lines) in shared/db/gamification.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-fd457d0e2f388706", "name": "Commented-code block (6 lines) in shared/lib/scoring-v2.ts:28", "shortDescription": {"text": "Commented-code block (6 lines) in shared/lib/scoring-v2.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-158f333c300b1bf7", "name": "Commented-code block (5 lines) in web/eslint.config.mjs:1", "shortDescription": {"text": "Commented-code block (5 lines) in web/eslint.config.mjs: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-54188e14abb62ab1", "name": "Commented-code block (6 lines) in web/src/app/(os)/components/StreakSettlementGate.tsx:29", "shortDescription": {"text": "Commented-code block (6 lines) in web/src/app/(os)/components/StreakSettlementGate.tsx:29"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-833974e6190ee6cd", "name": "Commented-code block (5 lines) in web/src/app/(os)/components/DailyPlanningProvider.tsx:46", "shortDescription": {"text": "Commented-code block (5 lines) in web/src/app/(os)/components/DailyPlanningProvider.tsx:46"}, "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-4de050d995b5ad1b", "name": "Commented-code block (5 lines) in web/src/app/(os)/os/focus/page.tsx:55", "shortDescription": {"text": "Commented-code block (5 lines) in web/src/app/(os)/os/focus/page.tsx:55"}, "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-4662d527112f8dc9", "name": "Commented-code block (5 lines) in web/src/app/(os)/os/settings/page.tsx:22", "shortDescription": {"text": "Commented-code block (5 lines) in web/src/app/(os)/os/settings/page.tsx:22"}, "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-cb56495b7984dc8b", "name": "Commented-code block (5 lines) in web/src/sync/restore.ts:81", "shortDescription": {"text": "Commented-code block (5 lines) in web/src/sync/restore.ts:81"}, "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-d33e8c0870a13bea", "name": "Commented-code block (5 lines) in web/src/sync/flush-dirty.ts:117", "shortDescription": {"text": "Commented-code block (5 lines) in web/src/sync/flush-dirty.ts:117"}, "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-fb16983025f76223", "name": "Commented-code block (6 lines) in web/src/hooks/queries/useTasks.ts:114", "shortDescription": {"text": "Commented-code block (6 lines) in web/src/hooks/queries/useTasks.ts:114"}, "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-5b8cf0cc380d0ba3", "name": "Commented-code block (5 lines) in web/src/layouts/OSLayout.tsx:22", "shortDescription": {"text": "Commented-code block (5 lines) in web/src/layouts/OSLayout.tsx:22"}, "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-a8948e753ff97ac1", "name": "Commented-code block (5 lines) in web/src/components/FirstRunPullGate.tsx:51", "shortDescription": {"text": "Commented-code block (5 lines) in web/src/components/FirstRunPullGate.tsx:51"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0600a9f7aaea5c52", "name": "Commented-code block (5 lines) in web/src/db/sqlite/service-helpers.ts:450", "shortDescription": {"text": "Commented-code block (5 lines) in web/src/db/sqlite/service-helpers.ts:450"}, "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-03396efa24e1a601", "name": "Commented-code block (7 lines) in web/src/db/sqlite/column-types.ts:7", "shortDescription": {"text": "Commented-code block (7 lines) in web/src/db/sqlite/column-types.ts:7"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6091755cde825bbf", "name": "Commented-code block (5 lines) in web/src/db/sqlite/migrator.ts:32", "shortDescription": {"text": "Commented-code block (5 lines) in web/src/db/sqlite/migrator.ts:32"}, "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-73bfa9db20a16ece", "name": "Commented-code block (6 lines) in web/src/lib/auth.tsx:75", "shortDescription": {"text": "Commented-code block (6 lines) in web/src/lib/auth.tsx:75"}, "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-e736651115aba4ee", "name": "Commented-code block (5 lines) in web/src/lib/scoring.ts:194", "shortDescription": {"text": "Commented-code block (5 lines) in web/src/lib/scoring.ts:194"}, "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-b88b4b684758df6b", "name": "Commented-code block (6 lines) in web/src/services/xp.ts:190", "shortDescription": {"text": "Commented-code block (6 lines) in web/src/services/xp.ts:190"}, "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-b9cec23e6b0accbb", "name": "Commented-code block (5 lines) in mobile-saas/app/(tabs)/profile.tsx:147", "shortDescription": {"text": "Commented-code block (5 lines) in mobile-saas/app/(tabs)/profile.tsx:147"}, "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-307b48f77344203d", "name": "Commented-code block (5 lines) in mobile-saas/app/(auth)/signup.tsx:61", "shortDescription": {"text": "Commented-code block (5 lines) in mobile-saas/app/(auth)/signup.tsx:61"}, "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-17aa44d9bf0f8673", "name": "Commented-code block (5 lines) in mobile-saas/src/sync/restore.ts:81", "shortDescription": {"text": "Commented-code block (5 lines) in mobile-saas/src/sync/restore.ts:81"}, "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-a426013c183747c7", "name": "Commented-code block (5 lines) in mobile-saas/src/sync/flush-dirty.ts:115", "shortDescription": {"text": "Commented-code block (5 lines) in mobile-saas/src/sync/flush-dirty.ts:115"}, "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-06f9a7d7a46bf146", "name": "Commented-code block (5 lines) in mobile-saas/src/stores/useAuthStore.ts:128", "shortDescription": {"text": "Commented-code block (5 lines) in mobile-saas/src/stores/useAuthStore.ts:128"}, "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-cfad4f2bf72ff74b", "name": "Commented-code block (6 lines) in mobile-saas/src/hooks/queries/useTasks.ts:116", "shortDescription": {"text": "Commented-code block (6 lines) in mobile-saas/src/hooks/queries/useTasks.ts:116"}, "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-edd80c08d3f37125", "name": "Commented-code block (5 lines) in mobile-saas/src/components/FirstRunPullGate.tsx:50", "shortDescription": {"text": "Commented-code block (5 lines) in mobile-saas/src/components/FirstRunPullGate.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-b614a3421fdb46fe", "name": "Commented-code block (8 lines) in mobile-saas/src/db/gamification.ts:3", "shortDescription": {"text": "Commented-code block (8 lines) in mobile-saas/src/db/gamification.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-8aa7d4d0bae8fdee", "name": "Commented-code block (5 lines) in mobile-saas/src/db/sqlite/service-helpers.ts:516", "shortDescription": {"text": "Commented-code block (5 lines) in mobile-saas/src/db/sqlite/service-helpers.ts:516"}, "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-f278ecf360eea5d0", "name": "Commented-code block (7 lines) in mobile-saas/src/db/sqlite/column-types.ts:7", "shortDescription": {"text": "Commented-code block (7 lines) in mobile-saas/src/db/sqlite/column-types.ts:7"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5bf3122e08ffbf0e", "name": "Commented-code block (5 lines) in mobile-saas/src/db/sqlite/migrator.ts:32", "shortDescription": {"text": "Commented-code block (5 lines) in mobile-saas/src/db/sqlite/migrator.ts:32"}, "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-9e0d0ff1a94c46f3", "name": "Commented-code block (5 lines) in mobile-saas/src/db/sqlite/migrations/004_add_xp_log.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in mobile-saas/src/db/sqlite/migrations/004_add_xp_log.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-60775626ea36e802", "name": "Commented-code block (5 lines) in mobile-saas/src/lib/protocol-integrity.ts:147", "shortDescription": {"text": "Commented-code block (5 lines) in mobile-saas/src/lib/protocol-integrity.ts:147"}, "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-ae4371f15aef98a8", "name": "Commented-code block (5 lines) in mobile-saas/src/lib/achievement-checker.ts:235", "shortDescription": {"text": "Commented-code block (5 lines) in mobile-saas/src/lib/achievement-checker.ts:235"}, "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-2dedb68b7a72b102", "name": "Commented-code block (5 lines) in mobile-saas/src/lib/sleep-helpers.ts:76", "shortDescription": {"text": "Commented-code block (5 lines) in mobile-saas/src/lib/sleep-helpers.ts:76"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c554eacb04fc5729", "name": "Commented-code block (5 lines) in mobile-saas/src/lib/scoring.ts:198", "shortDescription": {"text": "Commented-code block (5 lines) in mobile-saas/src/lib/scoring.ts:198"}, "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-831e69b513794b62", "name": "Commented-code block (5 lines) in mobile-saas/src/lib/supabase.ts:68", "shortDescription": {"text": "Commented-code block (5 lines) in mobile-saas/src/lib/supabase.ts:68"}, "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-f58a4674f48d11ef", "name": "Commented-code block (6 lines) in mobile-saas/src/services/xp.ts:192", "shortDescription": {"text": "Commented-code block (6 lines) in mobile-saas/src/services/xp.ts:192"}, "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-233329842fb7315a", "name": "Commented-code block (5 lines) in mobile-saas/src/services/boss-challenges.ts:93", "shortDescription": {"text": "Commented-code block (5 lines) in mobile-saas/src/services/boss-challenges.ts:93"}, "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-ce3e2ec8d6cb4cf4", "name": "`fetch()` without try/.catch or AbortSignal \u2014 mobile-saas/supabase/functions/send-push/index.ts:82", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 mobile-saas/supabase/functions/send-push/index.ts:82"}, "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-d0b17c8c07a7421d", "name": "8 env vars used in code but missing from .env.example", "shortDescription": {"text": "8 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `ELEVENLABS_API_KEY`, `EXPO_PUBLIC_SENTRY_DSN`, `MODE`, `VITE_POSTHOG_HOST`, `VITE_POSTHOG_KEY`, `VITE_SENTRY_DSN`, `VITE_SUPABASE_ANON_KEY`, `VITE_SUPABASE_URL`. Add them (with a placeholder/comment) to .env.example so onboarding doesn't break."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c2b716e8e6a6c871", "name": "Frontend route `/pricing` has no Link/navigate to it \u2014 web/src/App.tsx", "shortDescription": {"text": "Frontend route `/pricing` has no Link/navigate to it \u2014 web/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b881d140a05741b6", "name": "Frontend route `/features` has no Link/navigate to it \u2014 web/src/App.tsx", "shortDescription": {"text": "Frontend route `/features` has no Link/navigate to it \u2014 web/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3d1f9b3fb9facc6a", "name": "Frontend route `/auth/callback` has no Link/navigate to it \u2014 web/src/App.tsx", "shortDescription": {"text": "Frontend route `/auth/callback` has no Link/navigate to it \u2014 web/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-fb66f6f9cbcb4658", "name": "Frontend route `/auth/reset` has no Link/navigate to it \u2014 web/src/App.tsx", "shortDescription": {"text": "Frontend route `/auth/reset` has no Link/navigate to it \u2014 web/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-60810ddbc242a64e", "name": "Frontend route `body` has no Link/navigate to it \u2014 web/src/App.tsx", "shortDescription": {"text": "Frontend route `body` has no Link/navigate to it \u2014 web/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a5f92bba5d4c0d23", "name": "Frontend route `body/nutrition` has no Link/navigate to it \u2014 web/src/App.tsx", "shortDescription": {"text": "Frontend route `body/nutrition` has no Link/navigate to it \u2014 web/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b5549fb94078f867", "name": "Frontend route `body/sleep` has no Link/navigate to it \u2014 web/src/App.tsx", "shortDescription": {"text": "Frontend route `body/sleep` has no Link/navigate to it \u2014 web/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a6e8c1e71a0d989a", "name": "Frontend route `body/weight` has no Link/navigate to it \u2014 web/src/App.tsx", "shortDescription": {"text": "Frontend route `body/weight` has no Link/navigate to it \u2014 web/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-90ddf822c8ccbf3c", "name": "Frontend route `body/workouts` has no Link/navigate to it \u2014 web/src/App.tsx", "shortDescription": {"text": "Frontend route `body/workouts` has no Link/navigate to it \u2014 web/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b34b8d9e184fa2b0", "name": "Frontend route `mind` has no Link/navigate to it \u2014 web/src/App.tsx", "shortDescription": {"text": "Frontend route `mind` has no Link/navigate to it \u2014 web/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d27190d7d87a2ffd", "name": "Frontend route `money` has no Link/navigate to it \u2014 web/src/App.tsx", "shortDescription": {"text": "Frontend route `money` has no Link/navigate to it \u2014 web/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a2baddca111b2f83", "name": "Frontend route `money/cashflow` has no Link/navigate to it \u2014 web/src/App.tsx", "shortDescription": {"text": "Frontend route `money/cashflow` has no Link/navigate to it \u2014 web/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-90c183631a4035b1", "name": "Frontend route `money/deep-work` has no Link/navigate to it \u2014 web/src/App.tsx", "shortDescription": {"text": "Frontend route `money/deep-work` has no Link/navigate to it \u2014 web/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-776dcc215a60bb40", "name": "Frontend route `money/budgets` has no Link/navigate to it \u2014 web/src/App.tsx", "shortDescription": {"text": "Frontend route `money/budgets` has no Link/navigate to it \u2014 web/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2b72fb2a4347f870", "name": "Frontend route `general` has no Link/navigate to it \u2014 web/src/App.tsx", "shortDescription": {"text": "Frontend route `general` has no Link/navigate to it \u2014 web/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-225ff2e728565381", "name": "Frontend route `command` has no Link/navigate to it \u2014 web/src/App.tsx", "shortDescription": {"text": "Frontend route `command` has no Link/navigate to it \u2014 web/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-658b54ace0fcacbb", "name": "Frontend route `analytics` has no Link/navigate to it \u2014 web/src/App.tsx", "shortDescription": {"text": "Frontend route `analytics` has no Link/navigate to it \u2014 web/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-22c0fc51a64365b2", "name": "Frontend route `habits` has no Link/navigate to it \u2014 web/src/App.tsx", "shortDescription": {"text": "Frontend route `habits` has no Link/navigate to it \u2014 web/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f0ec17e18be132f1", "name": "Frontend route `journal` has no Link/navigate to it \u2014 web/src/App.tsx", "shortDescription": {"text": "Frontend route `journal` has no Link/navigate to it \u2014 web/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-85fcda3dd21f457f", "name": "Frontend route `goals` has no Link/navigate to it \u2014 web/src/App.tsx", "shortDescription": {"text": "Frontend route `goals` has no Link/navigate to it \u2014 web/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0c236c553168068f", "name": "Frontend route `achievements` has no Link/navigate to it \u2014 web/src/App.tsx", "shortDescription": {"text": "Frontend route `achievements` has no Link/navigate to it \u2014 web/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-fe4e1ed1c01e104e", "name": "Frontend route `focus` has no Link/navigate to it \u2014 web/src/App.tsx", "shortDescription": {"text": "Frontend route `focus` has no Link/navigate to it \u2014 web/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-88cf01eced5e2d03", "name": "Frontend route `settings` has no Link/navigate to it \u2014 web/src/App.tsx", "shortDescription": {"text": "Frontend route `settings` has no Link/navigate to it \u2014 web/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-8eb8edf7ea33b9cb", "name": "Frontend route `/os` has no Link/navigate to it \u2014 web/src/App.tsx", "shortDescription": {"text": "Frontend route `/os` has no Link/navigate to it \u2014 web/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-019b0bb7c19e648c", "name": "Frontend route `/os/*` has no Link/navigate to it \u2014 web/src/App.tsx", "shortDescription": {"text": "Frontend route `/os/*` has no Link/navigate to it \u2014 web/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/24338"}, "properties": {"repository": "Arun-Sanjay/Titan-Protocol-v2", "repoUrl": "https://github.com/Arun-Sanjay/Titan-Protocol-v2", "branch": "main"}, "results": [{"ruleId": "scanner-97242fd8933f4373", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 generate-onboarding-voices.js:249"}, "properties": {"repobilityId": "235ac2e13e785acc", "scanner": "scanner-primary", "fingerprint": "97242fd8933f4373", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-55eea5d5e9b9169e", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 app/hub/weight.tsx:315"}, "properties": {"repobilityId": "117a038f18c56d34", "scanner": "scanner-primary", "fingerprint": "55eea5d5e9b9169e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-ecd4cffdcc8531e1", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 web/src/app/(os)/os/habits/page.tsx:151"}, "properties": {"repobilityId": "182b3f3fcff8d48f", "scanner": "scanner-primary", "fingerprint": "ecd4cffdcc8531e1", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d0ea46dd4248e62f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 web/src/app/(os)/os/journal/page.tsx:146"}, "properties": {"repobilityId": "d19e5d412c228597", "scanner": "scanner-primary", "fingerprint": "d0ea46dd4248e62f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a5be55edacdb5ce0", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 web/src/app/(os)/os/analytics/AnalyticsClient.tsx:276"}, "properties": {"repobilityId": "1730a69c5b5605fb", "scanner": "scanner-primary", "fingerprint": "a5be55edacdb5ce0", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-9b0a7423c542268e", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 web/src/components/ui/Celebration.tsx:300"}, "properties": {"repobilityId": "9a4238141ed5c382", "scanner": "scanner-primary", "fingerprint": "9b0a7423c542268e", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-03cb7ad8e048956a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 web/src/db/sqlite/sqlite-worker.ts:62"}, "properties": {"repobilityId": "c5531bd42dd75681", "scanner": "scanner-primary", "fingerprint": "03cb7ad8e048956a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-025a3526b4414fe7", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 mobile-saas/app/(auth)/login.tsx:37"}, "properties": {"repobilityId": "ebe91320243862dc", "scanner": "scanner-primary", "fingerprint": "025a3526b4414fe7", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-191d4a9767eedbfc", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 mobile-saas/app/(auth)/forgot-password.tsx:28"}, "properties": {"repobilityId": "489261fe1c0438c3", "scanner": "scanner-primary", "fingerprint": "191d4a9767eedbfc", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-294df233316f28f7", "level": "error", "message": {"text": "Insecure pattern 'exec_used' in src/db/sqlite/migrator.ts:13"}, "properties": {"repobilityId": "10964464582ed38b", "scanner": "scanner-primary", "fingerprint": "294df233316f28f7", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["owasp", "exec_used"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/db/sqlite/migrator.ts"}, "region": {"startLine": 13}}}]}, {"ruleId": "scanner-a988680ed4670f62", "level": "error", "message": {"text": "Insecure pattern 'exec_used' in web/CLAUDE.md:276"}, "properties": {"repobilityId": "2cfd7ae1c205c06e", "scanner": "scanner-primary", "fingerprint": "a988680ed4670f62", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["owasp", "exec_used"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "web/CLAUDE.md"}, "region": {"startLine": 276}}}]}, {"ruleId": "scanner-bd7736e01e229eae", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in web/src/components/ui/Celebration.tsx:300"}, "properties": {"repobilityId": "2654c0bb662d66e8", "scanner": "scanner-primary", "fingerprint": "bd7736e01e229eae", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "web/src/components/ui/Celebration.tsx"}, "region": {"startLine": 300}}}]}, {"ruleId": "scanner-ca27fd5ff596f7c5", "level": "error", "message": {"text": "Insecure pattern 'exec_used' in web/src/db/sqlite/sqlite-worker.ts:30"}, "properties": {"repobilityId": "c35fcdb45fee1ba1", "scanner": "scanner-primary", "fingerprint": "ca27fd5ff596f7c5", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["owasp", "exec_used"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "web/src/db/sqlite/sqlite-worker.ts"}, "region": {"startLine": 30}}}]}, {"ruleId": "scanner-c459bb6b11bbe0d2", "level": "error", "message": {"text": "Insecure pattern 'exec_used' in web/src/db/sqlite/migrator.ts:13"}, "properties": {"repobilityId": "ca30eb70433da5ef", "scanner": "scanner-primary", "fingerprint": "c459bb6b11bbe0d2", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["owasp", "exec_used"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "web/src/db/sqlite/migrator.ts"}, "region": {"startLine": 13}}}]}, {"ruleId": "scanner-2d94a64329779077", "level": "error", "message": {"text": "Insecure pattern 'exec_used' in web/src/db/sqlite/client-types.ts:14"}, "properties": {"repobilityId": "500c0df90a2da9a1", "scanner": "scanner-primary", "fingerprint": "2d94a64329779077", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["owasp", "exec_used"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "web/src/db/sqlite/client-types.ts"}, "region": {"startLine": 14}}}]}, {"ruleId": "scanner-1cfd021532dfd7a7", "level": "error", "message": {"text": "Insecure pattern 'exec_used' in mobile-saas/src/db/sqlite/migrator.ts:13"}, "properties": {"repobilityId": "3eb625188119b7e7", "scanner": "scanner-primary", "fingerprint": "1cfd021532dfd7a7", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["owasp", "exec_used"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "mobile-saas/src/db/sqlite/migrator.ts"}, "region": {"startLine": 13}}}]}, {"ruleId": "scanner-05648831575524ad", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "c6ca0369ca2906de", "scanner": "scanner-primary", "fingerprint": "05648831575524ad", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/mobile-saas-android.yml"}, "region": {"startLine": 79}}}]}, {"ruleId": "scanner-05648831575524ad", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "8eab235eb6de726d", "scanner": "scanner-primary", "fingerprint": "05648831575524ad", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/mobile-saas-android.yml"}, "region": {"startLine": 141}}}]}, {"ruleId": "scanner-33dfce00db7d271e", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "817147fbc23b0a70", "scanner": "scanner-primary", "fingerprint": "33dfce00db7d271e", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/android.yml"}, "region": {"startLine": 81}}}]}, {"ruleId": "scanner-33dfce00db7d271e", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "fe83efe48ab1106c", "scanner": "scanner-primary", "fingerprint": "33dfce00db7d271e", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/android.yml"}, "region": {"startLine": 163}}}]}, {"ruleId": "scanner-b573889654d37e73", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "62c33e6b41d8f129", "scanner": "scanner-primary", "fingerprint": "b573889654d37e73", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "web/.github/workflows/tauri-release.yml"}, "region": {"startLine": 57}}}]}, {"ruleId": "scanner-b573889654d37e73", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "5dd78c6a1a218128", "scanner": "scanner-primary", "fingerprint": "b573889654d37e73", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "web/.github/workflows/tauri-release.yml"}, "region": {"startLine": 63}}}]}, {"ruleId": "scanner-b573889654d37e73", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "8b717ee82170cfbd", "scanner": "scanner-primary", "fingerprint": "b573889654d37e73", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "web/.github/workflows/tauri-release.yml"}, "region": {"startLine": 68}}}]}, {"ruleId": "scanner-edba90d420724284", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "00e6978a1ba29cc1", "scanner": "scanner-primary", "fingerprint": "edba90d420724284", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "web/.github/workflows/tauri-release.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-00c9996645291adf", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "2138146a9eb88ee9", "scanner": "scanner-primary", "fingerprint": "00c9996645291adf", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "mobile-saas/.github/workflows/android-apk.yml"}, "region": {"startLine": 74}}}]}, {"ruleId": "scanner-00c9996645291adf", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "e12c71c9639e3344", "scanner": "scanner-primary", "fingerprint": "00c9996645291adf", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "mobile-saas/.github/workflows/android-apk.yml"}, "region": {"startLine": 133}}}]}, {"ruleId": "scanner-350babdba9f2f097", "level": "note", "message": {"text": "Very large file: app/hub/workouts.tsx (2658 lines)"}, "properties": {"repobilityId": "2277461dc53b01ba", "scanner": "scanner-primary", "fingerprint": "350babdba9f2f097", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-f0d725b3a58e9af4", "level": "note", "message": {"text": "Very large file: app/hub/sleep.tsx (1723 lines)"}, "properties": {"repobilityId": "063567eb8e1dae85", "scanner": "scanner-primary", "fingerprint": "f0d725b3a58e9af4", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-19cab3549583e724", "level": "note", "message": {"text": "Very large file: app/hub/cashflow.tsx (1662 lines)"}, "properties": {"repobilityId": "c76d645a8a5104f4", "scanner": "scanner-primary", "fingerprint": "19cab3549583e724", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-5651785e0abe31d8", "level": "note", "message": {"text": "Very large file: src/types/supabase.ts (2066 lines)"}, "properties": {"repobilityId": "c08e06ee828f07ac", "scanner": "scanner-primary", "fingerprint": "5651785e0abe31d8", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-dc664657043a29a0", "level": "note", "message": {"text": "Very large file: shared/types/supabase.ts (2066 lines)"}, "properties": {"repobilityId": "e4f5bb5ea137a897", "scanner": "scanner-primary", "fingerprint": "dc664657043a29a0", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-2e01944e09435c16", "level": "note", "message": {"text": "Very large file: mobile-saas/src/types/supabase.ts (2066 lines)"}, "properties": {"repobilityId": "d7f22f327ad67b27", "scanner": "scanner-primary", "fingerprint": "2e01944e09435c16", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-6893a6c8b0861585", "level": "warning", "message": {"text": "Very low test-to-source ratio"}, "properties": {"repobilityId": "54a7de3f06314bf0", "scanner": "scanner-primary", "fingerprint": "6893a6c8b0861585", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["tests", "coverage"]}}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "9c9efb0ba5ccef05", "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": "c2cf44edb8907ac7", "scanner": "scanner-primary", "fingerprint": "72b2a6250083a784", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "incomplete", "generated-repo-pattern"]}}, {"ruleId": "scanner-2d0c7b7ab8f8aacf", "level": "warning", "message": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "properties": {"repobilityId": "852aa306078f986a", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-3e3497e7a098a8e0", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: shared/CLAUDE.md"}, "properties": {"repobilityId": "8cf38538aefe3103", "scanner": "scanner-primary", "fingerprint": "3e3497e7a098a8e0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "shared/CLAUDE.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-4c571ccb122e1d0a", "level": "error", "message": {"text": "Agent instruction/config may expose a secret: web/CLAUDE.md"}, "properties": {"repobilityId": "45a744e982c5c640", "scanner": "scanner-primary", "fingerprint": "4c571ccb122e1d0a", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["agent-instructions", "secrets", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "web/CLAUDE.md"}, "region": {"startLine": 428}}}]}, {"ruleId": "scanner-09238f0f294ebf5d", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: web/CLAUDE.md"}, "properties": {"repobilityId": "6bc1c0104d9f5051", "scanner": "scanner-primary", "fingerprint": "09238f0f294ebf5d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "web/CLAUDE.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-04f63a227f017e85", "level": "error", "message": {"text": "Agent instruction/config may expose a secret: web/.claude/skills/titan-web/skill.md"}, "properties": {"repobilityId": "d6b738f2ca8afd7b", "scanner": "scanner-primary", "fingerprint": "04f63a227f017e85", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["agent-instructions", "secrets", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "web/.claude/skills/titan-web/skill.md"}, "region": {"startLine": 177}}}]}, {"ruleId": "scanner-0362f4b166787e62", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: web/.claude/skills/titan-web/skill.md"}, "properties": {"repobilityId": "47e7719bb85a935c", "scanner": "scanner-primary", "fingerprint": "0362f4b166787e62", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "web/.claude/skills/titan-web/skill.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-a66d962b7a56c2d4", "level": "error", "message": {"text": "Agent instruction/config may expose a secret: mobile-saas/.claude/skills/titan-mobile-saas/SKILL.md"}, "properties": {"repobilityId": "22ac5600368c3fce", "scanner": "scanner-primary", "fingerprint": "a66d962b7a56c2d4", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["agent-instructions", "secrets", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "mobile-saas/.claude/skills/titan-mobile-saas/SKILL.md"}, "region": {"startLine": 116}}}]}, {"ruleId": "scanner-ddf5f7921e54fe70", "level": "error", "message": {"text": "Agent instruction/config may expose a secret: .claude/skills/titan-dev/SKILL.md"}, "properties": {"repobilityId": "4f87bcf7e3ec9354", "scanner": "scanner-primary", "fingerprint": "ddf5f7921e54fe70", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["agent-instructions", "secrets", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/titan-dev/SKILL.md"}, "region": {"startLine": 131}}}]}, {"ruleId": "scanner-4b2dea7c197cb96d", "level": "note", "message": {"text": "Legacy-named symbol `eleven_multilingual_v2` in generate-onboarding-voices.js:27"}, "properties": {"repobilityId": "905d9c81522c1f44", "scanner": "scanner-primary", "fingerprint": "4b2dea7c197cb96d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-105856c6fbafc9bd", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 generate-onboarding-voices.js:211"}, "properties": {"repobilityId": "d39da0712a7cca61", "scanner": "scanner-primary", "fingerprint": "105856c6fbafc9bd", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-97f341b65c1dfd0b", "level": "none", "message": {"text": "Commented-code block (6 lines) in jest.config.js:17"}, "properties": {"repobilityId": "250f92fe9aa42534", "scanner": "scanner-primary", "fingerprint": "97f341b65c1dfd0b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e5d5cd58de729b4c", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/_layout.tsx:20"}, "properties": {"repobilityId": "cd4095db179d6483", "scanner": "scanner-primary", "fingerprint": "e5d5cd58de729b4c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-96e90d4ef9bcf77f", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/(tabs)/track.tsx:61"}, "properties": {"repobilityId": "cc1050648025dde8", "scanner": "scanner-primary", "fingerprint": "96e90d4ef9bcf77f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f4a31a28124cbe7c", "level": "none", "message": {"text": "Commented-code block (7 lines) in app/(tabs)/index.tsx:270"}, "properties": {"repobilityId": "d5816d48cda92edf", "scanner": "scanner-primary", "fingerprint": "f4a31a28124cbe7c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1fd505983f3e7691", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/hub/workouts.tsx:1214"}, "properties": {"repobilityId": "0f471a9643297a94", "scanner": "scanner-primary", "fingerprint": "1fd505983f3e7691", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-eb28cbc62266bf5c", "level": "none", "message": {"text": "Commented-code block (6 lines) in app/hub/sleep.tsx:44"}, "properties": {"repobilityId": "44fef09bd1207206", "scanner": "scanner-primary", "fingerprint": "eb28cbc62266bf5c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2a3411bafc3c6829", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/hub/settings.tsx:400"}, "properties": {"repobilityId": "c342c887ac55a4a5", "scanner": "scanner-primary", "fingerprint": "2a3411bafc3c6829", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ba34aa9af5311f46", "level": "none", "message": {"text": "Commented-code block (8 lines) in app/(auth)/login.tsx:53"}, "properties": {"repobilityId": "23665a41ee888219", "scanner": "scanner-primary", "fingerprint": "ba34aa9af5311f46", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-431a46d89db1c0bb", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/(auth)/email-login.tsx:65"}, "properties": {"repobilityId": "3f058152ca18d1de", "scanner": "scanner-primary", "fingerprint": "431a46d89db1c0bb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c04d8b877df95a75", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/(auth)/signup.tsx:72"}, "properties": {"repobilityId": "3fa5f1712405a718", "scanner": "scanner-primary", "fingerprint": "c04d8b877df95a75", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-38fa3a4ceb5b4d7f", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/hooks/queries/useProfile.ts:109"}, "properties": {"repobilityId": "d3e76bd6d7787adb", "scanner": "scanner-primary", "fingerprint": "38fa3a4ceb5b4d7f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ead80fe8fc3f9069", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/v2/walkthrough/WalkthroughSummary.tsx:97"}, "properties": {"repobilityId": "6bb1c8e4168540e2", "scanner": "scanner-primary", "fingerprint": "ead80fe8fc3f9069", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2b10a4afae5657a7", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/v2/story/FirstLaunchCinematic.tsx:164"}, "properties": {"repobilityId": "d87c4e012ec53be9", "scanner": "scanner-primary", "fingerprint": "2b10a4afae5657a7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-314dc31e88487449", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/v2/onboarding/BeatReveal.tsx:259"}, "properties": {"repobilityId": "549a955dc9120acc", "scanner": "scanner-primary", "fingerprint": "314dc31e88487449", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a6dc37a910464319", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/components/v2/onboarding/CinematicOnboarding.tsx:142"}, "properties": {"repobilityId": "f9230b12ddd23138", "scanner": "scanner-primary", "fingerprint": "a6dc37a910464319", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c29fd3a9536c3238", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/db/gamification.ts:3"}, "properties": {"repobilityId": "e98e99bf7e311e35", "scanner": "scanner-primary", "fingerprint": "c29fd3a9536c3238", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4b57b7361900cac6", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/db/sqlite/column-types.ts:7"}, "properties": {"repobilityId": "bc063111cf607234", "scanner": "scanner-primary", "fingerprint": "4b57b7361900cac6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-425db3d63559436c", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/db/sqlite/migrator.ts:28"}, "properties": {"repobilityId": "c9779a33e8aa2019", "scanner": "scanner-primary", "fingerprint": "425db3d63559436c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0564e67729ea9e92", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/scoring-v2.ts:28"}, "properties": {"repobilityId": "398f14f18488af90", "scanner": "scanner-primary", "fingerprint": "0564e67729ea9e92", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c5d50d6b55713bd7", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/protocol-integrity.ts:147"}, "properties": {"repobilityId": "907515b6e87b40f8", "scanner": "scanner-primary", "fingerprint": "c5d50d6b55713bd7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-aecf1aaed2317065", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/achievement-checker.ts:235"}, "properties": {"repobilityId": "a09d88bc3f8c580e", "scanner": "scanner-primary", "fingerprint": "aecf1aaed2317065", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7f89bce005a1e648", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/sleep-helpers.ts:76"}, "properties": {"repobilityId": "5fe6b2786ba25c51", "scanner": "scanner-primary", "fingerprint": "7f89bce005a1e648", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e279e86a3ee7bf3d", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/supabase.ts:51"}, "properties": {"repobilityId": "196a70b688ac4875", "scanner": "scanner-primary", "fingerprint": "e279e86a3ee7bf3d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f616593199251755", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/services/tasks.ts:185"}, "properties": {"repobilityId": "61ca0048eb069ec3", "scanner": "scanner-primary", "fingerprint": "f616593199251755", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a14a8744ef308b65", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/services/boss-challenges.ts:93"}, "properties": {"repobilityId": "989f72f5ab8f59d2", "scanner": "scanner-primary", "fingerprint": "a14a8744ef308b65", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3bfb48bb4eb16ab2", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/__tests__/lib/skill-tree-evaluator.test.ts:491"}, "properties": {"repobilityId": "2d4411e08b94adae", "scanner": "scanner-primary", "fingerprint": "3bfb48bb4eb16ab2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a406e25b0cb9c193", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/__tests__/services/tasks.test.ts:258"}, "properties": {"repobilityId": "66a1079d4a6b8846", "scanner": "scanner-primary", "fingerprint": "a406e25b0cb9c193", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7120f8f0dbac1aa5", "level": "none", "message": {"text": "Commented-code block (6 lines) in shared/db/gamification.ts:3"}, "properties": {"repobilityId": "1d67005278cdabaf", "scanner": "scanner-primary", "fingerprint": "7120f8f0dbac1aa5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fd457d0e2f388706", "level": "none", "message": {"text": "Commented-code block (6 lines) in shared/lib/scoring-v2.ts:28"}, "properties": {"repobilityId": "4f31ab4ea649dd2f", "scanner": "scanner-primary", "fingerprint": "fd457d0e2f388706", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-158f333c300b1bf7", "level": "none", "message": {"text": "Commented-code block (5 lines) in web/eslint.config.mjs:1"}, "properties": {"repobilityId": "6c0fa72bd379b742", "scanner": "scanner-primary", "fingerprint": "158f333c300b1bf7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-54188e14abb62ab1", "level": "none", "message": {"text": "Commented-code block (6 lines) in web/src/app/(os)/components/StreakSettlementGate.tsx:29"}, "properties": {"repobilityId": "771abb693780ba31", "scanner": "scanner-primary", "fingerprint": "54188e14abb62ab1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-833974e6190ee6cd", "level": "none", "message": {"text": "Commented-code block (5 lines) in web/src/app/(os)/components/DailyPlanningProvider.tsx:46"}, "properties": {"repobilityId": "c56a3c96372ef96d", "scanner": "scanner-primary", "fingerprint": "833974e6190ee6cd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4de050d995b5ad1b", "level": "none", "message": {"text": "Commented-code block (5 lines) in web/src/app/(os)/os/focus/page.tsx:55"}, "properties": {"repobilityId": "1adc4bef0a60fdc7", "scanner": "scanner-primary", "fingerprint": "4de050d995b5ad1b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4662d527112f8dc9", "level": "none", "message": {"text": "Commented-code block (5 lines) in web/src/app/(os)/os/settings/page.tsx:22"}, "properties": {"repobilityId": "fedb29641a2968d8", "scanner": "scanner-primary", "fingerprint": "4662d527112f8dc9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cb56495b7984dc8b", "level": "none", "message": {"text": "Commented-code block (5 lines) in web/src/sync/restore.ts:81"}, "properties": {"repobilityId": "bbf020ee41baa3ae", "scanner": "scanner-primary", "fingerprint": "cb56495b7984dc8b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d33e8c0870a13bea", "level": "none", "message": {"text": "Commented-code block (5 lines) in web/src/sync/flush-dirty.ts:117"}, "properties": {"repobilityId": "94f6dc242be51666", "scanner": "scanner-primary", "fingerprint": "d33e8c0870a13bea", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fb16983025f76223", "level": "none", "message": {"text": "Commented-code block (6 lines) in web/src/hooks/queries/useTasks.ts:114"}, "properties": {"repobilityId": "600259de42274347", "scanner": "scanner-primary", "fingerprint": "fb16983025f76223", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5b8cf0cc380d0ba3", "level": "none", "message": {"text": "Commented-code block (5 lines) in web/src/layouts/OSLayout.tsx:22"}, "properties": {"repobilityId": "03cac9b63520e044", "scanner": "scanner-primary", "fingerprint": "5b8cf0cc380d0ba3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a8948e753ff97ac1", "level": "none", "message": {"text": "Commented-code block (5 lines) in web/src/components/FirstRunPullGate.tsx:51"}, "properties": {"repobilityId": "5ee08b4a48d61f11", "scanner": "scanner-primary", "fingerprint": "a8948e753ff97ac1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0600a9f7aaea5c52", "level": "none", "message": {"text": "Commented-code block (5 lines) in web/src/db/sqlite/service-helpers.ts:450"}, "properties": {"repobilityId": "c1a254a1077ef016", "scanner": "scanner-primary", "fingerprint": "0600a9f7aaea5c52", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-03396efa24e1a601", "level": "none", "message": {"text": "Commented-code block (7 lines) in web/src/db/sqlite/column-types.ts:7"}, "properties": {"repobilityId": "e7c13b47be52c7dd", "scanner": "scanner-primary", "fingerprint": "03396efa24e1a601", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6091755cde825bbf", "level": "none", "message": {"text": "Commented-code block (5 lines) in web/src/db/sqlite/migrator.ts:32"}, "properties": {"repobilityId": "40a2a3aa69236c51", "scanner": "scanner-primary", "fingerprint": "6091755cde825bbf", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-73bfa9db20a16ece", "level": "none", "message": {"text": "Commented-code block (6 lines) in web/src/lib/auth.tsx:75"}, "properties": {"repobilityId": "dae10635c0584cb2", "scanner": "scanner-primary", "fingerprint": "73bfa9db20a16ece", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e736651115aba4ee", "level": "none", "message": {"text": "Commented-code block (5 lines) in web/src/lib/scoring.ts:194"}, "properties": {"repobilityId": "62d247024b7cfb91", "scanner": "scanner-primary", "fingerprint": "e736651115aba4ee", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b88b4b684758df6b", "level": "none", "message": {"text": "Commented-code block (6 lines) in web/src/services/xp.ts:190"}, "properties": {"repobilityId": "22e11407e7d307df", "scanner": "scanner-primary", "fingerprint": "b88b4b684758df6b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b9cec23e6b0accbb", "level": "none", "message": {"text": "Commented-code block (5 lines) in mobile-saas/app/(tabs)/profile.tsx:147"}, "properties": {"repobilityId": "ee9789ad6dc56f0b", "scanner": "scanner-primary", "fingerprint": "b9cec23e6b0accbb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-307b48f77344203d", "level": "none", "message": {"text": "Commented-code block (5 lines) in mobile-saas/app/(auth)/signup.tsx:61"}, "properties": {"repobilityId": "68ec23ffde80fafd", "scanner": "scanner-primary", "fingerprint": "307b48f77344203d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-17aa44d9bf0f8673", "level": "none", "message": {"text": "Commented-code block (5 lines) in mobile-saas/src/sync/restore.ts:81"}, "properties": {"repobilityId": "b56305be0ddabd87", "scanner": "scanner-primary", "fingerprint": "17aa44d9bf0f8673", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a426013c183747c7", "level": "none", "message": {"text": "Commented-code block (5 lines) in mobile-saas/src/sync/flush-dirty.ts:115"}, "properties": {"repobilityId": "14fa30adc51e1d79", "scanner": "scanner-primary", "fingerprint": "a426013c183747c7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-06f9a7d7a46bf146", "level": "none", "message": {"text": "Commented-code block (5 lines) in mobile-saas/src/stores/useAuthStore.ts:128"}, "properties": {"repobilityId": "49cc876626a59be3", "scanner": "scanner-primary", "fingerprint": "06f9a7d7a46bf146", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cfad4f2bf72ff74b", "level": "none", "message": {"text": "Commented-code block (6 lines) in mobile-saas/src/hooks/queries/useTasks.ts:116"}, "properties": {"repobilityId": "fdacaac141af36f0", "scanner": "scanner-primary", "fingerprint": "cfad4f2bf72ff74b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-edd80c08d3f37125", "level": "none", "message": {"text": "Commented-code block (5 lines) in mobile-saas/src/components/FirstRunPullGate.tsx:50"}, "properties": {"repobilityId": "0ecb52fee79f7c4c", "scanner": "scanner-primary", "fingerprint": "edd80c08d3f37125", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b614a3421fdb46fe", "level": "none", "message": {"text": "Commented-code block (8 lines) in mobile-saas/src/db/gamification.ts:3"}, "properties": {"repobilityId": "ff1fba4530796ee8", "scanner": "scanner-primary", "fingerprint": "b614a3421fdb46fe", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8aa7d4d0bae8fdee", "level": "none", "message": {"text": "Commented-code block (5 lines) in mobile-saas/src/db/sqlite/service-helpers.ts:516"}, "properties": {"repobilityId": "2ccdded2480a0f7d", "scanner": "scanner-primary", "fingerprint": "8aa7d4d0bae8fdee", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f278ecf360eea5d0", "level": "none", "message": {"text": "Commented-code block (7 lines) in mobile-saas/src/db/sqlite/column-types.ts:7"}, "properties": {"repobilityId": "96d06644d3ffe3dd", "scanner": "scanner-primary", "fingerprint": "f278ecf360eea5d0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5bf3122e08ffbf0e", "level": "none", "message": {"text": "Commented-code block (5 lines) in mobile-saas/src/db/sqlite/migrator.ts:32"}, "properties": {"repobilityId": "54047b5713d917b7", "scanner": "scanner-primary", "fingerprint": "5bf3122e08ffbf0e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9e0d0ff1a94c46f3", "level": "none", "message": {"text": "Commented-code block (5 lines) in mobile-saas/src/db/sqlite/migrations/004_add_xp_log.ts:1"}, "properties": {"repobilityId": "c53aebff6af6101d", "scanner": "scanner-primary", "fingerprint": "9e0d0ff1a94c46f3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-60775626ea36e802", "level": "none", "message": {"text": "Commented-code block (5 lines) in mobile-saas/src/lib/protocol-integrity.ts:147"}, "properties": {"repobilityId": "3d34f51edeea54c7", "scanner": "scanner-primary", "fingerprint": "60775626ea36e802", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ae4371f15aef98a8", "level": "none", "message": {"text": "Commented-code block (5 lines) in mobile-saas/src/lib/achievement-checker.ts:235"}, "properties": {"repobilityId": "a32ccbcf48c38c6f", "scanner": "scanner-primary", "fingerprint": "ae4371f15aef98a8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2dedb68b7a72b102", "level": "none", "message": {"text": "Commented-code block (5 lines) in mobile-saas/src/lib/sleep-helpers.ts:76"}, "properties": {"repobilityId": "a8b683419d2b8840", "scanner": "scanner-primary", "fingerprint": "2dedb68b7a72b102", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c554eacb04fc5729", "level": "none", "message": {"text": "Commented-code block (5 lines) in mobile-saas/src/lib/scoring.ts:198"}, "properties": {"repobilityId": "cae50578d8fe12a5", "scanner": "scanner-primary", "fingerprint": "c554eacb04fc5729", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-831e69b513794b62", "level": "none", "message": {"text": "Commented-code block (5 lines) in mobile-saas/src/lib/supabase.ts:68"}, "properties": {"repobilityId": "85578ff52f6c7105", "scanner": "scanner-primary", "fingerprint": "831e69b513794b62", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f58a4674f48d11ef", "level": "none", "message": {"text": "Commented-code block (6 lines) in mobile-saas/src/services/xp.ts:192"}, "properties": {"repobilityId": "b95cff148cc4273d", "scanner": "scanner-primary", "fingerprint": "f58a4674f48d11ef", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-233329842fb7315a", "level": "none", "message": {"text": "Commented-code block (5 lines) in mobile-saas/src/services/boss-challenges.ts:93"}, "properties": {"repobilityId": "cd7a206ebd85b386", "scanner": "scanner-primary", "fingerprint": "233329842fb7315a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ce3e2ec8d6cb4cf4", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 mobile-saas/supabase/functions/send-push/index.ts:82"}, "properties": {"repobilityId": "837548de2ef46507", "scanner": "scanner-primary", "fingerprint": "ce3e2ec8d6cb4cf4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d0b17c8c07a7421d", "level": "note", "message": {"text": "8 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "17fe720e8247f9df", "scanner": "scanner-primary", "fingerprint": "d0b17c8c07a7421d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "config-drift"]}}, {"ruleId": "scanner-c2b716e8e6a6c871", "level": "warning", "message": {"text": "Frontend route `/pricing` has no Link/navigate to it \u2014 web/src/App.tsx"}, "properties": {"repobilityId": "8e76cb1d7440c703", "scanner": "scanner-primary", "fingerprint": "c2b716e8e6a6c871", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-b881d140a05741b6", "level": "warning", "message": {"text": "Frontend route `/features` has no Link/navigate to it \u2014 web/src/App.tsx"}, "properties": {"repobilityId": "76848780f651ad7c", "scanner": "scanner-primary", "fingerprint": "b881d140a05741b6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-3d1f9b3fb9facc6a", "level": "warning", "message": {"text": "Frontend route `/auth/callback` has no Link/navigate to it \u2014 web/src/App.tsx"}, "properties": {"repobilityId": "bc98cf0e8c94edc3", "scanner": "scanner-primary", "fingerprint": "3d1f9b3fb9facc6a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-fb66f6f9cbcb4658", "level": "warning", "message": {"text": "Frontend route `/auth/reset` has no Link/navigate to it \u2014 web/src/App.tsx"}, "properties": {"repobilityId": "bfa44a3480845a4f", "scanner": "scanner-primary", "fingerprint": "fb66f6f9cbcb4658", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-60810ddbc242a64e", "level": "warning", "message": {"text": "Frontend route `body` has no Link/navigate to it \u2014 web/src/App.tsx"}, "properties": {"repobilityId": "0d3015088f3bcd27", "scanner": "scanner-primary", "fingerprint": "60810ddbc242a64e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-a5f92bba5d4c0d23", "level": "warning", "message": {"text": "Frontend route `body/nutrition` has no Link/navigate to it \u2014 web/src/App.tsx"}, "properties": {"repobilityId": "ccc04bfbb0a1a580", "scanner": "scanner-primary", "fingerprint": "a5f92bba5d4c0d23", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-b5549fb94078f867", "level": "warning", "message": {"text": "Frontend route `body/sleep` has no Link/navigate to it \u2014 web/src/App.tsx"}, "properties": {"repobilityId": "d93c801e58d3f213", "scanner": "scanner-primary", "fingerprint": "b5549fb94078f867", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-a6e8c1e71a0d989a", "level": "warning", "message": {"text": "Frontend route `body/weight` has no Link/navigate to it \u2014 web/src/App.tsx"}, "properties": {"repobilityId": "deec30184ced36bb", "scanner": "scanner-primary", "fingerprint": "a6e8c1e71a0d989a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-90ddf822c8ccbf3c", "level": "warning", "message": {"text": "Frontend route `body/workouts` has no Link/navigate to it \u2014 web/src/App.tsx"}, "properties": {"repobilityId": "4905eb0972a56b45", "scanner": "scanner-primary", "fingerprint": "90ddf822c8ccbf3c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-b34b8d9e184fa2b0", "level": "warning", "message": {"text": "Frontend route `mind` has no Link/navigate to it \u2014 web/src/App.tsx"}, "properties": {"repobilityId": "8d840f942a621890", "scanner": "scanner-primary", "fingerprint": "b34b8d9e184fa2b0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-d27190d7d87a2ffd", "level": "warning", "message": {"text": "Frontend route `money` has no Link/navigate to it \u2014 web/src/App.tsx"}, "properties": {"repobilityId": "c7a6ff146f25bcb4", "scanner": "scanner-primary", "fingerprint": "d27190d7d87a2ffd", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-a2baddca111b2f83", "level": "warning", "message": {"text": "Frontend route `money/cashflow` has no Link/navigate to it \u2014 web/src/App.tsx"}, "properties": {"repobilityId": "6c0872a1b9cecbaa", "scanner": "scanner-primary", "fingerprint": "a2baddca111b2f83", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-90c183631a4035b1", "level": "warning", "message": {"text": "Frontend route `money/deep-work` has no Link/navigate to it \u2014 web/src/App.tsx"}, "properties": {"repobilityId": "f0db79cf724fde92", "scanner": "scanner-primary", "fingerprint": "90c183631a4035b1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-776dcc215a60bb40", "level": "warning", "message": {"text": "Frontend route `money/budgets` has no Link/navigate to it \u2014 web/src/App.tsx"}, "properties": {"repobilityId": "ef44d466abdc3340", "scanner": "scanner-primary", "fingerprint": "776dcc215a60bb40", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-2b72fb2a4347f870", "level": "warning", "message": {"text": "Frontend route `general` has no Link/navigate to it \u2014 web/src/App.tsx"}, "properties": {"repobilityId": "e8e3dad6952cdf17", "scanner": "scanner-primary", "fingerprint": "2b72fb2a4347f870", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-225ff2e728565381", "level": "warning", "message": {"text": "Frontend route `command` has no Link/navigate to it \u2014 web/src/App.tsx"}, "properties": {"repobilityId": "846b153819346edf", "scanner": "scanner-primary", "fingerprint": "225ff2e728565381", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-658b54ace0fcacbb", "level": "warning", "message": {"text": "Frontend route `analytics` has no Link/navigate to it \u2014 web/src/App.tsx"}, "properties": {"repobilityId": "0a1915787e84c346", "scanner": "scanner-primary", "fingerprint": "658b54ace0fcacbb", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-22c0fc51a64365b2", "level": "warning", "message": {"text": "Frontend route `habits` has no Link/navigate to it \u2014 web/src/App.tsx"}, "properties": {"repobilityId": "1e2f797fb8a43fe8", "scanner": "scanner-primary", "fingerprint": "22c0fc51a64365b2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-f0ec17e18be132f1", "level": "warning", "message": {"text": "Frontend route `journal` has no Link/navigate to it \u2014 web/src/App.tsx"}, "properties": {"repobilityId": "2b62135f719b95c7", "scanner": "scanner-primary", "fingerprint": "f0ec17e18be132f1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-85fcda3dd21f457f", "level": "warning", "message": {"text": "Frontend route `goals` has no Link/navigate to it \u2014 web/src/App.tsx"}, "properties": {"repobilityId": "7d74f60ea981c038", "scanner": "scanner-primary", "fingerprint": "85fcda3dd21f457f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-0c236c553168068f", "level": "warning", "message": {"text": "Frontend route `achievements` has no Link/navigate to it \u2014 web/src/App.tsx"}, "properties": {"repobilityId": "56e89e591017a8fe", "scanner": "scanner-primary", "fingerprint": "0c236c553168068f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-fe4e1ed1c01e104e", "level": "warning", "message": {"text": "Frontend route `focus` has no Link/navigate to it \u2014 web/src/App.tsx"}, "properties": {"repobilityId": "7c1ec17e35c2ab73", "scanner": "scanner-primary", "fingerprint": "fe4e1ed1c01e104e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-88cf01eced5e2d03", "level": "warning", "message": {"text": "Frontend route `settings` has no Link/navigate to it \u2014 web/src/App.tsx"}, "properties": {"repobilityId": "0b7abb0a2f12db9d", "scanner": "scanner-primary", "fingerprint": "88cf01eced5e2d03", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-8eb8edf7ea33b9cb", "level": "warning", "message": {"text": "Frontend route `/os` has no Link/navigate to it \u2014 web/src/App.tsx"}, "properties": {"repobilityId": "671e116081928ca8", "scanner": "scanner-primary", "fingerprint": "8eb8edf7ea33b9cb", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-019b0bb7c19e648c", "level": "warning", "message": {"text": "Frontend route `/os/*` has no Link/navigate to it \u2014 web/src/App.tsx"}, "properties": {"repobilityId": "0487752f43bde310", "scanner": "scanner-primary", "fingerprint": "019b0bb7c19e648c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}]}]}