{"version": "2.1.0", "$schema": "https://json.schemastore.org/sarif-2.1.0.json", "runs": [{"tool": {"driver": {"name": "Repobility", "informationUri": "https://repobility.com", "rules": [{"id": "scanner-bead75b0f9233e05", "name": "No API endpoints detected", "shortDescription": {"text": "No API endpoints detected"}, "fullDescription": {"text": "The scanner did not find FastAPI/Flask/Express/NestJS/GraphQL/gRPC routes. If this repo exposes APIs, the framework may be unsupported."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b4a76ff26e7c9125", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 app/layout.tsx:68", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 app/layout.tsx:68"}, "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-956f06cf1a689a5f", "name": "`truncate` class without `title=` for hover reveal \u2014 app/dashboard/page.tsx:664", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/dashboard/page.tsx:664"}, "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-0d0dd8b99b850541", "name": "`truncate` class without `title=` for hover reveal \u2014 app/admin/_components/model-picker.tsx:112", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/admin/_components/model-picker.tsx:112"}, "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-ff4c8323b3069494", "name": "`truncate` class without `title=` for hover reveal \u2014 app/admin/settings/page.tsx:126", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/admin/settings/page.tsx:126"}, "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-811c8d53ab707b57", "name": "`truncate` class without `title=` for hover reveal \u2014 app/admin/prompts/page.tsx:114", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/admin/prompts/page.tsx:114"}, "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-ba69e053b38f04fc", "name": "Icon-only button without accessible name \u2014 app/admin/prompts/[slug]/prompt-editor.tsx:206", "shortDescription": {"text": "Icon-only button without accessible name \u2014 app/admin/prompts/[slug]/prompt-editor.tsx:206"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e9a69a1871c898ce", "name": "`truncate` class without `title=` for hover reveal \u2014 app/_components/app-nav.tsx:335", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/_components/app-nav.tsx:335"}, "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-5d8f6e23927c7901", "name": "`truncate` class without `title=` for hover reveal \u2014 app/_components/med-dose-row.tsx:212", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/_components/med-dose-row.tsx:212"}, "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-50bc5e5669de209c", "name": "`truncate` class without `title=` for hover reveal \u2014 app/settings/caregivers/page.tsx:100", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/settings/caregivers/page.tsx:100"}, "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-225c4bfc75a3d4e2", "name": "`truncate` class without `title=` for hover reveal \u2014 app/notifications/page.tsx:98", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/notifications/page.tsx:98"}, "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-acbc57a3ca03f832", "name": "Stray `console.log` in TS/JS \u2014 scripts/sync-openrouter-key.ts:115", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/sync-openrouter-key.ts:115"}, "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-b64040daf615dd06", "name": "Stray `console.log` in TS/JS \u2014 scripts/diagnose-llm.ts:20", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/diagnose-llm.ts:20"}, "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-37042e262082e135", "name": "Stray `console.log` in TS/JS \u2014 scripts/render-amount-chart-preview.tsx:127", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/render-amount-chart-preview.tsx:127"}, "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-d4f179dd6dc8f4fd", "name": "Stray `console.log` in TS/JS \u2014 scripts/sync-drugs.ts:31", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/sync-drugs.ts:31"}, "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-5f160ffb1c2726e3", "name": "Stray `console.log` in TS/JS \u2014 scripts/sync-models.ts:29", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/sync-models.ts:29"}, "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-8ad8937079d3af28", "name": "Stray `console.log` in TS/JS \u2014 scripts/seed-openrouter-key.ts:88", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-openrouter-key.ts:88"}, "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-9bf546e1831e493d", "name": "Insecure pattern 'dangerous_innerhtml' in app/layout.tsx:68", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in app/layout.tsx:68"}, "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-f9f675f858a5dece", "name": "Very large file: app/medications/actions.ts (1770 lines)", "shortDescription": {"text": "Very large file: app/medications/actions.ts (1770 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-ea3b5e389d8c9c0f", "name": "Low test-to-source ratio", "shortDescription": {"text": "Low test-to-source ratio"}, "fullDescription": {"text": "34 tests / 150 src (ratio 0.23)."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-141b30a41e03817b", "name": "No license file detected", "shortDescription": {"text": "No license file detected"}, "fullDescription": {"text": "No LICENSE/COPYING/NOTICE file was found. Generated repositories often omit licensing, which blocks reuse and automated intake."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-faccb9061e9b52a0", "name": "No README detected", "shortDescription": {"text": "No README detected"}, "fullDescription": {"text": "No README file was found. Generated repos without README context are hard to operate, validate, or safely hand off."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3ab5d313dda8e5f9", "name": "Debug logging residue appears in source files", "shortDescription": {"text": "Debug logging residue appears in source files"}, "fullDescription": {"text": "Found 32 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 56 placeholder/mock markers across 29 source files. This often means the repo looks complete while core flows still use generated scaffolding or fake data."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2d0c7b7ab8f8aacf", "name": "Critical user flow still appears backed by mock or placeholder data", "shortDescription": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "fullDescription": {"text": "A payment/auth/admin/order/billing-style flow contains mock, fake, TODO, dummy, or placeholder markers in runtime source. In the Fable corpus this is a high-leverage completeness smell: the app can look finished while the money, identity, or tenant flow is still scaffolded."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b9088664ace7f748", "name": "Composite production-readiness gap", "shortDescription": {"text": "Composite production-readiness gap"}, "fullDescription": {"text": "Multiple low-cost hardening controls are missing together: license, ci, operator-readme. Opus verification showed these co-occurring gaps are a better readiness signal than reading each flag in isolation."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-749d4bc1bd66df5f", "name": "Agent instructions exist but release-hardening basics are missing", "shortDescription": {"text": "Agent instructions exist but release-hardening basics are missing"}, "fullDescription": {"text": "AI-coder instruction files were found, but the repo is missing license, ci, operator-readme. Treat this as a contract gap: the agent is guided, but the generated output is not yet guarded by the controls that make it repeatable."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-bea357a6497a2d5d", "name": "Agent authority lacks a verifier contract: CLAUDE.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: 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-ef3039eab3026577", "name": "Commented-code block (6 lines) in app/dashboard/page.tsx:357", "shortDescription": {"text": "Commented-code block (6 lines) in app/dashboard/page.tsx:357"}, "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-68707303156c1eac", "name": "Commented-code block (5 lines) in app/login/actions.ts:12", "shortDescription": {"text": "Commented-code block (5 lines) in app/login/actions.ts:12"}, "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-4575c0031f27e746", "name": "Commented-code block (5 lines) in app/_components/theme-toggle.tsx:5", "shortDescription": {"text": "Commented-code block (5 lines) in app/_components/theme-toggle.tsx:5"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f0c0df31b157cf4a", "name": "Commented-code block (5 lines) in app/_components/date-wheel.tsx:13", "shortDescription": {"text": "Commented-code block (5 lines) in app/_components/date-wheel.tsx:13"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-358f565509c4b609", "name": "Commented-code block (7 lines) in app/_components/app-nav.tsx:8", "shortDescription": {"text": "Commented-code block (7 lines) in app/_components/app-nav.tsx:8"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-75e67ab340631b62", "name": "Commented-code block (7 lines) in app/_components/schedule-grid.tsx:3", "shortDescription": {"text": "Commented-code block (7 lines) in app/_components/schedule-grid.tsx:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-42d6e65db2cce2a7", "name": "Commented-code block (5 lines) in app/_components/quick-log-otc.tsx:7", "shortDescription": {"text": "Commented-code block (5 lines) in app/_components/quick-log-otc.tsx: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-8370f450d6629471", "name": "Commented-code block (7 lines) in app/_components/amount-in-system-chart.tsx:18", "shortDescription": {"text": "Commented-code block (7 lines) in app/_components/amount-in-system-chart.tsx:18"}, "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-9a12ddbe054f7f46", "name": "Commented-code block (6 lines) in app/_components/med-timeline.tsx:10", "shortDescription": {"text": "Commented-code block (6 lines) in app/_components/med-timeline.tsx:10"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3c82f2dc3010c257", "name": "Commented-code block (5 lines) in app/auth/callback/route.ts:5", "shortDescription": {"text": "Commented-code block (5 lines) in app/auth/callback/route.ts:5"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-515b06d7a0935cb5", "name": "Commented-code block (6 lines) in app/diary/_components/scale-chart.tsx:5", "shortDescription": {"text": "Commented-code block (6 lines) in app/diary/_components/scale-chart.tsx:5"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f1c0af2644149863", "name": "Commented-code block (5 lines) in app/notifications/page.tsx:13", "shortDescription": {"text": "Commented-code block (5 lines) in app/notifications/page.tsx:13"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-78bc56673eb62a64", "name": "Commented-code block (5 lines) in app/report/report-form.tsx:8", "shortDescription": {"text": "Commented-code block (5 lines) in app/report/report-form.tsx:8"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b49052e334cc0f0b", "name": "Commented-code block (5 lines) in app/report/actions.ts:11", "shortDescription": {"text": "Commented-code block (5 lines) in app/report/actions.ts:11"}, "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-57467d3cb5f5e11f", "name": "Commented-code block (5 lines) in app/report/[patientId]/print-button.tsx:3", "shortDescription": {"text": "Commented-code block (5 lines) in app/report/[patientId]/print-button.tsx:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0c9db9b19e4f59a2", "name": "Commented-code block (6 lines) in app/report/[patientId]/page.tsx:17", "shortDescription": {"text": "Commented-code block (6 lines) in app/report/[patientId]/page.tsx: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-43726093eed9a0a9", "name": "Commented-code block (5 lines) in app/medications/[id]/timeline/pk-chart.tsx:5", "shortDescription": {"text": "Commented-code block (5 lines) in app/medications/[id]/timeline/pk-chart.tsx:5"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-96d63bd5ccdf51a1", "name": "Commented-code block (5 lines) in app/medications/[id]/_components/remove-medication.tsx:6", "shortDescription": {"text": "Commented-code block (5 lines) in app/medications/[id]/_components/remove-medication.tsx:6"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b3d6ff0be2be6759", "name": "Commented-code block (6 lines) in app/medications/_components/frequency-control.tsx:10", "shortDescription": {"text": "Commented-code block (6 lines) in app/medications/_components/frequency-control.tsx:10"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2bf2590403ba71d1", "name": "Commented-code block (8 lines) in app/medications/new/medication-form.tsx:343", "shortDescription": {"text": "Commented-code block (8 lines) in app/medications/new/medication-form.tsx:343"}, "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-bfbbd814864f78d6", "name": "Commented-code block (6 lines) in app/medications/new/setup-status.tsx:3", "shortDescription": {"text": "Commented-code block (6 lines) in app/medications/new/setup-status.tsx:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-69c0046753d0f74b", "name": "Commented-code block (6 lines) in scripts/sync-openrouter-key.ts:12", "shortDescription": {"text": "Commented-code block (6 lines) in scripts/sync-openrouter-key.ts:12"}, "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-fe5c1b388faf0bac", "name": "Commented-code block (7 lines) in scripts/diagnose-llm.ts:4", "shortDescription": {"text": "Commented-code block (7 lines) in scripts/diagnose-llm.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-21e7c28474b8ec44", "name": "Commented-code block (5 lines) in scripts/render-amount-chart-preview.tsx:7", "shortDescription": {"text": "Commented-code block (5 lines) in scripts/render-amount-chart-preview.tsx: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-e53eaa231f9bc3a4", "name": "Commented-code block (5 lines) in scripts/seed-openrouter-key.ts:11", "shortDescription": {"text": "Commented-code block (5 lines) in scripts/seed-openrouter-key.ts:11"}, "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-c400c7f61a0756f1", "name": "Commented-code block (5 lines) in lib/openrouter.ts:3", "shortDescription": {"text": "Commented-code block (5 lines) in lib/openrouter.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-c889de59ae03f7d7", "name": "Commented-code block (6 lines) in lib/adherence.ts:4", "shortDescription": {"text": "Commented-code block (6 lines) in lib/adherence.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-17d8aca7d9a2b967", "name": "Commented-code block (5 lines) in lib/supply.ts:3", "shortDescription": {"text": "Commented-code block (5 lines) in lib/supply.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-6a9241dcc707eb16", "name": "Commented-code block (5 lines) in lib/drug-catalogue.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in lib/drug-catalogue.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-03dadcb1d61db8fe", "name": "Commented-code block (6 lines) in lib/notifications.ts:4", "shortDescription": {"text": "Commented-code block (6 lines) in lib/notifications.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6b92ef2abd2c23cc", "name": "Commented-code block (7 lines) in lib/drug-reference.ts:7", "shortDescription": {"text": "Commented-code block (7 lines) in lib/drug-reference.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-8efe4439c6aa9d06", "name": "Commented-code block (8 lines) in lib/diary-templates.ts:4", "shortDescription": {"text": "Commented-code block (8 lines) in lib/diary-templates.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4272fd2de0a698f1", "name": "Commented-code block (5 lines) in lib/diary-trends.ts:3", "shortDescription": {"text": "Commented-code block (5 lines) in lib/diary-trends.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-e470f9e4cb39469f", "name": "Commented-code block (7 lines) in lib/schedule.ts:3", "shortDescription": {"text": "Commented-code block (7 lines) in lib/schedule.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-e588c8cd5cef26ad", "name": "Commented-code block (7 lines) in lib/image-client.ts:3", "shortDescription": {"text": "Commented-code block (7 lines) in lib/image-client.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-f83ed422eec51f38", "name": "Commented-code block (7 lines) in lib/medication-setup.ts:1", "shortDescription": {"text": "Commented-code block (7 lines) in lib/medication-setup.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-dbf82f88a128e79c", "name": "Commented-code block (10 lines) in lib/colours.ts:1", "shortDescription": {"text": "Commented-code block (10 lines) in lib/colours.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-24c8236f3fbad144", "name": "Commented-code block (6 lines) in lib/log.ts:5", "shortDescription": {"text": "Commented-code block (6 lines) in lib/log.ts:5"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-bc698517ad1f0560", "name": "Commented-code block (5 lines) in lib/pk/amountInSystem.ts:3", "shortDescription": {"text": "Commented-code block (5 lines) in lib/pk/amountInSystem.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-25be85c0ecab2b18", "name": "Commented-code block (7 lines) in lib/report/report-data.ts:13", "shortDescription": {"text": "Commented-code block (7 lines) in lib/report/report-data.ts:13"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-424e5c449df22db5", "name": "Commented-code block (7 lines) in lib/report/narrative.ts:8", "shortDescription": {"text": "Commented-code block (7 lines) in lib/report/narrative.ts:8"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-18f77434677e4bb4", "name": "Commented-code block (7 lines) in lib/report/substances.ts:1", "shortDescription": {"text": "Commented-code block (7 lines) in lib/report/substances.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-aa060ef992302350", "name": "Commented-code block (6 lines) in lib/report/pk-chart-data.ts:14", "shortDescription": {"text": "Commented-code block (6 lines) in lib/report/pk-chart-data.ts:14"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}]}}, "automationDetails": {"id": "repobility/24635"}, "properties": {"repository": "blkmrkt4/Doozy-Health", "repoUrl": "https://github.com/blkmrkt4/Doozy-Health", "branch": "main"}, "results": [{"ruleId": "scanner-bead75b0f9233e05", "level": "none", "message": {"text": "No API endpoints detected"}, "properties": {"repobilityId": "0f8bb852027c38f8", "scanner": "scanner-primary", "fingerprint": "bead75b0f9233e05", "layer": "api", "severity": "info", "confidence": 1.0, "tags": ["coverage"]}}, {"ruleId": "scanner-b4a76ff26e7c9125", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 app/layout.tsx:68"}, "properties": {"repobilityId": "6f16eb9b82a2dcd6", "scanner": "scanner-primary", "fingerprint": "b4a76ff26e7c9125", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-956f06cf1a689a5f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/dashboard/page.tsx:664"}, "properties": {"repobilityId": "49f13da6b8e12b22", "scanner": "scanner-primary", "fingerprint": "956f06cf1a689a5f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0d0dd8b99b850541", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/admin/_components/model-picker.tsx:112"}, "properties": {"repobilityId": "a293ef8839ce2b33", "scanner": "scanner-primary", "fingerprint": "0d0dd8b99b850541", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ff4c8323b3069494", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/admin/settings/page.tsx:126"}, "properties": {"repobilityId": "202b7b1d6cc152f1", "scanner": "scanner-primary", "fingerprint": "ff4c8323b3069494", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-811c8d53ab707b57", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/admin/prompts/page.tsx:114"}, "properties": {"repobilityId": "cb3a2ea24cb486eb", "scanner": "scanner-primary", "fingerprint": "811c8d53ab707b57", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ba69e053b38f04fc", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 app/admin/prompts/[slug]/prompt-editor.tsx:206"}, "properties": {"repobilityId": "4db57d2d78121b9c", "scanner": "scanner-primary", "fingerprint": "ba69e053b38f04fc", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-e9a69a1871c898ce", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/_components/app-nav.tsx:335"}, "properties": {"repobilityId": "4293063be8296707", "scanner": "scanner-primary", "fingerprint": "e9a69a1871c898ce", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-5d8f6e23927c7901", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/_components/med-dose-row.tsx:212"}, "properties": {"repobilityId": "e6ae21af5bf2e630", "scanner": "scanner-primary", "fingerprint": "5d8f6e23927c7901", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-50bc5e5669de209c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/settings/caregivers/page.tsx:100"}, "properties": {"repobilityId": "16dc29a7c5ad1a9e", "scanner": "scanner-primary", "fingerprint": "50bc5e5669de209c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-225c4bfc75a3d4e2", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/notifications/page.tsx:98"}, "properties": {"repobilityId": "6e23ea78f6125497", "scanner": "scanner-primary", "fingerprint": "225c4bfc75a3d4e2", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-acbc57a3ca03f832", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/sync-openrouter-key.ts:115"}, "properties": {"repobilityId": "eeea7d98d8f9ca23", "scanner": "scanner-primary", "fingerprint": "acbc57a3ca03f832", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b64040daf615dd06", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/diagnose-llm.ts:20"}, "properties": {"repobilityId": "496d4835457bf08b", "scanner": "scanner-primary", "fingerprint": "b64040daf615dd06", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-37042e262082e135", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/render-amount-chart-preview.tsx:127"}, "properties": {"repobilityId": "240db38573fccbfe", "scanner": "scanner-primary", "fingerprint": "37042e262082e135", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d4f179dd6dc8f4fd", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/sync-drugs.ts:31"}, "properties": {"repobilityId": "fa024807646d6dfe", "scanner": "scanner-primary", "fingerprint": "d4f179dd6dc8f4fd", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5f160ffb1c2726e3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/sync-models.ts:29"}, "properties": {"repobilityId": "b70ab322dfa22db1", "scanner": "scanner-primary", "fingerprint": "5f160ffb1c2726e3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8ad8937079d3af28", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-openrouter-key.ts:88"}, "properties": {"repobilityId": "a755075588601a3a", "scanner": "scanner-primary", "fingerprint": "8ad8937079d3af28", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9bf546e1831e493d", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in app/layout.tsx:68"}, "properties": {"repobilityId": "69d4743587f721a0", "scanner": "scanner-primary", "fingerprint": "9bf546e1831e493d", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app/layout.tsx"}, "region": {"startLine": 68}}}]}, {"ruleId": "scanner-f9f675f858a5dece", "level": "note", "message": {"text": "Very large file: app/medications/actions.ts (1770 lines)"}, "properties": {"repobilityId": "756cc7bf80b76acc", "scanner": "scanner-primary", "fingerprint": "f9f675f858a5dece", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-ea3b5e389d8c9c0f", "level": "note", "message": {"text": "Low test-to-source ratio"}, "properties": {"repobilityId": "ef7b2552cc00a375", "scanner": "scanner-primary", "fingerprint": "ea3b5e389d8c9c0f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["tests"]}}, {"ruleId": "scanner-141b30a41e03817b", "level": "note", "message": {"text": "No license file detected"}, "properties": {"repobilityId": "bf6383e8d30968e3", "scanner": "scanner-primary", "fingerprint": "141b30a41e03817b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["license", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-faccb9061e9b52a0", "level": "note", "message": {"text": "No README detected"}, "properties": {"repobilityId": "a644bbd4e97f563e", "scanner": "scanner-primary", "fingerprint": "faccb9061e9b52a0", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["docs", "readme", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "03bf338475eda0b4", "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": "4c942d938eeec6ae", "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": "9df3cb7f9e72ce32", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-b9088664ace7f748", "level": "warning", "message": {"text": "Composite production-readiness gap"}, "properties": {"repobilityId": "1b8494aa714dfeb1", "scanner": "scanner-primary", "fingerprint": "b9088664ace7f748", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["production-readiness", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-749d4bc1bd66df5f", "level": "warning", "message": {"text": "Agent instructions exist but release-hardening basics are missing"}, "properties": {"repobilityId": "b0d91080a6c28acb", "scanner": "scanner-primary", "fingerprint": "749d4bc1bd66df5f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-bea357a6497a2d5d", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: CLAUDE.md"}, "properties": {"repobilityId": "aae72df3934829ac", "scanner": "scanner-primary", "fingerprint": "bea357a6497a2d5d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "CLAUDE.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-ef3039eab3026577", "level": "none", "message": {"text": "Commented-code block (6 lines) in app/dashboard/page.tsx:357"}, "properties": {"repobilityId": "8650a773b3024858", "scanner": "scanner-primary", "fingerprint": "ef3039eab3026577", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-68707303156c1eac", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/login/actions.ts:12"}, "properties": {"repobilityId": "436bf9651a580d97", "scanner": "scanner-primary", "fingerprint": "68707303156c1eac", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4575c0031f27e746", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/_components/theme-toggle.tsx:5"}, "properties": {"repobilityId": "54663dbda6b5510d", "scanner": "scanner-primary", "fingerprint": "4575c0031f27e746", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f0c0df31b157cf4a", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/_components/date-wheel.tsx:13"}, "properties": {"repobilityId": "02470493d7de764f", "scanner": "scanner-primary", "fingerprint": "f0c0df31b157cf4a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-358f565509c4b609", "level": "none", "message": {"text": "Commented-code block (7 lines) in app/_components/app-nav.tsx:8"}, "properties": {"repobilityId": "a5efa4d2d60112a9", "scanner": "scanner-primary", "fingerprint": "358f565509c4b609", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-75e67ab340631b62", "level": "none", "message": {"text": "Commented-code block (7 lines) in app/_components/schedule-grid.tsx:3"}, "properties": {"repobilityId": "cf48bf59d8cac952", "scanner": "scanner-primary", "fingerprint": "75e67ab340631b62", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-42d6e65db2cce2a7", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/_components/quick-log-otc.tsx:7"}, "properties": {"repobilityId": "7e788dee546d4b06", "scanner": "scanner-primary", "fingerprint": "42d6e65db2cce2a7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8370f450d6629471", "level": "none", "message": {"text": "Commented-code block (7 lines) in app/_components/amount-in-system-chart.tsx:18"}, "properties": {"repobilityId": "a3106004d095cf95", "scanner": "scanner-primary", "fingerprint": "8370f450d6629471", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9a12ddbe054f7f46", "level": "none", "message": {"text": "Commented-code block (6 lines) in app/_components/med-timeline.tsx:10"}, "properties": {"repobilityId": "5f59f5d53379dde9", "scanner": "scanner-primary", "fingerprint": "9a12ddbe054f7f46", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3c82f2dc3010c257", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/auth/callback/route.ts:5"}, "properties": {"repobilityId": "cc60017aae8ecde3", "scanner": "scanner-primary", "fingerprint": "3c82f2dc3010c257", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-515b06d7a0935cb5", "level": "none", "message": {"text": "Commented-code block (6 lines) in app/diary/_components/scale-chart.tsx:5"}, "properties": {"repobilityId": "34134d8ae565d3ce", "scanner": "scanner-primary", "fingerprint": "515b06d7a0935cb5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f1c0af2644149863", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/notifications/page.tsx:13"}, "properties": {"repobilityId": "f91f37220cd7c1e8", "scanner": "scanner-primary", "fingerprint": "f1c0af2644149863", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-78bc56673eb62a64", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/report/report-form.tsx:8"}, "properties": {"repobilityId": "b6d83773f0e1f15e", "scanner": "scanner-primary", "fingerprint": "78bc56673eb62a64", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b49052e334cc0f0b", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/report/actions.ts:11"}, "properties": {"repobilityId": "6a656f62d852de83", "scanner": "scanner-primary", "fingerprint": "b49052e334cc0f0b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-57467d3cb5f5e11f", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/report/[patientId]/print-button.tsx:3"}, "properties": {"repobilityId": "fd332eb8755bda97", "scanner": "scanner-primary", "fingerprint": "57467d3cb5f5e11f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0c9db9b19e4f59a2", "level": "none", "message": {"text": "Commented-code block (6 lines) in app/report/[patientId]/page.tsx:17"}, "properties": {"repobilityId": "da3e7d2c5c3d656f", "scanner": "scanner-primary", "fingerprint": "0c9db9b19e4f59a2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-43726093eed9a0a9", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/medications/[id]/timeline/pk-chart.tsx:5"}, "properties": {"repobilityId": "486159904a223401", "scanner": "scanner-primary", "fingerprint": "43726093eed9a0a9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-96d63bd5ccdf51a1", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/medications/[id]/_components/remove-medication.tsx:6"}, "properties": {"repobilityId": "42eee155c58933e5", "scanner": "scanner-primary", "fingerprint": "96d63bd5ccdf51a1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b3d6ff0be2be6759", "level": "none", "message": {"text": "Commented-code block (6 lines) in app/medications/_components/frequency-control.tsx:10"}, "properties": {"repobilityId": "1f04e7fb752941a9", "scanner": "scanner-primary", "fingerprint": "b3d6ff0be2be6759", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2bf2590403ba71d1", "level": "none", "message": {"text": "Commented-code block (8 lines) in app/medications/new/medication-form.tsx:343"}, "properties": {"repobilityId": "bc194a866eaaf757", "scanner": "scanner-primary", "fingerprint": "2bf2590403ba71d1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bfbbd814864f78d6", "level": "none", "message": {"text": "Commented-code block (6 lines) in app/medications/new/setup-status.tsx:3"}, "properties": {"repobilityId": "63fc1ea1c66cc5b9", "scanner": "scanner-primary", "fingerprint": "bfbbd814864f78d6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-69c0046753d0f74b", "level": "none", "message": {"text": "Commented-code block (6 lines) in scripts/sync-openrouter-key.ts:12"}, "properties": {"repobilityId": "aad28bfab19adb17", "scanner": "scanner-primary", "fingerprint": "69c0046753d0f74b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fe5c1b388faf0bac", "level": "none", "message": {"text": "Commented-code block (7 lines) in scripts/diagnose-llm.ts:4"}, "properties": {"repobilityId": "297cc8cf264b7f8b", "scanner": "scanner-primary", "fingerprint": "fe5c1b388faf0bac", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-21e7c28474b8ec44", "level": "none", "message": {"text": "Commented-code block (5 lines) in scripts/render-amount-chart-preview.tsx:7"}, "properties": {"repobilityId": "7d50635311a661af", "scanner": "scanner-primary", "fingerprint": "21e7c28474b8ec44", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e53eaa231f9bc3a4", "level": "none", "message": {"text": "Commented-code block (5 lines) in scripts/seed-openrouter-key.ts:11"}, "properties": {"repobilityId": "6239697bdaf9427a", "scanner": "scanner-primary", "fingerprint": "e53eaa231f9bc3a4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c400c7f61a0756f1", "level": "none", "message": {"text": "Commented-code block (5 lines) in lib/openrouter.ts:3"}, "properties": {"repobilityId": "d52a97636abc73ff", "scanner": "scanner-primary", "fingerprint": "c400c7f61a0756f1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c889de59ae03f7d7", "level": "none", "message": {"text": "Commented-code block (6 lines) in lib/adherence.ts:4"}, "properties": {"repobilityId": "9eb052e6270a6a80", "scanner": "scanner-primary", "fingerprint": "c889de59ae03f7d7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-17d8aca7d9a2b967", "level": "none", "message": {"text": "Commented-code block (5 lines) in lib/supply.ts:3"}, "properties": {"repobilityId": "4308795adc892e1a", "scanner": "scanner-primary", "fingerprint": "17d8aca7d9a2b967", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6a9241dcc707eb16", "level": "none", "message": {"text": "Commented-code block (5 lines) in lib/drug-catalogue.ts:1"}, "properties": {"repobilityId": "9b95957ca5e359f0", "scanner": "scanner-primary", "fingerprint": "6a9241dcc707eb16", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-03dadcb1d61db8fe", "level": "none", "message": {"text": "Commented-code block (6 lines) in lib/notifications.ts:4"}, "properties": {"repobilityId": "c10bef879a4cfe8f", "scanner": "scanner-primary", "fingerprint": "03dadcb1d61db8fe", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6b92ef2abd2c23cc", "level": "none", "message": {"text": "Commented-code block (7 lines) in lib/drug-reference.ts:7"}, "properties": {"repobilityId": "e23da1908fa92b8e", "scanner": "scanner-primary", "fingerprint": "6b92ef2abd2c23cc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8efe4439c6aa9d06", "level": "none", "message": {"text": "Commented-code block (8 lines) in lib/diary-templates.ts:4"}, "properties": {"repobilityId": "af62c3c77bd5c27f", "scanner": "scanner-primary", "fingerprint": "8efe4439c6aa9d06", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4272fd2de0a698f1", "level": "none", "message": {"text": "Commented-code block (5 lines) in lib/diary-trends.ts:3"}, "properties": {"repobilityId": "cc65ff52179eef12", "scanner": "scanner-primary", "fingerprint": "4272fd2de0a698f1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e470f9e4cb39469f", "level": "none", "message": {"text": "Commented-code block (7 lines) in lib/schedule.ts:3"}, "properties": {"repobilityId": "3bc2fd858710491b", "scanner": "scanner-primary", "fingerprint": "e470f9e4cb39469f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e588c8cd5cef26ad", "level": "none", "message": {"text": "Commented-code block (7 lines) in lib/image-client.ts:3"}, "properties": {"repobilityId": "4e57af7c28408bbd", "scanner": "scanner-primary", "fingerprint": "e588c8cd5cef26ad", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f83ed422eec51f38", "level": "none", "message": {"text": "Commented-code block (7 lines) in lib/medication-setup.ts:1"}, "properties": {"repobilityId": "9d21c8b357d29b1a", "scanner": "scanner-primary", "fingerprint": "f83ed422eec51f38", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-dbf82f88a128e79c", "level": "none", "message": {"text": "Commented-code block (10 lines) in lib/colours.ts:1"}, "properties": {"repobilityId": "356db5fdbcdb34d0", "scanner": "scanner-primary", "fingerprint": "dbf82f88a128e79c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-24c8236f3fbad144", "level": "none", "message": {"text": "Commented-code block (6 lines) in lib/log.ts:5"}, "properties": {"repobilityId": "c83d80493ee63bb7", "scanner": "scanner-primary", "fingerprint": "24c8236f3fbad144", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bc698517ad1f0560", "level": "none", "message": {"text": "Commented-code block (5 lines) in lib/pk/amountInSystem.ts:3"}, "properties": {"repobilityId": "d43be5210650f128", "scanner": "scanner-primary", "fingerprint": "bc698517ad1f0560", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-25be85c0ecab2b18", "level": "none", "message": {"text": "Commented-code block (7 lines) in lib/report/report-data.ts:13"}, "properties": {"repobilityId": "45e7d60317d13d65", "scanner": "scanner-primary", "fingerprint": "25be85c0ecab2b18", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-424e5c449df22db5", "level": "none", "message": {"text": "Commented-code block (7 lines) in lib/report/narrative.ts:8"}, "properties": {"repobilityId": "3297afef2de0a93b", "scanner": "scanner-primary", "fingerprint": "424e5c449df22db5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-18f77434677e4bb4", "level": "none", "message": {"text": "Commented-code block (7 lines) in lib/report/substances.ts:1"}, "properties": {"repobilityId": "795281fe47358a73", "scanner": "scanner-primary", "fingerprint": "18f77434677e4bb4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-aa060ef992302350", "level": "none", "message": {"text": "Commented-code block (6 lines) in lib/report/pk-chart-data.ts:14"}, "properties": {"repobilityId": "d4125d2ab92ac209", "scanner": "scanner-primary", "fingerprint": "aa060ef992302350", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}]}]}