{"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-9e7464f7c952cab6", "name": "Possibly dead Python function: current_user", "shortDescription": {"text": "Possibly dead Python function: current_user"}, "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-9b1768c1c10913bd", "name": "Possibly dead Python function: generate_cards", "shortDescription": {"text": "Possibly dead Python function: generate_cards"}, "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-4168df776c1dca21", "name": "Possibly dead Python function: list_decks", "shortDescription": {"text": "Possibly dead Python function: list_decks"}, "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-97d208140a571ec3", "name": "Possibly dead Python function: add_generation", "shortDescription": {"text": "Possibly dead Python function: add_generation"}, "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-5cef864c65ea9953", "name": "Possibly dead Python function: open_app", "shortDescription": {"text": "Possibly dead Python function: open_app"}, "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-da5876a5b0ea15e7", "name": "Possibly dead Python function: switch", "shortDescription": {"text": "Possibly dead Python function: switch"}, "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-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-9f2640ecccfe280c", "name": "Insecure pattern 'direct_innerhtml_assignment' in webapp/app.js:155", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in webapp/app.js:155"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6372cebde0220094", "name": "No auth library detected", "shortDescription": {"text": "No auth library detected"}, "fullDescription": {"text": "The scanner did not find any standard auth library (JWT, OAuth, NextAuth, Auth0, etc.). The repo has auth/admin/session surface indicators, so auth may live in custom code, in a separate service, or be missing."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4601e3ad3bb28677", "name": "No CI/CD pipelines detected", "shortDescription": {"text": "No CI/CD pipelines detected"}, "fullDescription": {"text": "No GitHub Actions, GitLab CI, or CircleCI configs found. Without CI you can't gate deploys on tests/lints."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ea3b5e389d8c9c0f", "name": "Low test-to-source ratio", "shortDescription": {"text": "Low test-to-source ratio"}, "fullDescription": {"text": "2 tests / 14 src (ratio 0.14)."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-141b30a41e03817b", "name": "No license file detected", "shortDescription": {"text": "No license file detected"}, "fullDescription": {"text": "No LICENSE/COPYING/NOTICE file was found. Generated repositories often omit licensing, which blocks reuse and automated intake."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3ab5d313dda8e5f9", "name": "Debug logging residue appears in source files", "shortDescription": {"text": "Debug logging residue appears in source files"}, "fullDescription": {"text": "Found 24 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-b9088664ace7f748", "name": "Composite production-readiness gap", "shortDescription": {"text": "Composite production-readiness gap"}, "fullDescription": {"text": "Multiple low-cost hardening controls are missing together: license, ci, tests. Opus verification showed these co-occurring gaps are a better readiness signal than reading each flag in isolation."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-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-a35162c0b795abe9", "name": "Commented-code block (5 lines) in ankicore/config.py:55", "shortDescription": {"text": "Commented-code block (5 lines) in ankicore/config.py:55"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3b8e0db0b3f29c3e", "name": "Stub function `readiness` (body is just `pass`/`return`) \u2014 ankicore/flow.py:38", "shortDescription": {"text": "Stub function `readiness` (body is just `pass`/`return`) \u2014 ankicore/flow.py:38"}, "fullDescription": {"text": "Likely an AI scaffold that was never filled in. Remove or implement."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3482f7e5dd70cd1a", "name": "6 env vars used in code but missing from .env.example", "shortDescription": {"text": "6 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `ANTHROPIC_BASE_URL`, `GOOGLE_API_KEY`, `GROQ_WHISPER_MODEL`, `MAX_OUTPUT_TOKENS`, `PORT`, `TELEGRAM_TOKEN`. Add them (with a placeholder/comment) to .env.example so onboarding doesn't break."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-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:\nbot_cloud.py:main_async, bot_cloud.py:main\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-7aa4b2518cbbbfa2", "name": "Unused endpoint: GET /api/config", "shortDescription": {"text": "Unused endpoint: GET /api/config"}, "fullDescription": {"text": "`ankicore/webapp.py` declares `GET /api/config` 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-093467ddc6e6a64d", "name": "Unused endpoint: POST /api/generate", "shortDescription": {"text": "Unused endpoint: POST /api/generate"}, "fullDescription": {"text": "`ankicore/webapp.py` declares `POST /api/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-c67318af7798c775", "name": "Unused endpoint: POST /api/generate_file", "shortDescription": {"text": "Unused endpoint: POST /api/generate_file"}, "fullDescription": {"text": "`ankicore/webapp.py` declares `POST /api/generate_file` 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-8b1547f30a42b911", "name": "Unused endpoint: GET /api/generations", "shortDescription": {"text": "Unused endpoint: GET /api/generations"}, "fullDescription": {"text": "`ankicore/webapp.py` declares `GET /api/generations` 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-bf58073f3747d9d3", "name": "Unused endpoint: GET /api/generations/{gen_id}", "shortDescription": {"text": "Unused endpoint: GET /api/generations/{gen_id}"}, "fullDescription": {"text": "`ankicore/webapp.py` declares `GET /api/generations/{gen_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-e0115b3b7307dc3c", "name": "Unused endpoint: PATCH /api/cards/{card_id}", "shortDescription": {"text": "Unused endpoint: PATCH /api/cards/{card_id}"}, "fullDescription": {"text": "`ankicore/webapp.py` declares `PATCH /api/cards/{card_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-84655be1f4319f42", "name": "Unused endpoint: DELETE /api/cards/{card_id}", "shortDescription": {"text": "Unused endpoint: DELETE /api/cards/{card_id}"}, "fullDescription": {"text": "`ankicore/webapp.py` declares `DELETE /api/cards/{card_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-e1a99d3c875d1d38", "name": "Unused endpoint: POST /api/cards/{card_id}/review", "shortDescription": {"text": "Unused endpoint: POST /api/cards/{card_id}/review"}, "fullDescription": {"text": "`ankicore/webapp.py` declares `POST /api/cards/{card_id}/review` 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-7d1dcb2468f6e0cd", "name": "Unused endpoint: POST /api/generations/{gen_id}/reset", "shortDescription": {"text": "Unused endpoint: POST /api/generations/{gen_id}/reset"}, "fullDescription": {"text": "`ankicore/webapp.py` declares `POST /api/generations/{gen_id}/reset` 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-eabef5894ad92293", "name": "Unused endpoint: DELETE /api/generations/{gen_id}", "shortDescription": {"text": "Unused endpoint: DELETE /api/generations/{gen_id}"}, "fullDescription": {"text": "`ankicore/webapp.py` declares `DELETE /api/generations/{gen_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-1ce12cbc53f4f040", "name": "Unused endpoint: POST /api/generations/{gen_id}/send", "shortDescription": {"text": "Unused endpoint: POST /api/generations/{gen_id}/send"}, "fullDescription": {"text": "`ankicore/webapp.py` declares `POST /api/generations/{gen_id}/send` 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/23641"}, "properties": {"repository": "zhusipsuleimen/anki-tg-bot", "repoUrl": "https://github.com/zhusipsuleimen/anki-tg-bot", "branch": "main"}, "results": [{"ruleId": "scanner-9e7464f7c952cab6", "level": "note", "message": {"text": "Possibly dead Python function: current_user"}, "properties": {"repobilityId": "271089411e6e6afb", "scanner": "scanner-primary", "fingerprint": "9e7464f7c952cab6", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ankicore/webapp.py:104"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-9b1768c1c10913bd", "level": "note", "message": {"text": "Possibly dead Python function: generate_cards"}, "properties": {"repobilityId": "871dcf24958683b0", "scanner": "scanner-primary", "fingerprint": "9b1768c1c10913bd", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ankicore/llm.py:247"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-4168df776c1dca21", "level": "note", "message": {"text": "Possibly dead Python function: list_decks"}, "properties": {"repobilityId": "144da2a4406df84d", "scanner": "scanner-primary", "fingerprint": "4168df776c1dca21", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ankicore/ankiconnect.py:36"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-97d208140a571ec3", "level": "note", "message": {"text": "Possibly dead Python function: add_generation"}, "properties": {"repobilityId": "81425e74a3629f2e", "scanner": "scanner-primary", "fingerprint": "97d208140a571ec3", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ankicore/store.py:98"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-5cef864c65ea9953", "level": "note", "message": {"text": "Possibly dead Python function: open_app"}, "properties": {"repobilityId": "da4ed078ddec1469", "scanner": "scanner-primary", "fingerprint": "5cef864c65ea9953", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ankicore/flow.py:113"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-da5876a5b0ea15e7", "level": "note", "message": {"text": "Possibly dead Python function: switch"}, "properties": {"repobilityId": "06c0fea106de0256", "scanner": "scanner-primary", "fingerprint": "da5876a5b0ea15e7", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ankicore/flow.py:124"}, "region": {"startLine": 1}}}]}, {"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-9f2640ecccfe280c", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in webapp/app.js:155"}, "properties": {"repobilityId": "fbffb8986fda1a93", "scanner": "scanner-primary", "fingerprint": "9f2640ecccfe280c", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "webapp/app.js"}, "region": {"startLine": 155}}}]}, {"ruleId": "scanner-6372cebde0220094", "level": "warning", "message": {"text": "No auth library detected"}, "properties": {"repobilityId": "a5b6035a5bbf8054", "scanner": "scanner-primary", "fingerprint": "6372cebde0220094", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["coverage", "auth"]}}, {"ruleId": "scanner-4601e3ad3bb28677", "level": "warning", "message": {"text": "No CI/CD pipelines detected"}, "properties": {"repobilityId": "c3ee439bce2bc51e", "scanner": "scanner-primary", "fingerprint": "4601e3ad3bb28677", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["coverage"]}}, {"ruleId": "scanner-ea3b5e389d8c9c0f", "level": "note", "message": {"text": "Low test-to-source ratio"}, "properties": {"repobilityId": "ef7b2552cc00a375", "scanner": "scanner-primary", "fingerprint": "ea3b5e389d8c9c0f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["tests"]}}, {"ruleId": "scanner-141b30a41e03817b", "level": "note", "message": {"text": "No license file detected"}, "properties": {"repobilityId": "ef8e3ebcf849bc25", "scanner": "scanner-primary", "fingerprint": "141b30a41e03817b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["license", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "def2326797b0c55b", "scanner": "scanner-primary", "fingerprint": "3ab5d313dda8e5f9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["debug", "cleanup", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-b9088664ace7f748", "level": "warning", "message": {"text": "Composite production-readiness gap"}, "properties": {"repobilityId": "83fde6f531805c7a", "scanner": "scanner-primary", "fingerprint": "b9088664ace7f748", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["production-readiness", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-ea8f3013f588db25", "level": "note", "message": {"text": "Shallow git history limits provenance confidence"}, "properties": {"repobilityId": "4238fe253104b3c7", "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": "187ae523698789e4", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-a35162c0b795abe9", "level": "none", "message": {"text": "Commented-code block (5 lines) in ankicore/config.py:55"}, "properties": {"repobilityId": "a8e54bd627bcf3dd", "scanner": "scanner-primary", "fingerprint": "a35162c0b795abe9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3b8e0db0b3f29c3e", "level": "note", "message": {"text": "Stub function `readiness` (body is just `pass`/`return`) \u2014 ankicore/flow.py:38"}, "properties": {"repobilityId": "020bc91ace485daf", "scanner": "scanner-primary", "fingerprint": "3b8e0db0b3f29c3e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "empty-handler", "dead-code"]}}, {"ruleId": "scanner-3482f7e5dd70cd1a", "level": "note", "message": {"text": "6 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "1da70f25aa46f6e9", "scanner": "scanner-primary", "fingerprint": "3482f7e5dd70cd1a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "config-drift"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "1efc86f5f0b48d58", "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": "1d30e3b5a0a92ab8", "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": "5ffce0f12e0ba7e2", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-7aa4b2518cbbbfa2", "level": "note", "message": {"text": "Unused endpoint: GET /api/config"}, "properties": {"repobilityId": "36b622eacf7a4bd1", "scanner": "scanner-primary", "fingerprint": "7aa4b2518cbbbfa2", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-093467ddc6e6a64d", "level": "note", "message": {"text": "Unused endpoint: POST /api/generate"}, "properties": {"repobilityId": "4231598edb58de9f", "scanner": "scanner-primary", "fingerprint": "093467ddc6e6a64d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c67318af7798c775", "level": "note", "message": {"text": "Unused endpoint: POST /api/generate_file"}, "properties": {"repobilityId": "8173664763083e88", "scanner": "scanner-primary", "fingerprint": "c67318af7798c775", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8b1547f30a42b911", "level": "note", "message": {"text": "Unused endpoint: GET /api/generations"}, "properties": {"repobilityId": "594e92e21216ef0f", "scanner": "scanner-primary", "fingerprint": "8b1547f30a42b911", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-bf58073f3747d9d3", "level": "note", "message": {"text": "Unused endpoint: GET /api/generations/{gen_id}"}, "properties": {"repobilityId": "c53efbde2aa7abaf", "scanner": "scanner-primary", "fingerprint": "bf58073f3747d9d3", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e0115b3b7307dc3c", "level": "note", "message": {"text": "Unused endpoint: PATCH /api/cards/{card_id}"}, "properties": {"repobilityId": "ba42f2a2c01fcc04", "scanner": "scanner-primary", "fingerprint": "e0115b3b7307dc3c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-84655be1f4319f42", "level": "note", "message": {"text": "Unused endpoint: DELETE /api/cards/{card_id}"}, "properties": {"repobilityId": "554a095d1e439f0a", "scanner": "scanner-primary", "fingerprint": "84655be1f4319f42", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e1a99d3c875d1d38", "level": "note", "message": {"text": "Unused endpoint: POST /api/cards/{card_id}/review"}, "properties": {"repobilityId": "dddf8f92743a8442", "scanner": "scanner-primary", "fingerprint": "e1a99d3c875d1d38", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7d1dcb2468f6e0cd", "level": "note", "message": {"text": "Unused endpoint: POST /api/generations/{gen_id}/reset"}, "properties": {"repobilityId": "3fefb42300e4516c", "scanner": "scanner-primary", "fingerprint": "7d1dcb2468f6e0cd", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-eabef5894ad92293", "level": "note", "message": {"text": "Unused endpoint: DELETE /api/generations/{gen_id}"}, "properties": {"repobilityId": "342b6a4aab475a1d", "scanner": "scanner-primary", "fingerprint": "eabef5894ad92293", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1ce12cbc53f4f040", "level": "note", "message": {"text": "Unused endpoint: POST /api/generations/{gen_id}/send"}, "properties": {"repobilityId": "7da79b58251a6537", "scanner": "scanner-primary", "fingerprint": "1ce12cbc53f4f040", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}