{"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-ba6161b311683bd7", "name": "Possibly dead Python function: decorator", "shortDescription": {"text": "Possibly dead Python function: decorator"}, "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-d55f1dd405fd2cfc", "name": "Possibly dead Python function: instrumented_decorator", "shortDescription": {"text": "Possibly dead Python function: instrumented_decorator"}, "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-6f69d188e378a224", "name": "Docker base image is tag-pinned but not digest-pinned: ghcr.io/astral-sh/uv:python${PYTHON_VERSION}-trixie-slim", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: ghcr.io/astral-sh/uv:python${PYTHON_VERSION}-trixie-slim"}, "fullDescription": {"text": "Container tags can be retagged upstream. Pin production base images to a reviewed digest (`image@sha256:...`) when reproducibility and supply-chain integrity matter."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ef98b9290320ebe6", "name": "Docker base image is tag-pinned but not digest-pinned: python:${PYTHON_VERSION}-slim", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: python:${PYTHON_VERSION}-slim"}, "fullDescription": {"text": "Container tags can be retagged upstream. Pin production base images to a reviewed digest (`image@sha256:...`) when reproducibility and supply-chain integrity matter."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-aa5acaa49eb8315b", "name": "Containers defined but no K8s/orchestration manifest found", "shortDescription": {"text": "Containers defined but no K8s/orchestration manifest found"}, "fullDescription": {"text": "Repo has Dockerfiles/compose but no Kubernetes/Nomad manifests. If the target deployment is K8s, the manifests may live in a separate ops repo."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9710c8d059e53154", "name": "No frontend routes/components detected", "shortDescription": {"text": "No frontend routes/components detected"}, "fullDescription": {"text": "No React/Vue/Next routes were found. This is fine for backend-only repos."}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7f0f9976570faa6d", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "docker/build-push-action@v7 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-68a2b8f5c8cd6b53", "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-27924aa79fa4a517", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "codecov/codecov-action@v5 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-43a7db5851459099", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "azure/login@v3 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6dab09bbf1cb45f7", "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-420770c48b8d4613", "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-21aa0c39a7c1ca23", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "github/codeql-action/upload-sarif@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-a53bf972e19b52fd", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/upload-artifact@v7 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-7ffa33751be3d771", "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-02ff65793e9f8013", "name": "Very large file: tests/unit/test_http_client.py (1875 lines)", "shortDescription": {"text": "Very large file: tests/unit/test_http_client.py (1875 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-8c659ed9500c44f4", "name": "Very large file: tests/unit/test_sql.py (2028 lines)", "shortDescription": {"text": "Very large file: tests/unit/test_sql.py (2028 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-63c694cd71277e3a", "name": "Very large file: tests/unit/test_telemetry.py (1885 lines)", "shortDescription": {"text": "Very large file: tests/unit/test_telemetry.py (1885 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-3759e81f453256ed", "name": "Very large file: tests/unit/mcp/test_server.py (1941 lines)", "shortDescription": {"text": "Very large file: tests/unit/mcp/test_server.py (1941 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-6cd39f2eebcf7b1f", "name": "Very large file: tests/unit/cli/commands/test_tables.py (1969 lines)", "shortDescription": {"text": "Very large file: tests/unit/cli/commands/test_tables.py (1969 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-d740e4157fcbfe2b", "name": "Very large file: tests/unit/services/test_tables.py (1299 lines)", "shortDescription": {"text": "Very large file: tests/unit/services/test_tables.py (1299 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-00ff13fff41791d5", "name": "Very large file: tests/unit/services/test_load.py (1659 lines)", "shortDescription": {"text": "Very large file: tests/unit/services/test_load.py (1659 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-9b1b168e8986f670", "name": "Very large file: src/fabric_dw/services/load.py (1342 lines)", "shortDescription": {"text": "Very large file: src/fabric_dw/services/load.py (1342 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-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-7430127da8ab5227", "name": "Legacy-named symbol `test_rename_view_creates_new_and_removes_old` in tests/integration/test_services_views.py:244", "shortDescription": {"text": "Legacy-named symbol `test_rename_view_creates_new_and_removes_old` in tests/integration/test_services_views.py:244"}, "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-a5766d3d031d788b", "name": "Commented-code block (7 lines) in tests/integration/conftest.py:126", "shortDescription": {"text": "Commented-code block (7 lines) in tests/integration/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-38640d9d66eed399", "name": "Commented-code block (6 lines) in tests/integration/test_services_audit.py:193", "shortDescription": {"text": "Commented-code block (6 lines) in tests/integration/test_services_audit.py:193"}, "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-ae942273fe29e224", "name": "Legacy-named symbol `pytest_clone_copy` in tests/integration/test_services_tables.py:89", "shortDescription": {"text": "Legacy-named symbol `pytest_clone_copy` in tests/integration/test_services_tables.py:89"}, "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-7770c89c933bdce0", "name": "Commented-code block (6 lines) in tests/integration/test_services_tables.py:147", "shortDescription": {"text": "Commented-code block (6 lines) in tests/integration/test_services_tables.py:147"}, "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-286290631e6f721d", "name": "Legacy-named symbol `pytest_fns_roundtrip_v2` in tests/integration/test_services_functions.py:251", "shortDescription": {"text": "Legacy-named symbol `pytest_fns_roundtrip_v2` in tests/integration/test_services_functions.py:251"}, "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-0d82f102e3e71d26", "name": "Legacy-named symbol `payload_copy` in tests/unit/test_models.py:108", "shortDescription": {"text": "Legacy-named symbol `payload_copy` in tests/unit/test_models.py:108"}, "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-2e67b28939d798ed", "name": "Legacy-named symbol `mock_conn_old` in tests/unit/test_sql.py:724", "shortDescription": {"text": "Legacy-named symbol `mock_conn_old` in tests/unit/test_sql.py:724"}, "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-5e999c0c05d2e16a", "name": "Commented-code block (6 lines) in tests/unit/test_sql.py:732", "shortDescription": {"text": "Commented-code block (6 lines) in tests/unit/test_sql.py:732"}, "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-4a63f6462e07bcfe", "name": "Commented-code block (6 lines) in tests/unit/test_resolver.py:969", "shortDescription": {"text": "Commented-code block (6 lines) in tests/unit/test_resolver.py:969"}, "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-c37763801a53942f", "name": "Legacy-named symbol `sales_v2` in tests/unit/mcp/test_server.py:1657", "shortDescription": {"text": "Legacy-named symbol `sales_v2` in tests/unit/mcp/test_server.py:1657"}, "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-4fb88c56e099d13b", "name": "Legacy-named symbol `env_copy` in tests/unit/mcp/test_security.py:608", "shortDescription": {"text": "Legacy-named symbol `env_copy` in tests/unit/mcp/test_security.py:608"}, "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-ba8a7cf98884bf04", "name": "Commented-code block (7 lines) in tests/unit/mcp/tools/test_tool_quality.py:777", "shortDescription": {"text": "Commented-code block (7 lines) in tests/unit/mcp/tools/test_tool_quality.py:777"}, "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-b05a68e49c35b32e", "name": "Legacy-named symbol `sales_v2` in tests/unit/cli/commands/test_tables.py:1139", "shortDescription": {"text": "Legacy-named symbol `sales_v2` in tests/unit/cli/commands/test_tables.py:1139"}, "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-8f8d6b426bdb3528", "name": "Legacy-named symbol `original_copy` in tests/unit/services/test_helpers.py:50", "shortDescription": {"text": "Legacy-named symbol `original_copy` in tests/unit/services/test_helpers.py:50"}, "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-599b228bded3d672", "name": "Commented-code block (7 lines) in tests/unit/services/test_functions.py:699", "shortDescription": {"text": "Commented-code block (7 lines) in tests/unit/services/test_functions.py:699"}, "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-450dfbb70ec88756", "name": "Legacy-named symbol `sales_v2` in tests/unit/services/test_tables.py:674", "shortDescription": {"text": "Legacy-named symbol `sales_v2` in tests/unit/services/test_tables.py:674"}, "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-fb209740a967dedb", "name": "Commented-code block (5 lines) in tests/unit/services/test_concurrency.py:246", "shortDescription": {"text": "Commented-code block (5 lines) in tests/unit/services/test_concurrency.py:246"}, "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-fd9834e9aa53f948", "name": "Legacy-named symbol `mock_copy` in tests/unit/services/test_load.py:410", "shortDescription": {"text": "Legacy-named symbol `mock_copy` in tests/unit/services/test_load.py:410"}, "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-c042bf7e2d1cc9fe", "name": "Commented-code block (5 lines) in tests/unit/services/test_sql_exec.py:596", "shortDescription": {"text": "Commented-code block (5 lines) in tests/unit/services/test_sql_exec.py:596"}, "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-a59f56ded97cb5db", "name": "Legacy-named symbol `my_project_old` in tests/unit/services/test_dbt_scaffold.py:589", "shortDescription": {"text": "Legacy-named symbol `my_project_old` in tests/unit/services/test_dbt_scaffold.py:589"}, "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-e16565136383228f", "name": "Commented-code block (5 lines) in src/fabric_dw/sql.py:84", "shortDescription": {"text": "Commented-code block (5 lines) in src/fabric_dw/sql.py:84"}, "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-aa73d8fa69870804", "name": "Commented-code block (7 lines) in src/fabric_dw/http_client.py:287", "shortDescription": {"text": "Commented-code block (7 lines) in src/fabric_dw/http_client.py:287"}, "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-7b9e375d742fdec2", "name": "Commented-code block (5 lines) in src/fabric_dw/auth.py:369", "shortDescription": {"text": "Commented-code block (5 lines) in src/fabric_dw/auth.py:369"}, "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-50816e56e09a355e", "name": "Commented-code block (5 lines) in src/fabric_dw/telemetry.py:378", "shortDescription": {"text": "Commented-code block (5 lines) in src/fabric_dw/telemetry.py:378"}, "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-da3e295622c370e4", "name": "Commented-code block (5 lines) in src/fabric_dw/cache.py:126", "shortDescription": {"text": "Commented-code block (5 lines) in src/fabric_dw/cache.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-7ae8dade93e532c3", "name": "Commented-code block (5 lines) in src/fabric_dw/sql_io.py:124", "shortDescription": {"text": "Commented-code block (5 lines) in src/fabric_dw/sql_io.py:124"}, "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-772bb8534da81753", "name": "Commented-code block (5 lines) in src/fabric_dw/resolver.py:295", "shortDescription": {"text": "Commented-code block (5 lines) in src/fabric_dw/resolver.py:295"}, "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-5cca3d720f12e447", "name": "Commented-code block (5 lines) in src/fabric_dw/mcp/_guards.py:128", "shortDescription": {"text": "Commented-code block (5 lines) in src/fabric_dw/mcp/_guards.py:128"}, "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-d7c3dc5a589eca95", "name": "Legacy-named symbol `sales_v2` in src/fabric_dw/mcp/tools/tables.py:339", "shortDescription": {"text": "Legacy-named symbol `sales_v2` in src/fabric_dw/mcp/tools/tables.py:339"}, "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-7c6002149293bf73", "name": "Commented-code block (11 lines) in src/fabric_dw/cli/_main.py:251", "shortDescription": {"text": "Commented-code block (11 lines) in src/fabric_dw/cli/_main.py:251"}, "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-6b6b4f52f82723f9", "name": "Commented-code block (6 lines) in src/fabric_dw/services/warehouses.py:166", "shortDescription": {"text": "Commented-code block (6 lines) in src/fabric_dw/services/warehouses.py:166"}, "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-d935518ddd2a3f6a", "name": "Commented-code block (8 lines) in src/fabric_dw/services/_concurrency.py:90", "shortDescription": {"text": "Commented-code block (8 lines) in src/fabric_dw/services/_concurrency.py:90"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8f34ef15d57072b8", "name": "Commented-code block (5 lines) in src/fabric_dw/services/sql_exec.py:76", "shortDescription": {"text": "Commented-code block (5 lines) in src/fabric_dw/services/sql_exec.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-843b03f8c331fd7f", "name": "Commented-code block (8 lines) in src/fabric_dw/services/schemas.py:108", "shortDescription": {"text": "Commented-code block (8 lines) in src/fabric_dw/services/schemas.py:108"}, "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-59d27198ef922a67", "name": "Commented-code block (6 lines) in src/fabric_dw/services/sql_endpoints.py:80", "shortDescription": {"text": "Commented-code block (6 lines) in src/fabric_dw/services/sql_endpoints.py:80"}, "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-d206e9f6858e5e11", "name": "Commented-code block (5 lines) in src/fabric_dw/services/tables.py:688", "shortDescription": {"text": "Commented-code block (5 lines) in src/fabric_dw/services/tables.py:688"}, "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-fc29d827d1c8a007", "name": "Commented-code block (5 lines) in src/fabric_dw/services/load.py:588", "shortDescription": {"text": "Commented-code block (5 lines) in src/fabric_dw/services/load.py:588"}, "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-1c2cd2f5c8b75041", "name": "Commented-code block (5 lines) in src/fabric_dw/services/statistics.py:133", "shortDescription": {"text": "Commented-code block (5 lines) in src/fabric_dw/services/statistics.py:133"}, "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-e2af82ef89ee3e00", "name": "Legacy-named symbol `my_project_old` in src/fabric_dw/services/dbt_scaffold.py:498", "shortDescription": {"text": "Legacy-named symbol `my_project_old` in src/fabric_dw/services/dbt_scaffold.py:498"}, "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-79767734b57b46bd", "name": "Network/subprocess call without timeout or try/except \u2014 src/fabric_dw/services/dbt_scaffold.py:551", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 src/fabric_dw/services/dbt_scaffold.py:551"}, "fullDescription": {"text": "`subprocess.run(...)` here lacks both a `timeout=` arg and an enclosing try/except. This is exactly the class of bug that took down our git-clone earlier (HTTP/2 stream cancel surfaced as a fatal). Add a `timeout=` and wrap in try/except, or use a wrapper that retries."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4ea013e44e41cc84", "name": "Commented-code block (5 lines) in src/fabric_dw/services/queries.py:29", "shortDescription": {"text": "Commented-code block (5 lines) in src/fabric_dw/services/queries.py:29"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-bca24450cc7fdaa3", "name": "Commented-code block (7 lines) in src/fabric_dw/services/restore.py:146", "shortDescription": {"text": "Commented-code block (7 lines) in src/fabric_dw/services/restore.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-270401f555b756e4", "name": "Commented-code block (5 lines) in src/fabric_dw/services/snapshots.py:167", "shortDescription": {"text": "Commented-code block (5 lines) in src/fabric_dw/services/snapshots.py:167"}, "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-2adcfb05f34147e1", "name": "Commented-code block (8 lines) in src/fabric_dw/services/_helpers.py:238", "shortDescription": {"text": "Commented-code block (8 lines) in src/fabric_dw/services/_helpers.py:238"}, "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-7c43869024b7d6ad", "name": "Legacy-named symbol `model_copy` in src/fabric_dw/services/audit.py:306", "shortDescription": {"text": "Legacy-named symbol `model_copy` in src/fabric_dw/services/audit.py:306"}, "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-a9836457f7ec50c4", "name": "23 env vars used in code but missing from .env.example", "shortDescription": {"text": "23 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `ACTIONS_ID_TOKEN_REQUEST_TOKEN`, `ACTIONS_ID_TOKEN_REQUEST_URL`, `AZURE_CLIENT_ID`, `AZURE_CLIENT_SECRET`, `AZURE_CONFIG_DIR`, `AZURE_TENANT_ID`, `DO_NOT_TRACK`, `FABRIC_ALLOW_UNENCRYPTED_TOKEN_CACHE` + 15 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-be46ea126aa5d8dc", "name": "Near-duplicate function bodies in 3 places", "shortDescription": {"text": "Near-duplicate function bodies in 3 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nsrc/fabric_dw/sql.py:close, src/fabric_dw/sql.py:close, src/fabric_dw/sql.py:close\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-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:\nsrc/fabric_dw/sql.py:cursor, src/fabric_dw/sql.py:cursor\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-49c98f7cedd9c977", "name": "Near-duplicate function bodies in 4 places", "shortDescription": {"text": "Near-duplicate function bodies in 4 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nsrc/fabric_dw/mcp/tools/queries.py:list_request_history, src/fabric_dw/mcp/tools/queries.py:list_session_history, src/fabric_dw/mcp/tools/queries.py:list_frequent_queries, src/fabric_dw/mcp/tools/queries.py:list_long_running_queries\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-0027e313ade46c8f", "name": "Near-duplicate function bodies in 7 places", "shortDescription": {"text": "Near-duplicate function bodies in 7 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nsrc/fabric_dw/cli/commands/functions.py:get_cmd, src/fabric_dw/cli/commands/tables.py:delete_cmd, src/fabric_dw/cli/commands/tables.py:clear_cmd, src/fabric_dw/cli/commands/procedures.py:get_cmd\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:\nsrc/fabric_dw/cli/commands/sql_pools.py:insights_cmd, src/fabric_dw/cli/commands/queries.py:request_history_cmd, src/fabric_dw/cli/commands/queries.py:session_history_cmd, src/fabric_dw/cli/commands/queries.py:frequent_cmd\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/19112"}, "properties": {"repository": "sdebruyn/fabric-dw-mcp-cli", "repoUrl": "https://github.com/sdebruyn/fabric-dw-mcp-cli", "branch": "main"}, "results": [{"ruleId": "scanner-ba6161b311683bd7", "level": "note", "message": {"text": "Possibly dead Python function: decorator"}, "properties": {"repobilityId": "ffbcbc9bc189af1c", "scanner": "scanner-primary", "fingerprint": "ba6161b311683bd7", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/fabric_dw/mcp/_helpers.py:178"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-d55f1dd405fd2cfc", "level": "note", "message": {"text": "Possibly dead Python function: instrumented_decorator"}, "properties": {"repobilityId": "b631a7be5bd7bc48", "scanner": "scanner-primary", "fingerprint": "d55f1dd405fd2cfc", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/fabric_dw/mcp/_helpers.py:233"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-6f69d188e378a224", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: ghcr.io/astral-sh/uv:python${PYTHON_VERSION}-trixie-slim"}, "properties": {"repobilityId": "aa56817411afb518", "scanner": "scanner-primary", "fingerprint": "6f69d188e378a224", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "Dockerfile"}, "region": {"startLine": 5}}}]}, {"ruleId": "scanner-ef98b9290320ebe6", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: python:${PYTHON_VERSION}-slim"}, "properties": {"repobilityId": "51e8e745195188ec", "scanner": "scanner-primary", "fingerprint": "ef98b9290320ebe6", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "Dockerfile"}, "region": {"startLine": 28}}}]}, {"ruleId": "scanner-aa5acaa49eb8315b", "level": "note", "message": {"text": "Containers defined but no K8s/orchestration manifest found"}, "properties": {"repobilityId": "b230ea9b68736081", "scanner": "scanner-primary", "fingerprint": "aa5acaa49eb8315b", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["coverage", "deployment"]}}, {"ruleId": "scanner-9710c8d059e53154", "level": "none", "message": {"text": "No frontend routes/components detected"}, "properties": {"repobilityId": "44ca61485762e494", "scanner": "scanner-primary", "fingerprint": "9710c8d059e53154", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["coverage"]}}, {"ruleId": "scanner-7f0f9976570faa6d", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "2d714eaacdb9a135", "scanner": "scanner-primary", "fingerprint": "7f0f9976570faa6d", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/docker.yml"}, "region": {"startLine": 59}}}]}, {"ruleId": "scanner-7f0f9976570faa6d", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "cf6fe44c40772d7a", "scanner": "scanner-primary", "fingerprint": "7f0f9976570faa6d", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/docker.yml"}, "region": {"startLine": 73}}}]}, {"ruleId": "scanner-68a2b8f5c8cd6b53", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "0036b33690fe05ae", "scanner": "scanner-primary", "fingerprint": "68a2b8f5c8cd6b53", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/docker.yml"}, "region": {"startLine": 1}}}]}, {"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": 80}}}]}, {"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": 86}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "a707cb0e4e23a8c1", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 101}}}]}, {"ruleId": "scanner-43a7db5851459099", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "5f2b703b229ddd11", "scanner": "scanner-primary", "fingerprint": "43a7db5851459099", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/integration.yml"}, "region": {"startLine": 332}}}]}, {"ruleId": "scanner-6dab09bbf1cb45f7", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "8efbe5629a026a24", "scanner": "scanner-primary", "fingerprint": "6dab09bbf1cb45f7", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/integration.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-420770c48b8d4613", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "a9e3f39ec43b203d", "scanner": "scanner-primary", "fingerprint": "420770c48b8d4613", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/release-drafter.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-21aa0c39a7c1ca23", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "0595784473c1a8a5", "scanner": "scanner-primary", "fingerprint": "21aa0c39a7c1ca23", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/security.yml"}, "region": {"startLine": 29}}}]}, {"ruleId": "scanner-a53bf972e19b52fd", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "3fa69e030c51fba4", "scanner": "scanner-primary", "fingerprint": "a53bf972e19b52fd", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/publish.yml"}, "region": {"startLine": 69}}}]}, {"ruleId": "scanner-a53bf972e19b52fd", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "b6082e5bd07c612b", "scanner": "scanner-primary", "fingerprint": "a53bf972e19b52fd", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/publish.yml"}, "region": {"startLine": 76}}}]}, {"ruleId": "scanner-a53bf972e19b52fd", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "92994a16dfe89492", "scanner": "scanner-primary", "fingerprint": "a53bf972e19b52fd", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/publish.yml"}, "region": {"startLine": 108}}}]}, {"ruleId": "scanner-7ffa33751be3d771", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "491a3ad29cbaf189", "scanner": "scanner-primary", "fingerprint": "7ffa33751be3d771", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/publish.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-02ff65793e9f8013", "level": "note", "message": {"text": "Very large file: tests/unit/test_http_client.py (1875 lines)"}, "properties": {"repobilityId": "4e459417c7f39a59", "scanner": "scanner-primary", "fingerprint": "02ff65793e9f8013", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-8c659ed9500c44f4", "level": "note", "message": {"text": "Very large file: tests/unit/test_sql.py (2028 lines)"}, "properties": {"repobilityId": "f3f47c703273cdd9", "scanner": "scanner-primary", "fingerprint": "8c659ed9500c44f4", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-63c694cd71277e3a", "level": "note", "message": {"text": "Very large file: tests/unit/test_telemetry.py (1885 lines)"}, "properties": {"repobilityId": "a389dfc76a37d4ca", "scanner": "scanner-primary", "fingerprint": "63c694cd71277e3a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-3759e81f453256ed", "level": "note", "message": {"text": "Very large file: tests/unit/mcp/test_server.py (1941 lines)"}, "properties": {"repobilityId": "9b74aa63a7a0f1f2", "scanner": "scanner-primary", "fingerprint": "3759e81f453256ed", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-6cd39f2eebcf7b1f", "level": "note", "message": {"text": "Very large file: tests/unit/cli/commands/test_tables.py (1969 lines)"}, "properties": {"repobilityId": "44b56e51210a61b5", "scanner": "scanner-primary", "fingerprint": "6cd39f2eebcf7b1f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-d740e4157fcbfe2b", "level": "note", "message": {"text": "Very large file: tests/unit/services/test_tables.py (1299 lines)"}, "properties": {"repobilityId": "65979fcbd4e5f66a", "scanner": "scanner-primary", "fingerprint": "d740e4157fcbfe2b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-00ff13fff41791d5", "level": "note", "message": {"text": "Very large file: tests/unit/services/test_load.py (1659 lines)"}, "properties": {"repobilityId": "2cf43fb2c5357d87", "scanner": "scanner-primary", "fingerprint": "00ff13fff41791d5", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-9b1b168e8986f670", "level": "note", "message": {"text": "Very large file: src/fabric_dw/services/load.py (1342 lines)"}, "properties": {"repobilityId": "ad5062c0e7c3a27f", "scanner": "scanner-primary", "fingerprint": "9b1b168e8986f670", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-2d0c7b7ab8f8aacf", "level": "warning", "message": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "properties": {"repobilityId": "7baf99945c14536c", "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": "dc1b1f398457001b", "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": "3824d7310779111a", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-7430127da8ab5227", "level": "note", "message": {"text": "Legacy-named symbol `test_rename_view_creates_new_and_removes_old` in tests/integration/test_services_views.py:244"}, "properties": {"repobilityId": "8b066b4b6e47b914", "scanner": "scanner-primary", "fingerprint": "7430127da8ab5227", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-a5766d3d031d788b", "level": "none", "message": {"text": "Commented-code block (7 lines) in tests/integration/conftest.py:126"}, "properties": {"repobilityId": "70cc17a9a4d62e01", "scanner": "scanner-primary", "fingerprint": "a5766d3d031d788b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-38640d9d66eed399", "level": "none", "message": {"text": "Commented-code block (6 lines) in tests/integration/test_services_audit.py:193"}, "properties": {"repobilityId": "7955df45bec7484e", "scanner": "scanner-primary", "fingerprint": "38640d9d66eed399", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ae942273fe29e224", "level": "note", "message": {"text": "Legacy-named symbol `pytest_clone_copy` in tests/integration/test_services_tables.py:89"}, "properties": {"repobilityId": "9fd242071ffce94c", "scanner": "scanner-primary", "fingerprint": "ae942273fe29e224", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-7770c89c933bdce0", "level": "none", "message": {"text": "Commented-code block (6 lines) in tests/integration/test_services_tables.py:147"}, "properties": {"repobilityId": "332bf378a035daab", "scanner": "scanner-primary", "fingerprint": "7770c89c933bdce0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-286290631e6f721d", "level": "note", "message": {"text": "Legacy-named symbol `pytest_fns_roundtrip_v2` in tests/integration/test_services_functions.py:251"}, "properties": {"repobilityId": "ad18388fae1440e7", "scanner": "scanner-primary", "fingerprint": "286290631e6f721d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-0d82f102e3e71d26", "level": "note", "message": {"text": "Legacy-named symbol `payload_copy` in tests/unit/test_models.py:108"}, "properties": {"repobilityId": "67eb95f200c91c3b", "scanner": "scanner-primary", "fingerprint": "0d82f102e3e71d26", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-2e67b28939d798ed", "level": "note", "message": {"text": "Legacy-named symbol `mock_conn_old` in tests/unit/test_sql.py:724"}, "properties": {"repobilityId": "2e31e023bf5773ec", "scanner": "scanner-primary", "fingerprint": "2e67b28939d798ed", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-5e999c0c05d2e16a", "level": "none", "message": {"text": "Commented-code block (6 lines) in tests/unit/test_sql.py:732"}, "properties": {"repobilityId": "ee83eb71deab914f", "scanner": "scanner-primary", "fingerprint": "5e999c0c05d2e16a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4a63f6462e07bcfe", "level": "none", "message": {"text": "Commented-code block (6 lines) in tests/unit/test_resolver.py:969"}, "properties": {"repobilityId": "f6bd58c3ebd71212", "scanner": "scanner-primary", "fingerprint": "4a63f6462e07bcfe", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c37763801a53942f", "level": "note", "message": {"text": "Legacy-named symbol `sales_v2` in tests/unit/mcp/test_server.py:1657"}, "properties": {"repobilityId": "2f0d557a5d82d846", "scanner": "scanner-primary", "fingerprint": "c37763801a53942f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-4fb88c56e099d13b", "level": "note", "message": {"text": "Legacy-named symbol `env_copy` in tests/unit/mcp/test_security.py:608"}, "properties": {"repobilityId": "e94f62bd590aa517", "scanner": "scanner-primary", "fingerprint": "4fb88c56e099d13b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-ba8a7cf98884bf04", "level": "none", "message": {"text": "Commented-code block (7 lines) in tests/unit/mcp/tools/test_tool_quality.py:777"}, "properties": {"repobilityId": "182e8c47c31839c0", "scanner": "scanner-primary", "fingerprint": "ba8a7cf98884bf04", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b05a68e49c35b32e", "level": "note", "message": {"text": "Legacy-named symbol `sales_v2` in tests/unit/cli/commands/test_tables.py:1139"}, "properties": {"repobilityId": "515be752c0eda9fa", "scanner": "scanner-primary", "fingerprint": "b05a68e49c35b32e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-8f8d6b426bdb3528", "level": "note", "message": {"text": "Legacy-named symbol `original_copy` in tests/unit/services/test_helpers.py:50"}, "properties": {"repobilityId": "1ec87d3effc8b21e", "scanner": "scanner-primary", "fingerprint": "8f8d6b426bdb3528", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-599b228bded3d672", "level": "none", "message": {"text": "Commented-code block (7 lines) in tests/unit/services/test_functions.py:699"}, "properties": {"repobilityId": "b74016dbfdee3a25", "scanner": "scanner-primary", "fingerprint": "599b228bded3d672", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-450dfbb70ec88756", "level": "note", "message": {"text": "Legacy-named symbol `sales_v2` in tests/unit/services/test_tables.py:674"}, "properties": {"repobilityId": "57d328ed8bf0fabc", "scanner": "scanner-primary", "fingerprint": "450dfbb70ec88756", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-fb209740a967dedb", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/unit/services/test_concurrency.py:246"}, "properties": {"repobilityId": "279cd4cf2db0d5a4", "scanner": "scanner-primary", "fingerprint": "fb209740a967dedb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fd9834e9aa53f948", "level": "note", "message": {"text": "Legacy-named symbol `mock_copy` in tests/unit/services/test_load.py:410"}, "properties": {"repobilityId": "008ef0969107e1c3", "scanner": "scanner-primary", "fingerprint": "fd9834e9aa53f948", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-c042bf7e2d1cc9fe", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/unit/services/test_sql_exec.py:596"}, "properties": {"repobilityId": "7f51d00b835e7a48", "scanner": "scanner-primary", "fingerprint": "c042bf7e2d1cc9fe", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a59f56ded97cb5db", "level": "note", "message": {"text": "Legacy-named symbol `my_project_old` in tests/unit/services/test_dbt_scaffold.py:589"}, "properties": {"repobilityId": "812ac63a3480d4a8", "scanner": "scanner-primary", "fingerprint": "a59f56ded97cb5db", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-e16565136383228f", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/fabric_dw/sql.py:84"}, "properties": {"repobilityId": "05f5e1af5e82090c", "scanner": "scanner-primary", "fingerprint": "e16565136383228f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-aa73d8fa69870804", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/fabric_dw/http_client.py:287"}, "properties": {"repobilityId": "9e2a09f93be8f620", "scanner": "scanner-primary", "fingerprint": "aa73d8fa69870804", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7b9e375d742fdec2", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/fabric_dw/auth.py:369"}, "properties": {"repobilityId": "607afc8f7a88b609", "scanner": "scanner-primary", "fingerprint": "7b9e375d742fdec2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-50816e56e09a355e", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/fabric_dw/telemetry.py:378"}, "properties": {"repobilityId": "4b226851caad274c", "scanner": "scanner-primary", "fingerprint": "50816e56e09a355e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-da3e295622c370e4", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/fabric_dw/cache.py:126"}, "properties": {"repobilityId": "198d809672bd199b", "scanner": "scanner-primary", "fingerprint": "da3e295622c370e4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7ae8dade93e532c3", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/fabric_dw/sql_io.py:124"}, "properties": {"repobilityId": "c07f14b614059ab8", "scanner": "scanner-primary", "fingerprint": "7ae8dade93e532c3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-772bb8534da81753", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/fabric_dw/resolver.py:295"}, "properties": {"repobilityId": "9df78e1e9c4e5483", "scanner": "scanner-primary", "fingerprint": "772bb8534da81753", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5cca3d720f12e447", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/fabric_dw/mcp/_guards.py:128"}, "properties": {"repobilityId": "16a66641728c6a64", "scanner": "scanner-primary", "fingerprint": "5cca3d720f12e447", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d7c3dc5a589eca95", "level": "note", "message": {"text": "Legacy-named symbol `sales_v2` in src/fabric_dw/mcp/tools/tables.py:339"}, "properties": {"repobilityId": "f838ab86ee48a89b", "scanner": "scanner-primary", "fingerprint": "d7c3dc5a589eca95", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-7c6002149293bf73", "level": "none", "message": {"text": "Commented-code block (11 lines) in src/fabric_dw/cli/_main.py:251"}, "properties": {"repobilityId": "d5be9dc8ebc7a4de", "scanner": "scanner-primary", "fingerprint": "7c6002149293bf73", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6b6b4f52f82723f9", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/fabric_dw/services/warehouses.py:166"}, "properties": {"repobilityId": "f04373c0d11b6da1", "scanner": "scanner-primary", "fingerprint": "6b6b4f52f82723f9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d935518ddd2a3f6a", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/fabric_dw/services/_concurrency.py:90"}, "properties": {"repobilityId": "d71c14fe2f923b1c", "scanner": "scanner-primary", "fingerprint": "d935518ddd2a3f6a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8f34ef15d57072b8", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/fabric_dw/services/sql_exec.py:76"}, "properties": {"repobilityId": "5e68a68bca92f582", "scanner": "scanner-primary", "fingerprint": "8f34ef15d57072b8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-843b03f8c331fd7f", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/fabric_dw/services/schemas.py:108"}, "properties": {"repobilityId": "475c058c6f99917c", "scanner": "scanner-primary", "fingerprint": "843b03f8c331fd7f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-59d27198ef922a67", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/fabric_dw/services/sql_endpoints.py:80"}, "properties": {"repobilityId": "000ef67da57f6555", "scanner": "scanner-primary", "fingerprint": "59d27198ef922a67", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d206e9f6858e5e11", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/fabric_dw/services/tables.py:688"}, "properties": {"repobilityId": "510abde18ed1d2c8", "scanner": "scanner-primary", "fingerprint": "d206e9f6858e5e11", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fc29d827d1c8a007", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/fabric_dw/services/load.py:588"}, "properties": {"repobilityId": "fab04394497f94c1", "scanner": "scanner-primary", "fingerprint": "fc29d827d1c8a007", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1c2cd2f5c8b75041", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/fabric_dw/services/statistics.py:133"}, "properties": {"repobilityId": "120db3d2faa2e9c6", "scanner": "scanner-primary", "fingerprint": "1c2cd2f5c8b75041", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e2af82ef89ee3e00", "level": "note", "message": {"text": "Legacy-named symbol `my_project_old` in src/fabric_dw/services/dbt_scaffold.py:498"}, "properties": {"repobilityId": "99523807d30d0fba", "scanner": "scanner-primary", "fingerprint": "e2af82ef89ee3e00", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-79767734b57b46bd", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 src/fabric_dw/services/dbt_scaffold.py:551"}, "properties": {"repobilityId": "1c838c67d6a7edea", "scanner": "scanner-primary", "fingerprint": "79767734b57b46bd", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4ea013e44e41cc84", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/fabric_dw/services/queries.py:29"}, "properties": {"repobilityId": "b8a8c8a5775b66fc", "scanner": "scanner-primary", "fingerprint": "4ea013e44e41cc84", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bca24450cc7fdaa3", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/fabric_dw/services/restore.py:146"}, "properties": {"repobilityId": "393d7632b7903363", "scanner": "scanner-primary", "fingerprint": "bca24450cc7fdaa3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-270401f555b756e4", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/fabric_dw/services/snapshots.py:167"}, "properties": {"repobilityId": "5429c28d58e503fd", "scanner": "scanner-primary", "fingerprint": "270401f555b756e4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2adcfb05f34147e1", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/fabric_dw/services/_helpers.py:238"}, "properties": {"repobilityId": "7e31e114dc6c4b22", "scanner": "scanner-primary", "fingerprint": "2adcfb05f34147e1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7c43869024b7d6ad", "level": "note", "message": {"text": "Legacy-named symbol `model_copy` in src/fabric_dw/services/audit.py:306"}, "properties": {"repobilityId": "ff42870eecbc74c2", "scanner": "scanner-primary", "fingerprint": "7c43869024b7d6ad", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-a9836457f7ec50c4", "level": "note", "message": {"text": "23 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "71ec3608d30f8bcd", "scanner": "scanner-primary", "fingerprint": "a9836457f7ec50c4", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "config-drift"]}}, {"ruleId": "scanner-be46ea126aa5d8dc", "level": "note", "message": {"text": "Near-duplicate function bodies in 3 places"}, "properties": {"repobilityId": "05aed324b2d11676", "scanner": "scanner-primary", "fingerprint": "be46ea126aa5d8dc", "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": "843dc5850de1edbb", "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": "c0c3841c4a45153d", "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": "032e10f1862b8437", "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": "a3c16a7bddd71c0a", "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": "cfca29af25f9c4b5", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-be46ea126aa5d8dc", "level": "note", "message": {"text": "Near-duplicate function bodies in 3 places"}, "properties": {"repobilityId": "8ff742224a08a1a9", "scanner": "scanner-primary", "fingerprint": "be46ea126aa5d8dc", "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": "02af08a6982f1c0c", "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": "0be3c15d59ef2366", "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": "03ef7f8c1386c8d1", "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": "58a64bddb1875626", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-49c98f7cedd9c977", "level": "note", "message": {"text": "Near-duplicate function bodies in 4 places"}, "properties": {"repobilityId": "b705fbe5b0411478", "scanner": "scanner-primary", "fingerprint": "49c98f7cedd9c977", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-0027e313ade46c8f", "level": "note", "message": {"text": "Near-duplicate function bodies in 7 places"}, "properties": {"repobilityId": "8be65aba4cbc5f3c", "scanner": "scanner-primary", "fingerprint": "0027e313ade46c8f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-49c98f7cedd9c977", "level": "note", "message": {"text": "Near-duplicate function bodies in 4 places"}, "properties": {"repobilityId": "64b14614431f7896", "scanner": "scanner-primary", "fingerprint": "49c98f7cedd9c977", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-be46ea126aa5d8dc", "level": "note", "message": {"text": "Near-duplicate function bodies in 3 places"}, "properties": {"repobilityId": "a9cea74c53e5b200", "scanner": "scanner-primary", "fingerprint": "be46ea126aa5d8dc", "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": "cfc3d9723c269a1e", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-be46ea126aa5d8dc", "level": "note", "message": {"text": "Near-duplicate function bodies in 3 places"}, "properties": {"repobilityId": "3f0cc6f9218c22c6", "scanner": "scanner-primary", "fingerprint": "be46ea126aa5d8dc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-be46ea126aa5d8dc", "level": "note", "message": {"text": "Near-duplicate function bodies in 3 places"}, "properties": {"repobilityId": "64cf3e484ff05d39", "scanner": "scanner-primary", "fingerprint": "be46ea126aa5d8dc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-be46ea126aa5d8dc", "level": "note", "message": {"text": "Near-duplicate function bodies in 3 places"}, "properties": {"repobilityId": "6e23a8d436513b5a", "scanner": "scanner-primary", "fingerprint": "be46ea126aa5d8dc", "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": "3890803763ba9c06", "scanner": "scanner-primary", "fingerprint": "02525d39071dd2c7", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}]}]}