{"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-33b1f179e05dda1b", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/app/page.tsx:237", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/app/page.tsx:237"}, "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-729a13387ac09940", "name": "TODO/FIXME marker in shipping code \u2014 packages/mapper/src/loinc-tables.ts:25", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 packages/mapper/src/loinc-tables.ts:25"}, "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-b729afda6cfe6aa9", "name": "Stray `console.log` in TS/JS \u2014 backend-ts/scripts/bench-upload.ts:76", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 backend-ts/scripts/bench-upload.ts:76"}, "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-b9731650b7cd58b0", "name": "Stray `console.log` in TS/JS \u2014 backend-ts/src/main.ts:219", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 backend-ts/src/main.ts:219"}, "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-5a2ac5e20e3b0663", "name": "Stray `console.log` in TS/JS \u2014 backend-ts/src/core/migrate.ts:19", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 backend-ts/src/core/migrate.ts:19"}, "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-faa134129e5545ff", "name": "Docker base image is tag-pinned but not digest-pinned: node:20-alpine", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: node:20-alpine"}, "fullDescription": {"text": "Container tags can be retagged upstream. Pin production base images to a reviewed digest (`image@sha256:...`) when reproducibility and supply-chain integrity matter."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-71bc81fc5cb13626", "name": "Docker base image is tag-pinned but not digest-pinned: node:20-bookworm-slim", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: node:20-bookworm-slim"}, "fullDescription": {"text": "Container tags can be retagged upstream. Pin production base images to a reviewed digest (`image@sha256:...`) when reproducibility and supply-chain integrity matter."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-aa5acaa49eb8315b", "name": "Containers defined but no K8s/orchestration manifest found", "shortDescription": {"text": "Containers defined but no K8s/orchestration manifest found"}, "fullDescription": {"text": "Repo has Dockerfiles/compose but no Kubernetes/Nomad manifests. If the target deployment is K8s, the manifests may live in a separate ops repo."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4e3f5365862a136b", "name": "Insecure pattern 'weak_hash' in CLAUDE.md:37", "shortDescription": {"text": "Insecure pattern 'weak_hash' in CLAUDE.md:37"}, "fullDescription": {"text": "Found a known-risky pattern (weak_hash). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-55019e0e17fbe668", "name": "Insecure pattern 'node_child_process' in scripts/check-no-real-twid.mjs:16", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/check-no-real-twid.mjs:16"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-52073771fe0b2a10", "name": "Insecure pattern 'direct_innerhtml_assignment' in extension/src/popup/connection.ts:148", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in extension/src/popup/connection.ts:148"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3a87f73f64a66839", "name": "Insecure pattern 'local_storage_auth_token' in extension/src/background/nhi-imaging-jpeg.ts:682", "shortDescription": {"text": "Insecure pattern 'local_storage_auth_token' in extension/src/background/nhi-imaging-jpeg.ts:682"}, "fullDescription": {"text": "Found a known-risky pattern (local_storage_auth_token). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-bbc94025a2669785", "name": "Insecure pattern 'cors_wildcard' in backend-ts/src/main.ts:147", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in backend-ts/src/main.ts:147"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-46c644c6227e4d4a", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "softprops/action-gh-release@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-1838a141491ce38c", "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-560f59d0848699fa", "name": "Very large file: packages/mapper/src/loinc-tables.ts (2043 lines)", "shortDescription": {"text": "Very large file: packages/mapper/src/loinc-tables.ts (2043 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-3e14bfadec995685", "name": "Very large file: packages/mapper/src/observation.ts (2477 lines)", "shortDescription": {"text": "Very large file: packages/mapper/src/observation.ts (2477 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-9b27dd2544f25b1a", "name": "Very large file: extension/tests/adapters.test.js (1709 lines)", "shortDescription": {"text": "Very large file: extension/tests/adapters.test.js (1709 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-9bdac888db9fb51e", "name": "Very large file: extension/src/nhi-adapters.ts (1197 lines)", "shortDescription": {"text": "Very large file: extension/src/nhi-adapters.ts (1197 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-e47bf524fbab3b40", "name": "Very large file: extension/src/background/sync-orchestrator.ts (1498 lines)", "shortDescription": {"text": "Very large file: extension/src/background/sync-orchestrator.ts (1498 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-143f3eece30c1b17", "name": "Very large file: extension/src/background/nhi-imaging-jpeg.ts (2126 lines)", "shortDescription": {"text": "Very large file: extension/src/background/nhi-imaging-jpeg.ts (2126 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-19a940ff4628bd54", "name": "Very large file: backend-ts/tests/unit/bundle-quality.test.ts (5064 lines)", "shortDescription": {"text": "Very large file: backend-ts/tests/unit/bundle-quality.test.ts (5064 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-146166ab4eafc3b0", "name": "Node manifest has dependencies but no lockfile: packages/mapper/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/mapper/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8a2952e09e796fc8", "name": "Node manifest has dependencies but no lockfile: extension/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: extension/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-66ec0871f04d5b8b", "name": "Node manifest has dependencies but no lockfile: backend-ts/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: backend-ts/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3ab5d313dda8e5f9", "name": "Debug logging residue appears in source files", "shortDescription": {"text": "Debug logging residue appears in source files"}, "fullDescription": {"text": "Found 28 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 23 placeholder/mock markers across 8 source files. This often means the repo looks complete while core flows still use generated scaffolding or fake data."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2d0c7b7ab8f8aacf", "name": "Critical user flow still appears backed by mock or placeholder data", "shortDescription": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "fullDescription": {"text": "A payment/auth/admin/order/billing-style flow contains mock, fake, TODO, dummy, or placeholder markers in runtime source. In the Fable corpus this is a high-leverage completeness smell: the app can look finished while the money, identity, or tenant flow is still scaffolded."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-749d4bc1bd66df5f", "name": "Agent instructions exist but release-hardening basics are missing", "shortDescription": {"text": "Agent instructions exist but release-hardening basics are missing"}, "fullDescription": {"text": "AI-coder instruction files were found, but the repo is missing lockfile. Treat this as a contract gap: the agent is guided, but the generated output is not yet guarded by the controls that make it repeatable."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ea8f3013f588db25", "name": "Shallow git history limits provenance confidence", "shortDescription": {"text": "Shallow git history limits provenance confidence"}, "fullDescription": {"text": "The repository is a shallow clone. Origin/evolution analysis cannot distinguish fresh generation, imported legacy code, or long-lived human code with high confidence."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8424db9c75e04ba4", "name": "Very short observed git history", "shortDescription": {"text": "Very short observed git history"}, "fullDescription": {"text": "The repo has multiple source files but two or fewer visible commits. This is not a failure by itself, but it lowers confidence in evolution-based diagnosis."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0ae53f71d676e2d5", "name": "Commented-code block (5 lines) in frontend/app/page.tsx:4", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/app/page.tsx:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e7e09845ac254bf1", "name": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/app/page.tsx:82", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/app/page.tsx: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-c2e0cb0d79f6adb5", "name": "Commented-code block (6 lines) in frontend/app/api/backend/[...path]/route.ts:34", "shortDescription": {"text": "Commented-code block (6 lines) in frontend/app/api/backend/[...path]/route.ts:34"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-755e5a4aaa8c75bc", "name": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/app/api/backend/[...path]/route.ts:95", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/app/api/backend/[...path]/route.ts:95"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2d53628270918563", "name": "Commented-code block (12 lines) in scripts/verify-sync.mjs:9", "shortDescription": {"text": "Commented-code block (12 lines) in scripts/verify-sync.mjs:9"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5975c3688fed6974", "name": "Commented-code block (7 lines) in packages/mapper/src/systems.ts:47", "shortDescription": {"text": "Commented-code block (7 lines) in packages/mapper/src/systems.ts:47"}, "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-2fa7e4c936ec9709", "name": "Commented-code block (8 lines) in packages/mapper/src/imaging-dedup.ts:4", "shortDescription": {"text": "Commented-code block (8 lines) in packages/mapper/src/imaging-dedup.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-6c06d3c6a816b9f3", "name": "Commented-code block (10 lines) in packages/mapper/src/medication.ts:105", "shortDescription": {"text": "Commented-code block (10 lines) in packages/mapper/src/medication.ts:105"}, "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-d7b217978243c79e", "name": "Commented-code block (7 lines) in packages/mapper/src/diagnostic-report.ts:36", "shortDescription": {"text": "Commented-code block (7 lines) in packages/mapper/src/diagnostic-report.ts:36"}, "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-5d7458ce94f9b8b0", "name": "Commented-code block (13 lines) in packages/mapper/src/parsers.ts:39", "shortDescription": {"text": "Commented-code block (13 lines) in packages/mapper/src/parsers.ts:39"}, "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-239a399fa2526f7b", "name": "Commented-code block (6 lines) in packages/mapper/src/loinc-tables.ts:12", "shortDescription": {"text": "Commented-code block (6 lines) in packages/mapper/src/loinc-tables.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-2795fcf1ce42eb68", "name": "Commented-code block (5 lines) in packages/mapper/src/document-reference.ts:37", "shortDescription": {"text": "Commented-code block (5 lines) in packages/mapper/src/document-reference.ts:37"}, "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-3b0d7e5d164ed897", "name": "Commented-code block (5 lines) in packages/mapper/src/procedure.ts:29", "shortDescription": {"text": "Commented-code block (5 lines) in packages/mapper/src/procedure.ts: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-7a1651f010e202d7", "name": "Commented-code block (5 lines) in packages/mapper/src/patient.ts:17", "shortDescription": {"text": "Commented-code block (5 lines) in packages/mapper/src/patient.ts: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-bb74f0ea7e370157", "name": "Commented-code block (5 lines) in packages/mapper/src/observation.ts:45", "shortDescription": {"text": "Commented-code block (5 lines) in packages/mapper/src/observation.ts:45"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0595709bd7b97fae", "name": "Commented-code block (6 lines) in packages/mapper/src/encounter.ts:13", "shortDescription": {"text": "Commented-code block (6 lines) in packages/mapper/src/encounter.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-da2b6e749d6d5a5e", "name": "Commented-code block (5 lines) in packages/mapper/src/condition.ts:59", "shortDescription": {"text": "Commented-code block (5 lines) in packages/mapper/src/condition.ts:59"}, "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-8129f20f30a9b6ae", "name": "Commented-code block (11 lines) in packages/mapper/src/link.ts:61", "shortDescription": {"text": "Commented-code block (11 lines) in packages/mapper/src/link.ts: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-ade78fcd951bb258", "name": "Commented-code block (11 lines) in extension/vitest.config.js:3", "shortDescription": {"text": "Commented-code block (11 lines) in extension/vitest.config.js: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-ff5880349cececdc", "name": "Commented-code block (7 lines) in extension/tests/adapters.test.js:3", "shortDescription": {"text": "Commented-code block (7 lines) in extension/tests/adapters.test.js: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-1758e3d8e9e56fb1", "name": "Commented-code block (7 lines) in extension/tests/endpoints.test.js:3", "shortDescription": {"text": "Commented-code block (7 lines) in extension/tests/endpoints.test.js: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-5ac3f8bd2e5ade0c", "name": "Commented-code block (6 lines) in extension/tests/fixtures.snapshot.test.js:3", "shortDescription": {"text": "Commented-code block (6 lines) in extension/tests/fixtures.snapshot.test.js: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-1fa0d59f0d63964a", "name": "Commented-code block (5 lines) in extension/tests/imaging-list-status.test.js:7", "shortDescription": {"text": "Commented-code block (5 lines) in extension/tests/imaging-list-status.test.js: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-e975c2e02efacca6", "name": "Commented-code block (6 lines) in extension/src/nhi-adapters.ts:7", "shortDescription": {"text": "Commented-code block (6 lines) in extension/src/nhi-adapters.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-ffbca1035b2fc2a6", "name": "`fetch()` without try/.catch or AbortSignal \u2014 extension/src/nhi-adapters.ts:719", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 extension/src/nhi-adapters.ts:719"}, "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-fae838c3336d8075", "name": "Commented-code block (6 lines) in extension/src/background.ts:10", "shortDescription": {"text": "Commented-code block (6 lines) in extension/src/background.ts:10"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-692de86851cd1217", "name": "Legacy-named symbol `inpatient_legacy` in extension/src/nhi-endpoints.ts:73", "shortDescription": {"text": "Legacy-named symbol `inpatient_legacy` in extension/src/nhi-endpoints.ts:73"}, "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-4402b1a2fbe04a14", "name": "Commented-code block (6 lines) in extension/src/nhi-endpoints.ts:4", "shortDescription": {"text": "Commented-code block (6 lines) in extension/src/nhi-endpoints.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-657d38443ed07485", "name": "`fetch()` without try/.catch or AbortSignal \u2014 extension/src/nhi-endpoints.ts:206", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 extension/src/nhi-endpoints.ts:206"}, "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-a41170829cef75e9", "name": "Commented-code block (6 lines) in extension/src/popup.ts:3", "shortDescription": {"text": "Commented-code block (6 lines) in extension/src/popup.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-d3ad4737757bceea", "name": "Commented-code block (8 lines) in extension/src/popup/tooltip.ts:3", "shortDescription": {"text": "Commented-code block (8 lines) in extension/src/popup/tooltip.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-7ef9ab11d1caf3f7", "name": "Commented-code block (8 lines) in extension/src/popup/data-state.ts:6", "shortDescription": {"text": "Commented-code block (8 lines) in extension/src/popup/data-state.ts:6"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8a845000c752d9d7", "name": "`fetch()` without try/.catch or AbortSignal \u2014 extension/src/popup/data-state.ts:212", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 extension/src/popup/data-state.ts:212"}, "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-acf64118ee98c70d", "name": "Commented-code block (9 lines) in extension/src/popup/status.ts:21", "shortDescription": {"text": "Commented-code block (9 lines) in extension/src/popup/status.ts:21"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ffa4a35da0562f1d", "name": "Commented-code block (7 lines) in extension/src/popup/imaging-prep-banner.ts:8", "shortDescription": {"text": "Commented-code block (7 lines) in extension/src/popup/imaging-prep-banner.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-7c5b062c3fcc4bf2", "name": "Commented-code block (5 lines) in extension/src/popup/connection.ts:7", "shortDescription": {"text": "Commented-code block (5 lines) in extension/src/popup/connection.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-bf9544f53f9453db", "name": "`fetch()` without try/.catch or AbortSignal \u2014 extension/src/popup/connection.ts:264", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 extension/src/popup/connection.ts:264"}, "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-7ee9a5d510fd100f", "name": "Commented-code block (9 lines) in extension/src/popup/step-logic.ts:12", "shortDescription": {"text": "Commented-code block (9 lines) in extension/src/popup/step-logic.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-229fe4a888eefb9a", "name": "Commented-code block (6 lines) in extension/src/popup/els.ts:6", "shortDescription": {"text": "Commented-code block (6 lines) in extension/src/popup/els.ts:6"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f48a632d109a16f9", "name": "Commented-code block (5 lines) in extension/src/popup/sync-client.ts:3", "shortDescription": {"text": "Commented-code block (5 lines) in extension/src/popup/sync-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-0989f4655fa4032a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 extension/src/popup/sync-client.ts:169", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 extension/src/popup/sync-client.ts:169"}, "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-31db257b393a01cf", "name": "Commented-code block (5 lines) in extension/src/popup/wizard.ts:3", "shortDescription": {"text": "Commented-code block (5 lines) in extension/src/popup/wizard.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-7bb9ac59b14786e7", "name": "Commented-code block (6 lines) in extension/src/popup/utils.ts:72", "shortDescription": {"text": "Commented-code block (6 lines) in extension/src/popup/utils.ts: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-4e1bedf422f9472b", "name": "Commented-code block (5 lines) in extension/src/popup/constants.ts:5", "shortDescription": {"text": "Commented-code block (5 lines) in extension/src/popup/constants.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-f11b285a4af06d20", "name": "Commented-code block (10 lines) in extension/src/popup/state.ts:13", "shortDescription": {"text": "Commented-code block (10 lines) in extension/src/popup/state.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-b5c627247bcae407", "name": "Commented-code block (5 lines) in extension/src/popup/patient-form.ts:21", "shortDescription": {"text": "Commented-code block (5 lines) in extension/src/popup/patient-form.ts:21"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-972687ab1e17f091", "name": "Commented-code block (5 lines) in extension/src/popup/sync-range.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in extension/src/popup/sync-range.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-a978fd92571de033", "name": "Commented-code block (10 lines) in extension/src/popup/bundle.ts:3", "shortDescription": {"text": "Commented-code block (10 lines) in extension/src/popup/bundle.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-1b3c654e36286d55", "name": "Commented-code block (7 lines) in extension/src/background/auth.ts:8", "shortDescription": {"text": "Commented-code block (7 lines) in extension/src/background/auth.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-6f01990899c3e2be", "name": "Commented-code block (5 lines) in extension/src/background/sync-orchestrator.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in extension/src/background/sync-orchestrator.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-6d05af29a09a07a7", "name": "`fetch()` without try/.catch or AbortSignal \u2014 extension/src/background/sync-orchestrator.ts:580", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 extension/src/background/sync-orchestrator.ts:580"}, "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-f1bf7148b1609a94", "name": "Commented-code block (5 lines) in extension/src/background/nhi-imaging-jpeg.ts:3", "shortDescription": {"text": "Commented-code block (5 lines) in extension/src/background/nhi-imaging-jpeg.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-d9941174e06fb711", "name": "`fetch()` without try/.catch or AbortSignal \u2014 extension/src/background/nhi-imaging-jpeg.ts:1757", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 extension/src/background/nhi-imaging-jpeg.ts:1757"}, "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-09ea1a7b7300aaf4", "name": "Commented-code block (5 lines) in extension/src/background/badge.ts:3", "shortDescription": {"text": "Commented-code block (5 lines) in extension/src/background/badge.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-e4530ee5dff2cf4c", "name": "`fetch()` without try/.catch or AbortSignal \u2014 extension/src/background/badge.ts:31", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 extension/src/background/badge.ts:31"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b1357390df6d0830", "name": "Commented-code block (8 lines) in extension/src/background/imaging-prep-poll.ts:10", "shortDescription": {"text": "Commented-code block (8 lines) in extension/src/background/imaging-prep-poll.ts:10"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-33298e81775a85da", "name": "Commented-code block (5 lines) in extension/src/background/sync-state.ts:3", "shortDescription": {"text": "Commented-code block (5 lines) in extension/src/background/sync-state.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-2bddbb2d18285541", "name": "Commented-code block (8 lines) in extension/src/background/constants.ts:17", "shortDescription": {"text": "Commented-code block (8 lines) in extension/src/background/constants.ts: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-58941cfc609d5b11", "name": "Commented-code block (7 lines) in extension/src/background/nhi-list-fetch.ts:11", "shortDescription": {"text": "Commented-code block (7 lines) in extension/src/background/nhi-list-fetch.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-b7cc56fea5caee12", "name": "Commented-code block (11 lines) in extension/src/background/backend-upload.ts:1", "shortDescription": {"text": "Commented-code block (11 lines) in extension/src/background/backend-upload.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-2fdd43023a791805", "name": "`fetch()` without try/.catch or AbortSignal \u2014 extension/src/background/backend-upload.ts:18", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 extension/src/background/backend-upload.ts:18"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-26a3703619f585eb", "name": "Commented-code block (5 lines) in extension/src/background/s02-detail.ts:5", "shortDescription": {"text": "Commented-code block (5 lines) in extension/src/background/s02-detail.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-c76562b6be122805", "name": "Commented-code block (6 lines) in extension/src/background/patient-override.ts:46", "shortDescription": {"text": "Commented-code block (6 lines) in extension/src/background/patient-override.ts: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-873b8f03c2dfa3e6", "name": "Commented-code block (5 lines) in extension/src/background/nhi-detail-fetchers.ts:6", "shortDescription": {"text": "Commented-code block (5 lines) in extension/src/background/nhi-detail-fetchers.ts:6"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2238c41602560b58", "name": "`fetch()` without try/.catch or AbortSignal \u2014 extension/src/background/nhi-detail-fetchers.ts:329", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 extension/src/background/nhi-detail-fetchers.ts:329"}, "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-4118b3a52f558b4b", "name": "Commented-code block (5 lines) in extension/src/background/storage-migration.ts:14", "shortDescription": {"text": "Commented-code block (5 lines) in extension/src/background/storage-migration.ts:14"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-363b250983a79424", "name": "Legacy-named symbol `inpatient_legacy` in extension/src/background/bundle.ts:43", "shortDescription": {"text": "Legacy-named symbol `inpatient_legacy` in extension/src/background/bundle.ts:43"}, "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-6dc3faa3b4955ebe", "name": "Commented-code block (9 lines) in extension/src/background/bundle.ts:41", "shortDescription": {"text": "Commented-code block (9 lines) in extension/src/background/bundle.ts:41"}, "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-643964b2b4baf949", "name": "Commented-code block (6 lines) in extension/src/background/discharge-summary-fetcher.ts:3", "shortDescription": {"text": "Commented-code block (6 lines) in extension/src/background/discharge-summary-fetcher.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-0540b1653b6ec766", "name": "Commented-code block (7 lines) in extension/src/background/imaging-list-status.ts:3", "shortDescription": {"text": "Commented-code block (7 lines) in extension/src/background/imaging-list-status.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-caacf98f5471d2d6", "name": "Commented-code block (5 lines) in backend-ts/tests/unit/bundle-quality.test.ts:489", "shortDescription": {"text": "Commented-code block (5 lines) in backend-ts/tests/unit/bundle-quality.test.ts:489"}, "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-8ba571fd7e7ec1ee", "name": "Commented-code block (5 lines) in backend-ts/tests/unit/link.test.ts:115", "shortDescription": {"text": "Commented-code block (5 lines) in backend-ts/tests/unit/link.test.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-99d5a68f379093f5", "name": "Commented-code block (5 lines) in backend-ts/tests/unit/parsers.test.ts:102", "shortDescription": {"text": "Commented-code block (5 lines) in backend-ts/tests/unit/parsers.test.ts:102"}, "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-415565bdf61aef42", "name": "Commented-code block (5 lines) in backend-ts/tests/unit/imaging-dedup.test.ts:42", "shortDescription": {"text": "Commented-code block (5 lines) in backend-ts/tests/unit/imaging-dedup.test.ts:42"}, "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-de1aaf1c26bd30dd", "name": "Commented-code block (5 lines) in backend-ts/tests/unit/observation-mapper.test.ts:254", "shortDescription": {"text": "Commented-code block (5 lines) in backend-ts/tests/unit/observation-mapper.test.ts:254"}, "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-26358f816128696f", "name": "Commented-code block (9 lines) in backend-ts/tests/unit/diagnostic-report-mapper.test.ts:129", "shortDescription": {"text": "Commented-code block (9 lines) in backend-ts/tests/unit/diagnostic-report-mapper.test.ts:129"}, "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-ae8a9461fcec2d09", "name": "Commented-code block (5 lines) in backend-ts/tests/unit/medication-mapper.test.ts:92", "shortDescription": {"text": "Commented-code block (5 lines) in backend-ts/tests/unit/medication-mapper.test.ts:92"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9cdbe352cc35e886", "name": "Commented-code block (7 lines) in backend-ts/tests/unit/encounter-mapper.test.ts:51", "shortDescription": {"text": "Commented-code block (7 lines) in backend-ts/tests/unit/encounter-mapper.test.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-6742319cd7c9fe82", "name": "`fetch()` without try/.catch or AbortSignal \u2014 backend-ts/scripts/bench-upload.ts:16", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 backend-ts/scripts/bench-upload.ts:16"}, "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-00885979a8591aac", "name": "Commented-code block (8 lines) in backend-ts/src/main.ts:31", "shortDescription": {"text": "Commented-code block (8 lines) in backend-ts/src/main.ts:31"}, "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-30f56271c1079e39", "name": "Commented-code block (6 lines) in backend-ts/src/api/smart.ts:90", "shortDescription": {"text": "Commented-code block (6 lines) in backend-ts/src/api/smart.ts:90"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-22e2256edcf21090", "name": "Commented-code block (5 lines) in backend-ts/src/api/sync.ts:358", "shortDescription": {"text": "Commented-code block (5 lines) in backend-ts/src/api/sync.ts:358"}, "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-4ceda85ae7e49804", "name": "Commented-code block (5 lines) in backend-ts/src/api/fhir.ts:87", "shortDescription": {"text": "Commented-code block (5 lines) in backend-ts/src/api/fhir.ts:87"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3482f7e5dd70cd1a", "name": "6 env vars used in code but missing from .env.example", "shortDescription": {"text": "6 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `BACKEND_INTERNAL_URL`, `BASE_URL`, `BIND_HOST`, `DASHBOARD_ALLOWED_HOSTS`, `DATABASE_FILE`, `NEXT_PUBLIC_API_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-7bd3427ca9c4baf0", "name": "Dangling fetch: GET /api/ihke3000/ihke3410s01/page_load (extension/src/background/auth.ts:25)", "shortDescription": {"text": "Dangling fetch: GET /api/ihke3000/ihke3410s01/page_load (extension/src/background/auth.ts:25)"}, "fullDescription": {"text": "`extension/src/background/auth.ts:25` calls `GET /api/ihke3000/ihke3410s01/page_load` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/ihke3000/ihke3410s01/page_load`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d2661f9c08df606c", "name": "Dangling fetch: GET /api/ihke3000/ihke3410s01/page_load (extension/src/background/auth.ts:70)", "shortDescription": {"text": "Dangling fetch: GET /api/ihke3000/ihke3410s01/page_load (extension/src/background/auth.ts:70)"}, "fullDescription": {"text": "`extension/src/background/auth.ts:70` calls `GET /api/ihke3000/ihke3410s01/page_load` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/ihke3000/ihke3410s01/page_load`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-cc60f886c67ca867", "name": "Dangling fetch: DELETE /sync/patient/${encodeURIComponent(RAW_ID)} (backend-ts/tests/integration/sync-delete-patient.tes", "shortDescription": {"text": "Dangling fetch: DELETE /sync/patient/${encodeURIComponent(RAW_ID)} (backend-ts/tests/integration/sync-delete-patient.test.ts:72)"}, "fullDescription": {"text": "`backend-ts/tests/integration/sync-delete-patient.test.ts:72` calls `DELETE /sync/patient/${encodeURIComponent(RAW_ID)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/sync/patient/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-531c235986d2024f", "name": "Dangling fetch: DELETE /sync/patient/${encodeURIComponent(HASHED_ID)} (backend-ts/tests/integration/sync-delete-patient.", "shortDescription": {"text": "Dangling fetch: DELETE /sync/patient/${encodeURIComponent(HASHED_ID)} (backend-ts/tests/integration/sync-delete-patient.test.ts:87)"}, "fullDescription": {"text": "`backend-ts/tests/integration/sync-delete-patient.test.ts:87` calls `DELETE /sync/patient/${encodeURIComponent(HASHED_ID)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/sync/patient/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2ccaa25c9c79cf23", "name": "Dangling fetch: DELETE /sync/patient/${encodeURIComponent(RAW_ID)} (backend-ts/tests/integration/sync-delete-patient.tes", "shortDescription": {"text": "Dangling fetch: DELETE /sync/patient/${encodeURIComponent(RAW_ID)} (backend-ts/tests/integration/sync-delete-patient.test.ts:106)"}, "fullDescription": {"text": "`backend-ts/tests/integration/sync-delete-patient.test.ts:106` calls `DELETE /sync/patient/${encodeURIComponent(RAW_ID)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/sync/patient/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-64f379f0e2b2661e", "name": "Dangling fetch: GET /fhir/metadata (backend-ts/tests/integration/security-hardening.test.ts:32)", "shortDescription": {"text": "Dangling fetch: GET /fhir/metadata (backend-ts/tests/integration/security-hardening.test.ts:32)"}, "fullDescription": {"text": "`backend-ts/tests/integration/security-hardening.test.ts:32` calls `GET /fhir/metadata` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/fhir/metadata`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-32c1ad8eb607ef08", "name": "Dangling fetch: GET /fhir/metadata (backend-ts/tests/integration/security-hardening.test.ts:42)", "shortDescription": {"text": "Dangling fetch: GET /fhir/metadata (backend-ts/tests/integration/security-hardening.test.ts:42)"}, "fullDescription": {"text": "`backend-ts/tests/integration/security-hardening.test.ts:42` calls `GET /fhir/metadata` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/fhir/metadata`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d7ba609ada9285b3", "name": "Dangling fetch: GET /fhir/metadata (backend-ts/tests/integration/security-hardening.test.ts:104)", "shortDescription": {"text": "Dangling fetch: GET /fhir/metadata (backend-ts/tests/integration/security-hardening.test.ts:104)"}, "fullDescription": {"text": "`backend-ts/tests/integration/security-hardening.test.ts:104` calls `GET /fhir/metadata` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/fhir/metadata`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b841286015d0d632", "name": "Dangling fetch: GET /fhir/Patient (backend-ts/tests/integration/fhir-scope.test.ts:68)", "shortDescription": {"text": "Dangling fetch: GET /fhir/Patient (backend-ts/tests/integration/fhir-scope.test.ts:68)"}, "fullDescription": {"text": "`backend-ts/tests/integration/fhir-scope.test.ts:68` calls `GET /fhir/Patient` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/fhir/patient`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d392aa803c7685ab", "name": "Dangling fetch: GET /fhir/Patient (backend-ts/tests/integration/fhir-scope.test.ts:78)", "shortDescription": {"text": "Dangling fetch: GET /fhir/Patient (backend-ts/tests/integration/fhir-scope.test.ts:78)"}, "fullDescription": {"text": "`backend-ts/tests/integration/fhir-scope.test.ts:78` calls `GET /fhir/Patient` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/fhir/patient`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f1110524a3bf7140", "name": "Dangling fetch: GET /fhir/Observation (backend-ts/tests/integration/fhir-scope.test.ts:91)", "shortDescription": {"text": "Dangling fetch: GET /fhir/Observation (backend-ts/tests/integration/fhir-scope.test.ts:91)"}, "fullDescription": {"text": "`backend-ts/tests/integration/fhir-scope.test.ts:91` calls `GET /fhir/Observation` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/fhir/observation`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2f1990c03f93194d", "name": "Dangling fetch: GET /fhir/Patient (backend-ts/tests/integration/fhir-scope.test.ts:96)", "shortDescription": {"text": "Dangling fetch: GET /fhir/Patient (backend-ts/tests/integration/fhir-scope.test.ts:96)"}, "fullDescription": {"text": "`backend-ts/tests/integration/fhir-scope.test.ts:96` calls `GET /fhir/Patient` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/fhir/patient`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4ee5541f60ed4a2d", "name": "Dangling fetch: GET /fhir/Patient/${HASHED_ID} (backend-ts/tests/integration/fhir-scope.test.ts:105)", "shortDescription": {"text": "Dangling fetch: GET /fhir/Patient/${HASHED_ID} (backend-ts/tests/integration/fhir-scope.test.ts:105)"}, "fullDescription": {"text": "`backend-ts/tests/integration/fhir-scope.test.ts:105` calls `GET /fhir/Patient/${HASHED_ID}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/fhir/patient/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-dfe358227539cd6e", "name": "Dangling fetch: GET /fhir/metadata (backend-ts/tests/integration/fhir-scope.test.ts:116)", "shortDescription": {"text": "Dangling fetch: GET /fhir/metadata (backend-ts/tests/integration/fhir-scope.test.ts:116)"}, "fullDescription": {"text": "`backend-ts/tests/integration/fhir-scope.test.ts:116` calls `GET /fhir/metadata` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/fhir/metadata`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-57fea04e0f76f221", "name": "Dangling fetch: GET /fhir/.well-known/smart-configuration (backend-ts/tests/integration/fhir-scope.test.ts:118)", "shortDescription": {"text": "Dangling fetch: GET /fhir/.well-known/smart-configuration (backend-ts/tests/integration/fhir-scope.test.ts:118)"}, "fullDescription": {"text": "`backend-ts/tests/integration/fhir-scope.test.ts:118` calls `GET /fhir/.well-known/smart-configuration` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/fhir/.well-known/smart-configuration`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a8bbb6dada26f724", "name": "Dangling fetch: GET /fhir/Patient (backend-ts/tests/integration/fhir-scope.test.ts:138)", "shortDescription": {"text": "Dangling fetch: GET /fhir/Patient (backend-ts/tests/integration/fhir-scope.test.ts:138)"}, "fullDescription": {"text": "`backend-ts/tests/integration/fhir-scope.test.ts:138` calls `GET /fhir/Patient` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/fhir/patient`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-bc5d916ea12cd166", "name": "Dangling fetch: POST /fhir/import (backend-ts/tests/integration/fhir-import.test.ts:24)", "shortDescription": {"text": "Dangling fetch: POST /fhir/import (backend-ts/tests/integration/fhir-import.test.ts:24)"}, "fullDescription": {"text": "`backend-ts/tests/integration/fhir-import.test.ts:24` calls `POST /fhir/import` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/fhir/import`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d345fa90f5de3745", "name": "Unused endpoint: GET /authorize", "shortDescription": {"text": "Unused endpoint: GET /authorize"}, "fullDescription": {"text": "`backend-ts/src/api/smart.ts` declares `GET /authorize` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-77c5ceda96d06640", "name": "Unused endpoint: POST /launch-context", "shortDescription": {"text": "Unused endpoint: POST /launch-context"}, "fullDescription": {"text": "`backend-ts/src/api/smart.ts` declares `POST /launch-context` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-358815753e8867f1", "name": "Unused endpoint: POST /token", "shortDescription": {"text": "Unused endpoint: POST /token"}, "fullDescription": {"text": "`backend-ts/src/api/smart.ts` declares `POST /token` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-72f99d58636b648b", "name": "Unused endpoint: GET /logs", "shortDescription": {"text": "Unused endpoint: GET /logs"}, "fullDescription": {"text": "`backend-ts/src/api/sync.ts` declares `GET /logs` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-059430d5f3ac5090", "name": "Unused endpoint: POST /log", "shortDescription": {"text": "Unused endpoint: POST /log"}, "fullDescription": {"text": "`backend-ts/src/api/sync.ts` declares `POST /log` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4629fce546b5a836", "name": "Unused endpoint: GET /patient-states", "shortDescription": {"text": "Unused endpoint: GET /patient-states"}, "fullDescription": {"text": "`backend-ts/src/api/sync.ts` declares `GET /patient-states` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3d10387adb9b339f", "name": "Unused endpoint: DELETE /logs", "shortDescription": {"text": "Unused endpoint: DELETE /logs"}, "fullDescription": {"text": "`backend-ts/src/api/sync.ts` declares `DELETE /logs` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a6b2798fc4f76b47", "name": "Unused endpoint: DELETE /logs/:logId", "shortDescription": {"text": "Unused endpoint: DELETE /logs/:logId"}, "fullDescription": {"text": "`backend-ts/src/api/sync.ts` declares `DELETE /logs/:logId` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-36eb7064f49a4399", "name": "Unused endpoint: DELETE /patient/:patientId", "shortDescription": {"text": "Unused endpoint: DELETE /patient/:patientId"}, "fullDescription": {"text": "`backend-ts/src/api/sync.ts` declares `DELETE /patient/:patientId` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3dd0f676a84f9d65", "name": "Unused endpoint: GET /latest-dates", "shortDescription": {"text": "Unused endpoint: GET /latest-dates"}, "fullDescription": {"text": "`backend-ts/src/api/sync.ts` declares `GET /latest-dates` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2623971938f397ce", "name": "Unused endpoint: GET /audit-log", "shortDescription": {"text": "Unused endpoint: GET /audit-log"}, "fullDescription": {"text": "`backend-ts/src/api/sync.ts` declares `GET /audit-log` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3ede41489d0ecc9f", "name": "Unused endpoint: POST /upload-structured", "shortDescription": {"text": "Unused endpoint: POST /upload-structured"}, "fullDescription": {"text": "`backend-ts/src/api/sync.ts` declares `POST /upload-structured` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9cc84c5e3dc3ff77", "name": "Unused endpoint: GET /metadata", "shortDescription": {"text": "Unused endpoint: GET /metadata"}, "fullDescription": {"text": "`backend-ts/src/api/fhir.ts` declares `GET /metadata` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-28253d10b21af9ad", "name": "Unused endpoint: USE /Patient", "shortDescription": {"text": "Unused endpoint: USE /Patient"}, "fullDescription": {"text": "`backend-ts/src/api/fhir.ts` declares `USE /Patient` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e0b0d3925e252d96", "name": "Unused endpoint: USE /Patient/*", "shortDescription": {"text": "Unused endpoint: USE /Patient/*"}, "fullDescription": {"text": "`backend-ts/src/api/fhir.ts` declares `USE /Patient/*` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a4dfef42577780fc", "name": "Unused endpoint: GET /Patient", "shortDescription": {"text": "Unused endpoint: GET /Patient"}, "fullDescription": {"text": "`backend-ts/src/api/fhir.ts` declares `GET /Patient` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5aff5eeb1ded98fd", "name": "Unused endpoint: GET /Patient/:patientId", "shortDescription": {"text": "Unused endpoint: GET /Patient/:patientId"}, "fullDescription": {"text": "`backend-ts/src/api/fhir.ts` declares `GET /Patient/:patientId` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e686634beeea0bb8", "name": "Unused endpoint: GET /export", "shortDescription": {"text": "Unused endpoint: GET /export"}, "fullDescription": {"text": "`backend-ts/src/api/fhir.ts` declares `GET /export` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-be4cb5e3cabcce80", "name": "Unused endpoint: POST /import", "shortDescription": {"text": "Unused endpoint: POST /import"}, "fullDescription": {"text": "`backend-ts/src/api/fhir.ts` declares `POST /import` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}]}}, "automationDetails": {"id": "repobility/22390"}, "properties": {"repository": "voho0000/NHI-FHIR-BRIDGE", "repoUrl": "https://github.com/voho0000/NHI-FHIR-BRIDGE", "branch": "main"}, "results": [{"ruleId": "scanner-33b1f179e05dda1b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/app/page.tsx:237"}, "properties": {"repobilityId": "d6399cfd43dfe522", "scanner": "scanner-primary", "fingerprint": "33b1f179e05dda1b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-729a13387ac09940", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 packages/mapper/src/loinc-tables.ts:25"}, "properties": {"repobilityId": "bf699097eb04c330", "scanner": "scanner-primary", "fingerprint": "729a13387ac09940", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-b729afda6cfe6aa9", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 backend-ts/scripts/bench-upload.ts:76"}, "properties": {"repobilityId": "50d157d53bd01323", "scanner": "scanner-primary", "fingerprint": "b729afda6cfe6aa9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b9731650b7cd58b0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 backend-ts/src/main.ts:219"}, "properties": {"repobilityId": "54937fa084ee83a3", "scanner": "scanner-primary", "fingerprint": "b9731650b7cd58b0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5a2ac5e20e3b0663", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 backend-ts/src/core/migrate.ts:19"}, "properties": {"repobilityId": "215ca8f5571f1f55", "scanner": "scanner-primary", "fingerprint": "5a2ac5e20e3b0663", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-faa134129e5545ff", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: node:20-alpine"}, "properties": {"repobilityId": "35601d2a9e07bab5", "scanner": "scanner-primary", "fingerprint": "faa134129e5545ff", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "frontend/Dockerfile"}, "region": {"startLine": 6}}}]}, {"ruleId": "scanner-faa134129e5545ff", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: node:20-alpine"}, "properties": {"repobilityId": "3ff57293e1a30383", "scanner": "scanner-primary", "fingerprint": "faa134129e5545ff", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "frontend/Dockerfile"}, "region": {"startLine": 26}}}]}, {"ruleId": "scanner-71bc81fc5cb13626", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: node:20-bookworm-slim"}, "properties": {"repobilityId": "5c36ef0f94713167", "scanner": "scanner-primary", "fingerprint": "71bc81fc5cb13626", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend-ts/Dockerfile"}, "region": {"startLine": 10}}}]}, {"ruleId": "scanner-aa5acaa49eb8315b", "level": "note", "message": {"text": "Containers defined but no K8s/orchestration manifest found"}, "properties": {"repobilityId": "b230ea9b68736081", "scanner": "scanner-primary", "fingerprint": "aa5acaa49eb8315b", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["coverage", "deployment"]}}, {"ruleId": "scanner-4e3f5365862a136b", "level": "warning", "message": {"text": "Insecure pattern 'weak_hash' in CLAUDE.md:37"}, "properties": {"repobilityId": "09374f0f880fc291", "scanner": "scanner-primary", "fingerprint": "4e3f5365862a136b", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "weak_hash"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "CLAUDE.md"}, "region": {"startLine": 37}}}]}, {"ruleId": "scanner-55019e0e17fbe668", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/check-no-real-twid.mjs:16"}, "properties": {"repobilityId": "bb188b55b48108db", "scanner": "scanner-primary", "fingerprint": "55019e0e17fbe668", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/check-no-real-twid.mjs"}, "region": {"startLine": 16}}}]}, {"ruleId": "scanner-52073771fe0b2a10", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in extension/src/popup/connection.ts:148"}, "properties": {"repobilityId": "5597a5397c0addd4", "scanner": "scanner-primary", "fingerprint": "52073771fe0b2a10", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "extension/src/popup/connection.ts"}, "region": {"startLine": 148}}}]}, {"ruleId": "scanner-3a87f73f64a66839", "level": "warning", "message": {"text": "Insecure pattern 'local_storage_auth_token' in extension/src/background/nhi-imaging-jpeg.ts:682"}, "properties": {"repobilityId": "8cd4ed1f7ef03fd8", "scanner": "scanner-primary", "fingerprint": "3a87f73f64a66839", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "local_storage_auth_token"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "extension/src/background/nhi-imaging-jpeg.ts"}, "region": {"startLine": 682}}}]}, {"ruleId": "scanner-bbc94025a2669785", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in backend-ts/src/main.ts:147"}, "properties": {"repobilityId": "aba9b0fb01c53c65", "scanner": "scanner-primary", "fingerprint": "bbc94025a2669785", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend-ts/src/main.ts"}, "region": {"startLine": 147}}}]}, {"ruleId": "scanner-46c644c6227e4d4a", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "f0c3d4499b6cd885", "scanner": "scanner-primary", "fingerprint": "46c644c6227e4d4a", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/release.yml"}, "region": {"startLine": 119}}}]}, {"ruleId": "scanner-1838a141491ce38c", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "b8fd4f5048f96576", "scanner": "scanner-primary", "fingerprint": "1838a141491ce38c", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/release.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-560f59d0848699fa", "level": "note", "message": {"text": "Very large file: packages/mapper/src/loinc-tables.ts (2043 lines)"}, "properties": {"repobilityId": "5d585c42e7eb146d", "scanner": "scanner-primary", "fingerprint": "560f59d0848699fa", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-3e14bfadec995685", "level": "note", "message": {"text": "Very large file: packages/mapper/src/observation.ts (2477 lines)"}, "properties": {"repobilityId": "c047a54f300154d4", "scanner": "scanner-primary", "fingerprint": "3e14bfadec995685", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-9b27dd2544f25b1a", "level": "note", "message": {"text": "Very large file: extension/tests/adapters.test.js (1709 lines)"}, "properties": {"repobilityId": "a518e4df7e0065d6", "scanner": "scanner-primary", "fingerprint": "9b27dd2544f25b1a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-9bdac888db9fb51e", "level": "note", "message": {"text": "Very large file: extension/src/nhi-adapters.ts (1197 lines)"}, "properties": {"repobilityId": "842c852173dc9aa3", "scanner": "scanner-primary", "fingerprint": "9bdac888db9fb51e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-e47bf524fbab3b40", "level": "note", "message": {"text": "Very large file: extension/src/background/sync-orchestrator.ts (1498 lines)"}, "properties": {"repobilityId": "16cfbfc102197380", "scanner": "scanner-primary", "fingerprint": "e47bf524fbab3b40", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-143f3eece30c1b17", "level": "note", "message": {"text": "Very large file: extension/src/background/nhi-imaging-jpeg.ts (2126 lines)"}, "properties": {"repobilityId": "a14ea9e074e7ccd8", "scanner": "scanner-primary", "fingerprint": "143f3eece30c1b17", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-19a940ff4628bd54", "level": "note", "message": {"text": "Very large file: backend-ts/tests/unit/bundle-quality.test.ts (5064 lines)"}, "properties": {"repobilityId": "6dd65021fe2dd52b", "scanner": "scanner-primary", "fingerprint": "19a940ff4628bd54", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-146166ab4eafc3b0", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/mapper/package.json"}, "properties": {"repobilityId": "2aa9b22c692ddc1f", "scanner": "scanner-primary", "fingerprint": "146166ab4eafc3b0", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/mapper/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-8a2952e09e796fc8", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: extension/package.json"}, "properties": {"repobilityId": "1e24c8ac82d95367", "scanner": "scanner-primary", "fingerprint": "8a2952e09e796fc8", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "extension/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-66ec0871f04d5b8b", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: backend-ts/package.json"}, "properties": {"repobilityId": "2df7c89dd8351364", "scanner": "scanner-primary", "fingerprint": "66ec0871f04d5b8b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend-ts/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "858bbd06f9c97130", "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": "b32eca2c907f92f7", "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": "3ea70f8f8fda915d", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-749d4bc1bd66df5f", "level": "warning", "message": {"text": "Agent instructions exist but release-hardening basics are missing"}, "properties": {"repobilityId": "4e1738902168019d", "scanner": "scanner-primary", "fingerprint": "749d4bc1bd66df5f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-ea8f3013f588db25", "level": "note", "message": {"text": "Shallow git history limits provenance confidence"}, "properties": {"repobilityId": "5acfbdda798da4bf", "scanner": "scanner-primary", "fingerprint": "ea8f3013f588db25", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-8424db9c75e04ba4", "level": "none", "message": {"text": "Very short observed git history"}, "properties": {"repobilityId": "429c22f1fb91ea86", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-0ae53f71d676e2d5", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/app/page.tsx:4"}, "properties": {"repobilityId": "b393475e5360d87c", "scanner": "scanner-primary", "fingerprint": "0ae53f71d676e2d5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e7e09845ac254bf1", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/app/page.tsx:82"}, "properties": {"repobilityId": "c47d1a6cc063d61c", "scanner": "scanner-primary", "fingerprint": "e7e09845ac254bf1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c2e0cb0d79f6adb5", "level": "none", "message": {"text": "Commented-code block (6 lines) in frontend/app/api/backend/[...path]/route.ts:34"}, "properties": {"repobilityId": "aed7bbe85b402ab1", "scanner": "scanner-primary", "fingerprint": "c2e0cb0d79f6adb5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-755e5a4aaa8c75bc", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/app/api/backend/[...path]/route.ts:95"}, "properties": {"repobilityId": "c6503e2ed58d2dbd", "scanner": "scanner-primary", "fingerprint": "755e5a4aaa8c75bc", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2d53628270918563", "level": "none", "message": {"text": "Commented-code block (12 lines) in scripts/verify-sync.mjs:9"}, "properties": {"repobilityId": "fc5d314d19327495", "scanner": "scanner-primary", "fingerprint": "2d53628270918563", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5975c3688fed6974", "level": "none", "message": {"text": "Commented-code block (7 lines) in packages/mapper/src/systems.ts:47"}, "properties": {"repobilityId": "2ce0da38ff12e915", "scanner": "scanner-primary", "fingerprint": "5975c3688fed6974", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2fa7e4c936ec9709", "level": "none", "message": {"text": "Commented-code block (8 lines) in packages/mapper/src/imaging-dedup.ts:4"}, "properties": {"repobilityId": "5c4a022561fa704b", "scanner": "scanner-primary", "fingerprint": "2fa7e4c936ec9709", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6c06d3c6a816b9f3", "level": "none", "message": {"text": "Commented-code block (10 lines) in packages/mapper/src/medication.ts:105"}, "properties": {"repobilityId": "dd371569628af48f", "scanner": "scanner-primary", "fingerprint": "6c06d3c6a816b9f3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d7b217978243c79e", "level": "none", "message": {"text": "Commented-code block (7 lines) in packages/mapper/src/diagnostic-report.ts:36"}, "properties": {"repobilityId": "bcf0320c8c153a16", "scanner": "scanner-primary", "fingerprint": "d7b217978243c79e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5d7458ce94f9b8b0", "level": "none", "message": {"text": "Commented-code block (13 lines) in packages/mapper/src/parsers.ts:39"}, "properties": {"repobilityId": "4da71145281b5fe4", "scanner": "scanner-primary", "fingerprint": "5d7458ce94f9b8b0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-239a399fa2526f7b", "level": "none", "message": {"text": "Commented-code block (6 lines) in packages/mapper/src/loinc-tables.ts:12"}, "properties": {"repobilityId": "fa3280a5d3bb256f", "scanner": "scanner-primary", "fingerprint": "239a399fa2526f7b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2795fcf1ce42eb68", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/mapper/src/document-reference.ts:37"}, "properties": {"repobilityId": "5ac8c09dd0d45c49", "scanner": "scanner-primary", "fingerprint": "2795fcf1ce42eb68", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3b0d7e5d164ed897", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/mapper/src/procedure.ts:29"}, "properties": {"repobilityId": "94460aa5b7281d7a", "scanner": "scanner-primary", "fingerprint": "3b0d7e5d164ed897", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7a1651f010e202d7", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/mapper/src/patient.ts:17"}, "properties": {"repobilityId": "7584f6147cca3fe1", "scanner": "scanner-primary", "fingerprint": "7a1651f010e202d7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bb74f0ea7e370157", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/mapper/src/observation.ts:45"}, "properties": {"repobilityId": "ee7c7432e3dc310d", "scanner": "scanner-primary", "fingerprint": "bb74f0ea7e370157", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0595709bd7b97fae", "level": "none", "message": {"text": "Commented-code block (6 lines) in packages/mapper/src/encounter.ts:13"}, "properties": {"repobilityId": "0ba03dbee7da3838", "scanner": "scanner-primary", "fingerprint": "0595709bd7b97fae", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-da2b6e749d6d5a5e", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/mapper/src/condition.ts:59"}, "properties": {"repobilityId": "2e44d08d4bb00397", "scanner": "scanner-primary", "fingerprint": "da2b6e749d6d5a5e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8129f20f30a9b6ae", "level": "none", "message": {"text": "Commented-code block (11 lines) in packages/mapper/src/link.ts:61"}, "properties": {"repobilityId": "46c28e5af9aa09c5", "scanner": "scanner-primary", "fingerprint": "8129f20f30a9b6ae", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ade78fcd951bb258", "level": "none", "message": {"text": "Commented-code block (11 lines) in extension/vitest.config.js:3"}, "properties": {"repobilityId": "ade5c1923fd21fab", "scanner": "scanner-primary", "fingerprint": "ade78fcd951bb258", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ff5880349cececdc", "level": "none", "message": {"text": "Commented-code block (7 lines) in extension/tests/adapters.test.js:3"}, "properties": {"repobilityId": "c5be59773ec8f4bc", "scanner": "scanner-primary", "fingerprint": "ff5880349cececdc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1758e3d8e9e56fb1", "level": "none", "message": {"text": "Commented-code block (7 lines) in extension/tests/endpoints.test.js:3"}, "properties": {"repobilityId": "bcc0dade824ac2bd", "scanner": "scanner-primary", "fingerprint": "1758e3d8e9e56fb1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5ac3f8bd2e5ade0c", "level": "none", "message": {"text": "Commented-code block (6 lines) in extension/tests/fixtures.snapshot.test.js:3"}, "properties": {"repobilityId": "fa5f8b202c319ac6", "scanner": "scanner-primary", "fingerprint": "5ac3f8bd2e5ade0c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1fa0d59f0d63964a", "level": "none", "message": {"text": "Commented-code block (5 lines) in extension/tests/imaging-list-status.test.js:7"}, "properties": {"repobilityId": "189542c2d34f1a70", "scanner": "scanner-primary", "fingerprint": "1fa0d59f0d63964a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e975c2e02efacca6", "level": "none", "message": {"text": "Commented-code block (6 lines) in extension/src/nhi-adapters.ts:7"}, "properties": {"repobilityId": "d67cfa2da7b6ca32", "scanner": "scanner-primary", "fingerprint": "e975c2e02efacca6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ffbca1035b2fc2a6", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 extension/src/nhi-adapters.ts:719"}, "properties": {"repobilityId": "a80773cf7e827a52", "scanner": "scanner-primary", "fingerprint": "ffbca1035b2fc2a6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-fae838c3336d8075", "level": "none", "message": {"text": "Commented-code block (6 lines) in extension/src/background.ts:10"}, "properties": {"repobilityId": "2519e353be9e0ed6", "scanner": "scanner-primary", "fingerprint": "fae838c3336d8075", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-692de86851cd1217", "level": "note", "message": {"text": "Legacy-named symbol `inpatient_legacy` in extension/src/nhi-endpoints.ts:73"}, "properties": {"repobilityId": "4656c6c5ae1ac379", "scanner": "scanner-primary", "fingerprint": "692de86851cd1217", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-4402b1a2fbe04a14", "level": "none", "message": {"text": "Commented-code block (6 lines) in extension/src/nhi-endpoints.ts:4"}, "properties": {"repobilityId": "a4a13a0208055f84", "scanner": "scanner-primary", "fingerprint": "4402b1a2fbe04a14", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-657d38443ed07485", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 extension/src/nhi-endpoints.ts:206"}, "properties": {"repobilityId": "b1ce9019963c078b", "scanner": "scanner-primary", "fingerprint": "657d38443ed07485", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a41170829cef75e9", "level": "none", "message": {"text": "Commented-code block (6 lines) in extension/src/popup.ts:3"}, "properties": {"repobilityId": "a04c72d0fcbff598", "scanner": "scanner-primary", "fingerprint": "a41170829cef75e9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d3ad4737757bceea", "level": "none", "message": {"text": "Commented-code block (8 lines) in extension/src/popup/tooltip.ts:3"}, "properties": {"repobilityId": "a994c1a65017030d", "scanner": "scanner-primary", "fingerprint": "d3ad4737757bceea", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7ef9ab11d1caf3f7", "level": "none", "message": {"text": "Commented-code block (8 lines) in extension/src/popup/data-state.ts:6"}, "properties": {"repobilityId": "e3ff5335b070f33e", "scanner": "scanner-primary", "fingerprint": "7ef9ab11d1caf3f7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8a845000c752d9d7", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 extension/src/popup/data-state.ts:212"}, "properties": {"repobilityId": "522555b45ab89fb0", "scanner": "scanner-primary", "fingerprint": "8a845000c752d9d7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-acf64118ee98c70d", "level": "none", "message": {"text": "Commented-code block (9 lines) in extension/src/popup/status.ts:21"}, "properties": {"repobilityId": "15e40ea53df9c44b", "scanner": "scanner-primary", "fingerprint": "acf64118ee98c70d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ffa4a35da0562f1d", "level": "none", "message": {"text": "Commented-code block (7 lines) in extension/src/popup/imaging-prep-banner.ts:8"}, "properties": {"repobilityId": "38fec5291aef9b21", "scanner": "scanner-primary", "fingerprint": "ffa4a35da0562f1d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7c5b062c3fcc4bf2", "level": "none", "message": {"text": "Commented-code block (5 lines) in extension/src/popup/connection.ts:7"}, "properties": {"repobilityId": "fdc202721519b17b", "scanner": "scanner-primary", "fingerprint": "7c5b062c3fcc4bf2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bf9544f53f9453db", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 extension/src/popup/connection.ts:264"}, "properties": {"repobilityId": "c79ec73360008112", "scanner": "scanner-primary", "fingerprint": "bf9544f53f9453db", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-7ee9a5d510fd100f", "level": "none", "message": {"text": "Commented-code block (9 lines) in extension/src/popup/step-logic.ts:12"}, "properties": {"repobilityId": "41a7e0bd3a1255f0", "scanner": "scanner-primary", "fingerprint": "7ee9a5d510fd100f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-229fe4a888eefb9a", "level": "none", "message": {"text": "Commented-code block (6 lines) in extension/src/popup/els.ts:6"}, "properties": {"repobilityId": "ad770de3ad808d59", "scanner": "scanner-primary", "fingerprint": "229fe4a888eefb9a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f48a632d109a16f9", "level": "none", "message": {"text": "Commented-code block (5 lines) in extension/src/popup/sync-client.ts:3"}, "properties": {"repobilityId": "504f77d1ca762882", "scanner": "scanner-primary", "fingerprint": "f48a632d109a16f9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0989f4655fa4032a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 extension/src/popup/sync-client.ts:169"}, "properties": {"repobilityId": "8dfbee91e74785ab", "scanner": "scanner-primary", "fingerprint": "0989f4655fa4032a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-31db257b393a01cf", "level": "none", "message": {"text": "Commented-code block (5 lines) in extension/src/popup/wizard.ts:3"}, "properties": {"repobilityId": "ec6dd27daabc1234", "scanner": "scanner-primary", "fingerprint": "31db257b393a01cf", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7bb9ac59b14786e7", "level": "none", "message": {"text": "Commented-code block (6 lines) in extension/src/popup/utils.ts:72"}, "properties": {"repobilityId": "b59ef4f5933209d3", "scanner": "scanner-primary", "fingerprint": "7bb9ac59b14786e7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4e1bedf422f9472b", "level": "none", "message": {"text": "Commented-code block (5 lines) in extension/src/popup/constants.ts:5"}, "properties": {"repobilityId": "7b2b63491223e344", "scanner": "scanner-primary", "fingerprint": "4e1bedf422f9472b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f11b285a4af06d20", "level": "none", "message": {"text": "Commented-code block (10 lines) in extension/src/popup/state.ts:13"}, "properties": {"repobilityId": "035129c1d47bc4dc", "scanner": "scanner-primary", "fingerprint": "f11b285a4af06d20", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b5c627247bcae407", "level": "none", "message": {"text": "Commented-code block (5 lines) in extension/src/popup/patient-form.ts:21"}, "properties": {"repobilityId": "3bb451cd2084ba07", "scanner": "scanner-primary", "fingerprint": "b5c627247bcae407", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-972687ab1e17f091", "level": "none", "message": {"text": "Commented-code block (5 lines) in extension/src/popup/sync-range.ts:1"}, "properties": {"repobilityId": "bbe424c146710402", "scanner": "scanner-primary", "fingerprint": "972687ab1e17f091", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a978fd92571de033", "level": "none", "message": {"text": "Commented-code block (10 lines) in extension/src/popup/bundle.ts:3"}, "properties": {"repobilityId": "50845376dc6972b4", "scanner": "scanner-primary", "fingerprint": "a978fd92571de033", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1b3c654e36286d55", "level": "none", "message": {"text": "Commented-code block (7 lines) in extension/src/background/auth.ts:8"}, "properties": {"repobilityId": "d6ba2cb515ceddaf", "scanner": "scanner-primary", "fingerprint": "1b3c654e36286d55", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6f01990899c3e2be", "level": "none", "message": {"text": "Commented-code block (5 lines) in extension/src/background/sync-orchestrator.ts:1"}, "properties": {"repobilityId": "a71d747913d33538", "scanner": "scanner-primary", "fingerprint": "6f01990899c3e2be", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6d05af29a09a07a7", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 extension/src/background/sync-orchestrator.ts:580"}, "properties": {"repobilityId": "c25e5970d4fb8f0e", "scanner": "scanner-primary", "fingerprint": "6d05af29a09a07a7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f1bf7148b1609a94", "level": "none", "message": {"text": "Commented-code block (5 lines) in extension/src/background/nhi-imaging-jpeg.ts:3"}, "properties": {"repobilityId": "320f72d73ddd7929", "scanner": "scanner-primary", "fingerprint": "f1bf7148b1609a94", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d9941174e06fb711", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 extension/src/background/nhi-imaging-jpeg.ts:1757"}, "properties": {"repobilityId": "2cade7fa34979d48", "scanner": "scanner-primary", "fingerprint": "d9941174e06fb711", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-09ea1a7b7300aaf4", "level": "none", "message": {"text": "Commented-code block (5 lines) in extension/src/background/badge.ts:3"}, "properties": {"repobilityId": "41989b5eeccb32d5", "scanner": "scanner-primary", "fingerprint": "09ea1a7b7300aaf4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e4530ee5dff2cf4c", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 extension/src/background/badge.ts:31"}, "properties": {"repobilityId": "439517b727ddea03", "scanner": "scanner-primary", "fingerprint": "e4530ee5dff2cf4c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b1357390df6d0830", "level": "none", "message": {"text": "Commented-code block (8 lines) in extension/src/background/imaging-prep-poll.ts:10"}, "properties": {"repobilityId": "6c3340892cc87aca", "scanner": "scanner-primary", "fingerprint": "b1357390df6d0830", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-33298e81775a85da", "level": "none", "message": {"text": "Commented-code block (5 lines) in extension/src/background/sync-state.ts:3"}, "properties": {"repobilityId": "e5064f26519de069", "scanner": "scanner-primary", "fingerprint": "33298e81775a85da", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2bddbb2d18285541", "level": "none", "message": {"text": "Commented-code block (8 lines) in extension/src/background/constants.ts:17"}, "properties": {"repobilityId": "9fdf2bb9a3be9065", "scanner": "scanner-primary", "fingerprint": "2bddbb2d18285541", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-58941cfc609d5b11", "level": "none", "message": {"text": "Commented-code block (7 lines) in extension/src/background/nhi-list-fetch.ts:11"}, "properties": {"repobilityId": "a2e79ced03e9d805", "scanner": "scanner-primary", "fingerprint": "58941cfc609d5b11", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b7cc56fea5caee12", "level": "none", "message": {"text": "Commented-code block (11 lines) in extension/src/background/backend-upload.ts:1"}, "properties": {"repobilityId": "8b56c015528e9bd3", "scanner": "scanner-primary", "fingerprint": "b7cc56fea5caee12", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2fdd43023a791805", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 extension/src/background/backend-upload.ts:18"}, "properties": {"repobilityId": "bbc9dee7592a0e06", "scanner": "scanner-primary", "fingerprint": "2fdd43023a791805", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-26a3703619f585eb", "level": "none", "message": {"text": "Commented-code block (5 lines) in extension/src/background/s02-detail.ts:5"}, "properties": {"repobilityId": "8a4bc67e2e68ad7f", "scanner": "scanner-primary", "fingerprint": "26a3703619f585eb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c76562b6be122805", "level": "none", "message": {"text": "Commented-code block (6 lines) in extension/src/background/patient-override.ts:46"}, "properties": {"repobilityId": "12889bab9cb636de", "scanner": "scanner-primary", "fingerprint": "c76562b6be122805", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-873b8f03c2dfa3e6", "level": "none", "message": {"text": "Commented-code block (5 lines) in extension/src/background/nhi-detail-fetchers.ts:6"}, "properties": {"repobilityId": "beb0859bc1653532", "scanner": "scanner-primary", "fingerprint": "873b8f03c2dfa3e6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2238c41602560b58", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 extension/src/background/nhi-detail-fetchers.ts:329"}, "properties": {"repobilityId": "31527e869be89433", "scanner": "scanner-primary", "fingerprint": "2238c41602560b58", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4118b3a52f558b4b", "level": "none", "message": {"text": "Commented-code block (5 lines) in extension/src/background/storage-migration.ts:14"}, "properties": {"repobilityId": "67a49f347e352afc", "scanner": "scanner-primary", "fingerprint": "4118b3a52f558b4b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-363b250983a79424", "level": "note", "message": {"text": "Legacy-named symbol `inpatient_legacy` in extension/src/background/bundle.ts:43"}, "properties": {"repobilityId": "091030701eea2224", "scanner": "scanner-primary", "fingerprint": "363b250983a79424", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-6dc3faa3b4955ebe", "level": "none", "message": {"text": "Commented-code block (9 lines) in extension/src/background/bundle.ts:41"}, "properties": {"repobilityId": "d6cc1e925f8683c9", "scanner": "scanner-primary", "fingerprint": "6dc3faa3b4955ebe", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-643964b2b4baf949", "level": "none", "message": {"text": "Commented-code block (6 lines) in extension/src/background/discharge-summary-fetcher.ts:3"}, "properties": {"repobilityId": "9a9deffc5eb05885", "scanner": "scanner-primary", "fingerprint": "643964b2b4baf949", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0540b1653b6ec766", "level": "none", "message": {"text": "Commented-code block (7 lines) in extension/src/background/imaging-list-status.ts:3"}, "properties": {"repobilityId": "b8b5c6f3c943d2ce", "scanner": "scanner-primary", "fingerprint": "0540b1653b6ec766", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-caacf98f5471d2d6", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend-ts/tests/unit/bundle-quality.test.ts:489"}, "properties": {"repobilityId": "4a179471804f5c2a", "scanner": "scanner-primary", "fingerprint": "caacf98f5471d2d6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8ba571fd7e7ec1ee", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend-ts/tests/unit/link.test.ts:115"}, "properties": {"repobilityId": "340bf977ac29e4dc", "scanner": "scanner-primary", "fingerprint": "8ba571fd7e7ec1ee", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-99d5a68f379093f5", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend-ts/tests/unit/parsers.test.ts:102"}, "properties": {"repobilityId": "7747647414cb0fb3", "scanner": "scanner-primary", "fingerprint": "99d5a68f379093f5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-415565bdf61aef42", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend-ts/tests/unit/imaging-dedup.test.ts:42"}, "properties": {"repobilityId": "6a596177d2b963ef", "scanner": "scanner-primary", "fingerprint": "415565bdf61aef42", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-de1aaf1c26bd30dd", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend-ts/tests/unit/observation-mapper.test.ts:254"}, "properties": {"repobilityId": "9ad4bdeecb7522cd", "scanner": "scanner-primary", "fingerprint": "de1aaf1c26bd30dd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-26358f816128696f", "level": "none", "message": {"text": "Commented-code block (9 lines) in backend-ts/tests/unit/diagnostic-report-mapper.test.ts:129"}, "properties": {"repobilityId": "4c134e8f918e466d", "scanner": "scanner-primary", "fingerprint": "26358f816128696f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ae8a9461fcec2d09", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend-ts/tests/unit/medication-mapper.test.ts:92"}, "properties": {"repobilityId": "44f4e6856ce3b66d", "scanner": "scanner-primary", "fingerprint": "ae8a9461fcec2d09", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9cdbe352cc35e886", "level": "none", "message": {"text": "Commented-code block (7 lines) in backend-ts/tests/unit/encounter-mapper.test.ts:51"}, "properties": {"repobilityId": "8a5f2888ab9ada35", "scanner": "scanner-primary", "fingerprint": "9cdbe352cc35e886", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6742319cd7c9fe82", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 backend-ts/scripts/bench-upload.ts:16"}, "properties": {"repobilityId": "d6b9b930be0e3b97", "scanner": "scanner-primary", "fingerprint": "6742319cd7c9fe82", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-00885979a8591aac", "level": "none", "message": {"text": "Commented-code block (8 lines) in backend-ts/src/main.ts:31"}, "properties": {"repobilityId": "fcea87b468256f7e", "scanner": "scanner-primary", "fingerprint": "00885979a8591aac", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-30f56271c1079e39", "level": "none", "message": {"text": "Commented-code block (6 lines) in backend-ts/src/api/smart.ts:90"}, "properties": {"repobilityId": "d7d9e50438160d42", "scanner": "scanner-primary", "fingerprint": "30f56271c1079e39", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-22e2256edcf21090", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend-ts/src/api/sync.ts:358"}, "properties": {"repobilityId": "ea9892c9a0745213", "scanner": "scanner-primary", "fingerprint": "22e2256edcf21090", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4ceda85ae7e49804", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend-ts/src/api/fhir.ts:87"}, "properties": {"repobilityId": "8e967e3049c237e4", "scanner": "scanner-primary", "fingerprint": "4ceda85ae7e49804", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3482f7e5dd70cd1a", "level": "note", "message": {"text": "6 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "1da70f25aa46f6e9", "scanner": "scanner-primary", "fingerprint": "3482f7e5dd70cd1a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "config-drift"]}}, {"ruleId": "scanner-7bd3427ca9c4baf0", "level": "error", "message": {"text": "Dangling fetch: GET /api/ihke3000/ihke3410s01/page_load (extension/src/background/auth.ts:25)"}, "properties": {"repobilityId": "d6e7bafcfa626ee3", "scanner": "scanner-primary", "fingerprint": "7bd3427ca9c4baf0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d2661f9c08df606c", "level": "error", "message": {"text": "Dangling fetch: GET /api/ihke3000/ihke3410s01/page_load (extension/src/background/auth.ts:70)"}, "properties": {"repobilityId": "e5b149435cfeedb8", "scanner": "scanner-primary", "fingerprint": "d2661f9c08df606c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-cc60f886c67ca867", "level": "error", "message": {"text": "Dangling fetch: DELETE /sync/patient/${encodeURIComponent(RAW_ID)} (backend-ts/tests/integration/sync-delete-patient.test.ts:72)"}, "properties": {"repobilityId": "958ad701c89f185f", "scanner": "scanner-primary", "fingerprint": "cc60f886c67ca867", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-531c235986d2024f", "level": "error", "message": {"text": "Dangling fetch: DELETE /sync/patient/${encodeURIComponent(HASHED_ID)} (backend-ts/tests/integration/sync-delete-patient.test.ts:87)"}, "properties": {"repobilityId": "8dc34b0d8e699915", "scanner": "scanner-primary", "fingerprint": "531c235986d2024f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-2ccaa25c9c79cf23", "level": "error", "message": {"text": "Dangling fetch: DELETE /sync/patient/${encodeURIComponent(RAW_ID)} (backend-ts/tests/integration/sync-delete-patient.test.ts:106)"}, "properties": {"repobilityId": "85fa4711b50810ec", "scanner": "scanner-primary", "fingerprint": "2ccaa25c9c79cf23", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-64f379f0e2b2661e", "level": "error", "message": {"text": "Dangling fetch: GET /fhir/metadata (backend-ts/tests/integration/security-hardening.test.ts:32)"}, "properties": {"repobilityId": "82d46d689fece4d9", "scanner": "scanner-primary", "fingerprint": "64f379f0e2b2661e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-32c1ad8eb607ef08", "level": "error", "message": {"text": "Dangling fetch: GET /fhir/metadata (backend-ts/tests/integration/security-hardening.test.ts:42)"}, "properties": {"repobilityId": "8a80f731f9f77826", "scanner": "scanner-primary", "fingerprint": "32c1ad8eb607ef08", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-d7ba609ada9285b3", "level": "error", "message": {"text": "Dangling fetch: GET /fhir/metadata (backend-ts/tests/integration/security-hardening.test.ts:104)"}, "properties": {"repobilityId": "e372d6e320b0776c", "scanner": "scanner-primary", "fingerprint": "d7ba609ada9285b3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-b841286015d0d632", "level": "error", "message": {"text": "Dangling fetch: GET /fhir/Patient (backend-ts/tests/integration/fhir-scope.test.ts:68)"}, "properties": {"repobilityId": "e486af8ee3246fd8", "scanner": "scanner-primary", "fingerprint": "b841286015d0d632", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-d392aa803c7685ab", "level": "error", "message": {"text": "Dangling fetch: GET /fhir/Patient (backend-ts/tests/integration/fhir-scope.test.ts:78)"}, "properties": {"repobilityId": "1c74778c1012b7c5", "scanner": "scanner-primary", "fingerprint": "d392aa803c7685ab", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-f1110524a3bf7140", "level": "error", "message": {"text": "Dangling fetch: GET /fhir/Observation (backend-ts/tests/integration/fhir-scope.test.ts:91)"}, "properties": {"repobilityId": "c34719ee2a281709", "scanner": "scanner-primary", "fingerprint": "f1110524a3bf7140", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-2f1990c03f93194d", "level": "error", "message": {"text": "Dangling fetch: GET /fhir/Patient (backend-ts/tests/integration/fhir-scope.test.ts:96)"}, "properties": {"repobilityId": "52a99f9491fff0d4", "scanner": "scanner-primary", "fingerprint": "2f1990c03f93194d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-4ee5541f60ed4a2d", "level": "error", "message": {"text": "Dangling fetch: GET /fhir/Patient/${HASHED_ID} (backend-ts/tests/integration/fhir-scope.test.ts:105)"}, "properties": {"repobilityId": "c538cefec8a5ee46", "scanner": "scanner-primary", "fingerprint": "4ee5541f60ed4a2d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-dfe358227539cd6e", "level": "error", "message": {"text": "Dangling fetch: GET /fhir/metadata (backend-ts/tests/integration/fhir-scope.test.ts:116)"}, "properties": {"repobilityId": "11663ecfdd995f02", "scanner": "scanner-primary", "fingerprint": "dfe358227539cd6e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-57fea04e0f76f221", "level": "error", "message": {"text": "Dangling fetch: GET /fhir/.well-known/smart-configuration (backend-ts/tests/integration/fhir-scope.test.ts:118)"}, "properties": {"repobilityId": "2068c12e26d66248", "scanner": "scanner-primary", "fingerprint": "57fea04e0f76f221", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-a8bbb6dada26f724", "level": "error", "message": {"text": "Dangling fetch: GET /fhir/Patient (backend-ts/tests/integration/fhir-scope.test.ts:138)"}, "properties": {"repobilityId": "e8410be1a21d5792", "scanner": "scanner-primary", "fingerprint": "a8bbb6dada26f724", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-bc5d916ea12cd166", "level": "error", "message": {"text": "Dangling fetch: POST /fhir/import (backend-ts/tests/integration/fhir-import.test.ts:24)"}, "properties": {"repobilityId": "c45f033c8a6550b0", "scanner": "scanner-primary", "fingerprint": "bc5d916ea12cd166", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-d345fa90f5de3745", "level": "note", "message": {"text": "Unused endpoint: GET /authorize"}, "properties": {"repobilityId": "bf62d72e131ed528", "scanner": "scanner-primary", "fingerprint": "d345fa90f5de3745", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-77c5ceda96d06640", "level": "note", "message": {"text": "Unused endpoint: POST /launch-context"}, "properties": {"repobilityId": "d69f06fbb05037f6", "scanner": "scanner-primary", "fingerprint": "77c5ceda96d06640", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-358815753e8867f1", "level": "note", "message": {"text": "Unused endpoint: POST /token"}, "properties": {"repobilityId": "badf4d53af3683ae", "scanner": "scanner-primary", "fingerprint": "358815753e8867f1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-72f99d58636b648b", "level": "note", "message": {"text": "Unused endpoint: GET /logs"}, "properties": {"repobilityId": "518d2693993c50b3", "scanner": "scanner-primary", "fingerprint": "72f99d58636b648b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-059430d5f3ac5090", "level": "note", "message": {"text": "Unused endpoint: POST /log"}, "properties": {"repobilityId": "0b3daf23718bbea2", "scanner": "scanner-primary", "fingerprint": "059430d5f3ac5090", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-4629fce546b5a836", "level": "note", "message": {"text": "Unused endpoint: GET /patient-states"}, "properties": {"repobilityId": "f7c844e8b25199a3", "scanner": "scanner-primary", "fingerprint": "4629fce546b5a836", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3d10387adb9b339f", "level": "note", "message": {"text": "Unused endpoint: DELETE /logs"}, "properties": {"repobilityId": "e2cbc632f2bb59f0", "scanner": "scanner-primary", "fingerprint": "3d10387adb9b339f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a6b2798fc4f76b47", "level": "note", "message": {"text": "Unused endpoint: DELETE /logs/:logId"}, "properties": {"repobilityId": "39d9d1eb7d6b85cf", "scanner": "scanner-primary", "fingerprint": "a6b2798fc4f76b47", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-36eb7064f49a4399", "level": "note", "message": {"text": "Unused endpoint: DELETE /patient/:patientId"}, "properties": {"repobilityId": "76598dd1f40e631c", "scanner": "scanner-primary", "fingerprint": "36eb7064f49a4399", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3dd0f676a84f9d65", "level": "note", "message": {"text": "Unused endpoint: GET /latest-dates"}, "properties": {"repobilityId": "d485ad87feab1a2d", "scanner": "scanner-primary", "fingerprint": "3dd0f676a84f9d65", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2623971938f397ce", "level": "note", "message": {"text": "Unused endpoint: GET /audit-log"}, "properties": {"repobilityId": "58656c44bcfbb4ac", "scanner": "scanner-primary", "fingerprint": "2623971938f397ce", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3ede41489d0ecc9f", "level": "note", "message": {"text": "Unused endpoint: POST /upload-structured"}, "properties": {"repobilityId": "d6cdb0bc1e4799ae", "scanner": "scanner-primary", "fingerprint": "3ede41489d0ecc9f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-9cc84c5e3dc3ff77", "level": "note", "message": {"text": "Unused endpoint: GET /metadata"}, "properties": {"repobilityId": "b6e7b9fd944e200b", "scanner": "scanner-primary", "fingerprint": "9cc84c5e3dc3ff77", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-28253d10b21af9ad", "level": "note", "message": {"text": "Unused endpoint: USE /Patient"}, "properties": {"repobilityId": "fde7c96b9ac4238c", "scanner": "scanner-primary", "fingerprint": "28253d10b21af9ad", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e0b0d3925e252d96", "level": "note", "message": {"text": "Unused endpoint: USE /Patient/*"}, "properties": {"repobilityId": "5f1977222a4f4101", "scanner": "scanner-primary", "fingerprint": "e0b0d3925e252d96", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a4dfef42577780fc", "level": "note", "message": {"text": "Unused endpoint: GET /Patient"}, "properties": {"repobilityId": "ee618849b1129f90", "scanner": "scanner-primary", "fingerprint": "a4dfef42577780fc", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5aff5eeb1ded98fd", "level": "note", "message": {"text": "Unused endpoint: GET /Patient/:patientId"}, "properties": {"repobilityId": "8afde6990c51d32a", "scanner": "scanner-primary", "fingerprint": "5aff5eeb1ded98fd", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e686634beeea0bb8", "level": "note", "message": {"text": "Unused endpoint: GET /export"}, "properties": {"repobilityId": "5bb60c5520b1a7c1", "scanner": "scanner-primary", "fingerprint": "e686634beeea0bb8", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-be4cb5e3cabcce80", "level": "note", "message": {"text": "Unused endpoint: POST /import"}, "properties": {"repobilityId": "c4ef9abedda79669", "scanner": "scanner-primary", "fingerprint": "be4cb5e3cabcce80", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}