{"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-962993bbeb2d56ae", "name": "Possibly dead Python function: pwat_cmap", "shortDescription": {"text": "Possibly dead Python function: pwat_cmap"}, "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-b97cc3ef3e26cf1e", "name": "Possibly dead Python function: cyclonic_vort_cmap", "shortDescription": {"text": "Possibly dead Python function: cyclonic_vort_cmap"}, "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-51974dc815fc0758", "name": "Possibly dead Python function: rh_cmap", "shortDescription": {"text": "Possibly dead Python function: rh_cmap"}, "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-04cf7284a36010f0", "name": "Possibly dead Python function: normalize_visible", "shortDescription": {"text": "Possibly dead Python function: normalize_visible"}, "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-8b7d3e8280e664a5", "name": "Possibly dead Python function: repl", "shortDescription": {"text": "Possibly dead Python function: repl"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ff15fefd00ce92c4", "name": "Possibly dead Python function: f", "shortDescription": {"text": "Possibly dead Python function: f"}, "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-ac74fe69893bcf17", "name": "Possibly dead Python function: has_spec", "shortDescription": {"text": "Possibly dead Python function: has_spec"}, "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-d1df92f474ff69f2", "name": "Possibly dead Python function: list_complete", "shortDescription": {"text": "Possibly dead Python function: list_complete"}, "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-6f51c2d1cb145431", "name": "Possibly dead Python function: ingest_one", "shortDescription": {"text": "Possibly dead Python function: ingest_one"}, "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-0353823494daadf6", "name": "Possibly dead Python function: one", "shortDescription": {"text": "Possibly dead Python function: one"}, "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-c5e2ff427ecb053b", "name": "Possibly dead Python function: resolve_latest_complete", "shortDescription": {"text": "Possibly dead Python function: resolve_latest_complete"}, "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-2f11cda1781461a6", "name": "Possibly dead Python function: thk", "shortDescription": {"text": "Possibly dead Python function: thk"}, "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-19ff76c82b2c58f7", "name": "Possibly dead Python function: thickness", "shortDescription": {"text": "Possibly dead Python function: thickness"}, "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-bf157df7531e09d5", "name": "Possibly dead Python function: resolve_latest_complete", "shortDescription": {"text": "Possibly dead Python function: resolve_latest_complete"}, "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-235f97b485c5f44e", "name": "Possibly dead Python function: wrapped", "shortDescription": {"text": "Possibly dead Python function: wrapped"}, "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-a797bfb790326927", "name": "Possibly dead Python function: latest_fix_iso", "shortDescription": {"text": "Possibly dead Python function: latest_fix_iso"}, "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-532dc650ad8f17a4", "name": "Possibly dead Python function: fetch_nhc_active_sids", "shortDescription": {"text": "Possibly dead Python function: fetch_nhc_active_sids"}, "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-ce8eb03823c758dd", "name": "Privileged port 13 in use", "shortDescription": {"text": "Privileged port 13 in use"}, "fullDescription": {"text": "Port 13 is privileged (<1024). Make sure the service runs with the right caps or front it with a non-privileged port via a load balancer."}, "properties": {"scanner": "scanner-primary", "layer": "network", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e5259793cd2eeb2c", "name": "Privileged port 17 in use", "shortDescription": {"text": "Privileged port 17 in use"}, "fullDescription": {"text": "Port 17 is privileged (<1024). Make sure the service runs with the right caps or front it with a non-privileged port via a load balancer."}, "properties": {"scanner": "scanner-primary", "layer": "network", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f72012a5b7849627", "name": "Privileged port 47 in use", "shortDescription": {"text": "Privileged port 47 in use"}, "fullDescription": {"text": "Port 47 is privileged (<1024). Make sure the service runs with the right caps or front it with a non-privileged port via a load balancer."}, "properties": {"scanner": "scanner-primary", "layer": "network", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b3cf655057df6c85", "name": "Privileged port 14 in use", "shortDescription": {"text": "Privileged port 14 in use"}, "fullDescription": {"text": "Port 14 is privileged (<1024). Make sure the service runs with the right caps or front it with a non-privileged port via a load balancer."}, "properties": {"scanner": "scanner-primary", "layer": "network", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e78b490e8453020c", "name": "Privileged port 23 in use", "shortDescription": {"text": "Privileged port 23 in use"}, "fullDescription": {"text": "Port 23 is privileged (<1024). Make sure the service runs with the right caps or front it with a non-privileged port via a load balancer."}, "properties": {"scanner": "scanner-primary", "layer": "network", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9991e157c71747a3", "name": "Privileged port 43 in use", "shortDescription": {"text": "Privileged port 43 in use"}, "fullDescription": {"text": "Port 43 is privileged (<1024). Make sure the service runs with the right caps or front it with a non-privileged port via a load balancer."}, "properties": {"scanner": "scanner-primary", "layer": "network", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6ceb182ec3a69e6c", "name": "Privileged port 15 in use", "shortDescription": {"text": "Privileged port 15 in use"}, "fullDescription": {"text": "Port 15 is privileged (<1024). Make sure the service runs with the right caps or front it with a non-privileged port via a load balancer."}, "properties": {"scanner": "scanner-primary", "layer": "network", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-514af19fddd5a810", "name": "Privileged port 3 in use", "shortDescription": {"text": "Privileged port 3 in use"}, "fullDescription": {"text": "Port 3 is privileged (<1024). Make sure the service runs with the right caps or front it with a non-privileged port via a load balancer."}, "properties": {"scanner": "scanner-primary", "layer": "network", "severity": "medium", "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-8ec48beb9e1f662d", "name": "Insecure pattern 'direct_innerhtml_assignment' in season_animation.js:248", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in season_animation.js:248"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ab228cd1ccc9e256", "name": "Insecure pattern 'direct_innerhtml_assignment' in active-banner.js:147", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in active-banner.js:147"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ee08de0005411009", "name": "Insecure pattern 'direct_innerhtml_assignment' in index.html:693", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in index.html:693"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-7877eceb4f12ecc7", "name": "Insecure pattern 'direct_innerhtml_assignment' in ep_ace.html:779", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in ep_ace.html:779"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2cf1bc9e23ec4cc5", "name": "Insecure pattern 'direct_innerhtml_assignment' in global_tracks.html:646", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in global_tracks.html:646"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-cf0a229fbc2aeb4c", "name": "Insecure pattern 'direct_innerhtml_assignment' in wp_ace.html:779", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in wp_ace.html:779"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a6b00e4163122391", "name": "Insecure pattern 'direct_innerhtml_assignment' in product_animator.js:104", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in product_animator.js:104"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f0a77b88d24aa7d0", "name": "Insecure pattern 'direct_innerhtml_assignment' in al_ace.html:779", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in al_ace.html:779"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-90b6c242bce6ca54", "name": "Insecure pattern 'direct_innerhtml_assignment' in sst/static_widget.js:42", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in sst/static_widget.js:42"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-689d157c710c0471", "name": "Insecure pattern 'direct_innerhtml_assignment' in sst/climatology_widget.js:34", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in sst/climatology_widget.js:34"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-75390b9f2fe8fd0b", "name": "Insecure pattern 'direct_innerhtml_assignment' in models/enscenters.js:410", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in models/enscenters.js:410"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-7271a992dbec7ac2", "name": "Insecure pattern 'direct_innerhtml_assignment' in models/regions.js:366", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in models/regions.js:366"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f96d99bf06aaf234", "name": "Insecure pattern 'direct_innerhtml_assignment' in models/hafs.js:371", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in models/hafs.js:371"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f303a9e65515ae4b", "name": "Insecure pattern 'direct_innerhtml_assignment' in satellite/index.html:1082", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in satellite/index.html:1082"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6372cebde0220094", "name": "No auth library detected", "shortDescription": {"text": "No auth library detected"}, "fullDescription": {"text": "The scanner did not find any standard auth library (JWT, OAuth, NextAuth, Auth0, etc.). The repo has auth/admin/session surface indicators, so auth may live in custom code, in a separate service, or be missing."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6a21c4eb469352d6", "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@v6 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-4da118b7afa23dfc", "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-6c236ff4ee787c7f", "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@v6 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-3c4eba0e1685c2aa", "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@v6 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-1a73898bb2eda59e", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/setup-python@v6 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-d7c16ab8efde51f4", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/setup-python@v6 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-c918282b182d8886", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/setup-python@v6 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-56271b259b732f02", "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@v6 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-d19e072eb7e32eab", "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-56e6d38ae18307e1", "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@v6 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-66f21bfb64261545", "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@v6 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-3a370629fa95a4a2", "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-3039738a76f14589", "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@v6 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-0ae1e02c292a8fb3", "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-e0ec3993a07e489d", "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@v6 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-b95169d365a978af", "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-ea7bcf362c2ac7e7", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/setup-python@v6 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-9285ac820ad54bc2", "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@v6 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-87a7f7ccc3144779", "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@v6 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-3e2f0e94ee9355dd", "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-a2527ee4aef9ee5d", "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@v6 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-006c1ee98e3dff8f", "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@v6 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-50fff0584a53a3a2", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/setup-python@v6 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-101462e6454b61a4", "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@v6 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-89d008431302d0e7", "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-6a0328eb67c9db66", "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@v6 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-2b99cfefa3d041a9", "name": "Very large file: generate_sst_animations.py (1256 lines)", "shortDescription": {"text": "Very large file: generate_sst_animations.py (1256 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-1e4cdd6171d4a6d9", "name": "Very large file: generate_subsurface_animations.py (1441 lines)", "shortDescription": {"text": "Very large file: generate_subsurface_animations.py (1441 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-f1e9c543277e0888", "name": "Very large file: generate_armor3d_plots.py (1422 lines)", "shortDescription": {"text": "Very large file: generate_armor3d_plots.py (1422 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-30d9fc9ed75858c2", "name": "Very large file: generate_tracks_plot.py (3776 lines)", "shortDescription": {"text": "Very large file: generate_tracks_plot.py (3776 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-a790dfc211ff4f6c", "name": "Very large file: generate_sst_plots.py (1993 lines)", "shortDescription": {"text": "Very large file: generate_sst_plots.py (1993 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-ab31f9d84dbbde82", "name": "Very large file: models/enscenters.js (1961 lines)", "shortDescription": {"text": "Very large file: models/enscenters.js (1961 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-a36efa5d5b971f59", "name": "Very large file: hafs_render/hafs_render/hafs_plot.py (1746 lines)", "shortDescription": {"text": "Very large file: hafs_render/hafs_render/hafs_plot.py (1746 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-32909644a1c525dc", "name": "Very large file: ace_core/ace_core/__init__.py (1407 lines)", "shortDescription": {"text": "Very large file: ace_core/ace_core/__init__.py (1407 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 357 console/debugger/print-style debug statements in non-test source. This is a common fast-generation residue before production cleanup."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2d0c7b7ab8f8aacf", "name": "Critical user flow still appears backed by mock or placeholder data", "shortDescription": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "fullDescription": {"text": "A payment/auth/admin/order/billing-style flow contains mock, fake, TODO, dummy, or placeholder markers in runtime source. In the Fable corpus this is a high-leverage completeness smell: the app can look finished while the money, identity, or tenant flow is still scaffolded."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-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-4d39bd268a109256", "name": "Commented-code block (6 lines) in generate_sst_animations.py:93", "shortDescription": {"text": "Commented-code block (6 lines) in generate_sst_animations.py:93"}, "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-dccfb63f75bff5a4", "name": "Network/subprocess call without timeout or try/except \u2014 generate_sst_animations.py:711", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 generate_sst_animations.py:711"}, "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-d5da919c4d175c0e", "name": "Legacy-named symbol `anomaly_v2` in generate_subsurface_animations.py:231", "shortDescription": {"text": "Legacy-named symbol `anomaly_v2` in generate_subsurface_animations.py:231"}, "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-69ce7b1e8741cf50", "name": "Commented-code block (11 lines) in generate_subsurface_animations.py:63", "shortDescription": {"text": "Commented-code block (11 lines) in generate_subsurface_animations.py:63"}, "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-9120969864636933", "name": "Network/subprocess call without timeout or try/except \u2014 generate_subsurface_animations.py:812", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 generate_subsurface_animations.py:812"}, "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-1dbc0ab57a999170", "name": "Commented-code block (7 lines) in season_animation.js:27", "shortDescription": {"text": "Commented-code block (7 lines) in season_animation.js:27"}, "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-c602bf46c71e7773", "name": "`fetch()` without try/.catch or AbortSignal \u2014 season_animation.js:184", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 season_animation.js:184"}, "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-b0fe555af719b815", "name": "Commented-code block (6 lines) in active-banner.js:6", "shortDescription": {"text": "Commented-code block (6 lines) in active-banner.js:6"}, "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-39210933d6ae4c9f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 active-banner.js:141", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 active-banner.js:141"}, "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-77b26cc73eb9a6db", "name": "Commented-code block (7 lines) in generate_global_crw_anom_gif.py:161", "shortDescription": {"text": "Commented-code block (7 lines) in generate_global_crw_anom_gif.py:161"}, "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-96bd6e2dc864a24b", "name": "Commented-code block (5 lines) in generate_armor3d_plots.py:197", "shortDescription": {"text": "Commented-code block (5 lines) in generate_armor3d_plots.py:197"}, "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-de7cae5df0c57321", "name": "Commented-code block (7 lines) in bake_armor3d_tchp_records.py:90", "shortDescription": {"text": "Commented-code block (7 lines) in bake_armor3d_tchp_records.py:90"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8d20fae03dacde8d", "name": "Commented-code block (5 lines) in generate_ace_plot.py:199", "shortDescription": {"text": "Commented-code block (5 lines) in generate_ace_plot.py:199"}, "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-c5ce9300599ded5f", "name": "Commented-code block (6 lines) in generate_tracks_plot.py:47", "shortDescription": {"text": "Commented-code block (6 lines) in generate_tracks_plot.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-d935ad39bc6a5294", "name": "Commented-code block (5 lines) in generate_sst_plots.py:93", "shortDescription": {"text": "Commented-code block (5 lines) in generate_sst_plots.py:93"}, "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-bd806a12a956021a", "name": "Commented-code block (5 lines) in generate_wp_ace_plot.py:136", "shortDescription": {"text": "Commented-code block (5 lines) in generate_wp_ace_plot.py:136"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d8b64fccc5f21ab5", "name": "Commented-code block (5 lines) in generate_gibs_truecolor.py:69", "shortDescription": {"text": "Commented-code block (5 lines) in generate_gibs_truecolor.py:69"}, "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-741ef5574c291748", "name": "Commented-code block (5 lines) in generate_subsurface_plots.py:344", "shortDescription": {"text": "Commented-code block (5 lines) in generate_subsurface_plots.py:344"}, "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-e25cf6426f877ba7", "name": "Commented-code block (10 lines) in build_crw_doy_climatology.py:117", "shortDescription": {"text": "Commented-code block (10 lines) in build_crw_doy_climatology.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-fe32687659e23101", "name": "Network/subprocess call without timeout or try/except \u2014 build_crw_doy_climatology.py:418", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 build_crw_doy_climatology.py:418"}, "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-7d99ee53291c2aa7", "name": "Commented-code block (8 lines) in build_armor3d_climatology.py:100", "shortDescription": {"text": "Commented-code block (8 lines) in build_armor3d_climatology.py:100"}, "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-999a933f2db44b17", "name": "Commented-code block (5 lines) in product_animator.js:220", "shortDescription": {"text": "Commented-code block (5 lines) in product_animator.js:220"}, "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-355f2e3e7ca90c6a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 product_animator.js:356", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 product_animator.js:356"}, "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-a51e04ff10cd99c5", "name": "`fetch()` without try/.catch or AbortSignal \u2014 sst/static_widget.js:275", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 sst/static_widget.js:275"}, "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-ab68b702bca7c4cb", "name": "`fetch()` without try/.catch or AbortSignal \u2014 sst/climatology_widget.js:100", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 sst/climatology_widget.js:100"}, "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-a581bccd8776f8b3", "name": "Commented-code block (8 lines) in models/enscenters.js:48", "shortDescription": {"text": "Commented-code block (8 lines) in models/enscenters.js:48"}, "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-e9448035a17a0342", "name": "`fetch()` without try/.catch or AbortSignal \u2014 models/enscenters.js:358", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 models/enscenters.js:358"}, "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-40c37bdd608c1104", "name": "Commented-code block (12 lines) in models/regions.js:122", "shortDescription": {"text": "Commented-code block (12 lines) in models/regions.js:122"}, "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-2a7f0f412f91cc75", "name": "`fetch()` without try/.catch or AbortSignal \u2014 models/regions.js:268", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 models/regions.js:268"}, "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-1ea99dae0f453fb5", "name": "Commented-code block (5 lines) in models/hafs.js:102", "shortDescription": {"text": "Commented-code block (5 lines) in models/hafs.js:102"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f030fe192b450125", "name": "`fetch()` without try/.catch or AbortSignal \u2014 models/hafs.js:190", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 models/hafs.js:190"}, "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-b318502ad54294d9", "name": "Commented-code block (5 lines) in tests/enscenters_header_smoke.cjs:1", "shortDescription": {"text": "Commented-code block (5 lines) in tests/enscenters_header_smoke.cjs:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e1cd8378e62a018b", "name": "Commented-code block (6 lines) in tests/home_status_harness.cjs:1", "shortDescription": {"text": "Commented-code block (6 lines) in tests/home_status_harness.cjs:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-dbab36e0d3c4cc8e", "name": "Commented-code block (5 lines) in tests/dom_smoke.cjs:9", "shortDescription": {"text": "Commented-code block (5 lines) in tests/dom_smoke.cjs:9"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8feee5a42e3493a5", "name": "Commented-code block (6 lines) in tests/test_bdeck_radii.py:39", "shortDescription": {"text": "Commented-code block (6 lines) in tests/test_bdeck_radii.py:39"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0253f798b0f23343", "name": "Commented-code block (6 lines) in tests/global_map_harness.cjs:3", "shortDescription": {"text": "Commented-code block (6 lines) in tests/global_map_harness.cjs:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d8d5b556bc1ff1fe", "name": "Commented-code block (6 lines) in tests/test_enscenters_viewer.py:149", "shortDescription": {"text": "Commented-code block (6 lines) in tests/test_enscenters_viewer.py:149"}, "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-8c1b7c309bb0c398", "name": "Commented-code block (5 lines) in tests/enscenters_trail_smoke.cjs:3", "shortDescription": {"text": "Commented-code block (5 lines) in tests/enscenters_trail_smoke.cjs:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9b88f114910bb187", "name": "Commented-code block (5 lines) in tests/hafs_viewer_harness.cjs:3", "shortDescription": {"text": "Commented-code block (5 lines) in tests/hafs_viewer_harness.cjs:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-297bf4b270508603", "name": "Commented-code block (6 lines) in tests/test_hafs_viewer.py:225", "shortDescription": {"text": "Commented-code block (6 lines) in tests/test_hafs_viewer.py:225"}, "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-fa0a97b187ec699f", "name": "Commented-code block (5 lines) in tests/enscenters_viewer_smoke.cjs:3", "shortDescription": {"text": "Commented-code block (5 lines) in tests/enscenters_viewer_smoke.cjs:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b2b189fedd069983", "name": "Commented-code block (11 lines) in tests/regions_basemap_smoke.cjs:1", "shortDescription": {"text": "Commented-code block (11 lines) in tests/regions_basemap_smoke.cjs:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f6f9f4cc985d3d97", "name": "Commented-code block (6 lines) in tests/enscenters_gifname_smoke.cjs:1", "shortDescription": {"text": "Commented-code block (6 lines) in tests/enscenters_gifname_smoke.cjs:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-79d4d89a7e53559b", "name": "Commented-code block (12 lines) in tests/enscenters_gifsize_smoke.cjs:1", "shortDescription": {"text": "Commented-code block (12 lines) in tests/enscenters_gifsize_smoke.cjs:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a8aaa2ff3b88d3b6", "name": "Commented-code block (8 lines) in scripts/enscenters_manifest_guard.py:162", "shortDescription": {"text": "Commented-code block (8 lines) in scripts/enscenters_manifest_guard.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-be41305aa29a2f31", "name": "Commented-code block (6 lines) in hafs_render/hafs_render/hafs_cache.py:56", "shortDescription": {"text": "Commented-code block (6 lines) in hafs_render/hafs_render/hafs_cache.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-6c2bbe31f977e518", "name": "Commented-code block (12 lines) in hafs_render/hafs_render/generate_hafs_plots.py:122", "shortDescription": {"text": "Commented-code block (12 lines) in hafs_render/hafs_render/generate_hafs_plots.py:122"}, "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-ddc185b269a5da18", "name": "Commented-code block (6 lines) in hafs_render/hafs_render/hafs_plot.py:65", "shortDescription": {"text": "Commented-code block (6 lines) in hafs_render/hafs_render/hafs_plot.py:65"}, "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-d04c348521bc795e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 workers/cyclolab-router.js:49", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 workers/cyclolab-router.js:49"}, "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-61645cf43cdc7df4", "name": "Commented-code block (5 lines) in enscenters/registry.py:35", "shortDescription": {"text": "Commented-code block (5 lines) in enscenters/registry.py:35"}, "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-9cc2f45b7f58fdf2", "name": "Commented-code block (6 lines) in enscenters/currency.py:144", "shortDescription": {"text": "Commented-code block (6 lines) in enscenters/currency.py:144"}, "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-e7af0d9e0213dae7", "name": "Commented-code block (5 lines) in enscenters/cli.py:222", "shortDescription": {"text": "Commented-code block (5 lines) in enscenters/cli.py:222"}, "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-63dc4dcda5ddf7a3", "name": "Commented-code block (7 lines) in enscenters/ecmwf_byterange_ingest.py:88", "shortDescription": {"text": "Commented-code block (7 lines) in enscenters/ecmwf_byterange_ingest.py:88"}, "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-bf8198c17d43dbe9", "name": "Commented-code block (8 lines) in enscenters/detect.py:143", "shortDescription": {"text": "Commented-code block (8 lines) in enscenters/detect.py:143"}, "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-6450b87c25d9bb88", "name": "Commented-code block (9 lines) in enscenters/pipeline.py:43", "shortDescription": {"text": "Commented-code block (9 lines) in enscenters/pipeline.py:43"}, "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-1109c30014699b61", "name": "Commented-code block (9 lines) in enscenters/tracks.py:55", "shortDescription": {"text": "Commented-code block (9 lines) in enscenters/tracks.py:55"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0e4776438571d93f", "name": "Commented-code block (6 lines) in enscenters/tracking.py:62", "shortDescription": {"text": "Commented-code block (6 lines) in enscenters/tracking.py:62"}, "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-5d98888c46749851", "name": "Commented-code block (7 lines) in ace_core/ace_core/__init__.py:544", "shortDescription": {"text": "Commented-code block (7 lines) in ace_core/ace_core/__init__.py:544"}, "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-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:\ngenerate_season_gif.py:render_hurricane_icon, generate_season_gif.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:\nhafs_render/hafs_render/hafs_registry.py:f, hafs_render/hafs_render/hafs_registry.py:f, hafs_render/hafs_render/hafs_registry.py:f, hafs_render/hafs_render/hafs_registry.py:f\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:\nenscenters/cli.py:list_complete, enscenters/cli.py:list_complete, enscenters/cli.py:list_complete, enscenters/cli.py:list_complete\n\nThis is *the* AI-coder failure mode (4\u00d7 more duplication in vibe-coded repos \u2014 see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}]}}, "automationDetails": {"id": "repobility/22608"}, "properties": {"repository": "WeathermanAAA/Triple-A-Tropics", "repoUrl": "https://github.com/WeathermanAAA/Triple-A-Tropics", "branch": "main"}, "results": [{"ruleId": "scanner-962993bbeb2d56ae", "level": "note", "message": {"text": "Possibly dead Python function: pwat_cmap"}, "properties": {"repobilityId": "fc2ce22b2ca48965", "scanner": "scanner-primary", "fingerprint": "962993bbeb2d56ae", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "palette/tat_palettes/__init__.py:408"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-b97cc3ef3e26cf1e", "level": "note", "message": {"text": "Possibly dead Python function: cyclonic_vort_cmap"}, "properties": {"repobilityId": "9c0f32e05fa32074", "scanner": "scanner-primary", "fingerprint": "b97cc3ef3e26cf1e", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "palette/tat_palettes/__init__.py:418"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-51974dc815fc0758", "level": "note", "message": {"text": "Possibly dead Python function: rh_cmap"}, "properties": {"repobilityId": "50e92517f9605fd6", "scanner": "scanner-primary", "fingerprint": "51974dc815fc0758", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "palette/tat_palettes/__init__.py:424"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-04cf7284a36010f0", "level": "note", "message": {"text": "Possibly dead Python function: normalize_visible"}, "properties": {"repobilityId": "2366a17c8f7085c3", "scanner": "scanner-primary", "fingerprint": "04cf7284a36010f0", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "palette/tat_palettes/__init__.py:435"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-8b7d3e8280e664a5", "level": "note", "message": {"text": "Possibly dead Python function: repl"}, "properties": {"repobilityId": "6f5d3779bbb8be8b", "scanner": "scanner-primary", "fingerprint": "8b7d3e8280e664a5", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/stamp_model_assets.py:49"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-ff15fefd00ce92c4", "level": "note", "message": {"text": "Possibly dead Python function: f"}, "properties": {"repobilityId": "353d09b5558cba0b", "scanner": "scanner-primary", "fingerprint": "ff15fefd00ce92c4", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "hafs_render/hafs_render/hafs_registry.py:369"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-ac74fe69893bcf17", "level": "note", "message": {"text": "Possibly dead Python function: has_spec"}, "properties": {"repobilityId": "7cf8dc2a10a47cca", "scanner": "scanner-primary", "fingerprint": "ac74fe69893bcf17", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "hafs_render/hafs_render/hafs_registry.py:581"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-d1df92f474ff69f2", "level": "note", "message": {"text": "Possibly dead Python function: list_complete"}, "properties": {"repobilityId": "ba364c17630f3e90", "scanner": "scanner-primary", "fingerprint": "d1df92f474ff69f2", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "enscenters/cli.py:244"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-6f51c2d1cb145431", "level": "note", "message": {"text": "Possibly dead Python function: ingest_one"}, "properties": {"repobilityId": "7320160e956f5cfa", "scanner": "scanner-primary", "fingerprint": "6f51c2d1cb145431", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "enscenters/cli.py:249"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-0353823494daadf6", "level": "note", "message": {"text": "Possibly dead Python function: one"}, "properties": {"repobilityId": "692200a7e4dd59b4", "scanner": "scanner-primary", "fingerprint": "0353823494daadf6", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "enscenters/ecmwf_byterange_ingest.py:240"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-c5e2ff427ecb053b", "level": "note", "message": {"text": "Possibly dead Python function: resolve_latest_complete"}, "properties": {"repobilityId": "83d701e45d24ee19", "scanner": "scanner-primary", "fingerprint": "c5e2ff427ecb053b", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "enscenters/ingest.py:42"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-2f11cda1781461a6", "level": "note", "message": {"text": "Possibly dead Python function: thk"}, "properties": {"repobilityId": "1a6ac85826f9d58b", "scanner": "scanner-primary", "fingerprint": "2f11cda1781461a6", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "enscenters/ingest.py:200"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-19ff76c82b2c58f7", "level": "note", "message": {"text": "Possibly dead Python function: thickness"}, "properties": {"repobilityId": "de041b6736658874", "scanner": "scanner-primary", "fingerprint": "19ff76c82b2c58f7", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "enscenters/warmcore.py:56"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-bf157df7531e09d5", "level": "note", "message": {"text": "Possibly dead Python function: resolve_latest_complete"}, "properties": {"repobilityId": "83d701e45d24ee19", "scanner": "scanner-primary", "fingerprint": "bf157df7531e09d5", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "enscenters/gefs_ingest.py:287"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-235f97b485c5f44e", "level": "note", "message": {"text": "Possibly dead Python function: wrapped"}, "properties": {"repobilityId": "faacdada21d43bd9", "scanner": "scanner-primary", "fingerprint": "235f97b485c5f44e", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "enscenters/tracking.py:809"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-a797bfb790326927", "level": "note", "message": {"text": "Possibly dead Python function: latest_fix_iso"}, "properties": {"repobilityId": "a1a5764301eb47d0", "scanner": "scanner-primary", "fingerprint": "a797bfb790326927", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ace_core/ace_core/__init__.py:515"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-532dc650ad8f17a4", "level": "note", "message": {"text": "Possibly dead Python function: fetch_nhc_active_sids"}, "properties": {"repobilityId": "9ff1c159c84ac814", "scanner": "scanner-primary", "fingerprint": "532dc650ad8f17a4", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ace_core/ace_core/__init__.py:572"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-ce8eb03823c758dd", "level": "warning", "message": {"text": "Privileged port 13 in use"}, "properties": {"repobilityId": "79d721e4d6f64798", "scanner": "scanner-primary", "fingerprint": "ce8eb03823c758dd", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/update-subsurface-animations.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-e5259793cd2eeb2c", "level": "warning", "message": {"text": "Privileged port 17 in use"}, "properties": {"repobilityId": "0bf38fb8f89ec589", "scanner": "scanner-primary", "fingerprint": "e5259793cd2eeb2c", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/update-subsurface-animations.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-f72012a5b7849627", "level": "warning", "message": {"text": "Privileged port 47 in use"}, "properties": {"repobilityId": "986e85543d70890d", "scanner": "scanner-primary", "fingerprint": "f72012a5b7849627", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/update-subsurface-animations.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-b3cf655057df6c85", "level": "warning", "message": {"text": "Privileged port 14 in use"}, "properties": {"repobilityId": "2dbd4b719a1412ff", "scanner": "scanner-primary", "fingerprint": "b3cf655057df6c85", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/update-subsurface-animations.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-e78b490e8453020c", "level": "warning", "message": {"text": "Privileged port 23 in use"}, "properties": {"repobilityId": "a1230e3dfc4becfa", "scanner": "scanner-primary", "fingerprint": "e78b490e8453020c", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/update-subsurface-animations.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-9991e157c71747a3", "level": "warning", "message": {"text": "Privileged port 43 in use"}, "properties": {"repobilityId": "af1bc8881542418e", "scanner": "scanner-primary", "fingerprint": "9991e157c71747a3", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/update-subsurface-animations.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-6ceb182ec3a69e6c", "level": "warning", "message": {"text": "Privileged port 15 in use"}, "properties": {"repobilityId": "3340f9a170f285cd", "scanner": "scanner-primary", "fingerprint": "6ceb182ec3a69e6c", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/update-subsurface-animations.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-514af19fddd5a810", "level": "warning", "message": {"text": "Privileged port 3 in use"}, "properties": {"repobilityId": "261b7b1c6a18d412", "scanner": "scanner-primary", "fingerprint": "514af19fddd5a810", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/update-subsurface-animations.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-9710c8d059e53154", "level": "none", "message": {"text": "No frontend routes/components detected"}, "properties": {"repobilityId": "44ca61485762e494", "scanner": "scanner-primary", "fingerprint": "9710c8d059e53154", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["coverage"]}}, {"ruleId": "scanner-8ec48beb9e1f662d", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in season_animation.js:248"}, "properties": {"repobilityId": "5042041d30d1c658", "scanner": "scanner-primary", "fingerprint": "8ec48beb9e1f662d", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "season_animation.js"}, "region": {"startLine": 248}}}]}, {"ruleId": "scanner-ab228cd1ccc9e256", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in active-banner.js:147"}, "properties": {"repobilityId": "53014c26b1ac6ca5", "scanner": "scanner-primary", "fingerprint": "ab228cd1ccc9e256", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "active-banner.js"}, "region": {"startLine": 147}}}]}, {"ruleId": "scanner-ee08de0005411009", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in index.html:693"}, "properties": {"repobilityId": "f91708437a3a5445", "scanner": "scanner-primary", "fingerprint": "ee08de0005411009", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "index.html"}, "region": {"startLine": 693}}}]}, {"ruleId": "scanner-7877eceb4f12ecc7", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in ep_ace.html:779"}, "properties": {"repobilityId": "1548ae7c769ca2da", "scanner": "scanner-primary", "fingerprint": "7877eceb4f12ecc7", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ep_ace.html"}, "region": {"startLine": 779}}}]}, {"ruleId": "scanner-2cf1bc9e23ec4cc5", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in global_tracks.html:646"}, "properties": {"repobilityId": "2b8120b58ca601ec", "scanner": "scanner-primary", "fingerprint": "2cf1bc9e23ec4cc5", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "global_tracks.html"}, "region": {"startLine": 646}}}]}, {"ruleId": "scanner-cf0a229fbc2aeb4c", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in wp_ace.html:779"}, "properties": {"repobilityId": "da951d9644615488", "scanner": "scanner-primary", "fingerprint": "cf0a229fbc2aeb4c", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "wp_ace.html"}, "region": {"startLine": 779}}}]}, {"ruleId": "scanner-a6b00e4163122391", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in product_animator.js:104"}, "properties": {"repobilityId": "3012ba045c7a809a", "scanner": "scanner-primary", "fingerprint": "a6b00e4163122391", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "product_animator.js"}, "region": {"startLine": 104}}}]}, {"ruleId": "scanner-f0a77b88d24aa7d0", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in al_ace.html:779"}, "properties": {"repobilityId": "729d5bec10790239", "scanner": "scanner-primary", "fingerprint": "f0a77b88d24aa7d0", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "al_ace.html"}, "region": {"startLine": 779}}}]}, {"ruleId": "scanner-90b6c242bce6ca54", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in sst/static_widget.js:42"}, "properties": {"repobilityId": "8f3996a6c5c719b1", "scanner": "scanner-primary", "fingerprint": "90b6c242bce6ca54", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "sst/static_widget.js"}, "region": {"startLine": 42}}}]}, {"ruleId": "scanner-689d157c710c0471", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in sst/climatology_widget.js:34"}, "properties": {"repobilityId": "47bee03dbf0404c9", "scanner": "scanner-primary", "fingerprint": "689d157c710c0471", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "sst/climatology_widget.js"}, "region": {"startLine": 34}}}]}, {"ruleId": "scanner-75390b9f2fe8fd0b", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in models/enscenters.js:410"}, "properties": {"repobilityId": "2267bb7135e9ec15", "scanner": "scanner-primary", "fingerprint": "75390b9f2fe8fd0b", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "models/enscenters.js"}, "region": {"startLine": 410}}}]}, {"ruleId": "scanner-7271a992dbec7ac2", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in models/regions.js:366"}, "properties": {"repobilityId": "421774e6a16586c0", "scanner": "scanner-primary", "fingerprint": "7271a992dbec7ac2", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "models/regions.js"}, "region": {"startLine": 366}}}]}, {"ruleId": "scanner-f96d99bf06aaf234", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in models/hafs.js:371"}, "properties": {"repobilityId": "202a096f9a7ed4d5", "scanner": "scanner-primary", "fingerprint": "f96d99bf06aaf234", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "models/hafs.js"}, "region": {"startLine": 371}}}]}, {"ruleId": "scanner-f303a9e65515ae4b", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in satellite/index.html:1082"}, "properties": {"repobilityId": "3124fa9a07ab762d", "scanner": "scanner-primary", "fingerprint": "f303a9e65515ae4b", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "satellite/index.html"}, "region": {"startLine": 1082}}}]}, {"ruleId": "scanner-6372cebde0220094", "level": "warning", "message": {"text": "No auth library detected"}, "properties": {"repobilityId": "a5b6035a5bbf8054", "scanner": "scanner-primary", "fingerprint": "6372cebde0220094", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["coverage", "auth"]}}, {"ruleId": "scanner-6a21c4eb469352d6", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "c944d25c8cd14960", "scanner": "scanner-primary", "fingerprint": "6a21c4eb469352d6", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/update-subsurface-animations.yml"}, "region": {"startLine": 40}}}]}, {"ruleId": "scanner-6a21c4eb469352d6", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "0144ad720a1bc113", "scanner": "scanner-primary", "fingerprint": "6a21c4eb469352d6", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/update-subsurface-animations.yml"}, "region": {"startLine": 43}}}]}, {"ruleId": "scanner-6a21c4eb469352d6", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "9d5bd83b2a84086c", "scanner": "scanner-primary", "fingerprint": "6a21c4eb469352d6", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/update-subsurface-animations.yml"}, "region": {"startLine": 89}}}]}, {"ruleId": "scanner-6a21c4eb469352d6", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "5a002d462eafc26a", "scanner": "scanner-primary", "fingerprint": "6a21c4eb469352d6", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/update-subsurface-animations.yml"}, "region": {"startLine": 138}}}]}, {"ruleId": "scanner-4da118b7afa23dfc", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "3be2f7200e009cc8", "scanner": "scanner-primary", "fingerprint": "4da118b7afa23dfc", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/update-subsurface-animations.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-6c236ff4ee787c7f", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "f337694cd5d90af5", "scanner": "scanner-primary", "fingerprint": "6c236ff4ee787c7f", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/r2-backfill.yml"}, "region": {"startLine": 41}}}]}, {"ruleId": "scanner-3c4eba0e1685c2aa", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "17094cf10bf101f2", "scanner": "scanner-primary", "fingerprint": "3c4eba0e1685c2aa", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/make-global-crw-anom-gif.yml"}, "region": {"startLine": 52}}}]}, {"ruleId": "scanner-3c4eba0e1685c2aa", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "80a728fdf43d7ac4", "scanner": "scanner-primary", "fingerprint": "3c4eba0e1685c2aa", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/make-global-crw-anom-gif.yml"}, "region": {"startLine": 55}}}]}, {"ruleId": "scanner-3c4eba0e1685c2aa", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "4fc5813292295b4e", "scanner": "scanner-primary", "fingerprint": "3c4eba0e1685c2aa", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/make-global-crw-anom-gif.yml"}, "region": {"startLine": 127}}}]}, {"ruleId": "scanner-1a73898bb2eda59e", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "8c5ee987cf4203fe", "scanner": "scanner-primary", "fingerprint": "1a73898bb2eda59e", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/update-gefs.yml"}, "region": {"startLine": 64}}}]}, {"ruleId": "scanner-d7c16ab8efde51f4", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "ee1d5f7af8bf3361", "scanner": "scanner-primary", "fingerprint": "d7c16ab8efde51f4", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/update-aifs-ens.yml"}, "region": {"startLine": 55}}}]}, {"ruleId": "scanner-c918282b182d8886", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "fe88a7cb45ca2700", "scanner": "scanner-primary", "fingerprint": "c918282b182d8886", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/update-fnv3.yml"}, "region": {"startLine": 53}}}]}, {"ruleId": "scanner-56271b259b732f02", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "370a8297f5a6141d", "scanner": "scanner-primary", "fingerprint": "56271b259b732f02", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/update-sst.yml"}, "region": {"startLine": 51}}}]}, {"ruleId": "scanner-56271b259b732f02", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "c4ee5d081446a4b4", "scanner": "scanner-primary", "fingerprint": "56271b259b732f02", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/update-sst.yml"}, "region": {"startLine": 54}}}]}, {"ruleId": "scanner-56271b259b732f02", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "370a8297f5a6141d", "scanner": "scanner-primary", "fingerprint": "56271b259b732f02", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/update-sst.yml"}, "region": {"startLine": 323}}}]}, {"ruleId": "scanner-56271b259b732f02", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "c4ee5d081446a4b4", "scanner": "scanner-primary", "fingerprint": "56271b259b732f02", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/update-sst.yml"}, "region": {"startLine": 326}}}]}, {"ruleId": "scanner-d19e072eb7e32eab", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "defe6ad1dc346594", "scanner": "scanner-primary", "fingerprint": "d19e072eb7e32eab", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/update-sst.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-56e6d38ae18307e1", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "5615f430c7436343", "scanner": "scanner-primary", "fingerprint": "56e6d38ae18307e1", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/update-hafs.yml"}, "region": {"startLine": 44}}}]}, {"ruleId": "scanner-56e6d38ae18307e1", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "3b3c09ecd506eaff", "scanner": "scanner-primary", "fingerprint": "56e6d38ae18307e1", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/update-hafs.yml"}, "region": {"startLine": 47}}}]}, {"ruleId": "scanner-66f21bfb64261545", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "ad837ae8168e90f7", "scanner": "scanner-primary", "fingerprint": "66f21bfb64261545", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/build-armor3d-climatology.yml"}, "region": {"startLine": 55}}}]}, {"ruleId": "scanner-66f21bfb64261545", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "6a08a8560ed59ebf", "scanner": "scanner-primary", "fingerprint": "66f21bfb64261545", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/build-armor3d-climatology.yml"}, "region": {"startLine": 58}}}]}, {"ruleId": "scanner-66f21bfb64261545", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "513746c7e6faa627", "scanner": "scanner-primary", "fingerprint": "66f21bfb64261545", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/build-armor3d-climatology.yml"}, "region": {"startLine": 72}}}]}, {"ruleId": "scanner-66f21bfb64261545", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "d791d5b0338bfd15", "scanner": "scanner-primary", "fingerprint": "66f21bfb64261545", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/build-armor3d-climatology.yml"}, "region": {"startLine": 116}}}]}, {"ruleId": "scanner-3a370629fa95a4a2", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "a0dfa46269d06f1c", "scanner": "scanner-primary", "fingerprint": "3a370629fa95a4a2", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/build-armor3d-climatology.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3039738a76f14589", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "bf01533af630837b", "scanner": "scanner-primary", "fingerprint": "3039738a76f14589", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/update-season-gifs.yml"}, "region": {"startLine": 32}}}]}, {"ruleId": "scanner-3039738a76f14589", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "924e830b925f083f", "scanner": "scanner-primary", "fingerprint": "3039738a76f14589", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/update-season-gifs.yml"}, "region": {"startLine": 35}}}]}, {"ruleId": "scanner-3039738a76f14589", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "16d9eafad1691560", "scanner": "scanner-primary", "fingerprint": "3039738a76f14589", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/update-season-gifs.yml"}, "region": {"startLine": 40}}}]}, {"ruleId": "scanner-0ae1e02c292a8fb3", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "5067598e0f219d93", "scanner": "scanner-primary", "fingerprint": "0ae1e02c292a8fb3", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/update-season-gifs.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-e0ec3993a07e489d", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "31cd8ed960ff6824", "scanner": "scanner-primary", "fingerprint": "e0ec3993a07e489d", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/update-armor3d.yml"}, "region": {"startLine": 36}}}]}, {"ruleId": "scanner-e0ec3993a07e489d", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "c7034b8eeeced182", "scanner": "scanner-primary", "fingerprint": "e0ec3993a07e489d", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/update-armor3d.yml"}, "region": {"startLine": 41}}}]}, {"ruleId": "scanner-b95169d365a978af", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "db9396bc45ef009e", "scanner": "scanner-primary", "fingerprint": "b95169d365a978af", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/update-armor3d.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-ea7bcf362c2ac7e7", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "1281dbbe5e763f59", "scanner": "scanner-primary", "fingerprint": "ea7bcf362c2ac7e7", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/update-enscenters.yml"}, "region": {"startLine": 62}}}]}, {"ruleId": "scanner-9285ac820ad54bc2", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "608a09bb6cba3731", "scanner": "scanner-primary", "fingerprint": "9285ac820ad54bc2", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/build-sst-climatology.yml"}, "region": {"startLine": 63}}}]}, {"ruleId": "scanner-9285ac820ad54bc2", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "47932d1a915ea82b", "scanner": "scanner-primary", "fingerprint": "9285ac820ad54bc2", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/build-sst-climatology.yml"}, "region": {"startLine": 66}}}]}, {"ruleId": "scanner-9285ac820ad54bc2", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "4b7acb91ec75a548", "scanner": "scanner-primary", "fingerprint": "9285ac820ad54bc2", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/build-sst-climatology.yml"}, "region": {"startLine": 80}}}]}, {"ruleId": "scanner-9285ac820ad54bc2", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "971e51aae0f74a6d", "scanner": "scanner-primary", "fingerprint": "9285ac820ad54bc2", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/build-sst-climatology.yml"}, "region": {"startLine": 133}}}]}, {"ruleId": "scanner-87a7f7ccc3144779", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "d37a4d63cd4193ae", "scanner": "scanner-primary", "fingerprint": "87a7f7ccc3144779", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/update-subsurface.yml"}, "region": {"startLine": 28}}}]}, {"ruleId": "scanner-87a7f7ccc3144779", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "aa8da6d879084797", "scanner": "scanner-primary", "fingerprint": "87a7f7ccc3144779", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/update-subsurface.yml"}, "region": {"startLine": 31}}}]}, {"ruleId": "scanner-3e2f0e94ee9355dd", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "74a79f3a7a3d393f", "scanner": "scanner-primary", "fingerprint": "3e2f0e94ee9355dd", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/update-subsurface.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-a2527ee4aef9ee5d", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "15f5b44fdb9be8bc", "scanner": "scanner-primary", "fingerprint": "a2527ee4aef9ee5d", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/make-pacific-tchp-gif.yml"}, "region": {"startLine": 49}}}]}, {"ruleId": "scanner-a2527ee4aef9ee5d", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "957fcc5b689df459", "scanner": "scanner-primary", "fingerprint": "a2527ee4aef9ee5d", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/make-pacific-tchp-gif.yml"}, "region": {"startLine": 52}}}]}, {"ruleId": "scanner-a2527ee4aef9ee5d", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "ac02fd7c7121e083", "scanner": "scanner-primary", "fingerprint": "a2527ee4aef9ee5d", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/make-pacific-tchp-gif.yml"}, "region": {"startLine": 95}}}]}, {"ruleId": "scanner-006c1ee98e3dff8f", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "61ab615a1b4c8c4d", "scanner": "scanner-primary", "fingerprint": "006c1ee98e3dff8f", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/build-crw-doy-climatology.yml"}, "region": {"startLine": 63}}}]}, {"ruleId": "scanner-006c1ee98e3dff8f", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "e4672cea71c9233c", "scanner": "scanner-primary", "fingerprint": "006c1ee98e3dff8f", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/build-crw-doy-climatology.yml"}, "region": {"startLine": 66}}}]}, {"ruleId": "scanner-50fff0584a53a3a2", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "b438417fa0624cb3", "scanner": "scanner-primary", "fingerprint": "50fff0584a53a3a2", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/update-genc.yml"}, "region": {"startLine": 53}}}]}, {"ruleId": "scanner-101462e6454b61a4", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "cdcd0683261d9312", "scanner": "scanner-primary", "fingerprint": "101462e6454b61a4", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/update-ace.yml"}, "region": {"startLine": 36}}}]}, {"ruleId": "scanner-101462e6454b61a4", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "8b01290899bc6621", "scanner": "scanner-primary", "fingerprint": "101462e6454b61a4", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/update-ace.yml"}, "region": {"startLine": 39}}}]}, {"ruleId": "scanner-89d008431302d0e7", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "e0972decb421267a", "scanner": "scanner-primary", "fingerprint": "89d008431302d0e7", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/update-ace.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-6a0328eb67c9db66", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "0d4c10577890cf69", "scanner": "scanner-primary", "fingerprint": "6a0328eb67c9db66", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/update-gibs.yml"}, "region": {"startLine": 34}}}]}, {"ruleId": "scanner-6a0328eb67c9db66", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "d2ebc9dc47a7ddf0", "scanner": "scanner-primary", "fingerprint": "6a0328eb67c9db66", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/update-gibs.yml"}, "region": {"startLine": 37}}}]}, {"ruleId": "scanner-2b99cfefa3d041a9", "level": "note", "message": {"text": "Very large file: generate_sst_animations.py (1256 lines)"}, "properties": {"repobilityId": "65f09d1e9910789e", "scanner": "scanner-primary", "fingerprint": "2b99cfefa3d041a9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-1e4cdd6171d4a6d9", "level": "note", "message": {"text": "Very large file: generate_subsurface_animations.py (1441 lines)"}, "properties": {"repobilityId": "be8e75d9a11fed97", "scanner": "scanner-primary", "fingerprint": "1e4cdd6171d4a6d9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-f1e9c543277e0888", "level": "note", "message": {"text": "Very large file: generate_armor3d_plots.py (1422 lines)"}, "properties": {"repobilityId": "e1420a07b99be976", "scanner": "scanner-primary", "fingerprint": "f1e9c543277e0888", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-30d9fc9ed75858c2", "level": "note", "message": {"text": "Very large file: generate_tracks_plot.py (3776 lines)"}, "properties": {"repobilityId": "be20c06ff36b5924", "scanner": "scanner-primary", "fingerprint": "30d9fc9ed75858c2", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-a790dfc211ff4f6c", "level": "note", "message": {"text": "Very large file: generate_sst_plots.py (1993 lines)"}, "properties": {"repobilityId": "5ff4e267ca5cea9d", "scanner": "scanner-primary", "fingerprint": "a790dfc211ff4f6c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-ab31f9d84dbbde82", "level": "note", "message": {"text": "Very large file: models/enscenters.js (1961 lines)"}, "properties": {"repobilityId": "a3baed6a941c1c9a", "scanner": "scanner-primary", "fingerprint": "ab31f9d84dbbde82", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-a36efa5d5b971f59", "level": "note", "message": {"text": "Very large file: hafs_render/hafs_render/hafs_plot.py (1746 lines)"}, "properties": {"repobilityId": "adaf6cf1b6f51776", "scanner": "scanner-primary", "fingerprint": "a36efa5d5b971f59", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-32909644a1c525dc", "level": "note", "message": {"text": "Very large file: ace_core/ace_core/__init__.py (1407 lines)"}, "properties": {"repobilityId": "101206cb61eecf3d", "scanner": "scanner-primary", "fingerprint": "32909644a1c525dc", "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": "145ea0eaa9cb471c", "scanner": "scanner-primary", "fingerprint": "3ab5d313dda8e5f9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["debug", "cleanup", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-2d0c7b7ab8f8aacf", "level": "warning", "message": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "properties": {"repobilityId": "ed4befba58cf199f", "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": "6fe62d273b108a19", "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": "800b1ba0e2afc49f", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-4d39bd268a109256", "level": "none", "message": {"text": "Commented-code block (6 lines) in generate_sst_animations.py:93"}, "properties": {"repobilityId": "9c8a41fa4c8c61c1", "scanner": "scanner-primary", "fingerprint": "4d39bd268a109256", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-dccfb63f75bff5a4", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 generate_sst_animations.py:711"}, "properties": {"repobilityId": "1a066b4a1116759a", "scanner": "scanner-primary", "fingerprint": "dccfb63f75bff5a4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d5da919c4d175c0e", "level": "note", "message": {"text": "Legacy-named symbol `anomaly_v2` in generate_subsurface_animations.py:231"}, "properties": {"repobilityId": "e42e6d795e10d6f9", "scanner": "scanner-primary", "fingerprint": "d5da919c4d175c0e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-69ce7b1e8741cf50", "level": "none", "message": {"text": "Commented-code block (11 lines) in generate_subsurface_animations.py:63"}, "properties": {"repobilityId": "41f3ef67d24d48a9", "scanner": "scanner-primary", "fingerprint": "69ce7b1e8741cf50", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9120969864636933", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 generate_subsurface_animations.py:812"}, "properties": {"repobilityId": "97c60c308227f4d0", "scanner": "scanner-primary", "fingerprint": "9120969864636933", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-1dbc0ab57a999170", "level": "none", "message": {"text": "Commented-code block (7 lines) in season_animation.js:27"}, "properties": {"repobilityId": "11dae40a78830cc1", "scanner": "scanner-primary", "fingerprint": "1dbc0ab57a999170", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c602bf46c71e7773", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 season_animation.js:184"}, "properties": {"repobilityId": "483c011100a0e3f4", "scanner": "scanner-primary", "fingerprint": "c602bf46c71e7773", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b0fe555af719b815", "level": "none", "message": {"text": "Commented-code block (6 lines) in active-banner.js:6"}, "properties": {"repobilityId": "01e8d1385649196e", "scanner": "scanner-primary", "fingerprint": "b0fe555af719b815", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-39210933d6ae4c9f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 active-banner.js:141"}, "properties": {"repobilityId": "9f3da8d4b6638bc7", "scanner": "scanner-primary", "fingerprint": "39210933d6ae4c9f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-77b26cc73eb9a6db", "level": "none", "message": {"text": "Commented-code block (7 lines) in generate_global_crw_anom_gif.py:161"}, "properties": {"repobilityId": "84e9d25aaeabdae9", "scanner": "scanner-primary", "fingerprint": "77b26cc73eb9a6db", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-96bd6e2dc864a24b", "level": "none", "message": {"text": "Commented-code block (5 lines) in generate_armor3d_plots.py:197"}, "properties": {"repobilityId": "59e5fe9967e7de25", "scanner": "scanner-primary", "fingerprint": "96bd6e2dc864a24b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-de7cae5df0c57321", "level": "none", "message": {"text": "Commented-code block (7 lines) in bake_armor3d_tchp_records.py:90"}, "properties": {"repobilityId": "3f6f4191be266448", "scanner": "scanner-primary", "fingerprint": "de7cae5df0c57321", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8d20fae03dacde8d", "level": "none", "message": {"text": "Commented-code block (5 lines) in generate_ace_plot.py:199"}, "properties": {"repobilityId": "6a6d67a51b44b909", "scanner": "scanner-primary", "fingerprint": "8d20fae03dacde8d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c5ce9300599ded5f", "level": "none", "message": {"text": "Commented-code block (6 lines) in generate_tracks_plot.py:47"}, "properties": {"repobilityId": "d2f4ae4c7f82c639", "scanner": "scanner-primary", "fingerprint": "c5ce9300599ded5f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d935ad39bc6a5294", "level": "none", "message": {"text": "Commented-code block (5 lines) in generate_sst_plots.py:93"}, "properties": {"repobilityId": "4604406021da79f3", "scanner": "scanner-primary", "fingerprint": "d935ad39bc6a5294", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bd806a12a956021a", "level": "none", "message": {"text": "Commented-code block (5 lines) in generate_wp_ace_plot.py:136"}, "properties": {"repobilityId": "b85a7278415c5575", "scanner": "scanner-primary", "fingerprint": "bd806a12a956021a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d8b64fccc5f21ab5", "level": "none", "message": {"text": "Commented-code block (5 lines) in generate_gibs_truecolor.py:69"}, "properties": {"repobilityId": "fc5c7a4bef81a47a", "scanner": "scanner-primary", "fingerprint": "d8b64fccc5f21ab5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-741ef5574c291748", "level": "none", "message": {"text": "Commented-code block (5 lines) in generate_subsurface_plots.py:344"}, "properties": {"repobilityId": "6b2b074c16ab3d82", "scanner": "scanner-primary", "fingerprint": "741ef5574c291748", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e25cf6426f877ba7", "level": "none", "message": {"text": "Commented-code block (10 lines) in build_crw_doy_climatology.py:117"}, "properties": {"repobilityId": "0635b27f9eb1105b", "scanner": "scanner-primary", "fingerprint": "e25cf6426f877ba7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fe32687659e23101", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 build_crw_doy_climatology.py:418"}, "properties": {"repobilityId": "73bb08239780d09c", "scanner": "scanner-primary", "fingerprint": "fe32687659e23101", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-7d99ee53291c2aa7", "level": "none", "message": {"text": "Commented-code block (8 lines) in build_armor3d_climatology.py:100"}, "properties": {"repobilityId": "e19c3190533ea391", "scanner": "scanner-primary", "fingerprint": "7d99ee53291c2aa7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-999a933f2db44b17", "level": "none", "message": {"text": "Commented-code block (5 lines) in product_animator.js:220"}, "properties": {"repobilityId": "ba8fd23a31359e82", "scanner": "scanner-primary", "fingerprint": "999a933f2db44b17", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-355f2e3e7ca90c6a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 product_animator.js:356"}, "properties": {"repobilityId": "fb42da102f10a9fc", "scanner": "scanner-primary", "fingerprint": "355f2e3e7ca90c6a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a51e04ff10cd99c5", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 sst/static_widget.js:275"}, "properties": {"repobilityId": "2d9ae666633b4a33", "scanner": "scanner-primary", "fingerprint": "a51e04ff10cd99c5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ab68b702bca7c4cb", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 sst/climatology_widget.js:100"}, "properties": {"repobilityId": "35ad47e589f73059", "scanner": "scanner-primary", "fingerprint": "ab68b702bca7c4cb", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a581bccd8776f8b3", "level": "none", "message": {"text": "Commented-code block (8 lines) in models/enscenters.js:48"}, "properties": {"repobilityId": "d6381a8c858a0984", "scanner": "scanner-primary", "fingerprint": "a581bccd8776f8b3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e9448035a17a0342", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 models/enscenters.js:358"}, "properties": {"repobilityId": "010e110138fa7590", "scanner": "scanner-primary", "fingerprint": "e9448035a17a0342", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-40c37bdd608c1104", "level": "none", "message": {"text": "Commented-code block (12 lines) in models/regions.js:122"}, "properties": {"repobilityId": "9708cc6c9174254c", "scanner": "scanner-primary", "fingerprint": "40c37bdd608c1104", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2a7f0f412f91cc75", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 models/regions.js:268"}, "properties": {"repobilityId": "c33cc8fb59c3f6c7", "scanner": "scanner-primary", "fingerprint": "2a7f0f412f91cc75", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-1ea99dae0f453fb5", "level": "none", "message": {"text": "Commented-code block (5 lines) in models/hafs.js:102"}, "properties": {"repobilityId": "c6f506888908ed44", "scanner": "scanner-primary", "fingerprint": "1ea99dae0f453fb5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f030fe192b450125", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 models/hafs.js:190"}, "properties": {"repobilityId": "95be9d357e8d3108", "scanner": "scanner-primary", "fingerprint": "f030fe192b450125", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b318502ad54294d9", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/enscenters_header_smoke.cjs:1"}, "properties": {"repobilityId": "99d2646314523176", "scanner": "scanner-primary", "fingerprint": "b318502ad54294d9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e1cd8378e62a018b", "level": "none", "message": {"text": "Commented-code block (6 lines) in tests/home_status_harness.cjs:1"}, "properties": {"repobilityId": "303ba9c0c3fee5ab", "scanner": "scanner-primary", "fingerprint": "e1cd8378e62a018b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-dbab36e0d3c4cc8e", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/dom_smoke.cjs:9"}, "properties": {"repobilityId": "b329a7a069cd113e", "scanner": "scanner-primary", "fingerprint": "dbab36e0d3c4cc8e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8feee5a42e3493a5", "level": "none", "message": {"text": "Commented-code block (6 lines) in tests/test_bdeck_radii.py:39"}, "properties": {"repobilityId": "207610c8b6b8b518", "scanner": "scanner-primary", "fingerprint": "8feee5a42e3493a5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0253f798b0f23343", "level": "none", "message": {"text": "Commented-code block (6 lines) in tests/global_map_harness.cjs:3"}, "properties": {"repobilityId": "81c4ef086ebc7ac5", "scanner": "scanner-primary", "fingerprint": "0253f798b0f23343", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d8d5b556bc1ff1fe", "level": "none", "message": {"text": "Commented-code block (6 lines) in tests/test_enscenters_viewer.py:149"}, "properties": {"repobilityId": "a65ece2c67c48f6b", "scanner": "scanner-primary", "fingerprint": "d8d5b556bc1ff1fe", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8c1b7c309bb0c398", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/enscenters_trail_smoke.cjs:3"}, "properties": {"repobilityId": "7cfebcfa0d903b74", "scanner": "scanner-primary", "fingerprint": "8c1b7c309bb0c398", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9b88f114910bb187", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/hafs_viewer_harness.cjs:3"}, "properties": {"repobilityId": "8f02f719cf1c9e78", "scanner": "scanner-primary", "fingerprint": "9b88f114910bb187", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-297bf4b270508603", "level": "none", "message": {"text": "Commented-code block (6 lines) in tests/test_hafs_viewer.py:225"}, "properties": {"repobilityId": "1967c22728f04306", "scanner": "scanner-primary", "fingerprint": "297bf4b270508603", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fa0a97b187ec699f", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/enscenters_viewer_smoke.cjs:3"}, "properties": {"repobilityId": "987fc77a5446e465", "scanner": "scanner-primary", "fingerprint": "fa0a97b187ec699f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b2b189fedd069983", "level": "none", "message": {"text": "Commented-code block (11 lines) in tests/regions_basemap_smoke.cjs:1"}, "properties": {"repobilityId": "e3f2599013baf21f", "scanner": "scanner-primary", "fingerprint": "b2b189fedd069983", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f6f9f4cc985d3d97", "level": "none", "message": {"text": "Commented-code block (6 lines) in tests/enscenters_gifname_smoke.cjs:1"}, "properties": {"repobilityId": "fd9246a9310c454d", "scanner": "scanner-primary", "fingerprint": "f6f9f4cc985d3d97", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-79d4d89a7e53559b", "level": "none", "message": {"text": "Commented-code block (12 lines) in tests/enscenters_gifsize_smoke.cjs:1"}, "properties": {"repobilityId": "10fdfa22ac5f00fc", "scanner": "scanner-primary", "fingerprint": "79d4d89a7e53559b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a8aaa2ff3b88d3b6", "level": "none", "message": {"text": "Commented-code block (8 lines) in scripts/enscenters_manifest_guard.py:162"}, "properties": {"repobilityId": "866d9e3f55aa40a5", "scanner": "scanner-primary", "fingerprint": "a8aaa2ff3b88d3b6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-be41305aa29a2f31", "level": "none", "message": {"text": "Commented-code block (6 lines) in hafs_render/hafs_render/hafs_cache.py:56"}, "properties": {"repobilityId": "a85ee52825b8bd3a", "scanner": "scanner-primary", "fingerprint": "be41305aa29a2f31", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6c2bbe31f977e518", "level": "none", "message": {"text": "Commented-code block (12 lines) in hafs_render/hafs_render/generate_hafs_plots.py:122"}, "properties": {"repobilityId": "35ce2bb0b14a0b03", "scanner": "scanner-primary", "fingerprint": "6c2bbe31f977e518", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ddc185b269a5da18", "level": "none", "message": {"text": "Commented-code block (6 lines) in hafs_render/hafs_render/hafs_plot.py:65"}, "properties": {"repobilityId": "3a30150ec75d9a0e", "scanner": "scanner-primary", "fingerprint": "ddc185b269a5da18", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d04c348521bc795e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 workers/cyclolab-router.js:49"}, "properties": {"repobilityId": "173cc016d21214fa", "scanner": "scanner-primary", "fingerprint": "d04c348521bc795e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-61645cf43cdc7df4", "level": "none", "message": {"text": "Commented-code block (5 lines) in enscenters/registry.py:35"}, "properties": {"repobilityId": "74e0674abd74bd16", "scanner": "scanner-primary", "fingerprint": "61645cf43cdc7df4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9cc2f45b7f58fdf2", "level": "none", "message": {"text": "Commented-code block (6 lines) in enscenters/currency.py:144"}, "properties": {"repobilityId": "6f943b902682193c", "scanner": "scanner-primary", "fingerprint": "9cc2f45b7f58fdf2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e7af0d9e0213dae7", "level": "none", "message": {"text": "Commented-code block (5 lines) in enscenters/cli.py:222"}, "properties": {"repobilityId": "dccb30e6dc42860b", "scanner": "scanner-primary", "fingerprint": "e7af0d9e0213dae7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-63dc4dcda5ddf7a3", "level": "none", "message": {"text": "Commented-code block (7 lines) in enscenters/ecmwf_byterange_ingest.py:88"}, "properties": {"repobilityId": "bee6f295989172d0", "scanner": "scanner-primary", "fingerprint": "63dc4dcda5ddf7a3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bf8198c17d43dbe9", "level": "none", "message": {"text": "Commented-code block (8 lines) in enscenters/detect.py:143"}, "properties": {"repobilityId": "ff1eed658fe95907", "scanner": "scanner-primary", "fingerprint": "bf8198c17d43dbe9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6450b87c25d9bb88", "level": "none", "message": {"text": "Commented-code block (9 lines) in enscenters/pipeline.py:43"}, "properties": {"repobilityId": "27a71fb2e802d93c", "scanner": "scanner-primary", "fingerprint": "6450b87c25d9bb88", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1109c30014699b61", "level": "none", "message": {"text": "Commented-code block (9 lines) in enscenters/tracks.py:55"}, "properties": {"repobilityId": "cfb3e0f18cf784ec", "scanner": "scanner-primary", "fingerprint": "1109c30014699b61", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0e4776438571d93f", "level": "none", "message": {"text": "Commented-code block (6 lines) in enscenters/tracking.py:62"}, "properties": {"repobilityId": "91de13a3fe5156b0", "scanner": "scanner-primary", "fingerprint": "0e4776438571d93f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5d98888c46749851", "level": "none", "message": {"text": "Commented-code block (7 lines) in ace_core/ace_core/__init__.py:544"}, "properties": {"repobilityId": "931dc27e2cf51756", "scanner": "scanner-primary", "fingerprint": "5d98888c46749851", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "0fe9c6b8bd5ba0e2", "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": "527129fd867575ba", "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": "76326a08f7ccdf63", "scanner": "scanner-primary", "fingerprint": "49c98f7cedd9c977", "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": "5ee3220fd157c83e", "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": "66c2e213d74ed8a0", "scanner": "scanner-primary", "fingerprint": "02525d39071dd2c7", "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": "5a4d34e1835b5fca", "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": "a010b51632ba20a3", "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": "3eac9c1e6498c02b", "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": "8f9949f65f9bdb78", "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": "461cecd8a76d5d6f", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}]}]}