{"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-01d68a4e2ec92a23", "name": "Possibly dead Python function: scan_hardcoded_magic_numbers", "shortDescription": {"text": "Possibly dead Python function: scan_hardcoded_magic_numbers"}, "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-64bbad00372eae60", "name": "Possibly dead Python function: set_outputs", "shortDescription": {"text": "Possibly dead Python function: set_outputs"}, "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-8403517b2eddc547", "name": "Possibly dead Python function: overall_score", "shortDescription": {"text": "Possibly dead Python function: overall_score"}, "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-95dd0a13cb2620e0", "name": "Possibly dead Python function: ocr_pdf_pages", "shortDescription": {"text": "Possibly dead Python function: ocr_pdf_pages"}, "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-d563b570907ecd27", "name": "Possibly dead Python function: maybe_ocr_pdf", "shortDescription": {"text": "Possibly dead Python function: maybe_ocr_pdf"}, "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-e676d6d93888b2d5", "name": "Possibly dead Python function: detect_likely_language", "shortDescription": {"text": "Possibly dead Python function: detect_likely_language"}, "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-7184a03f67bbee71", "name": "Possibly dead Python function: short", "shortDescription": {"text": "Possibly dead Python function: short"}, "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-5cf771e56d0f0973", "name": "Possibly dead Python function: compute_rd_deductions", "shortDescription": {"text": "Possibly dead Python function: compute_rd_deductions"}, "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-af2d3cb5a3da4a99", "name": "Possibly dead Python function: core_sheets", "shortDescription": {"text": "Possibly dead Python function: core_sheets"}, "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-eed74af129ad3af3", "name": "Possibly dead Python function: core_sheets", "shortDescription": {"text": "Possibly dead Python function: core_sheets"}, "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-eb685e03f247e2f9", "name": "Possibly dead Python function: core_sheets", "shortDescription": {"text": "Possibly dead Python function: core_sheets"}, "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-30187f61e8a954f7", "name": "Possibly dead Python function: core_sheets", "shortDescription": {"text": "Possibly dead Python function: core_sheets"}, "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-5ff8e90d9e5e4f96", "name": "Possibly dead Python function: core_sheets", "shortDescription": {"text": "Possibly dead Python function: core_sheets"}, "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-88a7564f38f8e57b", "name": "Possibly dead Python function: core_sheets", "shortDescription": {"text": "Possibly dead Python function: core_sheets"}, "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-184ab0a382f4df17", "name": "Possibly dead Python function: core_sheets", "shortDescription": {"text": "Possibly dead Python function: core_sheets"}, "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-067e23f33217ce09", "name": "Possibly dead Python function: core_sheets", "shortDescription": {"text": "Possibly dead Python function: core_sheets"}, "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-99a33378474a8902", "name": "Possibly dead Python function: core_sheets", "shortDescription": {"text": "Possibly dead Python function: core_sheets"}, "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-e1b7b711d9e7a214", "name": "Possibly dead Python function: core_sheets", "shortDescription": {"text": "Possibly dead Python function: core_sheets"}, "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-9d8395c36901b3ea", "name": "Possibly dead Python function: core_sheets", "shortDescription": {"text": "Possibly dead Python function: core_sheets"}, "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-32c50c951f1f08b1", "name": "Possibly dead Python function: core_sheets", "shortDescription": {"text": "Possibly dead Python function: core_sheets"}, "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-c5f71df8950585e5", "name": "Possibly dead Python function: core_sheets", "shortDescription": {"text": "Possibly dead Python function: core_sheets"}, "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-5fd3baecc2c0052e", "name": "Possibly dead Python function: core_sheets", "shortDescription": {"text": "Possibly dead Python function: core_sheets"}, "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-b97a70bcd4a24241", "name": "Possibly dead Python function: core_sheets", "shortDescription": {"text": "Possibly dead Python function: core_sheets"}, "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-0cc64d234a8a9f4f", "name": "Possibly dead Python function: core_sheets", "shortDescription": {"text": "Possibly dead Python function: core_sheets"}, "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-8040c1be95c5282f", "name": "Possibly dead Python function: pf_primary_output", "shortDescription": {"text": "Possibly dead Python function: pf_primary_output"}, "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-a5c68d098d434d3a", "name": "Possibly dead Python function: three_statement_primary_output", "shortDescription": {"text": "Possibly dead Python function: three_statement_primary_output"}, "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-e6bd4d222e5bbc9b", "name": "Possibly dead Python function: real_estate_primary_output", "shortDescription": {"text": "Possibly dead Python function: real_estate_primary_output"}, "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-de3c1f217d72a063", "name": "Docker base image is tag-pinned but not digest-pinned: python:3.12-slim", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: python:3.12-slim"}, "fullDescription": {"text": "Container tags can be retagged upstream. Pin production base images to a reviewed digest (`image@sha256:...`) when reproducibility and supply-chain integrity matter."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-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-28c4a04bd807da0c", "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-27924aa79fa4a517", "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-21aa0c39a7c1ca23", "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-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/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-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-f3b012991449fd2b", "name": "Very large file: gold_standard_audit.py (1509 lines)", "shortDescription": {"text": "Very large file: gold_standard_audit.py (1509 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-353044a1ec345fe2", "name": "Very large file: modelforge/cli.py (2101 lines)", "shortDescription": {"text": "Very large file: modelforge/cli.py (2101 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-8eb49ebc708926d1", "name": "Very large file: modelforge/deck/adapter.py (1557 lines)", "shortDescription": {"text": "Very large file: modelforge/deck/adapter.py (1557 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 448 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 54 placeholder/mock markers across 24 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-859ab624d57d09b6", "name": "Commented-code block (6 lines) in hardtest_minibond.py:83", "shortDescription": {"text": "Commented-code block (6 lines) in hardtest_minibond.py:83"}, "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-8a6b7619a007e077", "name": "Commented-code block (6 lines) in adversarial_audit.py:312", "shortDescription": {"text": "Commented-code block (6 lines) in adversarial_audit.py:312"}, "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-b44b8ead11ce8fcd", "name": "Commented-code block (6 lines) in hardtest_project_finance.py:117", "shortDescription": {"text": "Commented-code block (6 lines) in hardtest_project_finance.py:117"}, "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-537618a2903e13ad", "name": "Network/subprocess call without timeout or try/except \u2014 hardtest_project_finance.py:58", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 hardtest_project_finance.py:58"}, "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-f7b9fe6a317380ff", "name": "Commented-code block (8 lines) in hardtest_dcf_enterprise.py:312", "shortDescription": {"text": "Commented-code block (8 lines) in hardtest_dcf_enterprise.py:312"}, "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-6ec33911cefff191", "name": "Network/subprocess call without timeout or try/except \u2014 hardtest_dcf_enterprise.py:83", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 hardtest_dcf_enterprise.py:83"}, "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-ebf4787e37fd019c", "name": "Commented-code block (5 lines) in gold_standard_audit.py:1423", "shortDescription": {"text": "Commented-code block (5 lines) in gold_standard_audit.py:1423"}, "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-4c3da38ccc647987", "name": "Commented-code block (5 lines) in hardtest_npl_portfolio.py:198", "shortDescription": {"text": "Commented-code block (5 lines) in hardtest_npl_portfolio.py:198"}, "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-2d1ac7d4847fcb12", "name": "Network/subprocess call without timeout or try/except \u2014 hardtest_npl_portfolio.py:136", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 hardtest_npl_portfolio.py:136"}, "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-28d14f4e0ea1c780", "name": "Network/subprocess call without timeout or try/except \u2014 hardtest_real_estate.py:174", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 hardtest_real_estate.py:174"}, "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-6e90f50a99aba6ca", "name": "Network/subprocess call without timeout or try/except \u2014 hardtest_structured_credit.py:36", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 hardtest_structured_credit.py:36"}, "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-2041e268fbca0c2f", "name": "Network/subprocess call without timeout or try/except \u2014 hardtest_development_re.py:329", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 hardtest_development_re.py:329"}, "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-a13e64e8d76a5013", "name": "Commented-code block (5 lines) in hardtest_mna_accretion.py:252", "shortDescription": {"text": "Commented-code block (5 lines) in hardtest_mna_accretion.py:252"}, "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-f10d17ba17ffc454", "name": "Commented-code block (7 lines) in hardtest_unitranche.py:109", "shortDescription": {"text": "Commented-code block (7 lines) in hardtest_unitranche.py:109"}, "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-903c0beea8b4c316", "name": "Commented-code block (5 lines) in hardtest_three_statement.py:309", "shortDescription": {"text": "Commented-code block (5 lines) in hardtest_three_statement.py:309"}, "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-395d948d2a59b8e9", "name": "Network/subprocess call without timeout or try/except \u2014 hardtest_three_statement.py:83", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 hardtest_three_statement.py:83"}, "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-69336ca9fd99619f", "name": "Commented-code block (10 lines) in hardtest_lbo_full.py:253", "shortDescription": {"text": "Commented-code block (10 lines) in hardtest_lbo_full.py:253"}, "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-6a8b48e894419b21", "name": "Legacy-named symbol `v_copy` in tests/test_collab.py:230", "shortDescription": {"text": "Legacy-named symbol `v_copy` in tests/test_collab.py:230"}, "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-1a0b4926c2f49418", "name": "Legacy-named symbol `model_copy` in tests/test_risk_sheet.py:26", "shortDescription": {"text": "Legacy-named symbol `model_copy` in tests/test_risk_sheet.py:26"}, "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-dc6beab0f8518269", "name": "Legacy-named symbol `spec_v1` in tests/test_diff.py:30", "shortDescription": {"text": "Legacy-named symbol `spec_v1` in tests/test_diff.py:30"}, "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-dab2607056544387", "name": "Legacy-named symbol `hours_per_deal_legacy` in tests/test_roi.py:49", "shortDescription": {"text": "Legacy-named symbol `hours_per_deal_legacy` in tests/test_roi.py:49"}, "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-85c219dfc169ddf0", "name": "Legacy-named symbol `model_copy` in tests/deck/test_slide_content.py:194", "shortDescription": {"text": "Legacy-named symbol `model_copy` in tests/deck/test_slide_content.py:194"}, "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-67975d1464f9a672", "name": "Legacy-named symbol `model_copy` in tests/deck/rendering/test_native_ib.py:436", "shortDescription": {"text": "Legacy-named symbol `model_copy` in tests/deck/rendering/test_native_ib.py:436"}, "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-448e7fe582f2b65f", "name": "Commented-code block (7 lines) in tests/deck/themes/test_theme_colors.py:98", "shortDescription": {"text": "Commented-code block (7 lines) in tests/deck/themes/test_theme_colors.py:98"}, "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-e861a6feccc8fa9d", "name": "Network/subprocess call without timeout or try/except \u2014 benchmarks/harness/score.py:598", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 benchmarks/harness/score.py:598"}, "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-abb517aec72f1e6b", "name": "Commented-code block (5 lines) in modelforge/mcp_server.py:562", "shortDescription": {"text": "Commented-code block (5 lines) in modelforge/mcp_server.py:562"}, "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-955b44c813455acf", "name": "Legacy-named symbol `hours_legacy` in modelforge/cli.py:946", "shortDescription": {"text": "Legacy-named symbol `hours_legacy` in modelforge/cli.py:946"}, "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-d02714fbc4b83489", "name": "Commented-code block (6 lines) in modelforge/cli.py:46", "shortDescription": {"text": "Commented-code block (6 lines) in modelforge/cli.py:46"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f8d6bc68674c1133", "name": "Commented-code block (5 lines) in modelforge/spec/real_estate.py:80", "shortDescription": {"text": "Commented-code block (5 lines) in modelforge/spec/real_estate.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-beac7b1466113980", "name": "Commented-code block (6 lines) in modelforge/spec/dcf.py:68", "shortDescription": {"text": "Commented-code block (6 lines) in modelforge/spec/dcf.py:68"}, "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-be318859f2a90f83", "name": "Commented-code block (5 lines) in modelforge/spec/development_re.py:206", "shortDescription": {"text": "Commented-code block (5 lines) in modelforge/spec/development_re.py:206"}, "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-c126ac5bbe655149", "name": "Commented-code block (8 lines) in modelforge/spec/merger.py:112", "shortDescription": {"text": "Commented-code block (8 lines) in modelforge/spec/merger.py:112"}, "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-9757d665bed98b45", "name": "Commented-code block (5 lines) in modelforge/analytics/factors.py:356", "shortDescription": {"text": "Commented-code block (5 lines) in modelforge/analytics/factors.py:356"}, "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-76dfc124ad172d76", "name": "Commented-code block (9 lines) in modelforge/analytics/sensitivity.py:500", "shortDescription": {"text": "Commented-code block (9 lines) in modelforge/analytics/sensitivity.py:500"}, "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-80c6d6de868be861", "name": "Commented-code block (9 lines) in modelforge/analytics/monte_carlo.py:332", "shortDescription": {"text": "Commented-code block (9 lines) in modelforge/analytics/monte_carlo.py:332"}, "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-b7c9ee8bd1ef5f17", "name": "Commented-code block (5 lines) in modelforge/ingest/pipeline.py:172", "shortDescription": {"text": "Commented-code block (5 lines) in modelforge/ingest/pipeline.py:172"}, "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-a12e0b6507ac7145", "name": "Commented-code block (5 lines) in modelforge/templates/project_finance.py:79", "shortDescription": {"text": "Commented-code block (5 lines) in modelforge/templates/project_finance.py:79"}, "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-c34f3c75fc130bae", "name": "Commented-code block (8 lines) in modelforge/templates/__init__.py:126", "shortDescription": {"text": "Commented-code block (8 lines) in modelforge/templates/__init__.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-0e1a53252b3652d2", "name": "Commented-code block (5 lines) in modelforge/templates/portfolio_review.py:484", "shortDescription": {"text": "Commented-code block (5 lines) in modelforge/templates/portfolio_review.py:484"}, "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-baf6a673ddc747f5", "name": "Commented-code block (5 lines) in modelforge/templates/npl.py:38", "shortDescription": {"text": "Commented-code block (5 lines) in modelforge/templates/npl.py:38"}, "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-3b261f552461502f", "name": "Commented-code block (5 lines) in modelforge/templates/structured_credit.py:47", "shortDescription": {"text": "Commented-code block (5 lines) in modelforge/templates/structured_credit.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-94f82cb22c568c9e", "name": "Legacy-named symbol `hours_per_deal_legacy` in modelforge/roi/calculator.py:8", "shortDescription": {"text": "Legacy-named symbol `hours_per_deal_legacy` in modelforge/roi/calculator.py:8"}, "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-12a477577fa53e2d", "name": "Commented-code block (5 lines) in modelforge/deck/adapter.py:273", "shortDescription": {"text": "Commented-code block (5 lines) in modelforge/deck/adapter.py:273"}, "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-0537ae6c562adf09", "name": "Legacy-named symbol `model_copy` in modelforge/deck/pipeline.py:300", "shortDescription": {"text": "Legacy-named symbol `model_copy` in modelforge/deck/pipeline.py:300"}, "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-6b6bb30d2efb1fd4", "name": "Commented-code block (5 lines) in modelforge/deck/pipeline.py:150", "shortDescription": {"text": "Commented-code block (5 lines) in modelforge/deck/pipeline.py:150"}, "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-17d5d91e4bcef88c", "name": "Commented-code block (5 lines) in modelforge/deck/layout/engine.py:41", "shortDescription": {"text": "Commented-code block (5 lines) in modelforge/deck/layout/engine.py:41"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6a40f6d5c14b1d62", "name": "Legacy-named symbol `model_copy` in modelforge/deck/layout/overflow.py:348", "shortDescription": {"text": "Legacy-named symbol `model_copy` in modelforge/deck/layout/overflow.py:348"}, "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-3975974598f71ae0", "name": "Commented-code block (6 lines) in modelforge/deck/rendering/chart_renderers/__init__.py:67", "shortDescription": {"text": "Commented-code block (6 lines) in modelforge/deck/rendering/chart_renderers/__init__.py:67"}, "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-5056deff652a69cb", "name": "Commented-code block (5 lines) in modelforge/builder/i18n.py:447", "shortDescription": {"text": "Commented-code block (5 lines) in modelforge/builder/i18n.py:447"}, "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-dbafe7932dd9a1db", "name": "Commented-code block (5 lines) in modelforge/builder/styles.py:45", "shortDescription": {"text": "Commented-code block (5 lines) in modelforge/builder/styles.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-0f98430ab8f6e8db", "name": "Commented-code block (5 lines) in modelforge/builder/layout.py:110", "shortDescription": {"text": "Commented-code block (5 lines) in modelforge/builder/layout.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-6989f011becf778b", "name": "Commented-code block (11 lines) in modelforge/builder/sheets/debt.py:76", "shortDescription": {"text": "Commented-code block (11 lines) in modelforge/builder/sheets/debt.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-181922ebda62fcde", "name": "Commented-code block (6 lines) in modelforge/builder/sheets/dev_schedule.py:294", "shortDescription": {"text": "Commented-code block (6 lines) in modelforge/builder/sheets/dev_schedule.py:294"}, "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-cc042223ace29a9f", "name": "Commented-code block (10 lines) in modelforge/builder/sheets/npl_waterfall.py:176", "shortDescription": {"text": "Commented-code block (10 lines) in modelforge/builder/sheets/npl_waterfall.py:176"}, "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-a3b46aebb5260a72", "name": "Commented-code block (5 lines) in modelforge/builder/sheets/ifrs9_ecl.py:97", "shortDescription": {"text": "Commented-code block (5 lines) in modelforge/builder/sheets/ifrs9_ecl.py:97"}, "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-e87810c486cec2e8", "name": "Commented-code block (5 lines) in modelforge/builder/sheets/covenants.py:141", "shortDescription": {"text": "Commented-code block (5 lines) in modelforge/builder/sheets/covenants.py:141"}, "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-fe7c3ed7dacaa832", "name": "Commented-code block (8 lines) in modelforge/builder/sheets/bank_bs.py:147", "shortDescription": {"text": "Commented-code block (8 lines) in modelforge/builder/sheets/bank_bs.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-0f9b0bdc63c2f0a2", "name": "Commented-code block (5 lines) in modelforge/builder/sheets/investor_returns.py:162", "shortDescription": {"text": "Commented-code block (5 lines) in modelforge/builder/sheets/investor_returns.py:162"}, "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-ae97e96190230ea6", "name": "Commented-code block (10 lines) in modelforge/builder/sheets/qc.py:228", "shortDescription": {"text": "Commented-code block (10 lines) in modelforge/builder/sheets/qc.py:228"}, "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-d60c7dafb4dbca02", "name": "Commented-code block (6 lines) in modelforge/builder/sheets/bank_pnl.py:116", "shortDescription": {"text": "Commented-code block (6 lines) in modelforge/builder/sheets/bank_pnl.py:116"}, "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-5e870a515f6872c1", "name": "Commented-code block (11 lines) in modelforge/builder/sheets/pf_debt.py:137", "shortDescription": {"text": "Commented-code block (11 lines) in modelforge/builder/sheets/pf_debt.py:137"}, "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-cb665fc45ee57f81", "name": "Commented-code block (6 lines) in modelforge/builder/sheets/sources_uses.py:56", "shortDescription": {"text": "Commented-code block (6 lines) in modelforge/builder/sheets/sources_uses.py:56"}, "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-6ab97285dc7eaa3c", "name": "Commented-code block (5 lines) in modelforge/builder/sheets/credit_opinion.py:66", "shortDescription": {"text": "Commented-code block (5 lines) in modelforge/builder/sheets/credit_opinion.py:66"}, "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-535852d80b85bfc7", "name": "Commented-code block (6 lines) in modelforge/builder/sheets/bond_structure.py:82", "shortDescription": {"text": "Commented-code block (6 lines) in modelforge/builder/sheets/bond_structure.py:82"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-bfc69a14304235c5", "name": "Commented-code block (6 lines) in modelforge/builder/sheets/operating.py:348", "shortDescription": {"text": "Commented-code block (6 lines) in modelforge/builder/sheets/operating.py:348"}, "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-1421d00e29414df7", "name": "Commented-code block (5 lines) in modelforge/builder/sheets/pf_cashflow.py:357", "shortDescription": {"text": "Commented-code block (5 lines) in modelforge/builder/sheets/pf_cashflow.py:357"}, "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-428b63b27d798481", "name": "Commented-code block (6 lines) in modelforge/builder/sheets/ts_model.py:428", "shortDescription": {"text": "Commented-code block (6 lines) in modelforge/builder/sheets/ts_model.py:428"}, "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-d5336ecb9ef22838", "name": "Commented-code block (6 lines) in modelforge/builder/sheets/re_financing.py:34", "shortDescription": {"text": "Commented-code block (6 lines) in modelforge/builder/sheets/re_financing.py:34"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fe65d0418b4fc2d9", "name": "Commented-code block (7 lines) in modelforge/builder/sheets/merger_proforma.py:138", "shortDescription": {"text": "Commented-code block (7 lines) in modelforge/builder/sheets/merger_proforma.py:138"}, "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-d9c763d866ccb0b2", "name": "Commented-code block (5 lines) in modelforge/screening/engine.py:42", "shortDescription": {"text": "Commented-code block (5 lines) in modelforge/screening/engine.py:42"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-12be0fc2fc9e40c8", "name": "Legacy-named symbol `_have_legacy` in modelforge/feeds/refinitiv.py:54", "shortDescription": {"text": "Legacy-named symbol `_have_legacy` in modelforge/feeds/refinitiv.py:54"}, "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-1b817579a4f32aa1", "name": "Commented-code block (5 lines) in scripts/audit_listed.py:448", "shortDescription": {"text": "Commented-code block (5 lines) in scripts/audit_listed.py:448"}, "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-22810854f3c57513", "name": "`fetch()` without try/.catch or AbortSignal \u2014 web/collab-worker/src/index.ts:104", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 web/collab-worker/src/index.ts:104"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-1581688aee732229", "name": "`fetch()` without try/.catch or AbortSignal \u2014 web/collab-worker/src/durable_object.ts:73", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 web/collab-worker/src/durable_object.ts:73"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-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:\nhardtest_real_estate.py:check, hardtest_development_re.py:check_abs\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-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:\nmodelforge/ingest/llm.py:call_json, modelforge/ingest/llm.py:call_json, modelforge/ingest/llm.py:call_json\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-9dad557909b86499", "name": "Near-duplicate function bodies in 10 places", "shortDescription": {"text": "Near-duplicate function bodies in 10 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nmodelforge/deck/layout/patterns/two_column.py:create_constraints, modelforge/deck/layout/patterns/chart.py:create_constraints, modelforge/deck/layout/patterns/section.py:create_constraints, modelforge/deck/layout/patterns/generic.py:create_constraints\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:\nmodelforge/deck/rendering/element_renderers/data_viz.py:render, modelforge/deck/rendering/element_renderers/data_viz.py:render, modelforge/deck/rendering/element_renderers/data_viz.py:render, modelforge/deck/rendering/element_renderers/data_viz.py:render\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:\nmodelforge/deck/rendering/element_renderers/shape.py:render, modelforge/deck/rendering/element_renderers/shape.py:render, modelforge/deck/rendering/element_renderers/shape.py:render, modelforge/deck/rendering/element_renderers/shape.py:render\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-c54c6fb8e364daaa", "name": "Near-duplicate function bodies in 16 places", "shortDescription": {"text": "Near-duplicate function bodies in 16 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nmodelforge/deck/rendering/chart_renderers/proportional.py:render, modelforge/deck/rendering/chart_renderers/proportional.py:render, modelforge/deck/rendering/chart_renderers/__init__.py:render, modelforge/deck/rendering/chart_renderers/combo.py:render\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-c43148423cbb30de", "name": "FastAPI POST `upload` without auth dependency \u2014 modelforge/web/app.py:160", "shortDescription": {"text": "FastAPI POST `upload` without auth dependency \u2014 modelforge/web/app.py:160"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-19262559b28a8121", "name": "FastAPI POST `risk_endpoint` without auth dependency \u2014 modelforge/web/app.py:265", "shortDescription": {"text": "FastAPI POST `risk_endpoint` without auth dependency \u2014 modelforge/web/app.py:265"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1815047180093ee1", "name": "FastAPI POST `stripe_webhook` without auth dependency \u2014 modelforge/web/saas_routes.py:220", "shortDescription": {"text": "FastAPI POST `stripe_webhook` without auth dependency \u2014 modelforge/web/saas_routes.py:220"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5baa8971ebe192a1", "name": "Unused endpoint: GET /", "shortDescription": {"text": "Unused endpoint: GET /"}, "fullDescription": {"text": "`modelforge/web/app.py` declares `GET /` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6236b283b79811b8", "name": "Unused endpoint: POST /upload", "shortDescription": {"text": "Unused endpoint: POST /upload"}, "fullDescription": {"text": "`modelforge/web/app.py` declares `POST /upload` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-05c48da6b6c9a085", "name": "Unused endpoint: GET /workbook/{wid}", "shortDescription": {"text": "Unused endpoint: GET /workbook/{wid}"}, "fullDescription": {"text": "`modelforge/web/app.py` declares `GET /workbook/{wid}` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7660a40b7f51ef49", "name": "Unused endpoint: GET /workbook/{wid}/view", "shortDescription": {"text": "Unused endpoint: GET /workbook/{wid}/view"}, "fullDescription": {"text": "`modelforge/web/app.py` declares `GET /workbook/{wid}/view` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-cf58b49ad49ef608", "name": "Unused endpoint: GET /workbook/{wid}/dossier", "shortDescription": {"text": "Unused endpoint: GET /workbook/{wid}/dossier"}, "fullDescription": {"text": "`modelforge/web/app.py` declares `GET /workbook/{wid}/dossier` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-fa95cfcad8583300", "name": "Unused endpoint: GET /workbook/{wid}/drift", "shortDescription": {"text": "Unused endpoint: GET /workbook/{wid}/drift"}, "fullDescription": {"text": "`modelforge/web/app.py` declares `GET /workbook/{wid}/drift` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8b1b274b32469392", "name": "Unused endpoint: GET /diff", "shortDescription": {"text": "Unused endpoint: GET /diff"}, "fullDescription": {"text": "`modelforge/web/app.py` declares `GET /diff` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9d1c83e32faac0a7", "name": "Unused endpoint: POST /risk", "shortDescription": {"text": "Unused endpoint: POST /risk"}, "fullDescription": {"text": "`modelforge/web/app.py` declares `POST /risk` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-31b0d41bdabf0351", "name": "Unused endpoint: GET /auth/whoami", "shortDescription": {"text": "Unused endpoint: GET /auth/whoami"}, "fullDescription": {"text": "`modelforge/web/saas_routes.py` declares `GET /auth/whoami` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-07a7fad711358625", "name": "Unused endpoint: POST /tenants", "shortDescription": {"text": "Unused endpoint: POST /tenants"}, "fullDescription": {"text": "`modelforge/web/saas_routes.py` declares `POST /tenants` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-092d7b8020d70b38", "name": "Unused endpoint: GET /tenants", "shortDescription": {"text": "Unused endpoint: GET /tenants"}, "fullDescription": {"text": "`modelforge/web/saas_routes.py` declares `GET /tenants` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-80816cd87fbcfd36", "name": "Unused endpoint: GET /tenants/{tenant_id}", "shortDescription": {"text": "Unused endpoint: GET /tenants/{tenant_id}"}, "fullDescription": {"text": "`modelforge/web/saas_routes.py` declares `GET /tenants/{tenant_id}` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-73b34ec876762069", "name": "Unused endpoint: GET /tenants/{tenant_id}/members", "shortDescription": {"text": "Unused endpoint: GET /tenants/{tenant_id}/members"}, "fullDescription": {"text": "`modelforge/web/saas_routes.py` declares `GET /tenants/{tenant_id}/members` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-af854ee6af481961", "name": "Unused endpoint: POST /tenants/{tenant_id}/members", "shortDescription": {"text": "Unused endpoint: POST /tenants/{tenant_id}/members"}, "fullDescription": {"text": "`modelforge/web/saas_routes.py` declares `POST /tenants/{tenant_id}/members` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6c1162cea2c9c399", "name": "Unused endpoint: DELETE /tenants/{tenant_id}/members/{user_id}", "shortDescription": {"text": "Unused endpoint: DELETE /tenants/{tenant_id}/members/{user_id}"}, "fullDescription": {"text": "`modelforge/web/saas_routes.py` declares `DELETE /tenants/{tenant_id}/members/{user_id}` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2b171ab6084f5670", "name": "Unused endpoint: POST /billing/webhook", "shortDescription": {"text": "Unused endpoint: POST /billing/webhook"}, "fullDescription": {"text": "`modelforge/web/saas_routes.py` declares `POST /billing/webhook` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-bbc18b03825e20ef", "name": "Unused endpoint: GET /tenants/{tenant_id}/workbooks", "shortDescription": {"text": "Unused endpoint: GET /tenants/{tenant_id}/workbooks"}, "fullDescription": {"text": "`modelforge/web/saas_routes.py` declares `GET /tenants/{tenant_id}/workbooks` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}]}}, "automationDetails": {"id": "repobility/22690"}, "properties": {"repository": "Whatsonyourmind/modelforge", "repoUrl": "https://github.com/Whatsonyourmind/modelforge", "branch": "main"}, "results": [{"ruleId": "scanner-01d68a4e2ec92a23", "level": "note", "message": {"text": "Possibly dead Python function: scan_hardcoded_magic_numbers"}, "properties": {"repobilityId": "b65e9f4a253d38d0", "scanner": "scanner-primary", "fingerprint": "01d68a4e2ec92a23", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "adversarial_audit.py:117"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-64bbad00372eae60", "level": "note", "message": {"text": "Possibly dead Python function: set_outputs"}, "properties": {"repobilityId": "6d81123fba922b1a", "scanner": "scanner-primary", "fingerprint": "64bbad00372eae60", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modelforge/audit_log.py:167"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-8403517b2eddc547", "level": "note", "message": {"text": "Possibly dead Python function: overall_score"}, "properties": {"repobilityId": "00edc315c067ba0c", "scanner": "scanner-primary", "fingerprint": "8403517b2eddc547", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modelforge/ingest/confidence.py:44"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-95dd0a13cb2620e0", "level": "note", "message": {"text": "Possibly dead Python function: ocr_pdf_pages"}, "properties": {"repobilityId": "3d8b1ee9c670955a", "scanner": "scanner-primary", "fingerprint": "95dd0a13cb2620e0", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modelforge/ingest/ocr_backend.py:45"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-d563b570907ecd27", "level": "note", "message": {"text": "Possibly dead Python function: maybe_ocr_pdf"}, "properties": {"repobilityId": "4ad853296fa69195", "scanner": "scanner-primary", "fingerprint": "d563b570907ecd27", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modelforge/ingest/ocr_backend.py:76"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-e676d6d93888b2d5", "level": "note", "message": {"text": "Possibly dead Python function: detect_likely_language"}, "properties": {"repobilityId": "d4159fcb924f3a61", "scanner": "scanner-primary", "fingerprint": "e676d6d93888b2d5", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modelforge/ingest/ocr_backend.py:133"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-7184a03f67bbee71", "level": "note", "message": {"text": "Possibly dead Python function: short"}, "properties": {"repobilityId": "c8ed79bec7768d2d", "scanner": "scanner-primary", "fingerprint": "7184a03f67bbee71", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modelforge/ingest/readers/base.py:32"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-5cf771e56d0f0973", "level": "note", "message": {"text": "Possibly dead Python function: compute_rd_deductions"}, "properties": {"repobilityId": "a21e1f27afe025c8", "scanner": "scanner-primary", "fingerprint": "5cf771e56d0f0973", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modelforge/finance_core/spanish_corp_tax.py:109"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-af2d3cb5a3da4a99", "level": "note", "message": {"text": "Possibly dead Python function: core_sheets"}, "properties": {"repobilityId": "979d73ed9f93cb26", "scanner": "scanner-primary", "fingerprint": "af2d3cb5a3da4a99", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modelforge/templates/hgb_carveout.py:366"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-eed74af129ad3af3", "level": "note", "message": {"text": "Possibly dead Python function: core_sheets"}, "properties": {"repobilityId": "979d73ed9f93cb26", "scanner": "scanner-primary", "fingerprint": "eed74af129ad3af3", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modelforge/templates/project_finance.py:53"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-eb685e03f247e2f9", "level": "note", "message": {"text": "Possibly dead Python function: core_sheets"}, "properties": {"repobilityId": "979d73ed9f93cb26", "scanner": "scanner-primary", "fingerprint": "eb685e03f247e2f9", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modelforge/templates/bank_fig.py:39"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-30187f61e8a954f7", "level": "note", "message": {"text": "Possibly dead Python function: core_sheets"}, "properties": {"repobilityId": "979d73ed9f93cb26", "scanner": "scanner-primary", "fingerprint": "30187f61e8a954f7", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modelforge/templates/credit_memo.py:20"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-5ff8e90d9e5e4f96", "level": "note", "message": {"text": "Possibly dead Python function: core_sheets"}, "properties": {"repobilityId": "979d73ed9f93cb26", "scanner": "scanner-primary", "fingerprint": "5ff8e90d9e5e4f96", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modelforge/templates/sponsor_lbo.py:27"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-88a7564f38f8e57b", "level": "note", "message": {"text": "Possibly dead Python function: core_sheets"}, "properties": {"repobilityId": "979d73ed9f93cb26", "scanner": "scanner-primary", "fingerprint": "88a7564f38f8e57b", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modelforge/templates/three_statement.py:13"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-184ab0a382f4df17", "level": "note", "message": {"text": "Possibly dead Python function: core_sheets"}, "properties": {"repobilityId": "979d73ed9f93cb26", "scanner": "scanner-primary", "fingerprint": "184ab0a382f4df17", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modelforge/templates/fairness.py:14"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-067e23f33217ce09", "level": "note", "message": {"text": "Possibly dead Python function: core_sheets"}, "properties": {"repobilityId": "979d73ed9f93cb26", "scanner": "scanner-primary", "fingerprint": "067e23f33217ce09", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modelforge/templates/real_estate.py:12"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-99a33378474a8902", "level": "note", "message": {"text": "Possibly dead Python function: core_sheets"}, "properties": {"repobilityId": "979d73ed9f93cb26", "scanner": "scanner-primary", "fingerprint": "99a33378474a8902", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modelforge/templates/dcf.py:13"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-e1b7b711d9e7a214", "level": "note", "message": {"text": "Possibly dead Python function: core_sheets"}, "properties": {"repobilityId": "979d73ed9f93cb26", "scanner": "scanner-primary", "fingerprint": "e1b7b711d9e7a214", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modelforge/templates/unitranche.py:21"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-9d8395c36901b3ea", "level": "note", "message": {"text": "Possibly dead Python function: core_sheets"}, "properties": {"repobilityId": "979d73ed9f93cb26", "scanner": "scanner-primary", "fingerprint": "9d8395c36901b3ea", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modelforge/templates/development_re.py:31"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-32c50c951f1f08b1", "level": "note", "message": {"text": "Possibly dead Python function: core_sheets"}, "properties": {"repobilityId": "979d73ed9f93cb26", "scanner": "scanner-primary", "fingerprint": "32c50c951f1f08b1", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modelforge/templates/loan_tape_securitization.py:46"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-c5f71df8950585e5", "level": "note", "message": {"text": "Possibly dead Python function: core_sheets"}, "properties": {"repobilityId": "979d73ed9f93cb26", "scanner": "scanner-primary", "fingerprint": "c5f71df8950585e5", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modelforge/templates/npl.py:17"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-5fd3baecc2c0052e", "level": "note", "message": {"text": "Possibly dead Python function: core_sheets"}, "properties": {"repobilityId": "979d73ed9f93cb26", "scanner": "scanner-primary", "fingerprint": "5fd3baecc2c0052e", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modelforge/templates/minibond.py:31"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-b97a70bcd4a24241", "level": "note", "message": {"text": "Possibly dead Python function: core_sheets"}, "properties": {"repobilityId": "979d73ed9f93cb26", "scanner": "scanner-primary", "fingerprint": "b97a70bcd4a24241", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modelforge/templates/structured_credit.py:17"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-0cc64d234a8a9f4f", "level": "note", "message": {"text": "Possibly dead Python function: core_sheets"}, "properties": {"repobilityId": "979d73ed9f93cb26", "scanner": "scanner-primary", "fingerprint": "0cc64d234a8a9f4f", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modelforge/templates/merger.py:14"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-8040c1be95c5282f", "level": "note", "message": {"text": "Possibly dead Python function: pf_primary_output"}, "properties": {"repobilityId": "1fa7916ddb1585d2", "scanner": "scanner-primary", "fingerprint": "8040c1be95c5282f", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modelforge/shadow/project_finance.py:19"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-a5c68d098d434d3a", "level": "note", "message": {"text": "Possibly dead Python function: three_statement_primary_output"}, "properties": {"repobilityId": "03c66837b1ab6c70", "scanner": "scanner-primary", "fingerprint": "a5c68d098d434d3a", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modelforge/shadow/three_statement.py:19"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-e6bd4d222e5bbc9b", "level": "note", "message": {"text": "Possibly dead Python function: real_estate_primary_output"}, "properties": {"repobilityId": "6370744c9434fdca", "scanner": "scanner-primary", "fingerprint": "e6bd4d222e5bbc9b", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modelforge/shadow/real_estate.py:19"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-de3c1f217d72a063", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: python:3.12-slim"}, "properties": {"repobilityId": "795777237cd2f608", "scanner": "scanner-primary", "fingerprint": "de3c1f217d72a063", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "Dockerfile"}, "region": {"startLine": 6}}}]}, {"ruleId": "scanner-de3c1f217d72a063", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: python:3.12-slim"}, "properties": {"repobilityId": "c340c20f171aa138", "scanner": "scanner-primary", "fingerprint": "de3c1f217d72a063", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "Dockerfile"}, "region": {"startLine": 25}}}]}, {"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-28c4a04bd807da0c", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "2aee2e2d969c7c6b", "scanner": "scanner-primary", "fingerprint": "28c4a04bd807da0c", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/deploy.yml"}, "region": {"startLine": 67}}}]}, {"ruleId": "scanner-28c4a04bd807da0c", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "bee6b8956e03198c", "scanner": "scanner-primary", "fingerprint": "28c4a04bd807da0c", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/deploy.yml"}, "region": {"startLine": 82}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "ae16880318b99912", "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": 23}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "04f57d208548fcef", "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": 26}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "ae16880318b99912", "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": 60}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "04f57d208548fcef", "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": 63}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "ae16880318b99912", "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": 82}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "04f57d208548fcef", "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": 85}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "bd7f3c1c34d83159", "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": 112}}}]}, {"ruleId": "scanner-21aa0c39a7c1ca23", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "9dab4f3db0cf258c", "scanner": "scanner-primary", "fingerprint": "21aa0c39a7c1ca23", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/security.yml"}, "region": {"startLine": 24}}}]}, {"ruleId": "scanner-21aa0c39a7c1ca23", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "28e38d272df4f948", "scanner": "scanner-primary", "fingerprint": "21aa0c39a7c1ca23", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/security.yml"}, "region": {"startLine": 27}}}]}, {"ruleId": "scanner-21aa0c39a7c1ca23", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "8a57ca3862d35729", "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": 44}}}]}, {"ruleId": "scanner-21aa0c39a7c1ca23", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "9dab4f3db0cf258c", "scanner": "scanner-primary", "fingerprint": "21aa0c39a7c1ca23", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/security.yml"}, "region": {"startLine": 58}}}]}, {"ruleId": "scanner-21aa0c39a7c1ca23", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "28e38d272df4f948", "scanner": "scanner-primary", "fingerprint": "21aa0c39a7c1ca23", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/security.yml"}, "region": {"startLine": 61}}}]}, {"ruleId": "scanner-21aa0c39a7c1ca23", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "9ca31d6c8ee5a9dc", "scanner": "scanner-primary", "fingerprint": "21aa0c39a7c1ca23", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/security.yml"}, "region": {"startLine": 81}}}]}, {"ruleId": "scanner-21aa0c39a7c1ca23", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "9dab4f3db0cf258c", "scanner": "scanner-primary", "fingerprint": "21aa0c39a7c1ca23", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/security.yml"}, "region": {"startLine": 96}}}]}, {"ruleId": "scanner-21aa0c39a7c1ca23", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "28e38d272df4f948", "scanner": "scanner-primary", "fingerprint": "21aa0c39a7c1ca23", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/security.yml"}, "region": {"startLine": 99}}}]}, {"ruleId": "scanner-21aa0c39a7c1ca23", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "9ca31d6c8ee5a9dc", "scanner": "scanner-primary", "fingerprint": "21aa0c39a7c1ca23", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/security.yml"}, "region": {"startLine": 117}}}]}, {"ruleId": "scanner-21aa0c39a7c1ca23", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "9dab4f3db0cf258c", "scanner": "scanner-primary", "fingerprint": "21aa0c39a7c1ca23", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/security.yml"}, "region": {"startLine": 130}}}]}, {"ruleId": "scanner-21aa0c39a7c1ca23", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "1a0a700183fb1aa2", "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": 133}}}]}, {"ruleId": "scanner-a53bf972e19b52fd", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "3ff29596dff0eef0", "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": 20}}}]}, {"ruleId": "scanner-a53bf972e19b52fd", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "0fde4c5793055812", "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": 23}}}]}, {"ruleId": "scanner-a53bf972e19b52fd", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "d4aba79c11c91c79", "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": 43}}}]}, {"ruleId": "scanner-a53bf972e19b52fd", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "f3f42580c121909f", "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": 59}}}]}, {"ruleId": "scanner-a53bf972e19b52fd", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "d4f43aa73f8f2e55", "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": "26eca5024249c767", "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": 82}}}]}, {"ruleId": "scanner-a53bf972e19b52fd", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "3ff29596dff0eef0", "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": 102}}}]}, {"ruleId": "scanner-a53bf972e19b52fd", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "d4f43aa73f8f2e55", "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": 105}}}]}, {"ruleId": "scanner-a53bf972e19b52fd", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "1f913c4ea7cc7dd9", "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": 118}}}]}, {"ruleId": "scanner-a53bf972e19b52fd", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "2b57381939c1f612", "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": 130}}}]}, {"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-f3b012991449fd2b", "level": "note", "message": {"text": "Very large file: gold_standard_audit.py (1509 lines)"}, "properties": {"repobilityId": "0160f816e2b8821d", "scanner": "scanner-primary", "fingerprint": "f3b012991449fd2b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-353044a1ec345fe2", "level": "note", "message": {"text": "Very large file: modelforge/cli.py (2101 lines)"}, "properties": {"repobilityId": "6d891adde982688f", "scanner": "scanner-primary", "fingerprint": "353044a1ec345fe2", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-8eb49ebc708926d1", "level": "note", "message": {"text": "Very large file: modelforge/deck/adapter.py (1557 lines)"}, "properties": {"repobilityId": "36c34fa019ab4b05", "scanner": "scanner-primary", "fingerprint": "8eb49ebc708926d1", "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": "d2f8634cfa7c52eb", "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": "8cec2457c9fa7a19", "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": "2397c4736a10eefe", "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": "6cd23354bfed8867", "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": "8c993973ca226d7b", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-859ab624d57d09b6", "level": "none", "message": {"text": "Commented-code block (6 lines) in hardtest_minibond.py:83"}, "properties": {"repobilityId": "4049e5eb7a9c6081", "scanner": "scanner-primary", "fingerprint": "859ab624d57d09b6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8a6b7619a007e077", "level": "none", "message": {"text": "Commented-code block (6 lines) in adversarial_audit.py:312"}, "properties": {"repobilityId": "ab7805fd89348999", "scanner": "scanner-primary", "fingerprint": "8a6b7619a007e077", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b44b8ead11ce8fcd", "level": "none", "message": {"text": "Commented-code block (6 lines) in hardtest_project_finance.py:117"}, "properties": {"repobilityId": "28bee2c8ea404088", "scanner": "scanner-primary", "fingerprint": "b44b8ead11ce8fcd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-537618a2903e13ad", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 hardtest_project_finance.py:58"}, "properties": {"repobilityId": "93f98fdc9617586f", "scanner": "scanner-primary", "fingerprint": "537618a2903e13ad", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f7b9fe6a317380ff", "level": "none", "message": {"text": "Commented-code block (8 lines) in hardtest_dcf_enterprise.py:312"}, "properties": {"repobilityId": "4fdd9a5446ef23d4", "scanner": "scanner-primary", "fingerprint": "f7b9fe6a317380ff", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6ec33911cefff191", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 hardtest_dcf_enterprise.py:83"}, "properties": {"repobilityId": "9d608fab7c417b7f", "scanner": "scanner-primary", "fingerprint": "6ec33911cefff191", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ebf4787e37fd019c", "level": "none", "message": {"text": "Commented-code block (5 lines) in gold_standard_audit.py:1423"}, "properties": {"repobilityId": "26bdaf0657f74e83", "scanner": "scanner-primary", "fingerprint": "ebf4787e37fd019c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4c3da38ccc647987", "level": "none", "message": {"text": "Commented-code block (5 lines) in hardtest_npl_portfolio.py:198"}, "properties": {"repobilityId": "e6fc7dda5bb99b9f", "scanner": "scanner-primary", "fingerprint": "4c3da38ccc647987", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2d1ac7d4847fcb12", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 hardtest_npl_portfolio.py:136"}, "properties": {"repobilityId": "b882dd9931b0777d", "scanner": "scanner-primary", "fingerprint": "2d1ac7d4847fcb12", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-28d14f4e0ea1c780", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 hardtest_real_estate.py:174"}, "properties": {"repobilityId": "90af735cda3fe63d", "scanner": "scanner-primary", "fingerprint": "28d14f4e0ea1c780", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-6e90f50a99aba6ca", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 hardtest_structured_credit.py:36"}, "properties": {"repobilityId": "ce1bc9cbe19b5419", "scanner": "scanner-primary", "fingerprint": "6e90f50a99aba6ca", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2041e268fbca0c2f", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 hardtest_development_re.py:329"}, "properties": {"repobilityId": "6c8df38117aaf522", "scanner": "scanner-primary", "fingerprint": "2041e268fbca0c2f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a13e64e8d76a5013", "level": "none", "message": {"text": "Commented-code block (5 lines) in hardtest_mna_accretion.py:252"}, "properties": {"repobilityId": "44d824732f569ad3", "scanner": "scanner-primary", "fingerprint": "a13e64e8d76a5013", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f10d17ba17ffc454", "level": "none", "message": {"text": "Commented-code block (7 lines) in hardtest_unitranche.py:109"}, "properties": {"repobilityId": "5de510a8dae30e67", "scanner": "scanner-primary", "fingerprint": "f10d17ba17ffc454", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-903c0beea8b4c316", "level": "none", "message": {"text": "Commented-code block (5 lines) in hardtest_three_statement.py:309"}, "properties": {"repobilityId": "26040ec4bc1cd701", "scanner": "scanner-primary", "fingerprint": "903c0beea8b4c316", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-395d948d2a59b8e9", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 hardtest_three_statement.py:83"}, "properties": {"repobilityId": "078413963827d9c0", "scanner": "scanner-primary", "fingerprint": "395d948d2a59b8e9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-69336ca9fd99619f", "level": "none", "message": {"text": "Commented-code block (10 lines) in hardtest_lbo_full.py:253"}, "properties": {"repobilityId": "69fc2035a1a55a24", "scanner": "scanner-primary", "fingerprint": "69336ca9fd99619f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6a8b48e894419b21", "level": "note", "message": {"text": "Legacy-named symbol `v_copy` in tests/test_collab.py:230"}, "properties": {"repobilityId": "b712c05843be5a0c", "scanner": "scanner-primary", "fingerprint": "6a8b48e894419b21", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-1a0b4926c2f49418", "level": "note", "message": {"text": "Legacy-named symbol `model_copy` in tests/test_risk_sheet.py:26"}, "properties": {"repobilityId": "5331c202e0f60cdc", "scanner": "scanner-primary", "fingerprint": "1a0b4926c2f49418", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-dc6beab0f8518269", "level": "note", "message": {"text": "Legacy-named symbol `spec_v1` in tests/test_diff.py:30"}, "properties": {"repobilityId": "2a63abe353f606fa", "scanner": "scanner-primary", "fingerprint": "dc6beab0f8518269", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-dab2607056544387", "level": "note", "message": {"text": "Legacy-named symbol `hours_per_deal_legacy` in tests/test_roi.py:49"}, "properties": {"repobilityId": "05cc8aa9ff0dbe52", "scanner": "scanner-primary", "fingerprint": "dab2607056544387", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-85c219dfc169ddf0", "level": "note", "message": {"text": "Legacy-named symbol `model_copy` in tests/deck/test_slide_content.py:194"}, "properties": {"repobilityId": "974a4ae23475b9ad", "scanner": "scanner-primary", "fingerprint": "85c219dfc169ddf0", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-67975d1464f9a672", "level": "note", "message": {"text": "Legacy-named symbol `model_copy` in tests/deck/rendering/test_native_ib.py:436"}, "properties": {"repobilityId": "3143e9205a99e641", "scanner": "scanner-primary", "fingerprint": "67975d1464f9a672", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-448e7fe582f2b65f", "level": "none", "message": {"text": "Commented-code block (7 lines) in tests/deck/themes/test_theme_colors.py:98"}, "properties": {"repobilityId": "cc2837fad88b02c5", "scanner": "scanner-primary", "fingerprint": "448e7fe582f2b65f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e861a6feccc8fa9d", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 benchmarks/harness/score.py:598"}, "properties": {"repobilityId": "0809ceaaf31d7b4f", "scanner": "scanner-primary", "fingerprint": "e861a6feccc8fa9d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-abb517aec72f1e6b", "level": "none", "message": {"text": "Commented-code block (5 lines) in modelforge/mcp_server.py:562"}, "properties": {"repobilityId": "27f3584b815dd8d5", "scanner": "scanner-primary", "fingerprint": "abb517aec72f1e6b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-955b44c813455acf", "level": "note", "message": {"text": "Legacy-named symbol `hours_legacy` in modelforge/cli.py:946"}, "properties": {"repobilityId": "555a942679a3b054", "scanner": "scanner-primary", "fingerprint": "955b44c813455acf", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-d02714fbc4b83489", "level": "none", "message": {"text": "Commented-code block (6 lines) in modelforge/cli.py:46"}, "properties": {"repobilityId": "93adc7e955ec6ed1", "scanner": "scanner-primary", "fingerprint": "d02714fbc4b83489", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f8d6bc68674c1133", "level": "none", "message": {"text": "Commented-code block (5 lines) in modelforge/spec/real_estate.py:80"}, "properties": {"repobilityId": "c30c391a1d12d820", "scanner": "scanner-primary", "fingerprint": "f8d6bc68674c1133", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-beac7b1466113980", "level": "none", "message": {"text": "Commented-code block (6 lines) in modelforge/spec/dcf.py:68"}, "properties": {"repobilityId": "6fbb1c67b89c53d1", "scanner": "scanner-primary", "fingerprint": "beac7b1466113980", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-be318859f2a90f83", "level": "none", "message": {"text": "Commented-code block (5 lines) in modelforge/spec/development_re.py:206"}, "properties": {"repobilityId": "f14838c940591ad8", "scanner": "scanner-primary", "fingerprint": "be318859f2a90f83", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c126ac5bbe655149", "level": "none", "message": {"text": "Commented-code block (8 lines) in modelforge/spec/merger.py:112"}, "properties": {"repobilityId": "bfd523754980ca07", "scanner": "scanner-primary", "fingerprint": "c126ac5bbe655149", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9757d665bed98b45", "level": "none", "message": {"text": "Commented-code block (5 lines) in modelforge/analytics/factors.py:356"}, "properties": {"repobilityId": "3482381da1e4f53d", "scanner": "scanner-primary", "fingerprint": "9757d665bed98b45", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-76dfc124ad172d76", "level": "none", "message": {"text": "Commented-code block (9 lines) in modelforge/analytics/sensitivity.py:500"}, "properties": {"repobilityId": "88f9644874d8357a", "scanner": "scanner-primary", "fingerprint": "76dfc124ad172d76", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-80c6d6de868be861", "level": "none", "message": {"text": "Commented-code block (9 lines) in modelforge/analytics/monte_carlo.py:332"}, "properties": {"repobilityId": "04feebb38e93e236", "scanner": "scanner-primary", "fingerprint": "80c6d6de868be861", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b7c9ee8bd1ef5f17", "level": "none", "message": {"text": "Commented-code block (5 lines) in modelforge/ingest/pipeline.py:172"}, "properties": {"repobilityId": "88ff73731b60bb8c", "scanner": "scanner-primary", "fingerprint": "b7c9ee8bd1ef5f17", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a12e0b6507ac7145", "level": "none", "message": {"text": "Commented-code block (5 lines) in modelforge/templates/project_finance.py:79"}, "properties": {"repobilityId": "01ed84260006b645", "scanner": "scanner-primary", "fingerprint": "a12e0b6507ac7145", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c34f3c75fc130bae", "level": "none", "message": {"text": "Commented-code block (8 lines) in modelforge/templates/__init__.py:126"}, "properties": {"repobilityId": "520a2fa08a97b165", "scanner": "scanner-primary", "fingerprint": "c34f3c75fc130bae", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0e1a53252b3652d2", "level": "none", "message": {"text": "Commented-code block (5 lines) in modelforge/templates/portfolio_review.py:484"}, "properties": {"repobilityId": "5178e920fcf5ab0f", "scanner": "scanner-primary", "fingerprint": "0e1a53252b3652d2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-baf6a673ddc747f5", "level": "none", "message": {"text": "Commented-code block (5 lines) in modelforge/templates/npl.py:38"}, "properties": {"repobilityId": "d1f51247a52b925f", "scanner": "scanner-primary", "fingerprint": "baf6a673ddc747f5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3b261f552461502f", "level": "none", "message": {"text": "Commented-code block (5 lines) in modelforge/templates/structured_credit.py:47"}, "properties": {"repobilityId": "5060427be3bb6b85", "scanner": "scanner-primary", "fingerprint": "3b261f552461502f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-94f82cb22c568c9e", "level": "note", "message": {"text": "Legacy-named symbol `hours_per_deal_legacy` in modelforge/roi/calculator.py:8"}, "properties": {"repobilityId": "83a1de01b1c88740", "scanner": "scanner-primary", "fingerprint": "94f82cb22c568c9e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-12a477577fa53e2d", "level": "none", "message": {"text": "Commented-code block (5 lines) in modelforge/deck/adapter.py:273"}, "properties": {"repobilityId": "1e2494d8c2d24a0e", "scanner": "scanner-primary", "fingerprint": "12a477577fa53e2d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0537ae6c562adf09", "level": "note", "message": {"text": "Legacy-named symbol `model_copy` in modelforge/deck/pipeline.py:300"}, "properties": {"repobilityId": "0e97a35a09c8d743", "scanner": "scanner-primary", "fingerprint": "0537ae6c562adf09", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-6b6bb30d2efb1fd4", "level": "none", "message": {"text": "Commented-code block (5 lines) in modelforge/deck/pipeline.py:150"}, "properties": {"repobilityId": "e22a3f46a810e13c", "scanner": "scanner-primary", "fingerprint": "6b6bb30d2efb1fd4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-17d5d91e4bcef88c", "level": "none", "message": {"text": "Commented-code block (5 lines) in modelforge/deck/layout/engine.py:41"}, "properties": {"repobilityId": "9a4889204e7e432e", "scanner": "scanner-primary", "fingerprint": "17d5d91e4bcef88c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6a40f6d5c14b1d62", "level": "note", "message": {"text": "Legacy-named symbol `model_copy` in modelforge/deck/layout/overflow.py:348"}, "properties": {"repobilityId": "92b72c8c2697a47f", "scanner": "scanner-primary", "fingerprint": "6a40f6d5c14b1d62", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-3975974598f71ae0", "level": "none", "message": {"text": "Commented-code block (6 lines) in modelforge/deck/rendering/chart_renderers/__init__.py:67"}, "properties": {"repobilityId": "e5cc43c3f69b6b9c", "scanner": "scanner-primary", "fingerprint": "3975974598f71ae0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5056deff652a69cb", "level": "none", "message": {"text": "Commented-code block (5 lines) in modelforge/builder/i18n.py:447"}, "properties": {"repobilityId": "e0dd0b7c3c14c6e5", "scanner": "scanner-primary", "fingerprint": "5056deff652a69cb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-dbafe7932dd9a1db", "level": "none", "message": {"text": "Commented-code block (5 lines) in modelforge/builder/styles.py:45"}, "properties": {"repobilityId": "c6c247e35fc54d7c", "scanner": "scanner-primary", "fingerprint": "dbafe7932dd9a1db", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0f98430ab8f6e8db", "level": "none", "message": {"text": "Commented-code block (5 lines) in modelforge/builder/layout.py:110"}, "properties": {"repobilityId": "bf81294061d21a5e", "scanner": "scanner-primary", "fingerprint": "0f98430ab8f6e8db", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6989f011becf778b", "level": "none", "message": {"text": "Commented-code block (11 lines) in modelforge/builder/sheets/debt.py:76"}, "properties": {"repobilityId": "a53a8a046579ea08", "scanner": "scanner-primary", "fingerprint": "6989f011becf778b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-181922ebda62fcde", "level": "none", "message": {"text": "Commented-code block (6 lines) in modelforge/builder/sheets/dev_schedule.py:294"}, "properties": {"repobilityId": "786a7787bd2ca2eb", "scanner": "scanner-primary", "fingerprint": "181922ebda62fcde", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cc042223ace29a9f", "level": "none", "message": {"text": "Commented-code block (10 lines) in modelforge/builder/sheets/npl_waterfall.py:176"}, "properties": {"repobilityId": "a99064cfb8372b59", "scanner": "scanner-primary", "fingerprint": "cc042223ace29a9f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a3b46aebb5260a72", "level": "none", "message": {"text": "Commented-code block (5 lines) in modelforge/builder/sheets/ifrs9_ecl.py:97"}, "properties": {"repobilityId": "806e71f351066e44", "scanner": "scanner-primary", "fingerprint": "a3b46aebb5260a72", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e87810c486cec2e8", "level": "none", "message": {"text": "Commented-code block (5 lines) in modelforge/builder/sheets/covenants.py:141"}, "properties": {"repobilityId": "0982e05046040947", "scanner": "scanner-primary", "fingerprint": "e87810c486cec2e8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fe7c3ed7dacaa832", "level": "none", "message": {"text": "Commented-code block (8 lines) in modelforge/builder/sheets/bank_bs.py:147"}, "properties": {"repobilityId": "c564b4e0ea263c3c", "scanner": "scanner-primary", "fingerprint": "fe7c3ed7dacaa832", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0f9b0bdc63c2f0a2", "level": "none", "message": {"text": "Commented-code block (5 lines) in modelforge/builder/sheets/investor_returns.py:162"}, "properties": {"repobilityId": "e533f361ee10a361", "scanner": "scanner-primary", "fingerprint": "0f9b0bdc63c2f0a2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ae97e96190230ea6", "level": "none", "message": {"text": "Commented-code block (10 lines) in modelforge/builder/sheets/qc.py:228"}, "properties": {"repobilityId": "a8e296943254a98b", "scanner": "scanner-primary", "fingerprint": "ae97e96190230ea6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d60c7dafb4dbca02", "level": "none", "message": {"text": "Commented-code block (6 lines) in modelforge/builder/sheets/bank_pnl.py:116"}, "properties": {"repobilityId": "c82828cbfd60f2b4", "scanner": "scanner-primary", "fingerprint": "d60c7dafb4dbca02", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5e870a515f6872c1", "level": "none", "message": {"text": "Commented-code block (11 lines) in modelforge/builder/sheets/pf_debt.py:137"}, "properties": {"repobilityId": "8842123444448ef3", "scanner": "scanner-primary", "fingerprint": "5e870a515f6872c1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cb665fc45ee57f81", "level": "none", "message": {"text": "Commented-code block (6 lines) in modelforge/builder/sheets/sources_uses.py:56"}, "properties": {"repobilityId": "07f301aa82e97019", "scanner": "scanner-primary", "fingerprint": "cb665fc45ee57f81", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6ab97285dc7eaa3c", "level": "none", "message": {"text": "Commented-code block (5 lines) in modelforge/builder/sheets/credit_opinion.py:66"}, "properties": {"repobilityId": "1bcbc6cc38b588ab", "scanner": "scanner-primary", "fingerprint": "6ab97285dc7eaa3c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-535852d80b85bfc7", "level": "none", "message": {"text": "Commented-code block (6 lines) in modelforge/builder/sheets/bond_structure.py:82"}, "properties": {"repobilityId": "2716015ed15e62e7", "scanner": "scanner-primary", "fingerprint": "535852d80b85bfc7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bfc69a14304235c5", "level": "none", "message": {"text": "Commented-code block (6 lines) in modelforge/builder/sheets/operating.py:348"}, "properties": {"repobilityId": "6e11ee6b07aa6a67", "scanner": "scanner-primary", "fingerprint": "bfc69a14304235c5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1421d00e29414df7", "level": "none", "message": {"text": "Commented-code block (5 lines) in modelforge/builder/sheets/pf_cashflow.py:357"}, "properties": {"repobilityId": "4b75ea0fb92e079d", "scanner": "scanner-primary", "fingerprint": "1421d00e29414df7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-428b63b27d798481", "level": "none", "message": {"text": "Commented-code block (6 lines) in modelforge/builder/sheets/ts_model.py:428"}, "properties": {"repobilityId": "2435a1640ec01c9b", "scanner": "scanner-primary", "fingerprint": "428b63b27d798481", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d5336ecb9ef22838", "level": "none", "message": {"text": "Commented-code block (6 lines) in modelforge/builder/sheets/re_financing.py:34"}, "properties": {"repobilityId": "346da83725a7ef2b", "scanner": "scanner-primary", "fingerprint": "d5336ecb9ef22838", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fe65d0418b4fc2d9", "level": "none", "message": {"text": "Commented-code block (7 lines) in modelforge/builder/sheets/merger_proforma.py:138"}, "properties": {"repobilityId": "d66ccfa8dde5146f", "scanner": "scanner-primary", "fingerprint": "fe65d0418b4fc2d9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d9c763d866ccb0b2", "level": "none", "message": {"text": "Commented-code block (5 lines) in modelforge/screening/engine.py:42"}, "properties": {"repobilityId": "43dfcf57bcbd3b42", "scanner": "scanner-primary", "fingerprint": "d9c763d866ccb0b2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-12be0fc2fc9e40c8", "level": "note", "message": {"text": "Legacy-named symbol `_have_legacy` in modelforge/feeds/refinitiv.py:54"}, "properties": {"repobilityId": "f3ca49c2daa17cc1", "scanner": "scanner-primary", "fingerprint": "12be0fc2fc9e40c8", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-1b817579a4f32aa1", "level": "none", "message": {"text": "Commented-code block (5 lines) in scripts/audit_listed.py:448"}, "properties": {"repobilityId": "3f6c5bc487271717", "scanner": "scanner-primary", "fingerprint": "1b817579a4f32aa1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-22810854f3c57513", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 web/collab-worker/src/index.ts:104"}, "properties": {"repobilityId": "059848262eddcd64", "scanner": "scanner-primary", "fingerprint": "22810854f3c57513", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-1581688aee732229", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 web/collab-worker/src/durable_object.ts:73"}, "properties": {"repobilityId": "3ad2269a0214bad4", "scanner": "scanner-primary", "fingerprint": "1581688aee732229", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "c93b7ad0597f4a06", "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": "6345ce522a4fed23", "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": "f007cb6b463d83d1", "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": "482b7ff673bad7ac", "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": "bdf5fc980f0f6de8", "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": "e70ff2c3fddafc30", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-9dad557909b86499", "level": "note", "message": {"text": "Near-duplicate function bodies in 10 places"}, "properties": {"repobilityId": "16e0e9cb698c6a34", "scanner": "scanner-primary", "fingerprint": "9dad557909b86499", "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": "86c205aab222e333", "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": "ea6f4746fe1f7a62", "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": "dbb49660336cdb7c", "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": "e47c75eba17be7eb", "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": "7061b5ebefc1d208", "scanner": "scanner-primary", "fingerprint": "49c98f7cedd9c977", "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": "e25cab9132b16931", "scanner": "scanner-primary", "fingerprint": "02525d39071dd2c7", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-c54c6fb8e364daaa", "level": "note", "message": {"text": "Near-duplicate function bodies in 16 places"}, "properties": {"repobilityId": "40442f67a92d1ca2", "scanner": "scanner-primary", "fingerprint": "c54c6fb8e364daaa", "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": "41afb6847a5b0a0c", "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": "291a79749611edb2", "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": "73576ddcbf84c48c", "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": "9ae4287810d313ce", "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": "fc8dd0811eb508d8", "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": "280de19f96828389", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-c43148423cbb30de", "level": "error", "message": {"text": "FastAPI POST `upload` without auth dependency \u2014 modelforge/web/app.py:160"}, "properties": {"repobilityId": "13dda652456674ea", "scanner": "scanner-primary", "fingerprint": "c43148423cbb30de", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modelforge/web/app.py"}, "region": {"startLine": 160}}}]}, {"ruleId": "scanner-19262559b28a8121", "level": "error", "message": {"text": "FastAPI POST `risk_endpoint` without auth dependency \u2014 modelforge/web/app.py:265"}, "properties": {"repobilityId": "b5c0241cd8a50659", "scanner": "scanner-primary", "fingerprint": "19262559b28a8121", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modelforge/web/app.py"}, "region": {"startLine": 265}}}]}, {"ruleId": "scanner-1815047180093ee1", "level": "error", "message": {"text": "FastAPI POST `stripe_webhook` without auth dependency \u2014 modelforge/web/saas_routes.py:220"}, "properties": {"repobilityId": "81652cb51c35aea6", "scanner": "scanner-primary", "fingerprint": "1815047180093ee1", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modelforge/web/saas_routes.py"}, "region": {"startLine": 220}}}]}, {"ruleId": "scanner-5baa8971ebe192a1", "level": "note", "message": {"text": "Unused endpoint: GET /"}, "properties": {"repobilityId": "b616f063e68329be", "scanner": "scanner-primary", "fingerprint": "5baa8971ebe192a1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6236b283b79811b8", "level": "note", "message": {"text": "Unused endpoint: POST /upload"}, "properties": {"repobilityId": "75035b585fc20ff0", "scanner": "scanner-primary", "fingerprint": "6236b283b79811b8", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-05c48da6b6c9a085", "level": "note", "message": {"text": "Unused endpoint: GET /workbook/{wid}"}, "properties": {"repobilityId": "bd00fb8e60bf2ec5", "scanner": "scanner-primary", "fingerprint": "05c48da6b6c9a085", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7660a40b7f51ef49", "level": "note", "message": {"text": "Unused endpoint: GET /workbook/{wid}/view"}, "properties": {"repobilityId": "b8f5d731a97cf505", "scanner": "scanner-primary", "fingerprint": "7660a40b7f51ef49", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-cf58b49ad49ef608", "level": "note", "message": {"text": "Unused endpoint: GET /workbook/{wid}/dossier"}, "properties": {"repobilityId": "74acbd904f804b9b", "scanner": "scanner-primary", "fingerprint": "cf58b49ad49ef608", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-fa95cfcad8583300", "level": "note", "message": {"text": "Unused endpoint: GET /workbook/{wid}/drift"}, "properties": {"repobilityId": "705e1f284943f1e3", "scanner": "scanner-primary", "fingerprint": "fa95cfcad8583300", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8b1b274b32469392", "level": "note", "message": {"text": "Unused endpoint: GET /diff"}, "properties": {"repobilityId": "84484e3fc966d82c", "scanner": "scanner-primary", "fingerprint": "8b1b274b32469392", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-9d1c83e32faac0a7", "level": "note", "message": {"text": "Unused endpoint: POST /risk"}, "properties": {"repobilityId": "bd245d173d420edc", "scanner": "scanner-primary", "fingerprint": "9d1c83e32faac0a7", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-31b0d41bdabf0351", "level": "note", "message": {"text": "Unused endpoint: GET /auth/whoami"}, "properties": {"repobilityId": "d44f5e963631c77b", "scanner": "scanner-primary", "fingerprint": "31b0d41bdabf0351", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-07a7fad711358625", "level": "note", "message": {"text": "Unused endpoint: POST /tenants"}, "properties": {"repobilityId": "096d8e24933829aa", "scanner": "scanner-primary", "fingerprint": "07a7fad711358625", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-092d7b8020d70b38", "level": "note", "message": {"text": "Unused endpoint: GET /tenants"}, "properties": {"repobilityId": "fbcb2fb70a016097", "scanner": "scanner-primary", "fingerprint": "092d7b8020d70b38", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-80816cd87fbcfd36", "level": "note", "message": {"text": "Unused endpoint: GET /tenants/{tenant_id}"}, "properties": {"repobilityId": "584557f515a3d60f", "scanner": "scanner-primary", "fingerprint": "80816cd87fbcfd36", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-73b34ec876762069", "level": "note", "message": {"text": "Unused endpoint: GET /tenants/{tenant_id}/members"}, "properties": {"repobilityId": "c3d65433824b6902", "scanner": "scanner-primary", "fingerprint": "73b34ec876762069", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-af854ee6af481961", "level": "note", "message": {"text": "Unused endpoint: POST /tenants/{tenant_id}/members"}, "properties": {"repobilityId": "f1e18d28804a08ba", "scanner": "scanner-primary", "fingerprint": "af854ee6af481961", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6c1162cea2c9c399", "level": "note", "message": {"text": "Unused endpoint: DELETE /tenants/{tenant_id}/members/{user_id}"}, "properties": {"repobilityId": "fe605ffb40ef567d", "scanner": "scanner-primary", "fingerprint": "6c1162cea2c9c399", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2b171ab6084f5670", "level": "note", "message": {"text": "Unused endpoint: POST /billing/webhook"}, "properties": {"repobilityId": "a9bfb0d5298d5c44", "scanner": "scanner-primary", "fingerprint": "2b171ab6084f5670", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-bbc18b03825e20ef", "level": "note", "message": {"text": "Unused endpoint: GET /tenants/{tenant_id}/workbooks"}, "properties": {"repobilityId": "fdedfdb79aae4287", "scanner": "scanner-primary", "fingerprint": "bbc18b03825e20ef", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}