{"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-50724b91faecc131", "name": "Possibly dead Python function: major_muscle_frequencies", "shortDescription": {"text": "Possibly dead Python function: major_muscle_frequencies"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1bee720a2cbe54fa", "name": "Possibly dead Python function: bulk_insert_activity_summaries", "shortDescription": {"text": "Possibly dead Python function: bulk_insert_activity_summaries"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-03d579f60d4f28e4", "name": "Possibly dead Python function: query_metric", "shortDescription": {"text": "Possibly dead Python function: query_metric"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d2283cb8b3384478", "name": "Possibly dead Python function: query_category", "shortDescription": {"text": "Possibly dead Python function: query_category"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-efa11076f4221118", "name": "Possibly dead Python function: do_run_migrations", "shortDescription": {"text": "Possibly dead Python function: do_run_migrations"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a4481ade857e1e76", "name": "Possibly dead Python function: upgrade", "shortDescription": {"text": "Possibly dead Python function: upgrade"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-50c8863b1c614c9a", "name": "Possibly dead Python function: downgrade", "shortDescription": {"text": "Possibly dead Python function: downgrade"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-fc04ca40c5dfbbc8", "name": "Possibly dead Python function: upgrade", "shortDescription": {"text": "Possibly dead Python function: upgrade"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-81ff6626ff2f286a", "name": "Possibly dead Python function: downgrade", "shortDescription": {"text": "Possibly dead Python function: downgrade"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b5c98947cfca9766", "name": "Possibly dead Python function: upgrade", "shortDescription": {"text": "Possibly dead Python function: upgrade"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-68239fd8cdf11537", "name": "Possibly dead Python function: downgrade", "shortDescription": {"text": "Possibly dead Python function: downgrade"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-718feac6d8c39d09", "name": "Possibly dead Python function: upgrade", "shortDescription": {"text": "Possibly dead Python function: upgrade"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-000cb71aa7fb5fe9", "name": "Possibly dead Python function: downgrade", "shortDescription": {"text": "Possibly dead Python function: downgrade"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-582e1e604edbde8e", "name": "Possibly dead Python function: upgrade", "shortDescription": {"text": "Possibly dead Python function: upgrade"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-eb614ec69f6297b5", "name": "Possibly dead Python function: downgrade", "shortDescription": {"text": "Possibly dead Python function: downgrade"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-bce2604a489a25a5", "name": "Possibly dead Python function: upgrade", "shortDescription": {"text": "Possibly dead Python function: upgrade"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-724b77a7ed4a95f2", "name": "Possibly dead Python function: downgrade", "shortDescription": {"text": "Possibly dead Python function: downgrade"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-11e6b6d25bf2a620", "name": "Possibly dead Python function: upgrade", "shortDescription": {"text": "Possibly dead Python function: upgrade"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-02ca57beaf09da43", "name": "Possibly dead Python function: downgrade", "shortDescription": {"text": "Possibly dead Python function: downgrade"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d79827f501db67c8", "name": "Possibly dead Python function: upgrade", "shortDescription": {"text": "Possibly dead Python function: upgrade"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-008f1d7a6cb46414", "name": "Possibly dead Python function: downgrade", "shortDescription": {"text": "Possibly dead Python function: downgrade"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c5c2938fa79d9185", "name": "Possibly dead Python function: upgrade", "shortDescription": {"text": "Possibly dead Python function: upgrade"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d63da3583b14afc0", "name": "Dockerfile runs as root: Dockerfile", "shortDescription": {"text": "Dockerfile runs as root: Dockerfile"}, "fullDescription": {"text": "No non-root USER set. Containers running as root expand the blast radius of any vulnerability inside the image."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-8987d6d1c30c7202", "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-de3c1f217d72a063", "name": "Docker base image is tag-pinned but not digest-pinned: python:3.12-slim", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: python:3.12-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-60427b03771411b6", "name": "Dockerfile runs as root: frontend/Dockerfile", "shortDescription": {"text": "Dockerfile runs as root: frontend/Dockerfile"}, "fullDescription": {"text": "No non-root USER set. Containers running as root expand the blast radius of any vulnerability inside the image."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "medium", "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-1f66ad88286ca30a", "name": "Dockerfile runs as root: backend/Dockerfile", "shortDescription": {"text": "Dockerfile runs as root: backend/Dockerfile"}, "fullDescription": {"text": "No non-root USER set. Containers running as root expand the blast radius of any vulnerability inside the image."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-714c31ca9f474ae6", "name": "Docker base image is tag-pinned but not digest-pinned: python:3.12-slim", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: python:3.12-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-9710c8d059e53154", "name": "No frontend routes/components detected", "shortDescription": {"text": "No frontend routes/components detected"}, "fullDescription": {"text": "No React/Vue/Next routes were found. This is fine for backend-only repos."}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-141b30a41e03817b", "name": "No license file detected", "shortDescription": {"text": "No license file detected"}, "fullDescription": {"text": "No LICENSE/COPYING/NOTICE file was found. Generated repositories often omit licensing, which blocks reuse and automated intake."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-faccb9061e9b52a0", "name": "No README detected", "shortDescription": {"text": "No README detected"}, "fullDescription": {"text": "No README file was found. Generated repos without README context are hard to operate, validate, or safely hand off."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3ab5d313dda8e5f9", "name": "Debug logging residue appears in source files", "shortDescription": {"text": "Debug logging residue appears in source files"}, "fullDescription": {"text": "Found 9 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-2d0c7b7ab8f8aacf", "name": "Critical user flow still appears backed by mock or placeholder data", "shortDescription": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "fullDescription": {"text": "A payment/auth/admin/order/billing-style flow contains mock, fake, TODO, dummy, or placeholder markers in runtime source. In the Fable corpus this is a high-leverage completeness smell: the app can look finished while the money, identity, or tenant flow is still scaffolded."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b9088664ace7f748", "name": "Composite production-readiness gap", "shortDescription": {"text": "Composite production-readiness gap"}, "fullDescription": {"text": "Multiple low-cost hardening controls are missing together: license, operator-readme. Opus verification showed these co-occurring gaps are a better readiness signal than reading each flag in isolation."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-749d4bc1bd66df5f", "name": "Agent instructions exist but release-hardening basics are missing", "shortDescription": {"text": "Agent instructions exist but release-hardening basics are missing"}, "fullDescription": {"text": "AI-coder instruction files were found, but the repo is missing license, operator-readme. Treat this as a contract gap: the agent is guided, but the generated output is not yet guarded by the controls that make it repeatable."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-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-632712e8aa2e6b41", "name": "Commented-code block (11 lines) in frontend/vite.config.ts:13", "shortDescription": {"text": "Commented-code block (11 lines) in frontend/vite.config.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-41bfb41f12127606", "name": "Commented-code block (5 lines) in frontend/src/app.d.ts:11", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/app.d.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-0755bb502be8e4bd", "name": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/hooks.server.ts:26", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/hooks.server.ts:26"}, "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-0193c6f34855753c", "name": "Commented-code block (6 lines) in frontend/src/lib/nutrition.ts:3", "shortDescription": {"text": "Commented-code block (6 lines) in frontend/src/lib/nutrition.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-8e86e54c1c0371d0", "name": "Commented-code block (6 lines) in frontend/src/lib/warmup.ts:3", "shortDescription": {"text": "Commented-code block (6 lines) in frontend/src/lib/warmup.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-d428f2b0030f0ebe", "name": "Commented-code block (6 lines) in frontend/src/lib/rest-timer.ts:3", "shortDescription": {"text": "Commented-code block (6 lines) in frontend/src/lib/rest-timer.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-f9029bd0131d7968", "name": "Commented-code block (5 lines) in frontend/src/lib/readiness.ts:3", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/lib/readiness.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-ef0c02d3fc687864", "name": "Commented-code block (11 lines) in frontend/src/lib/dashboard.test.ts:10", "shortDescription": {"text": "Commented-code block (11 lines) in frontend/src/lib/dashboard.test.ts:10"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6d44141ec533fede", "name": "Commented-code block (5 lines) in frontend/src/lib/superset.test.ts:9", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/lib/superset.test.ts:9"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ae31bcf37076733e", "name": "Commented-code block (6 lines) in frontend/src/lib/superset.ts:3", "shortDescription": {"text": "Commented-code block (6 lines) in frontend/src/lib/superset.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-16e403f0b2c9e5ee", "name": "Commented-code block (6 lines) in frontend/src/lib/export.ts:3", "shortDescription": {"text": "Commented-code block (6 lines) in frontend/src/lib/export.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-c3f01f54aaaa13e2", "name": "Commented-code block (5 lines) in frontend/src/lib/plates.ts:61", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/lib/plates.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-c9b825534a88360b", "name": "Commented-code block (5 lines) in frontend/src/lib/connections.ts:3", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/lib/connections.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-6c4ca046c89594bc", "name": "Commented-code block (5 lines) in frontend/src/lib/budget.ts:3", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/lib/budget.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-be7934a6275405d6", "name": "Commented-code block (7 lines) in frontend/src/lib/nav.ts:4", "shortDescription": {"text": "Commented-code block (7 lines) in frontend/src/lib/nav.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-a41e19fe3f892da1", "name": "Commented-code block (7 lines) in frontend/src/lib/muscle-heat.ts:7", "shortDescription": {"text": "Commented-code block (7 lines) in frontend/src/lib/muscle-heat.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-b203d8aaaae7484f", "name": "Commented-code block (5 lines) in frontend/src/lib/barcode.ts:3", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/lib/barcode.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-60279c85d9c6e0d3", "name": "Commented-code block (5 lines) in frontend/src/lib/fitbod.ts:3", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/lib/fitbod.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-1cfce1fff73cfc07", "name": "Commented-code block (5 lines) in frontend/src/lib/sync/engine.test.ts:3", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/lib/sync/engine.test.ts:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-733cf184c7e489f3", "name": "Commented-code block (5 lines) in frontend/src/lib/sync/queue.test.ts:17", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/lib/sync/queue.test.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-e8a87aa722fed85f", "name": "Commented-code block (6 lines) in frontend/src/lib/sync/queue.ts:371", "shortDescription": {"text": "Commented-code block (6 lines) in frontend/src/lib/sync/queue.ts:371"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-22c9559fc232f010", "name": "Commented-code block (5 lines) in frontend/src/lib/ui/theme.ts:3", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/lib/ui/theme.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-b0b8ef8c3f3bd769", "name": "Commented-code block (6 lines) in frontend/src/lib/ui/chart-theme.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in frontend/src/lib/ui/chart-theme.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-1b1ba2f08fe1e82e", "name": "Commented-code block (6 lines) in backend/tests/test_sessions_api.py:398", "shortDescription": {"text": "Commented-code block (6 lines) in backend/tests/test_sessions_api.py:398"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c6b006245a957001", "name": "Commented-code block (5 lines) in backend/tests/test_rollup_read_path.py:157", "shortDescription": {"text": "Commented-code block (5 lines) in backend/tests/test_rollup_read_path.py:157"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b8d6fe9218014866", "name": "Commented-code block (5 lines) in backend/tests/test_programs_api.py:136", "shortDescription": {"text": "Commented-code block (5 lines) in backend/tests/test_programs_api.py:136"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0e23d548043e6308", "name": "Commented-code block (5 lines) in backend/tests/test_pr_service.py:207", "shortDescription": {"text": "Commented-code block (5 lines) in backend/tests/test_pr_service.py:207"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c3024399c44423f4", "name": "Commented-code block (7 lines) in backend/app/config.py:19", "shortDescription": {"text": "Commented-code block (7 lines) in backend/app/config.py:19"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1c643bab2b1ba4b5", "name": "Commented-code block (5 lines) in backend/app/main.py:41", "shortDescription": {"text": "Commented-code block (5 lines) in backend/app/main.py: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-6b7852048367fb19", "name": "Commented-code block (5 lines) in backend/app/models/exercise.py:73", "shortDescription": {"text": "Commented-code block (5 lines) in backend/app/models/exercise.py:73"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-866310852e934bcf", "name": "Commented-code block (6 lines) in backend/app/api/metrics.py:234", "shortDescription": {"text": "Commented-code block (6 lines) in backend/app/api/metrics.py:234"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8098ec7f150a7c07", "name": "Commented-code block (7 lines) in backend/app/api/dashboard.py:89", "shortDescription": {"text": "Commented-code block (7 lines) in backend/app/api/dashboard.py:89"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-95f39ea2ff969ba3", "name": "Commented-code block (7 lines) in backend/app/services/program_templates.py:82", "shortDescription": {"text": "Commented-code block (7 lines) in backend/app/services/program_templates.py:82"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f4e82bdf5a5590e1", "name": "Commented-code block (9 lines) in backend/app/services/fitbod_import.py:229", "shortDescription": {"text": "Commented-code block (9 lines) in backend/app/services/fitbod_import.py:229"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2c8e5262af9c168f", "name": "Commented-code block (5 lines) in backend/app/services/rollup.py:95", "shortDescription": {"text": "Commented-code block (5 lines) in backend/app/services/rollup.py:95"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fee534b425ea31b3", "name": "Commented-code block (5 lines) in backend/app/services/export_archive.py:503", "shortDescription": {"text": "Commented-code block (5 lines) in backend/app/services/export_archive.py:503"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d0ef524f0b06903c", "name": "Commented-code block (6 lines) in backend/app/services/pr.py:45", "shortDescription": {"text": "Commented-code block (6 lines) in backend/app/services/pr.py: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-429a5284deab7d88", "name": "Commented-code block (5 lines) in backend/app/services/seed_principles.py:449", "shortDescription": {"text": "Commented-code block (5 lines) in backend/app/services/seed_principles.py:449"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-28e5fdefec209f93", "name": "Commented-code block (5 lines) in backend/app/services/program_generation.py:496", "shortDescription": {"text": "Commented-code block (5 lines) in backend/app/services/program_generation.py:496"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8fc450d8a694162c", "name": "Commented-code block (5 lines) in backend/app/migrations_support/user_reconciliation.py:39", "shortDescription": {"text": "Commented-code block (5 lines) in backend/app/migrations_support/user_reconciliation.py: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-319e66a630e14977", "name": "2 env vars used in code but missing from .env.example", "shortDescription": {"text": "2 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `API_BACKEND_URL`, `ROLLUP_REBUILD`. Add them (with a placeholder/comment) to .env.example so onboarding doesn't break."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2c04133e54348533", "name": "Near-duplicate function bodies in 2 places", "shortDescription": {"text": "Near-duplicate function bodies in 2 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nbackend/app/services/fitbod_parser.py:exercise_names, backend/app/services/fitbod_parser.py:exercise_names\n\nThis is *the* AI-coder failure mode (4\u00d7 more duplication in vibe-coded repos \u2014 see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4756b4c4da7d2088", "name": "Unused endpoint: GET /api/health", "shortDescription": {"text": "Unused endpoint: GET /api/health"}, "fullDescription": {"text": "`backend/app/main.py` declares `GET /api/health` 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-4ba3ea8eb248030a", "name": "Unused endpoint: GET /available", "shortDescription": {"text": "Unused endpoint: GET /available"}, "fullDescription": {"text": "`backend/app/api/metrics.py` declares `GET /available` 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-11eb33d55a8df347", "name": "Unused endpoint: GET /{metric_type}", "shortDescription": {"text": "Unused endpoint: GET /{metric_type}"}, "fullDescription": {"text": "`backend/app/api/metrics.py` declares `GET /{metric_type}` 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-5baa8971ebe192a1", "name": "Unused endpoint: GET /", "shortDescription": {"text": "Unused endpoint: GET /"}, "fullDescription": {"text": "`backend/app/api/connections.py` declares `GET /` 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-7a009b1a56794f45", "name": "Unused endpoint: POST /", "shortDescription": {"text": "Unused endpoint: POST /"}, "fullDescription": {"text": "`backend/app/api/connections.py` declares `POST /` 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-57af10b6b7105a20", "name": "Unused endpoint: POST /{provider}/sync", "shortDescription": {"text": "Unused endpoint: POST /{provider}/sync"}, "fullDescription": {"text": "`backend/app/api/connections.py` declares `POST /{provider}/sync` 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-6bfc3dd5fa934c7a", "name": "Unused endpoint: DELETE /{provider}", "shortDescription": {"text": "Unused endpoint: DELETE /{provider}"}, "fullDescription": {"text": "`backend/app/api/connections.py` declares `DELETE /{provider}` 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-67d28fa8cd6bb12f", "name": "Unused endpoint: PUT /", "shortDescription": {"text": "Unused endpoint: PUT /"}, "fullDescription": {"text": "`backend/app/api/gym_profile.py` declares `PUT /` 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-b5ff561d490095d9", "name": "Unused endpoint: GET /muscles", "shortDescription": {"text": "Unused endpoint: GET /muscles"}, "fullDescription": {"text": "`backend/app/api/exercises.py` declares `GET /muscles` 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-ea32a4501747c171", "name": "Unused endpoint: GET /equipment", "shortDescription": {"text": "Unused endpoint: GET /equipment"}, "fullDescription": {"text": "`backend/app/api/exercises.py` declares `GET /equipment` 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-38f511ef2280a9c8", "name": "Unused endpoint: GET /{exercise_id}", "shortDescription": {"text": "Unused endpoint: GET /{exercise_id}"}, "fullDescription": {"text": "`backend/app/api/exercises.py` declares `GET /{exercise_id}` 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-4aa46e154bfc9432", "name": "Unused endpoint: GET /{exercise_id}/rest", "shortDescription": {"text": "Unused endpoint: GET /{exercise_id}/rest"}, "fullDescription": {"text": "`backend/app/api/exercises.py` declares `GET /{exercise_id}/rest` 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-08a5fe190212eb80", "name": "Unused endpoint: PUT /{exercise_id}/rest", "shortDescription": {"text": "Unused endpoint: PUT /{exercise_id}/rest"}, "fullDescription": {"text": "`backend/app/api/exercises.py` declares `PUT /{exercise_id}/rest` 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-e1b7bee247ffc801", "name": "Unused endpoint: GET /summary", "shortDescription": {"text": "Unused endpoint: GET /summary"}, "fullDescription": {"text": "`backend/app/api/dashboard.py` declares `GET /summary` 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-fd1dc91abf32142d", "name": "Unused endpoint: GET /me", "shortDescription": {"text": "Unused endpoint: GET /me"}, "fullDescription": {"text": "`backend/app/api/auth.py` declares `GET /me` 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-860fd5fa46f30b50", "name": "Unused endpoint: GET /recovery", "shortDescription": {"text": "Unused endpoint: GET /recovery"}, "fullDescription": {"text": "`backend/app/api/analytics.py` declares `GET /recovery` 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-4d806e073ce0c13f", "name": "Unused endpoint: GET /volume", "shortDescription": {"text": "Unused endpoint: GET /volume"}, "fullDescription": {"text": "`backend/app/api/analytics.py` declares `GET /volume` 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-2cb43a71511872fc", "name": "Unused endpoint: GET /e1rm-trend", "shortDescription": {"text": "Unused endpoint: GET /e1rm-trend"}, "fullDescription": {"text": "`backend/app/api/analytics.py` declares `GET /e1rm-trend` 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-23c25e9182fa24b3", "name": "Unused endpoint: GET /exercises", "shortDescription": {"text": "Unused endpoint: GET /exercises"}, "fullDescription": {"text": "`backend/app/api/analytics.py` declares `GET /exercises` 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-6236b283b79811b8", "name": "Unused endpoint: POST /upload", "shortDescription": {"text": "Unused endpoint: POST /upload"}, "fullDescription": {"text": "`backend/app/api/ingestion.py` declares `POST /upload` 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-3558cff1ead0b5fe", "name": "Unused endpoint: GET /uploads", "shortDescription": {"text": "Unused endpoint: GET /uploads"}, "fullDescription": {"text": "`backend/app/api/ingestion.py` declares `GET /uploads` 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-e40a730c6acd81f2", "name": "Unused endpoint: GET /upload/status/{batch_id}", "shortDescription": {"text": "Unused endpoint: GET /upload/status/{batch_id}"}, "fullDescription": {"text": "`backend/app/api/ingestion.py` declares `GET /upload/status/{batch_id}` 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-0fad80a11be56359", "name": "Unused endpoint: POST /upload/{batch_id}/cancel", "shortDescription": {"text": "Unused endpoint: POST /upload/{batch_id}/cancel"}, "fullDescription": {"text": "`backend/app/api/ingestion.py` declares `POST /upload/{batch_id}/cancel` 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-5a39cf19d2f4ca9b", "name": "Unused endpoint: DELETE /upload/{batch_id}", "shortDescription": {"text": "Unused endpoint: DELETE /upload/{batch_id}"}, "fullDescription": {"text": "`backend/app/api/ingestion.py` declares `DELETE /upload/{batch_id}` 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-799999784a970535", "name": "Unused endpoint: POST /upload/{batch_id}/reprocess", "shortDescription": {"text": "Unused endpoint: POST /upload/{batch_id}/reprocess"}, "fullDescription": {"text": "`backend/app/api/ingestion.py` declares `POST /upload/{batch_id}/reprocess` 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-6c185887729d6d68", "name": "Unused endpoint: POST /fitbod/preview", "shortDescription": {"text": "Unused endpoint: POST /fitbod/preview"}, "fullDescription": {"text": "`backend/app/api/fitbod.py` declares `POST /fitbod/preview` 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-cb11b3a7904ce6bb", "name": "Unused endpoint: POST /fitbod/commit", "shortDescription": {"text": "Unused endpoint: POST /fitbod/commit"}, "fullDescription": {"text": "`backend/app/api/fitbod.py` declares `POST /fitbod/commit` 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-9260174de75b32ba", "name": "Unused endpoint: GET /categories", "shortDescription": {"text": "Unused endpoint: GET /categories"}, "fullDescription": {"text": "`backend/app/api/principles.py` declares `GET /categories` 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-d789462128461661", "name": "Unused endpoint: GET /{key}", "shortDescription": {"text": "Unused endpoint: GET /{key}"}, "fullDescription": {"text": "`backend/app/api/principles.py` declares `GET /{key}` 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-71350d9b407d1e8b", "name": "Unused endpoint: GET /rings", "shortDescription": {"text": "Unused endpoint: GET /rings"}, "fullDescription": {"text": "`backend/app/api/activity.py` declares `GET /rings` 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-e3a64f73908ebbf2", "name": "Unused endpoint: GET /presets", "shortDescription": {"text": "Unused endpoint: GET /presets"}, "fullDescription": {"text": "`backend/app/api/programs.py` declares `GET /presets` 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-8565e855243fdbde", "name": "Unused endpoint: GET /quiz-options", "shortDescription": {"text": "Unused endpoint: GET /quiz-options"}, "fullDescription": {"text": "`backend/app/api/programs.py` declares `GET /quiz-options` 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-970eb92d6ec2bfaa", "name": "Unused endpoint: POST /generate", "shortDescription": {"text": "Unused endpoint: POST /generate"}, "fullDescription": {"text": "`backend/app/api/programs.py` declares `POST /generate` 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-72eb8a13269a8eb3", "name": "Unused endpoint: GET /active", "shortDescription": {"text": "Unused endpoint: GET /active"}, "fullDescription": {"text": "`backend/app/api/programs.py` declares `GET /active` 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-223a367b1ab5eced", "name": "Unused endpoint: GET /{program_id}", "shortDescription": {"text": "Unused endpoint: GET /{program_id}"}, "fullDescription": {"text": "`backend/app/api/programs.py` declares `GET /{program_id}` 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-d8ccf527cabfa8da", "name": "Unused endpoint: POST /{program_id}/activate", "shortDescription": {"text": "Unused endpoint: POST /{program_id}/activate"}, "fullDescription": {"text": "`backend/app/api/programs.py` declares `POST /{program_id}/activate` 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-b5446a2ea73148be", "name": "Unused endpoint: DELETE /{program_id}", "shortDescription": {"text": "Unused endpoint: DELETE /{program_id}"}, "fullDescription": {"text": "`backend/app/api/programs.py` declares `DELETE /{program_id}` 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-ec5cca0d9ba2dc3e", "name": "Unused endpoint: GET /freestyle", "shortDescription": {"text": "Unused endpoint: GET /freestyle"}, "fullDescription": {"text": "`backend/app/api/recommendations.py` declares `GET /freestyle` 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-97d48a53a9b404e9", "name": "Unused endpoint: POST /freestyle/start", "shortDescription": {"text": "Unused endpoint: POST /freestyle/start"}, "fullDescription": {"text": "`backend/app/api/recommendations.py` declares `POST /freestyle/start` 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-b9c041dc087ff77f", "name": "Unused endpoint: GET /today", "shortDescription": {"text": "Unused endpoint: GET /today"}, "fullDescription": {"text": "`backend/app/api/recommendations.py` declares `GET /today` 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-a9f86580f025061e", "name": "Unused endpoint: POST /today/start", "shortDescription": {"text": "Unused endpoint: POST /today/start"}, "fullDescription": {"text": "`backend/app/api/recommendations.py` declares `POST /today/start` 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-fcb1b5473a4a7217", "name": "Unused endpoint: POST /adjust", "shortDescription": {"text": "Unused endpoint: POST /adjust"}, "fullDescription": {"text": "`backend/app/api/recommendations.py` declares `POST /adjust` 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-a9c8c6a6d961e3b5", "name": "Unused endpoint: POST /adjust/start", "shortDescription": {"text": "Unused endpoint: POST /adjust/start"}, "fullDescription": {"text": "`backend/app/api/recommendations.py` declares `POST /adjust/start` 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-52390c4f83ba5356", "name": "Unused endpoint: GET /{workout_id}", "shortDescription": {"text": "Unused endpoint: GET /{workout_id}"}, "fullDescription": {"text": "`backend/app/api/workouts.py` declares `GET /{workout_id}` 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-dd39d3c6308c07b5", "name": "Unused endpoint: GET /foods", "shortDescription": {"text": "Unused endpoint: GET /foods"}, "fullDescription": {"text": "`backend/app/api/nutrition.py` declares `GET /foods` 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-0151f31051234d93", "name": "Unused endpoint: GET /foods/{food_id}", "shortDescription": {"text": "Unused endpoint: GET /foods/{food_id}"}, "fullDescription": {"text": "`backend/app/api/nutrition.py` declares `GET /foods/{food_id}` 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-693bfc7c32836cf7", "name": "Unused endpoint: GET /barcode/{code}", "shortDescription": {"text": "Unused endpoint: GET /barcode/{code}"}, "fullDescription": {"text": "`backend/app/api/nutrition.py` declares `GET /barcode/{code}` 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-6eaa5764d9000fdf", "name": "Unused endpoint: POST /foods", "shortDescription": {"text": "Unused endpoint: POST /foods"}, "fullDescription": {"text": "`backend/app/api/nutrition.py` declares `POST /foods` 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-69ee540b2f860442", "name": "Unused endpoint: PATCH /foods/{food_id}", "shortDescription": {"text": "Unused endpoint: PATCH /foods/{food_id}"}, "fullDescription": {"text": "`backend/app/api/nutrition.py` declares `PATCH /foods/{food_id}` 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-4db7fac790e17b9e", "name": "Unused endpoint: DELETE /foods/{food_id}", "shortDescription": {"text": "Unused endpoint: DELETE /foods/{food_id}"}, "fullDescription": {"text": "`backend/app/api/nutrition.py` declares `DELETE /foods/{food_id}` 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/22233"}, "properties": {"repository": "ViktorBarzin/health", "repoUrl": "https://github.com/ViktorBarzin/health", "branch": "main"}, "results": [{"ruleId": "scanner-50724b91faecc131", "level": "note", "message": {"text": "Possibly dead Python function: major_muscle_frequencies"}, "properties": {"repobilityId": "3860de7e3b60771a", "scanner": "scanner-primary", "fingerprint": "50724b91faecc131", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/services/program_templates.py:157"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-1bee720a2cbe54fa", "level": "note", "message": {"text": "Possibly dead Python function: bulk_insert_activity_summaries"}, "properties": {"repobilityId": "702601154c134f01", "scanner": "scanner-primary", "fingerprint": "1bee720a2cbe54fa", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/services/dedup.py:196"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-03d579f60d4f28e4", "level": "note", "message": {"text": "Possibly dead Python function: query_metric"}, "properties": {"repobilityId": "7227cfed8d0e4184", "scanner": "scanner-primary", "fingerprint": "03d579f60d4f28e4", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/services/aggregation.py:38"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-d2283cb8b3384478", "level": "note", "message": {"text": "Possibly dead Python function: query_category"}, "properties": {"repobilityId": "3b79c18a901a77fc", "scanner": "scanner-primary", "fingerprint": "d2283cb8b3384478", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/services/aggregation.py:307"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-efa11076f4221118", "level": "note", "message": {"text": "Possibly dead Python function: do_run_migrations"}, "properties": {"repobilityId": "087acb17722cfd2f", "scanner": "scanner-primary", "fingerprint": "efa11076f4221118", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/alembic/env.py:36"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-a4481ade857e1e76", "level": "note", "message": {"text": "Possibly dead Python function: upgrade"}, "properties": {"repobilityId": "cf0b8e5e6e2f8bc4", "scanner": "scanner-primary", "fingerprint": "a4481ade857e1e76", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/alembic/versions/c4d8e2f6a1b3_add_workout_dedup_constraint.py:17"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-50c8863b1c614c9a", "level": "note", "message": {"text": "Possibly dead Python function: downgrade"}, "properties": {"repobilityId": "c03debbf11efa0c5", "scanner": "scanner-primary", "fingerprint": "50c8863b1c614c9a", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/alembic/versions/c4d8e2f6a1b3_add_workout_dedup_constraint.py:46"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-fc04ca40c5dfbbc8", "level": "note", "message": {"text": "Possibly dead Python function: upgrade"}, "properties": {"repobilityId": "cf0b8e5e6e2f8bc4", "scanner": "scanner-primary", "fingerprint": "fc04ca40c5dfbbc8", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/alembic/versions/a1b2c3d4e5f6_add_principles_kb.py:52"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-81ff6626ff2f286a", "level": "note", "message": {"text": "Possibly dead Python function: downgrade"}, "properties": {"repobilityId": "c03debbf11efa0c5", "scanner": "scanner-primary", "fingerprint": "81ff6626ff2f286a", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/alembic/versions/a1b2c3d4e5f6_add_principles_kb.py:115"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-b5c98947cfca9766", "level": "note", "message": {"text": "Possibly dead Python function: upgrade"}, "properties": {"repobilityId": "cf0b8e5e6e2f8bc4", "scanner": "scanner-primary", "fingerprint": "b5c98947cfca9766", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/alembic/versions/f6a7b8c9d0e1_add_metric_daily_rollup.py:31"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-68239fd8cdf11537", "level": "note", "message": {"text": "Possibly dead Python function: downgrade"}, "properties": {"repobilityId": "c03debbf11efa0c5", "scanner": "scanner-primary", "fingerprint": "68239fd8cdf11537", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/alembic/versions/f6a7b8c9d0e1_add_metric_daily_rollup.py:51"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-718feac6d8c39d09", "level": "note", "message": {"text": "Possibly dead Python function: upgrade"}, "properties": {"repobilityId": "cf0b8e5e6e2f8bc4", "scanner": "scanner-primary", "fingerprint": "718feac6d8c39d09", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/alembic/versions/e5f6a7b8c9d0_add_connections.py:50"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-000cb71aa7fb5fe9", "level": "note", "message": {"text": "Possibly dead Python function: downgrade"}, "properties": {"repobilityId": "c03debbf11efa0c5", "scanner": "scanner-primary", "fingerprint": "000cb71aa7fb5fe9", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/alembic/versions/e5f6a7b8c9d0_add_connections.py:88"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-582e1e604edbde8e", "level": "note", "message": {"text": "Possibly dead Python function: upgrade"}, "properties": {"repobilityId": "cf0b8e5e6e2f8bc4", "scanner": "scanner-primary", "fingerprint": "582e1e604edbde8e", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/alembic/versions/e7a9c1d3f5b7_add_personal_records.py:42"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-eb614ec69f6297b5", "level": "note", "message": {"text": "Possibly dead Python function: downgrade"}, "properties": {"repobilityId": "c03debbf11efa0c5", "scanner": "scanner-primary", "fingerprint": "eb614ec69f6297b5", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/alembic/versions/e7a9c1d3f5b7_add_personal_records.py:95"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-bce2604a489a25a5", "level": "note", "message": {"text": "Possibly dead Python function: upgrade"}, "properties": {"repobilityId": "cf0b8e5e6e2f8bc4", "scanner": "scanner-primary", "fingerprint": "bce2604a489a25a5", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/alembic/versions/d4f6a8c0e2b5_add_training_sessions_and_sets.py:39"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-724b77a7ed4a95f2", "level": "note", "message": {"text": "Possibly dead Python function: downgrade"}, "properties": {"repobilityId": "c03debbf11efa0c5", "scanner": "scanner-primary", "fingerprint": "724b77a7ed4a95f2", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/alembic/versions/d4f6a8c0e2b5_add_training_sessions_and_sets.py:96"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-11e6b6d25bf2a620", "level": "note", "message": {"text": "Possibly dead Python function: upgrade"}, "properties": {"repobilityId": "cf0b8e5e6e2f8bc4", "scanner": "scanner-primary", "fingerprint": "11e6b6d25bf2a620", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/alembic/versions/a7d3f9b2c1e4_drop_user_credentials_webauthn.py:25"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-02ca57beaf09da43", "level": "note", "message": {"text": "Possibly dead Python function: downgrade"}, "properties": {"repobilityId": "c03debbf11efa0c5", "scanner": "scanner-primary", "fingerprint": "02ca57beaf09da43", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/alembic/versions/a7d3f9b2c1e4_drop_user_credentials_webauthn.py:30"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-d79827f501db67c8", "level": "note", "message": {"text": "Possibly dead Python function: upgrade"}, "properties": {"repobilityId": "cf0b8e5e6e2f8bc4", "scanner": "scanner-primary", "fingerprint": "d79827f501db67c8", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/alembic/versions/b8c2d4e6f0a1_reconcile_users_to_authentik.py:31"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-008f1d7a6cb46414", "level": "note", "message": {"text": "Possibly dead Python function: downgrade"}, "properties": {"repobilityId": "c03debbf11efa0c5", "scanner": "scanner-primary", "fingerprint": "008f1d7a6cb46414", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/alembic/versions/b8c2d4e6f0a1_reconcile_users_to_authentik.py:35"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-c5c2938fa79d9185", "level": "note", "message": {"text": "Possibly dead Python function: upgrade"}, "properties": {"repobilityId": "cf0b8e5e6e2f8bc4", "scanner": "scanner-primary", "fingerprint": "c5c2938fa79d9185", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/alembic/versions/c9d3e5f7a2b4_add_exercise_library.py:40"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-d63da3583b14afc0", "level": "warning", "message": {"text": "Dockerfile runs as root: Dockerfile"}, "properties": {"repobilityId": "a2ed1bd120e507db", "scanner": "scanner-primary", "fingerprint": "d63da3583b14afc0", "layer": "hardware", "severity": "medium", "confidence": 1.0, "tags": ["security", "container"]}}, {"ruleId": "scanner-8987d6d1c30c7202", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: node:20-alpine"}, "properties": {"repobilityId": "d20562b27640c03c", "scanner": "scanner-primary", "fingerprint": "8987d6d1c30c7202", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "Dockerfile"}, "region": {"startLine": 2}}}]}, {"ruleId": "scanner-de3c1f217d72a063", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: python:3.12-slim"}, "properties": {"repobilityId": "9a01e95d29c7b89d", "scanner": "scanner-primary", "fingerprint": "de3c1f217d72a063", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "Dockerfile"}, "region": {"startLine": 13}}}]}, {"ruleId": "scanner-60427b03771411b6", "level": "warning", "message": {"text": "Dockerfile runs as root: frontend/Dockerfile"}, "properties": {"repobilityId": "735c01d8531dfd2c", "scanner": "scanner-primary", "fingerprint": "60427b03771411b6", "layer": "hardware", "severity": "medium", "confidence": 1.0, "tags": ["security", "container"]}}, {"ruleId": "scanner-faa134129e5545ff", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: node:20-alpine"}, "properties": {"repobilityId": "3e90d440e1f9ece1", "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": 1}}}]}, {"ruleId": "scanner-faa134129e5545ff", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: node:20-alpine"}, "properties": {"repobilityId": "74c4a1cab518bdb3", "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": 10}}}]}, {"ruleId": "scanner-1f66ad88286ca30a", "level": "warning", "message": {"text": "Dockerfile runs as root: backend/Dockerfile"}, "properties": {"repobilityId": "7afd2b0e8a8c9eeb", "scanner": "scanner-primary", "fingerprint": "1f66ad88286ca30a", "layer": "hardware", "severity": "medium", "confidence": 1.0, "tags": ["security", "container"]}}, {"ruleId": "scanner-714c31ca9f474ae6", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: python:3.12-slim"}, "properties": {"repobilityId": "f614a1e41f331b37", "scanner": "scanner-primary", "fingerprint": "714c31ca9f474ae6", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/Dockerfile"}, "region": {"startLine": 1}}}]}, {"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-9710c8d059e53154", "level": "none", "message": {"text": "No frontend routes/components detected"}, "properties": {"repobilityId": "44ca61485762e494", "scanner": "scanner-primary", "fingerprint": "9710c8d059e53154", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["coverage"]}}, {"ruleId": "scanner-141b30a41e03817b", "level": "note", "message": {"text": "No license file detected"}, "properties": {"repobilityId": "5e954df0c0d7885f", "scanner": "scanner-primary", "fingerprint": "141b30a41e03817b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["license", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-faccb9061e9b52a0", "level": "note", "message": {"text": "No README detected"}, "properties": {"repobilityId": "abbb93e6b8325f72", "scanner": "scanner-primary", "fingerprint": "faccb9061e9b52a0", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["docs", "readme", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "760f92f6af867e4d", "scanner": "scanner-primary", "fingerprint": "3ab5d313dda8e5f9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["debug", "cleanup", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-2d0c7b7ab8f8aacf", "level": "warning", "message": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "properties": {"repobilityId": "2124eade49dfb779", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-b9088664ace7f748", "level": "note", "message": {"text": "Composite production-readiness gap"}, "properties": {"repobilityId": "bcafe0d2ef5e0a08", "scanner": "scanner-primary", "fingerprint": "b9088664ace7f748", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["production-readiness", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-749d4bc1bd66df5f", "level": "warning", "message": {"text": "Agent instructions exist but release-hardening basics are missing"}, "properties": {"repobilityId": "9dce590143171001", "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": "89e7129a8d9f2bf8", "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": "4fd7e5b16d795e78", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-632712e8aa2e6b41", "level": "none", "message": {"text": "Commented-code block (11 lines) in frontend/vite.config.ts:13"}, "properties": {"repobilityId": "677569f151e0a2f3", "scanner": "scanner-primary", "fingerprint": "632712e8aa2e6b41", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-41bfb41f12127606", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/app.d.ts:11"}, "properties": {"repobilityId": "3589e166373dacf6", "scanner": "scanner-primary", "fingerprint": "41bfb41f12127606", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0755bb502be8e4bd", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/hooks.server.ts:26"}, "properties": {"repobilityId": "97eef0658f07734c", "scanner": "scanner-primary", "fingerprint": "0755bb502be8e4bd", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-0193c6f34855753c", "level": "none", "message": {"text": "Commented-code block (6 lines) in frontend/src/lib/nutrition.ts:3"}, "properties": {"repobilityId": "7ffa1f2392243f17", "scanner": "scanner-primary", "fingerprint": "0193c6f34855753c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8e86e54c1c0371d0", "level": "none", "message": {"text": "Commented-code block (6 lines) in frontend/src/lib/warmup.ts:3"}, "properties": {"repobilityId": "f689124fa53aa887", "scanner": "scanner-primary", "fingerprint": "8e86e54c1c0371d0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d428f2b0030f0ebe", "level": "none", "message": {"text": "Commented-code block (6 lines) in frontend/src/lib/rest-timer.ts:3"}, "properties": {"repobilityId": "f47f18e4408ee28d", "scanner": "scanner-primary", "fingerprint": "d428f2b0030f0ebe", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f9029bd0131d7968", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/lib/readiness.ts:3"}, "properties": {"repobilityId": "beb874bdb2594d4f", "scanner": "scanner-primary", "fingerprint": "f9029bd0131d7968", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ef0c02d3fc687864", "level": "none", "message": {"text": "Commented-code block (11 lines) in frontend/src/lib/dashboard.test.ts:10"}, "properties": {"repobilityId": "48697d153e5ee918", "scanner": "scanner-primary", "fingerprint": "ef0c02d3fc687864", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6d44141ec533fede", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/lib/superset.test.ts:9"}, "properties": {"repobilityId": "9ebb1bc55c9db8b1", "scanner": "scanner-primary", "fingerprint": "6d44141ec533fede", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ae31bcf37076733e", "level": "none", "message": {"text": "Commented-code block (6 lines) in frontend/src/lib/superset.ts:3"}, "properties": {"repobilityId": "510e6dbf151e85e5", "scanner": "scanner-primary", "fingerprint": "ae31bcf37076733e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-16e403f0b2c9e5ee", "level": "none", "message": {"text": "Commented-code block (6 lines) in frontend/src/lib/export.ts:3"}, "properties": {"repobilityId": "05117e6c98dc2ff0", "scanner": "scanner-primary", "fingerprint": "16e403f0b2c9e5ee", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c3f01f54aaaa13e2", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/lib/plates.ts:61"}, "properties": {"repobilityId": "9e659c84ba5dcdeb", "scanner": "scanner-primary", "fingerprint": "c3f01f54aaaa13e2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c9b825534a88360b", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/lib/connections.ts:3"}, "properties": {"repobilityId": "a1c83be0a0c9268f", "scanner": "scanner-primary", "fingerprint": "c9b825534a88360b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6c4ca046c89594bc", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/lib/budget.ts:3"}, "properties": {"repobilityId": "80cfecebba44e35f", "scanner": "scanner-primary", "fingerprint": "6c4ca046c89594bc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-be7934a6275405d6", "level": "none", "message": {"text": "Commented-code block (7 lines) in frontend/src/lib/nav.ts:4"}, "properties": {"repobilityId": "f98824db2e07e125", "scanner": "scanner-primary", "fingerprint": "be7934a6275405d6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a41e19fe3f892da1", "level": "none", "message": {"text": "Commented-code block (7 lines) in frontend/src/lib/muscle-heat.ts:7"}, "properties": {"repobilityId": "51b38a1336a611a4", "scanner": "scanner-primary", "fingerprint": "a41e19fe3f892da1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b203d8aaaae7484f", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/lib/barcode.ts:3"}, "properties": {"repobilityId": "c2dbeef0c332064c", "scanner": "scanner-primary", "fingerprint": "b203d8aaaae7484f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-60279c85d9c6e0d3", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/lib/fitbod.ts:3"}, "properties": {"repobilityId": "f24493806c36235c", "scanner": "scanner-primary", "fingerprint": "60279c85d9c6e0d3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1cfce1fff73cfc07", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/lib/sync/engine.test.ts:3"}, "properties": {"repobilityId": "f57afba619a6b2dd", "scanner": "scanner-primary", "fingerprint": "1cfce1fff73cfc07", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-733cf184c7e489f3", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/lib/sync/queue.test.ts:17"}, "properties": {"repobilityId": "f253af6083b53c07", "scanner": "scanner-primary", "fingerprint": "733cf184c7e489f3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e8a87aa722fed85f", "level": "none", "message": {"text": "Commented-code block (6 lines) in frontend/src/lib/sync/queue.ts:371"}, "properties": {"repobilityId": "ab50c038a3984adb", "scanner": "scanner-primary", "fingerprint": "e8a87aa722fed85f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-22c9559fc232f010", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/lib/ui/theme.ts:3"}, "properties": {"repobilityId": "fab631fa194ac93b", "scanner": "scanner-primary", "fingerprint": "22c9559fc232f010", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b0b8ef8c3f3bd769", "level": "none", "message": {"text": "Commented-code block (6 lines) in frontend/src/lib/ui/chart-theme.ts:1"}, "properties": {"repobilityId": "be89213287d09b2b", "scanner": "scanner-primary", "fingerprint": "b0b8ef8c3f3bd769", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1b1ba2f08fe1e82e", "level": "none", "message": {"text": "Commented-code block (6 lines) in backend/tests/test_sessions_api.py:398"}, "properties": {"repobilityId": "9291e146456def38", "scanner": "scanner-primary", "fingerprint": "1b1ba2f08fe1e82e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c6b006245a957001", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/tests/test_rollup_read_path.py:157"}, "properties": {"repobilityId": "a72e96a844ecbd21", "scanner": "scanner-primary", "fingerprint": "c6b006245a957001", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b8d6fe9218014866", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/tests/test_programs_api.py:136"}, "properties": {"repobilityId": "2169af8894a03100", "scanner": "scanner-primary", "fingerprint": "b8d6fe9218014866", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0e23d548043e6308", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/tests/test_pr_service.py:207"}, "properties": {"repobilityId": "e43d738354b60d72", "scanner": "scanner-primary", "fingerprint": "0e23d548043e6308", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c3024399c44423f4", "level": "none", "message": {"text": "Commented-code block (7 lines) in backend/app/config.py:19"}, "properties": {"repobilityId": "7a7de1e536a87e9f", "scanner": "scanner-primary", "fingerprint": "c3024399c44423f4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1c643bab2b1ba4b5", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/app/main.py:41"}, "properties": {"repobilityId": "2432cb76d679ad9f", "scanner": "scanner-primary", "fingerprint": "1c643bab2b1ba4b5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6b7852048367fb19", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/app/models/exercise.py:73"}, "properties": {"repobilityId": "23f2231515681ed8", "scanner": "scanner-primary", "fingerprint": "6b7852048367fb19", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-866310852e934bcf", "level": "none", "message": {"text": "Commented-code block (6 lines) in backend/app/api/metrics.py:234"}, "properties": {"repobilityId": "7cd574197f4ad6f9", "scanner": "scanner-primary", "fingerprint": "866310852e934bcf", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8098ec7f150a7c07", "level": "none", "message": {"text": "Commented-code block (7 lines) in backend/app/api/dashboard.py:89"}, "properties": {"repobilityId": "83f9f05683b1520e", "scanner": "scanner-primary", "fingerprint": "8098ec7f150a7c07", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-95f39ea2ff969ba3", "level": "none", "message": {"text": "Commented-code block (7 lines) in backend/app/services/program_templates.py:82"}, "properties": {"repobilityId": "762c56c7c8617c52", "scanner": "scanner-primary", "fingerprint": "95f39ea2ff969ba3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f4e82bdf5a5590e1", "level": "none", "message": {"text": "Commented-code block (9 lines) in backend/app/services/fitbod_import.py:229"}, "properties": {"repobilityId": "4f9cbb54fa12897d", "scanner": "scanner-primary", "fingerprint": "f4e82bdf5a5590e1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2c8e5262af9c168f", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/app/services/rollup.py:95"}, "properties": {"repobilityId": "4a16dc737cc2117a", "scanner": "scanner-primary", "fingerprint": "2c8e5262af9c168f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fee534b425ea31b3", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/app/services/export_archive.py:503"}, "properties": {"repobilityId": "2e9725fa12880f0b", "scanner": "scanner-primary", "fingerprint": "fee534b425ea31b3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d0ef524f0b06903c", "level": "none", "message": {"text": "Commented-code block (6 lines) in backend/app/services/pr.py:45"}, "properties": {"repobilityId": "26c91b3edf8015d8", "scanner": "scanner-primary", "fingerprint": "d0ef524f0b06903c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-429a5284deab7d88", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/app/services/seed_principles.py:449"}, "properties": {"repobilityId": "ffdd1cf00dbc3af9", "scanner": "scanner-primary", "fingerprint": "429a5284deab7d88", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-28e5fdefec209f93", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/app/services/program_generation.py:496"}, "properties": {"repobilityId": "25cdf66240036772", "scanner": "scanner-primary", "fingerprint": "28e5fdefec209f93", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8fc450d8a694162c", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/app/migrations_support/user_reconciliation.py:39"}, "properties": {"repobilityId": "f1e8ee82cc85d1d1", "scanner": "scanner-primary", "fingerprint": "8fc450d8a694162c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-319e66a630e14977", "level": "none", "message": {"text": "2 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "d838d1fc5d8231c9", "scanner": "scanner-primary", "fingerprint": "319e66a630e14977", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "config-drift"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "1bd31e8c362693f2", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "e88f57a2b5c4cf8d", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-4756b4c4da7d2088", "level": "note", "message": {"text": "Unused endpoint: GET /api/health"}, "properties": {"repobilityId": "414de3a0f9ad89dd", "scanner": "scanner-primary", "fingerprint": "4756b4c4da7d2088", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-4ba3ea8eb248030a", "level": "note", "message": {"text": "Unused endpoint: GET /available"}, "properties": {"repobilityId": "825828bde0c8eeb6", "scanner": "scanner-primary", "fingerprint": "4ba3ea8eb248030a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-11eb33d55a8df347", "level": "note", "message": {"text": "Unused endpoint: GET /{metric_type}"}, "properties": {"repobilityId": "adc8d453232ffcd6", "scanner": "scanner-primary", "fingerprint": "11eb33d55a8df347", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5baa8971ebe192a1", "level": "note", "message": {"text": "Unused endpoint: GET /"}, "properties": {"repobilityId": "9957e5b816782411", "scanner": "scanner-primary", "fingerprint": "5baa8971ebe192a1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7a009b1a56794f45", "level": "note", "message": {"text": "Unused endpoint: POST /"}, "properties": {"repobilityId": "48b2ca87f4ac81b7", "scanner": "scanner-primary", "fingerprint": "7a009b1a56794f45", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-57af10b6b7105a20", "level": "note", "message": {"text": "Unused endpoint: POST /{provider}/sync"}, "properties": {"repobilityId": "494c41aa528de297", "scanner": "scanner-primary", "fingerprint": "57af10b6b7105a20", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6bfc3dd5fa934c7a", "level": "note", "message": {"text": "Unused endpoint: DELETE /{provider}"}, "properties": {"repobilityId": "1900dc234e9250f6", "scanner": "scanner-primary", "fingerprint": "6bfc3dd5fa934c7a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-67d28fa8cd6bb12f", "level": "note", "message": {"text": "Unused endpoint: PUT /"}, "properties": {"repobilityId": "793aa92c3a247723", "scanner": "scanner-primary", "fingerprint": "67d28fa8cd6bb12f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b5ff561d490095d9", "level": "note", "message": {"text": "Unused endpoint: GET /muscles"}, "properties": {"repobilityId": "7a505c51703e93ed", "scanner": "scanner-primary", "fingerprint": "b5ff561d490095d9", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ea32a4501747c171", "level": "note", "message": {"text": "Unused endpoint: GET /equipment"}, "properties": {"repobilityId": "fa81adaa68f7ebed", "scanner": "scanner-primary", "fingerprint": "ea32a4501747c171", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-38f511ef2280a9c8", "level": "note", "message": {"text": "Unused endpoint: GET /{exercise_id}"}, "properties": {"repobilityId": "3c9d07e1db8c1866", "scanner": "scanner-primary", "fingerprint": "38f511ef2280a9c8", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-4aa46e154bfc9432", "level": "note", "message": {"text": "Unused endpoint: GET /{exercise_id}/rest"}, "properties": {"repobilityId": "6ae272ae6dfb4821", "scanner": "scanner-primary", "fingerprint": "4aa46e154bfc9432", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-08a5fe190212eb80", "level": "note", "message": {"text": "Unused endpoint: PUT /{exercise_id}/rest"}, "properties": {"repobilityId": "0a0881cbaa91a6d5", "scanner": "scanner-primary", "fingerprint": "08a5fe190212eb80", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e1b7bee247ffc801", "level": "note", "message": {"text": "Unused endpoint: GET /summary"}, "properties": {"repobilityId": "701299065c630a86", "scanner": "scanner-primary", "fingerprint": "e1b7bee247ffc801", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-fd1dc91abf32142d", "level": "note", "message": {"text": "Unused endpoint: GET /me"}, "properties": {"repobilityId": "be68bcaaa1b53d6c", "scanner": "scanner-primary", "fingerprint": "fd1dc91abf32142d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-860fd5fa46f30b50", "level": "note", "message": {"text": "Unused endpoint: GET /recovery"}, "properties": {"repobilityId": "4117aa9c6c1a8883", "scanner": "scanner-primary", "fingerprint": "860fd5fa46f30b50", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-4d806e073ce0c13f", "level": "note", "message": {"text": "Unused endpoint: GET /volume"}, "properties": {"repobilityId": "aad54d7b284d5bb7", "scanner": "scanner-primary", "fingerprint": "4d806e073ce0c13f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2cb43a71511872fc", "level": "note", "message": {"text": "Unused endpoint: GET /e1rm-trend"}, "properties": {"repobilityId": "b78c975e72261134", "scanner": "scanner-primary", "fingerprint": "2cb43a71511872fc", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-23c25e9182fa24b3", "level": "note", "message": {"text": "Unused endpoint: GET /exercises"}, "properties": {"repobilityId": "6b2a291a9f29212e", "scanner": "scanner-primary", "fingerprint": "23c25e9182fa24b3", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6236b283b79811b8", "level": "note", "message": {"text": "Unused endpoint: POST /upload"}, "properties": {"repobilityId": "e47fc5546827f225", "scanner": "scanner-primary", "fingerprint": "6236b283b79811b8", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3558cff1ead0b5fe", "level": "note", "message": {"text": "Unused endpoint: GET /uploads"}, "properties": {"repobilityId": "2331576db79a5a04", "scanner": "scanner-primary", "fingerprint": "3558cff1ead0b5fe", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e40a730c6acd81f2", "level": "note", "message": {"text": "Unused endpoint: GET /upload/status/{batch_id}"}, "properties": {"repobilityId": "283ef82d67bbc090", "scanner": "scanner-primary", "fingerprint": "e40a730c6acd81f2", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-0fad80a11be56359", "level": "note", "message": {"text": "Unused endpoint: POST /upload/{batch_id}/cancel"}, "properties": {"repobilityId": "7102e520ddccd578", "scanner": "scanner-primary", "fingerprint": "0fad80a11be56359", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5a39cf19d2f4ca9b", "level": "note", "message": {"text": "Unused endpoint: DELETE /upload/{batch_id}"}, "properties": {"repobilityId": "6179dd53672b9d39", "scanner": "scanner-primary", "fingerprint": "5a39cf19d2f4ca9b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-799999784a970535", "level": "note", "message": {"text": "Unused endpoint: POST /upload/{batch_id}/reprocess"}, "properties": {"repobilityId": "7abb84bd72846445", "scanner": "scanner-primary", "fingerprint": "799999784a970535", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6c185887729d6d68", "level": "note", "message": {"text": "Unused endpoint: POST /fitbod/preview"}, "properties": {"repobilityId": "c00e5a9da8d55b7d", "scanner": "scanner-primary", "fingerprint": "6c185887729d6d68", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-cb11b3a7904ce6bb", "level": "note", "message": {"text": "Unused endpoint: POST /fitbod/commit"}, "properties": {"repobilityId": "318bd997a21b84eb", "scanner": "scanner-primary", "fingerprint": "cb11b3a7904ce6bb", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-9260174de75b32ba", "level": "note", "message": {"text": "Unused endpoint: GET /categories"}, "properties": {"repobilityId": "057b4490d67f30fa", "scanner": "scanner-primary", "fingerprint": "9260174de75b32ba", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d789462128461661", "level": "note", "message": {"text": "Unused endpoint: GET /{key}"}, "properties": {"repobilityId": "79a0cd8af33ea9c1", "scanner": "scanner-primary", "fingerprint": "d789462128461661", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-71350d9b407d1e8b", "level": "note", "message": {"text": "Unused endpoint: GET /rings"}, "properties": {"repobilityId": "5053df6269769f49", "scanner": "scanner-primary", "fingerprint": "71350d9b407d1e8b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e3a64f73908ebbf2", "level": "note", "message": {"text": "Unused endpoint: GET /presets"}, "properties": {"repobilityId": "1b4ae7f66eb55186", "scanner": "scanner-primary", "fingerprint": "e3a64f73908ebbf2", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8565e855243fdbde", "level": "note", "message": {"text": "Unused endpoint: GET /quiz-options"}, "properties": {"repobilityId": "4dd67ed0846c5aa8", "scanner": "scanner-primary", "fingerprint": "8565e855243fdbde", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-970eb92d6ec2bfaa", "level": "note", "message": {"text": "Unused endpoint: POST /generate"}, "properties": {"repobilityId": "d469a7a210da27fb", "scanner": "scanner-primary", "fingerprint": "970eb92d6ec2bfaa", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-72eb8a13269a8eb3", "level": "note", "message": {"text": "Unused endpoint: GET /active"}, "properties": {"repobilityId": "986b79508f3af583", "scanner": "scanner-primary", "fingerprint": "72eb8a13269a8eb3", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-223a367b1ab5eced", "level": "note", "message": {"text": "Unused endpoint: GET /{program_id}"}, "properties": {"repobilityId": "bc998ea27ed9c773", "scanner": "scanner-primary", "fingerprint": "223a367b1ab5eced", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d8ccf527cabfa8da", "level": "note", "message": {"text": "Unused endpoint: POST /{program_id}/activate"}, "properties": {"repobilityId": "c119768dd4d26709", "scanner": "scanner-primary", "fingerprint": "d8ccf527cabfa8da", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b5446a2ea73148be", "level": "note", "message": {"text": "Unused endpoint: DELETE /{program_id}"}, "properties": {"repobilityId": "533ab6e8be59f812", "scanner": "scanner-primary", "fingerprint": "b5446a2ea73148be", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ec5cca0d9ba2dc3e", "level": "note", "message": {"text": "Unused endpoint: GET /freestyle"}, "properties": {"repobilityId": "0935222596d97628", "scanner": "scanner-primary", "fingerprint": "ec5cca0d9ba2dc3e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-97d48a53a9b404e9", "level": "note", "message": {"text": "Unused endpoint: POST /freestyle/start"}, "properties": {"repobilityId": "8b535433b0d6bb29", "scanner": "scanner-primary", "fingerprint": "97d48a53a9b404e9", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b9c041dc087ff77f", "level": "note", "message": {"text": "Unused endpoint: GET /today"}, "properties": {"repobilityId": "34fb528d0a910c6d", "scanner": "scanner-primary", "fingerprint": "b9c041dc087ff77f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a9f86580f025061e", "level": "note", "message": {"text": "Unused endpoint: POST /today/start"}, "properties": {"repobilityId": "7fe45d363bf702d6", "scanner": "scanner-primary", "fingerprint": "a9f86580f025061e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-fcb1b5473a4a7217", "level": "note", "message": {"text": "Unused endpoint: POST /adjust"}, "properties": {"repobilityId": "a5ade560f17976f8", "scanner": "scanner-primary", "fingerprint": "fcb1b5473a4a7217", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a9c8c6a6d961e3b5", "level": "note", "message": {"text": "Unused endpoint: POST /adjust/start"}, "properties": {"repobilityId": "d41d5ecbc37e533c", "scanner": "scanner-primary", "fingerprint": "a9c8c6a6d961e3b5", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-52390c4f83ba5356", "level": "note", "message": {"text": "Unused endpoint: GET /{workout_id}"}, "properties": {"repobilityId": "39495850f6d9d1cf", "scanner": "scanner-primary", "fingerprint": "52390c4f83ba5356", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-dd39d3c6308c07b5", "level": "note", "message": {"text": "Unused endpoint: GET /foods"}, "properties": {"repobilityId": "77775926083a55fb", "scanner": "scanner-primary", "fingerprint": "dd39d3c6308c07b5", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-0151f31051234d93", "level": "note", "message": {"text": "Unused endpoint: GET /foods/{food_id}"}, "properties": {"repobilityId": "da64355bfac2f503", "scanner": "scanner-primary", "fingerprint": "0151f31051234d93", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-693bfc7c32836cf7", "level": "note", "message": {"text": "Unused endpoint: GET /barcode/{code}"}, "properties": {"repobilityId": "a132adeedbec4f10", "scanner": "scanner-primary", "fingerprint": "693bfc7c32836cf7", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6eaa5764d9000fdf", "level": "note", "message": {"text": "Unused endpoint: POST /foods"}, "properties": {"repobilityId": "8c7c9985f3a8ee0d", "scanner": "scanner-primary", "fingerprint": "6eaa5764d9000fdf", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-69ee540b2f860442", "level": "note", "message": {"text": "Unused endpoint: PATCH /foods/{food_id}"}, "properties": {"repobilityId": "75bd051f208357ae", "scanner": "scanner-primary", "fingerprint": "69ee540b2f860442", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-4db7fac790e17b9e", "level": "note", "message": {"text": "Unused endpoint: DELETE /foods/{food_id}"}, "properties": {"repobilityId": "ea49c20caece5017", "scanner": "scanner-primary", "fingerprint": "4db7fac790e17b9e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}