{"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-1ac31a1200f06bb7", "name": "Possibly dead Python function: repl", "shortDescription": {"text": "Possibly dead Python function: repl"}, "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-d238cf4e20a6e86c", "name": "Possibly dead Python function: log_message", "shortDescription": {"text": "Possibly dead Python function: log_message"}, "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-5629722515b23299", "name": "Possibly dead Python function: do_GET", "shortDescription": {"text": "Possibly dead Python function: do_GET"}, "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-84043836a6e3e3eb", "name": "Possibly dead Python function: do_POST", "shortDescription": {"text": "Possibly dead Python function: do_POST"}, "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-ca9e030c4b97fb25", "name": "Possibly dead Python function: cached_extract_text", "shortDescription": {"text": "Possibly dead Python function: cached_extract_text"}, "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-27924aa79fa4a517", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "astral-sh/setup-uv@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-45c8debf9518f000", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c099ea7ca44311da", "name": "GitHub Actions workflow grants broad write permissions", "shortDescription": {"text": "GitHub Actions workflow grants broad write permissions"}, "fullDescription": {"text": "CI tokens with write permissions increase blast radius when an action, dependency, or PR workflow is compromised. Prefer job-level least-privilege permissions."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-83dbe27a75294094", "name": "Very large file: tests/test_summary.py (4941 lines)", "shortDescription": {"text": "Very large file: tests/test_summary.py (4941 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-78b109ead80a7324", "name": "Very large file: tests/test_sync_integration.py (5661 lines)", "shortDescription": {"text": "Very large file: tests/test_sync_integration.py (5661 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-57373da2bbc94681", "name": "Very large file: tests/test_llm.py (3678 lines)", "shortDescription": {"text": "Very large file: tests/test_llm.py (3678 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-964f6adb49dc5df5", "name": "Very large file: tests/test_store.py (2852 lines)", "shortDescription": {"text": "Very large file: tests/test_store.py (2852 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8155f9f449e1fb4b", "name": "Very large file: tests/test_llmkit_providers.py (2240 lines)", "shortDescription": {"text": "Very large file: tests/test_llmkit_providers.py (2240 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b6e6f8755261df3a", "name": "Very large file: tests/test_cli.py (3672 lines)", "shortDescription": {"text": "Very large file: tests/test_cli.py (3672 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e8ad29ce8ad9fb0f", "name": "Very large file: case_calendar/llm.py (2680 lines)", "shortDescription": {"text": "Very large file: case_calendar/llm.py (2680 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e5bbafd46f52dc9c", "name": "Very large file: case_calendar/sync.py (2730 lines)", "shortDescription": {"text": "Very large file: case_calendar/sync.py (2730 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-bdeb83d9de45c284", "name": "Very large file: case_calendar/summary.py (2788 lines)", "shortDescription": {"text": "Very large file: case_calendar/summary.py (2788 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e8360d7e06b1f0b4", "name": "Very large file: case_calendar/cli.py (1582 lines)", "shortDescription": {"text": "Very large file: case_calendar/cli.py (1582 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-398d974768440aa5", "name": "Very large file: case_calendar/store.py (1836 lines)", "shortDescription": {"text": "Very large file: case_calendar/store.py (1836 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2f55a3124d8134d8", "name": "Very large file: case_calendar/llmkit/providers.py (1385 lines)", "shortDescription": {"text": "Very large file: case_calendar/llmkit/providers.py (1385 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a73e0e1c21ada47e", "name": "Very large file: case_calendar/calendars/index.py (1539 lines)", "shortDescription": {"text": "Very large file: case_calendar/calendars/index.py (1539 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6d4773675762e3cc", "name": "Very large file: model-comparison/build_provider_stores.py (1824 lines)", "shortDescription": {"text": "Very large file: model-comparison/build_provider_stores.py (1824 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3ab5d313dda8e5f9", "name": "Debug logging residue appears in source files", "shortDescription": {"text": "Debug logging residue appears in source files"}, "fullDescription": {"text": "Found 119 console/debugger/print-style debug statements in non-test source. This is a common fast-generation residue before production cleanup."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-72b2a6250083a784", "name": "Placeholder or mock-heavy implementation detected", "shortDescription": {"text": "Placeholder or mock-heavy implementation detected"}, "fullDescription": {"text": "Found 38 placeholder/mock markers across 8 source files. This often means the repo looks complete while core flows still use generated scaffolding or fake data."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2d0c7b7ab8f8aacf", "name": "Critical user flow still appears backed by mock or placeholder data", "shortDescription": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "fullDescription": {"text": "A payment/auth/admin/order/billing-style flow contains mock, fake, TODO, dummy, or placeholder markers in runtime source. In the Fable corpus this is a high-leverage completeness smell: the app can look finished while the money, identity, or tenant flow is still scaffolded."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-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-3133105b186c095c", "name": "Commented-code block (7 lines) in tests/test_summary.py:429", "shortDescription": {"text": "Commented-code block (7 lines) in tests/test_summary.py:429"}, "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-dc761da3a1be42d2", "name": "Commented-code block (5 lines) in tests/test_serve.py:229", "shortDescription": {"text": "Commented-code block (5 lines) in tests/test_serve.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-8b56690f2c8c46c0", "name": "Commented-code block (5 lines) in tests/conftest.py:126", "shortDescription": {"text": "Commented-code block (5 lines) in tests/conftest.py:126"}, "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-85c66a3728c45035", "name": "Commented-code block (6 lines) in tests/test_url_validator.py:110", "shortDescription": {"text": "Commented-code block (6 lines) in tests/test_url_validator.py:110"}, "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-d4d5647940b5a984", "name": "Commented-code block (6 lines) in tests/test_sync_integration.py:702", "shortDescription": {"text": "Commented-code block (6 lines) in tests/test_sync_integration.py:702"}, "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-d285fd6448fcd20d", "name": "Commented-code block (7 lines) in tests/test_llm.py:47", "shortDescription": {"text": "Commented-code block (7 lines) in tests/test_llm.py:47"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8242e82d32814ef5", "name": "Commented-code block (5 lines) in tests/test_pdf.py:110", "shortDescription": {"text": "Commented-code block (5 lines) in tests/test_pdf.py:110"}, "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-5f1057de4e2b747f", "name": "Commented-code block (5 lines) in tests/test_alerts.py:45", "shortDescription": {"text": "Commented-code block (5 lines) in tests/test_alerts.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-a71c18e8e89ac2a5", "name": "Commented-code block (5 lines) in tests/test_store.py:182", "shortDescription": {"text": "Commented-code block (5 lines) in tests/test_store.py:182"}, "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-d261bc942268014d", "name": "Commented-code block (5 lines) in tests/test_llmkit_usage.py:307", "shortDescription": {"text": "Commented-code block (5 lines) in tests/test_llmkit_usage.py:307"}, "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-65208f83193caa96", "name": "Legacy-named symbol `test_native_base_strips_v1` in tests/test_llmkit_providers.py:914", "shortDescription": {"text": "Legacy-named symbol `test_native_base_strips_v1` in tests/test_llmkit_providers.py:914"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-554773e69e3e8570", "name": "Commented-code block (6 lines) in tests/test_llmkit_providers.py:52", "shortDescription": {"text": "Commented-code block (6 lines) in tests/test_llmkit_providers.py:52"}, "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-94830768aaddc8c2", "name": "Commented-code block (5 lines) in tests/test_build_provider_stores.py:869", "shortDescription": {"text": "Commented-code block (5 lines) in tests/test_build_provider_stores.py:869"}, "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-ddfea7a771603e0b", "name": "Legacy-named symbol `calendar_unused` in tests/test_cli.py:180", "shortDescription": {"text": "Legacy-named symbol `calendar_unused` in tests/test_cli.py:180"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a3ddb6bb00c85f2f", "name": "Commented-code block (5 lines) in tests/test_cli.py:1103", "shortDescription": {"text": "Commented-code block (5 lines) in tests/test_cli.py:1103"}, "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-552818601945be78", "name": "Commented-code block (6 lines) in tests/test_courtlistener.py:111", "shortDescription": {"text": "Commented-code block (6 lines) in tests/test_courtlistener.py:111"}, "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-9822efff7dd5bed4", "name": "Commented-code block (8 lines) in tests/test_sync_helpers.py:317", "shortDescription": {"text": "Commented-code block (8 lines) in tests/test_sync_helpers.py:317"}, "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-35b4cdc8475a3733", "name": "Commented-code block (5 lines) in tests/test_index.py:422", "shortDescription": {"text": "Commented-code block (5 lines) in tests/test_index.py:422"}, "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-d4def3944641af4a", "name": "Commented-code block (17 lines) in case_calendar/extractor.py:60", "shortDescription": {"text": "Commented-code block (17 lines) in case_calendar/extractor.py:60"}, "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-2a694a354c5e196d", "name": "Commented-code block (5 lines) in case_calendar/pdf.py:33", "shortDescription": {"text": "Commented-code block (5 lines) in case_calendar/pdf.py:33"}, "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-a3dbe8cf6a770bf4", "name": "Commented-code block (13 lines) in case_calendar/costs.py:53", "shortDescription": {"text": "Commented-code block (13 lines) in case_calendar/costs.py:53"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d35b3aa595e9508f", "name": "Commented-code block (9 lines) in case_calendar/llm.py:735", "shortDescription": {"text": "Commented-code block (9 lines) in case_calendar/llm.py:735"}, "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-68787d6b8b9a0c95", "name": "Commented-code block (5 lines) in case_calendar/sync.py:31", "shortDescription": {"text": "Commented-code block (5 lines) in case_calendar/sync.py:31"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-acaef59cd8cdf11e", "name": "Commented-code block (5 lines) in case_calendar/summary.py:36", "shortDescription": {"text": "Commented-code block (5 lines) in case_calendar/summary.py:36"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3d668983704939d2", "name": "Commented-code block (5 lines) in case_calendar/cli.py:96", "shortDescription": {"text": "Commented-code block (5 lines) in case_calendar/cli.py:96"}, "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-07137c4e3854b107", "name": "Commented-code block (6 lines) in case_calendar/store.py:254", "shortDescription": {"text": "Commented-code block (6 lines) in case_calendar/store.py:254"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3bb21c5a951b01cb", "name": "Commented-code block (12 lines) in case_calendar/courtlistener.py:19", "shortDescription": {"text": "Commented-code block (12 lines) in case_calendar/courtlistener.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-b05bf120c307d833", "name": "Commented-code block (12 lines) in case_calendar/alerts.py:75", "shortDescription": {"text": "Commented-code block (12 lines) in case_calendar/alerts.py:75"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3445508f10229ac7", "name": "Commented-code block (5 lines) in case_calendar/serve.py:105", "shortDescription": {"text": "Commented-code block (5 lines) in case_calendar/serve.py:105"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7d794ea0abd56aed", "name": "Commented-code block (8 lines) in case_calendar/llmkit/usage.py:36", "shortDescription": {"text": "Commented-code block (8 lines) in case_calendar/llmkit/usage.py:36"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4cdd82e1167a3e66", "name": "Commented-code block (18 lines) in case_calendar/llmkit/providers.py:99", "shortDescription": {"text": "Commented-code block (18 lines) in case_calendar/llmkit/providers.py:99"}, "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-4d66bd57d2435057", "name": "Commented-code block (5 lines) in case_calendar/calendars/gcal.py:102", "shortDescription": {"text": "Commented-code block (5 lines) in case_calendar/calendars/gcal.py:102"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-126168490dc2ccb9", "name": "Commented-code block (5 lines) in case_calendar/calendars/m365.py:355", "shortDescription": {"text": "Commented-code block (5 lines) in case_calendar/calendars/m365.py:355"}, "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-5dc8f2cce490d6d6", "name": "Commented-code block (5 lines) in case_calendar/calendars/ics.py:145", "shortDescription": {"text": "Commented-code block (5 lines) in case_calendar/calendars/ics.py:145"}, "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-1d672ab5e9fe1deb", "name": "Commented-code block (6 lines) in case_calendar/calendars/index.py:33", "shortDescription": {"text": "Commented-code block (6 lines) in case_calendar/calendars/index.py:33"}, "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-3e6f8f718ca86a36", "name": "Commented-code block (6 lines) in model-comparison/build_scoring_page.py:170", "shortDescription": {"text": "Commented-code block (6 lines) in model-comparison/build_scoring_page.py:170"}, "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-be4c1f3251910dd8", "name": "Commented-code block (6 lines) in model-comparison/build_provider_stores.py:146", "shortDescription": {"text": "Commented-code block (6 lines) in model-comparison/build_provider_stores.py:146"}, "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-57311ee03339fe1f", "name": "Commented-code block (6 lines) in model-comparison/snapshot_benchmark.py:76", "shortDescription": {"text": "Commented-code block (6 lines) in model-comparison/snapshot_benchmark.py:76"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-87acb4066071a15a", "name": "19 env vars used in code but missing from .env.example", "shortDescription": {"text": "19 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `CASE_CALENDAR_WEBHOOK_SECRET`, `GOOGLE_API_KEY`, `LLM_EXTRACTION_PROVIDER`, `LLM_MODEL`, `LLM_PROVIDER`, `LLM_SUMMARY_MODEL`, `LLM_SUMMARY_PROVIDER`, `LOG_LEVEL` + 11 more. 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:\ncase_calendar/pdf.py:extract_text_from_url, case_calendar/pdf.py:extract_text\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-02525d39071dd2c7", "name": "Near-duplicate function bodies in 5 places", "shortDescription": {"text": "Near-duplicate function bodies in 5 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nmodel-comparison/build_provider_stores.py:wrapped, model-comparison/build_provider_stores.py:wrapped, model-comparison/build_provider_stores.py:wrapped, model-comparison/build_provider_stores.py:wrap\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}}]}}, "automationDetails": {"id": "repobility/19146"}, "properties": {"repository": "seanthegeek/case-calendar", "repoUrl": "https://github.com/seanthegeek/case-calendar", "branch": "main"}, "results": [{"ruleId": "scanner-1ac31a1200f06bb7", "level": "note", "message": {"text": "Possibly dead Python function: repl"}, "properties": {"repobilityId": "6f5d3779bbb8be8b", "scanner": "scanner-primary", "fingerprint": "1ac31a1200f06bb7", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "case_calendar/summary.py:2161"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-d238cf4e20a6e86c", "level": "note", "message": {"text": "Possibly dead Python function: log_message"}, "properties": {"repobilityId": "965f3150b4af5b2e", "scanner": "scanner-primary", "fingerprint": "d238cf4e20a6e86c", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "case_calendar/serve.py:95"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-5629722515b23299", "level": "note", "message": {"text": "Possibly dead Python function: do_GET"}, "properties": {"repobilityId": "2d943bb45e4f13bd", "scanner": "scanner-primary", "fingerprint": "5629722515b23299", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "case_calendar/serve.py:100"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-84043836a6e3e3eb", "level": "note", "message": {"text": "Possibly dead Python function: do_POST"}, "properties": {"repobilityId": "53357410ca9379a9", "scanner": "scanner-primary", "fingerprint": "84043836a6e3e3eb", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "case_calendar/serve.py:138"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-ca9e030c4b97fb25", "level": "note", "message": {"text": "Possibly dead Python function: cached_extract_text"}, "properties": {"repobilityId": "1dc9b3e80f727fa2", "scanner": "scanner-primary", "fingerprint": "ca9e030c4b97fb25", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "model-comparison/build_provider_stores.py:797"}, "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-27924aa79fa4a517", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "4f39ee857107df13", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 24}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "4f39ee857107df13", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 62}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "94496af5c2f647df", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 96}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "918d18d7d7e57572", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 107}}}]}, {"ruleId": "scanner-45c8debf9518f000", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "01f88f7e2a94b81d", "scanner": "scanner-primary", "fingerprint": "45c8debf9518f000", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/jekyll-gh-pages.yml"}, "region": {"startLine": 30}}}]}, {"ruleId": "scanner-45c8debf9518f000", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "b7679715c8b9a173", "scanner": "scanner-primary", "fingerprint": "45c8debf9518f000", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/jekyll-gh-pages.yml"}, "region": {"startLine": 32}}}]}, {"ruleId": "scanner-45c8debf9518f000", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "8984fa903d98b972", "scanner": "scanner-primary", "fingerprint": "45c8debf9518f000", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/jekyll-gh-pages.yml"}, "region": {"startLine": 34}}}]}, {"ruleId": "scanner-45c8debf9518f000", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "125904816dceaaa1", "scanner": "scanner-primary", "fingerprint": "45c8debf9518f000", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/jekyll-gh-pages.yml"}, "region": {"startLine": 39}}}]}, {"ruleId": "scanner-45c8debf9518f000", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "edabfc2efeb54493", "scanner": "scanner-primary", "fingerprint": "45c8debf9518f000", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/jekyll-gh-pages.yml"}, "region": {"startLine": 51}}}]}, {"ruleId": "scanner-c099ea7ca44311da", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "8edbbb59625211a4", "scanner": "scanner-primary", "fingerprint": "c099ea7ca44311da", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/jekyll-gh-pages.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-83dbe27a75294094", "level": "note", "message": {"text": "Very large file: tests/test_summary.py (4941 lines)"}, "properties": {"repobilityId": "3317d3e460cb09b8", "scanner": "scanner-primary", "fingerprint": "83dbe27a75294094", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-78b109ead80a7324", "level": "note", "message": {"text": "Very large file: tests/test_sync_integration.py (5661 lines)"}, "properties": {"repobilityId": "e1bce854de3bcf57", "scanner": "scanner-primary", "fingerprint": "78b109ead80a7324", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-57373da2bbc94681", "level": "note", "message": {"text": "Very large file: tests/test_llm.py (3678 lines)"}, "properties": {"repobilityId": "b34d8f79c9cb3f06", "scanner": "scanner-primary", "fingerprint": "57373da2bbc94681", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-964f6adb49dc5df5", "level": "note", "message": {"text": "Very large file: tests/test_store.py (2852 lines)"}, "properties": {"repobilityId": "a9eb220068303b4d", "scanner": "scanner-primary", "fingerprint": "964f6adb49dc5df5", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-8155f9f449e1fb4b", "level": "note", "message": {"text": "Very large file: tests/test_llmkit_providers.py (2240 lines)"}, "properties": {"repobilityId": "7520fb2cbbea17d2", "scanner": "scanner-primary", "fingerprint": "8155f9f449e1fb4b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-b6e6f8755261df3a", "level": "note", "message": {"text": "Very large file: tests/test_cli.py (3672 lines)"}, "properties": {"repobilityId": "2121c5b297f0116c", "scanner": "scanner-primary", "fingerprint": "b6e6f8755261df3a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-e8ad29ce8ad9fb0f", "level": "note", "message": {"text": "Very large file: case_calendar/llm.py (2680 lines)"}, "properties": {"repobilityId": "b15a959acfb3ed4b", "scanner": "scanner-primary", "fingerprint": "e8ad29ce8ad9fb0f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-e5bbafd46f52dc9c", "level": "note", "message": {"text": "Very large file: case_calendar/sync.py (2730 lines)"}, "properties": {"repobilityId": "77318589dec01264", "scanner": "scanner-primary", "fingerprint": "e5bbafd46f52dc9c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-bdeb83d9de45c284", "level": "note", "message": {"text": "Very large file: case_calendar/summary.py (2788 lines)"}, "properties": {"repobilityId": "1af2ecff85182412", "scanner": "scanner-primary", "fingerprint": "bdeb83d9de45c284", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-e8360d7e06b1f0b4", "level": "note", "message": {"text": "Very large file: case_calendar/cli.py (1582 lines)"}, "properties": {"repobilityId": "eb6317375689894a", "scanner": "scanner-primary", "fingerprint": "e8360d7e06b1f0b4", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-398d974768440aa5", "level": "note", "message": {"text": "Very large file: case_calendar/store.py (1836 lines)"}, "properties": {"repobilityId": "c90aae878f976c4c", "scanner": "scanner-primary", "fingerprint": "398d974768440aa5", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-2f55a3124d8134d8", "level": "note", "message": {"text": "Very large file: case_calendar/llmkit/providers.py (1385 lines)"}, "properties": {"repobilityId": "57b7b03d423cb70c", "scanner": "scanner-primary", "fingerprint": "2f55a3124d8134d8", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-a73e0e1c21ada47e", "level": "note", "message": {"text": "Very large file: case_calendar/calendars/index.py (1539 lines)"}, "properties": {"repobilityId": "bd582fdb341de1c3", "scanner": "scanner-primary", "fingerprint": "a73e0e1c21ada47e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-6d4773675762e3cc", "level": "note", "message": {"text": "Very large file: model-comparison/build_provider_stores.py (1824 lines)"}, "properties": {"repobilityId": "4e25c8e4e669fb30", "scanner": "scanner-primary", "fingerprint": "6d4773675762e3cc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "54344acfe0962894", "scanner": "scanner-primary", "fingerprint": "3ab5d313dda8e5f9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["debug", "cleanup", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-72b2a6250083a784", "level": "warning", "message": {"text": "Placeholder or mock-heavy implementation detected"}, "properties": {"repobilityId": "ee73c291462027db", "scanner": "scanner-primary", "fingerprint": "72b2a6250083a784", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "incomplete", "generated-repo-pattern"]}}, {"ruleId": "scanner-2d0c7b7ab8f8aacf", "level": "warning", "message": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "properties": {"repobilityId": "a4561098c9a310ad", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-ea8f3013f588db25", "level": "note", "message": {"text": "Shallow git history limits provenance confidence"}, "properties": {"repobilityId": "becac8a647ef8ea1", "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": "c328d38b8aadf584", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-3133105b186c095c", "level": "none", "message": {"text": "Commented-code block (7 lines) in tests/test_summary.py:429"}, "properties": {"repobilityId": "55c16af9ee26f45c", "scanner": "scanner-primary", "fingerprint": "3133105b186c095c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-dc761da3a1be42d2", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/test_serve.py:229"}, "properties": {"repobilityId": "4f730d13a5483055", "scanner": "scanner-primary", "fingerprint": "dc761da3a1be42d2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8b56690f2c8c46c0", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/conftest.py:126"}, "properties": {"repobilityId": "a4c7dfdf338a98f9", "scanner": "scanner-primary", "fingerprint": "8b56690f2c8c46c0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-85c66a3728c45035", "level": "none", "message": {"text": "Commented-code block (6 lines) in tests/test_url_validator.py:110"}, "properties": {"repobilityId": "0997fbd7d56b5bb5", "scanner": "scanner-primary", "fingerprint": "85c66a3728c45035", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d4d5647940b5a984", "level": "none", "message": {"text": "Commented-code block (6 lines) in tests/test_sync_integration.py:702"}, "properties": {"repobilityId": "6e3e29dca197be15", "scanner": "scanner-primary", "fingerprint": "d4d5647940b5a984", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d285fd6448fcd20d", "level": "none", "message": {"text": "Commented-code block (7 lines) in tests/test_llm.py:47"}, "properties": {"repobilityId": "fe2786de914a88eb", "scanner": "scanner-primary", "fingerprint": "d285fd6448fcd20d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8242e82d32814ef5", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/test_pdf.py:110"}, "properties": {"repobilityId": "e2331b646ab96b10", "scanner": "scanner-primary", "fingerprint": "8242e82d32814ef5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5f1057de4e2b747f", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/test_alerts.py:45"}, "properties": {"repobilityId": "e05d2114e1483d8b", "scanner": "scanner-primary", "fingerprint": "5f1057de4e2b747f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a71c18e8e89ac2a5", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/test_store.py:182"}, "properties": {"repobilityId": "f69e98fb7c4ae7e2", "scanner": "scanner-primary", "fingerprint": "a71c18e8e89ac2a5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d261bc942268014d", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/test_llmkit_usage.py:307"}, "properties": {"repobilityId": "ac8d7d66be491dc0", "scanner": "scanner-primary", "fingerprint": "d261bc942268014d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-65208f83193caa96", "level": "note", "message": {"text": "Legacy-named symbol `test_native_base_strips_v1` in tests/test_llmkit_providers.py:914"}, "properties": {"repobilityId": "f3df0e256d3c32de", "scanner": "scanner-primary", "fingerprint": "65208f83193caa96", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-554773e69e3e8570", "level": "none", "message": {"text": "Commented-code block (6 lines) in tests/test_llmkit_providers.py:52"}, "properties": {"repobilityId": "f10d2aecfdee6deb", "scanner": "scanner-primary", "fingerprint": "554773e69e3e8570", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-94830768aaddc8c2", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/test_build_provider_stores.py:869"}, "properties": {"repobilityId": "64bf70e4ae785029", "scanner": "scanner-primary", "fingerprint": "94830768aaddc8c2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ddfea7a771603e0b", "level": "note", "message": {"text": "Legacy-named symbol `calendar_unused` in tests/test_cli.py:180"}, "properties": {"repobilityId": "25a3edcea31b6cfc", "scanner": "scanner-primary", "fingerprint": "ddfea7a771603e0b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-a3ddb6bb00c85f2f", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/test_cli.py:1103"}, "properties": {"repobilityId": "3ac4ee0e7791cbf7", "scanner": "scanner-primary", "fingerprint": "a3ddb6bb00c85f2f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-552818601945be78", "level": "none", "message": {"text": "Commented-code block (6 lines) in tests/test_courtlistener.py:111"}, "properties": {"repobilityId": "7c8bba378b3f9f45", "scanner": "scanner-primary", "fingerprint": "552818601945be78", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9822efff7dd5bed4", "level": "none", "message": {"text": "Commented-code block (8 lines) in tests/test_sync_helpers.py:317"}, "properties": {"repobilityId": "06863ec4481ded38", "scanner": "scanner-primary", "fingerprint": "9822efff7dd5bed4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-35b4cdc8475a3733", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/test_index.py:422"}, "properties": {"repobilityId": "3a7a1bea7fd01b93", "scanner": "scanner-primary", "fingerprint": "35b4cdc8475a3733", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d4def3944641af4a", "level": "none", "message": {"text": "Commented-code block (17 lines) in case_calendar/extractor.py:60"}, "properties": {"repobilityId": "ecb36bfe1a5906e2", "scanner": "scanner-primary", "fingerprint": "d4def3944641af4a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2a694a354c5e196d", "level": "none", "message": {"text": "Commented-code block (5 lines) in case_calendar/pdf.py:33"}, "properties": {"repobilityId": "6787a4c8d957bf8a", "scanner": "scanner-primary", "fingerprint": "2a694a354c5e196d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a3dbe8cf6a770bf4", "level": "none", "message": {"text": "Commented-code block (13 lines) in case_calendar/costs.py:53"}, "properties": {"repobilityId": "a2a60624de5e0ac3", "scanner": "scanner-primary", "fingerprint": "a3dbe8cf6a770bf4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d35b3aa595e9508f", "level": "none", "message": {"text": "Commented-code block (9 lines) in case_calendar/llm.py:735"}, "properties": {"repobilityId": "96d1acb30c9ce8eb", "scanner": "scanner-primary", "fingerprint": "d35b3aa595e9508f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-68787d6b8b9a0c95", "level": "none", "message": {"text": "Commented-code block (5 lines) in case_calendar/sync.py:31"}, "properties": {"repobilityId": "6b93d6003b92d61b", "scanner": "scanner-primary", "fingerprint": "68787d6b8b9a0c95", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-acaef59cd8cdf11e", "level": "none", "message": {"text": "Commented-code block (5 lines) in case_calendar/summary.py:36"}, "properties": {"repobilityId": "62928343c80b88d5", "scanner": "scanner-primary", "fingerprint": "acaef59cd8cdf11e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3d668983704939d2", "level": "none", "message": {"text": "Commented-code block (5 lines) in case_calendar/cli.py:96"}, "properties": {"repobilityId": "00dc00f058088204", "scanner": "scanner-primary", "fingerprint": "3d668983704939d2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-07137c4e3854b107", "level": "none", "message": {"text": "Commented-code block (6 lines) in case_calendar/store.py:254"}, "properties": {"repobilityId": "71106e6dce4f140e", "scanner": "scanner-primary", "fingerprint": "07137c4e3854b107", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3bb21c5a951b01cb", "level": "none", "message": {"text": "Commented-code block (12 lines) in case_calendar/courtlistener.py:19"}, "properties": {"repobilityId": "2fb8c87be92ca269", "scanner": "scanner-primary", "fingerprint": "3bb21c5a951b01cb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b05bf120c307d833", "level": "none", "message": {"text": "Commented-code block (12 lines) in case_calendar/alerts.py:75"}, "properties": {"repobilityId": "223058f31063cb7e", "scanner": "scanner-primary", "fingerprint": "b05bf120c307d833", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3445508f10229ac7", "level": "none", "message": {"text": "Commented-code block (5 lines) in case_calendar/serve.py:105"}, "properties": {"repobilityId": "2b17acf275eebe1b", "scanner": "scanner-primary", "fingerprint": "3445508f10229ac7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7d794ea0abd56aed", "level": "none", "message": {"text": "Commented-code block (8 lines) in case_calendar/llmkit/usage.py:36"}, "properties": {"repobilityId": "f3651ddf8c41e164", "scanner": "scanner-primary", "fingerprint": "7d794ea0abd56aed", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4cdd82e1167a3e66", "level": "none", "message": {"text": "Commented-code block (18 lines) in case_calendar/llmkit/providers.py:99"}, "properties": {"repobilityId": "3dcb3171229a4420", "scanner": "scanner-primary", "fingerprint": "4cdd82e1167a3e66", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4d66bd57d2435057", "level": "none", "message": {"text": "Commented-code block (5 lines) in case_calendar/calendars/gcal.py:102"}, "properties": {"repobilityId": "7860885727e973e1", "scanner": "scanner-primary", "fingerprint": "4d66bd57d2435057", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-126168490dc2ccb9", "level": "none", "message": {"text": "Commented-code block (5 lines) in case_calendar/calendars/m365.py:355"}, "properties": {"repobilityId": "360581f654bdd93d", "scanner": "scanner-primary", "fingerprint": "126168490dc2ccb9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5dc8f2cce490d6d6", "level": "none", "message": {"text": "Commented-code block (5 lines) in case_calendar/calendars/ics.py:145"}, "properties": {"repobilityId": "9648baf072d1e0b2", "scanner": "scanner-primary", "fingerprint": "5dc8f2cce490d6d6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1d672ab5e9fe1deb", "level": "none", "message": {"text": "Commented-code block (6 lines) in case_calendar/calendars/index.py:33"}, "properties": {"repobilityId": "d7868903891643d9", "scanner": "scanner-primary", "fingerprint": "1d672ab5e9fe1deb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3e6f8f718ca86a36", "level": "none", "message": {"text": "Commented-code block (6 lines) in model-comparison/build_scoring_page.py:170"}, "properties": {"repobilityId": "7d290c7ca034a505", "scanner": "scanner-primary", "fingerprint": "3e6f8f718ca86a36", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-be4c1f3251910dd8", "level": "none", "message": {"text": "Commented-code block (6 lines) in model-comparison/build_provider_stores.py:146"}, "properties": {"repobilityId": "f70a92058f5970a4", "scanner": "scanner-primary", "fingerprint": "be4c1f3251910dd8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-57311ee03339fe1f", "level": "none", "message": {"text": "Commented-code block (6 lines) in model-comparison/snapshot_benchmark.py:76"}, "properties": {"repobilityId": "d06942512915179b", "scanner": "scanner-primary", "fingerprint": "57311ee03339fe1f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-87acb4066071a15a", "level": "note", "message": {"text": "19 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "b1f30c58de7ffb20", "scanner": "scanner-primary", "fingerprint": "87acb4066071a15a", "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": "f49284ef0dd32544", "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": "afef2713b8b7fad7", "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": "8eda35e1c9864217", "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": "929a1ae4c7fceeae", "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": "3669c684dd4e0157", "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": "7a5911b3dc775aa0", "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": "80388f5334802802", "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": "44e1e0fd0036349b", "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": "5d383e7590ecffef", "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": "468eba66d604e867", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-02525d39071dd2c7", "level": "note", "message": {"text": "Near-duplicate function bodies in 5 places"}, "properties": {"repobilityId": "ae82c35e4c692429", "scanner": "scanner-primary", "fingerprint": "02525d39071dd2c7", "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": "7f52d8489e5f3eb1", "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": "c5f0998a809125bb", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}]}]}