{"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-7aecde7a5a56c4f9", "name": "Possibly dead Python function: job_daily_pipeline", "shortDescription": {"text": "Possibly dead Python function: job_daily_pipeline"}, "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-e5af8ca2316ed90f", "name": "Possibly dead Python function: job_weekly_model_training", "shortDescription": {"text": "Possibly dead Python function: job_weekly_model_training"}, "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-57309d26c2b1a017", "name": "Possibly dead Python function: job_weekly_report", "shortDescription": {"text": "Possibly dead Python function: job_weekly_report"}, "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-7397768664c09bae", "name": "Possibly dead Python function: job_daily_auto_order", "shortDescription": {"text": "Possibly dead Python function: job_daily_auto_order"}, "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-6fb3106b97b520f1", "name": "Possibly dead Python function: job_daily_settle_orders", "shortDescription": {"text": "Possibly dead Python function: job_daily_settle_orders"}, "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-84169bebdfabbe8d", "name": "Possibly dead Python function: job_daily_paper_trade_report", "shortDescription": {"text": "Possibly dead Python function: job_daily_paper_trade_report"}, "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-a114999b31aaf70f", "name": "Possibly dead Python function: job_weekly_optimization", "shortDescription": {"text": "Possibly dead Python function: job_weekly_optimization"}, "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-636a0872faf19935", "name": "Possibly dead Python function: job_weekly_walk_forward_report", "shortDescription": {"text": "Possibly dead Python function: job_weekly_walk_forward_report"}, "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-9a18f5a3930b4ce4", "name": "Possibly dead Python function: job_daily_drift_check", "shortDescription": {"text": "Possibly dead Python function: job_daily_drift_check"}, "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-a030ddd08f27be1a", "name": "Possibly dead Python function: job_weekly_db_maintenance", "shortDescription": {"text": "Possibly dead Python function: job_weekly_db_maintenance"}, "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-55ee5fc46ac58cbd", "name": "Possibly dead Python function: job_weekly_rule_evaluation", "shortDescription": {"text": "Possibly dead Python function: job_weekly_rule_evaluation"}, "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-a42648c321f2248f", "name": "Possibly dead Python function: job_daily_rule_signals", "shortDescription": {"text": "Possibly dead Python function: job_daily_rule_signals"}, "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-e8045641d142c406", "name": "Possibly dead Python function: job_pre_close_alert", "shortDescription": {"text": "Possibly dead Python function: job_pre_close_alert"}, "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-afd5e5ac629191f7", "name": "Possibly dead Python function: job_daily_backup", "shortDescription": {"text": "Possibly dead Python function: job_daily_backup"}, "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-aa35e7dd586415b0", "name": "Possibly dead Python function: job_monthly_report", "shortDescription": {"text": "Possibly dead Python function: job_monthly_report"}, "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-7c7894d1d86423d7", "name": "Possibly dead Python function: job_monthly_multibagger", "shortDescription": {"text": "Possibly dead Python function: job_monthly_multibagger"}, "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-1fa60338100bacbc", "name": "Possibly dead Python function: job_nightly_strategy_factory", "shortDescription": {"text": "Possibly dead Python function: job_nightly_strategy_factory"}, "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-71e78ace82af4b9d", "name": "Possibly dead Python function: format_percent", "shortDescription": {"text": "Possibly dead Python function: format_percent"}, "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-91e28a004836e11e", "name": "Possibly dead Python function: format_interval", "shortDescription": {"text": "Possibly dead Python function: format_interval"}, "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-bbfd8c36035e0fa9", "name": "Possibly dead Python function: send_shap_batch_summary", "shortDescription": {"text": "Possibly dead Python function: send_shap_batch_summary"}, "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-29357a35e2a13814", "name": "Possibly dead Python function: load_rule_signals_by_date", "shortDescription": {"text": "Possibly dead Python function: load_rule_signals_by_date"}, "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-d5b007c28928e6c6", "name": "Possibly dead Python function: init_tables", "shortDescription": {"text": "Possibly dead Python function: init_tables"}, "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-c2c5118ae58b3d21", "name": "Possibly dead Python function: predict_wrapper", "shortDescription": {"text": "Possibly dead Python function: predict_wrapper"}, "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-d825a6cb3439fe9b", "name": "Possibly dead Python function: wrapper", "shortDescription": {"text": "Possibly dead Python function: wrapper"}, "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-fa38b6939729ade6", "name": "Possibly dead Python function: check_python_version", "shortDescription": {"text": "Possibly dead Python function: check_python_version"}, "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-ad162cca91195c9a", "name": "Possibly dead Python function: check_pip", "shortDescription": {"text": "Possibly dead Python function: check_pip"}, "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-025467c8f0b35dcd", "name": "Possibly dead Python function: install_dependencies", "shortDescription": {"text": "Possibly dead Python function: install_dependencies"}, "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-be7a129b7b755b56", "name": "Possibly dead Python function: setup_git_hooks", "shortDescription": {"text": "Possibly dead Python function: setup_git_hooks"}, "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-d062af3b08128a1a", "name": "Possibly dead Python function: verify_setup", "shortDescription": {"text": "Possibly dead Python function: verify_setup"}, "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-ce6d4b79ab249354", "name": "Dockerfile runs as root: python/Dockerfile", "shortDescription": {"text": "Dockerfile runs as root: python/Dockerfile"}, "fullDescription": {"text": "No non-root USER set. Containers running as root expand the blast radius of any vulnerability inside the image."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-659838469f1bd215", "name": "Docker base image is tag-pinned but not digest-pinned: python:3.12-slim", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: python:3.12-slim"}, "fullDescription": {"text": "Container tags can be retagged upstream. Pin production base images to a reviewed digest (`image@sha256:...`) when reproducibility and supply-chain integrity matter."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-aa5acaa49eb8315b", "name": "Containers defined but no K8s/orchestration manifest found", "shortDescription": {"text": "Containers defined but no K8s/orchestration manifest found"}, "fullDescription": {"text": "Repo has Dockerfiles/compose but no Kubernetes/Nomad manifests. If the target deployment is K8s, the manifests may live in a separate ops repo."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9710c8d059e53154", "name": "No frontend routes/components detected", "shortDescription": {"text": "No frontend routes/components detected"}, "fullDescription": {"text": "No React/Vue/Next routes were found. This is fine for backend-only repos."}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-851a02187b82d7d4", "name": "Insecure pattern 'subprocess_shell_true' in .claude/skills/troubleshooting/SKILL.md:103", "shortDescription": {"text": "Insecure pattern 'subprocess_shell_true' in .claude/skills/troubleshooting/SKILL.md:103"}, "fullDescription": {"text": "Found a known-risky pattern (subprocess_shell_true). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-71a759f5056eb105", "name": "Insecure pattern 'subprocess_shell_true' in .github/hooks/setup_precommit.py:13", "shortDescription": {"text": "Insecure pattern 'subprocess_shell_true' in .github/hooks/setup_precommit.py:13"}, "fullDescription": {"text": "Found a known-risky pattern (subprocess_shell_true). 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-a216830d174aa053", "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-6019b9b67ba2a387", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/github-script@v9 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-740b88ab8dd23d2f", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "dependabot/fetch-metadata@v3 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-768e8f28c1850d98", "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-5b7e341c084ba8be", "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-3a7f444a5c9aab5d", "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-77767aca2c278185", "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-87110ef1617069e3", "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-c2d472a9a9d37473", "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-83d4e80fce0bac07", "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-ca38d7a4ed16bc09", "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-12522bf27bea173c", "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-21aa0c39a7c1ca23", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@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-47b0515c3860ca68", "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-f431d8e4bc38bdfc", "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-bcbd454159b52039", "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-5bc4cf5aa717df4c", "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-fc1c6dcb00af79ac", "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-96e933c75c4ffbf3", "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-a1b2242ac980bc30", "name": "Very large file: python/run_backtest_ui.py (1359 lines)", "shortDescription": {"text": "Very large file: python/run_backtest_ui.py (1359 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-fb2319deb7489255", "name": "Very large file: python/src/orchestration/scheduler.py (1231 lines)", "shortDescription": {"text": "Very large file: python/src/orchestration/scheduler.py (1231 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-3ee06d18aaf8d98a", "name": "Very large file: python/src/reporting/discord/discord_utils.py (1430 lines)", "shortDescription": {"text": "Very large file: python/src/reporting/discord/discord_utils.py (1430 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-141b30a41e03817b", "name": "No license file detected", "shortDescription": {"text": "No license file detected"}, "fullDescription": {"text": "No LICENSE/COPYING/NOTICE file was found. Generated repositories often omit licensing, which blocks reuse and automated intake."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3ab5d313dda8e5f9", "name": "Debug logging residue appears in source files", "shortDescription": {"text": "Debug logging residue appears in source files"}, "fullDescription": {"text": "Found 403 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-749d4bc1bd66df5f", "name": "Agent instructions exist but release-hardening basics are missing", "shortDescription": {"text": "Agent instructions exist but release-hardening basics are missing"}, "fullDescription": {"text": "AI-coder instruction files were found, but the repo is missing license. Treat this as a contract gap: the agent is guided, but the generated output is not yet guarded by the controls that make it repeatable."}, "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-6eaef0ee7cfd8fd5", "name": "Agent authority lacks a verifier contract: .claude/commands/prediction.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/commands/prediction.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-81f3880562566e32", "name": "Agent authority lacks a verifier contract: .claude/commands/add-symbol.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/commands/add-symbol.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-48e0ae561a12f99c", "name": "Agent authority lacks a verifier contract: .claude/commands/version-mgmt.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/commands/version-mgmt.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-dd8e09297af74679", "name": "Agent authority lacks a verifier contract: .claude/commands/duckdb-ops.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/commands/duckdb-ops.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-1dfe4206397d66f5", "name": "Agent authority lacks a verifier contract: .claude/commands/troubleshooting.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/commands/troubleshooting.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-8dc7957372e33eab", "name": "Agent authority lacks a verifier contract: .claude/commands/model-training.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/commands/model-training.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-5a014732c2d5a177", "name": "Agent authority lacks a verifier contract: .claude/commands/data-pipeline.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/commands/data-pipeline.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d70c476d26c5bd6c", "name": "Agent authority lacks a verifier contract: .claude/commands/backtest.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/commands/backtest.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e5eb33912374c75b", "name": "Agent authority lacks a verifier contract: .claude/agents/plam.agent.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/agents/plam.agent.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b203aeff5b22eb8b", "name": "Agent authority lacks a verifier contract: .claude/agents/issue.agent.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/agents/issue.agent.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-7a9cccd9510b2644", "name": "Agent authority lacks a verifier contract: .claude/agents/review.agent.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/agents/review.agent.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9e4fcce0f29d832c", "name": "Agent authority lacks a verifier contract: .claude/agents/pr.agent.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/agents/pr.agent.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9c3451cd8930502c", "name": "Agent authority lacks a verifier contract: .claude/agents/impl.agent.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/agents/impl.agent.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-34b5de1afe5e2d0f", "name": "Agent authority lacks a verifier contract: .claude/skills/backtest/SKILL.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/skills/backtest/SKILL.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-bb45a80cfb3a6a69", "name": "Agent authority lacks a verifier contract: .claude/skills/data-pipeline/SKILL.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/skills/data-pipeline/SKILL.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-cdee74b9665806e6", "name": "Agent authority lacks a verifier contract: .claude/skills/add-symbol/SKILL.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/skills/add-symbol/SKILL.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-fc57192ce719a8ad", "name": "Agent authority lacks a verifier contract: .claude/skills/model-training/SKILL.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/skills/model-training/SKILL.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b7358ed6c15112ad", "name": "Agent authority lacks a verifier contract: .claude/skills/gh/merge-pull-request/SKILL.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/skills/gh/merge-pull-request/SKILL.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-41ceff17427a0d73", "name": "Agent authority lacks a verifier contract: .claude/skills/gh/create-issue/SKILL.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/skills/gh/create-issue/SKILL.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-fbdcd2040e898110", "name": "Agent authority lacks a verifier contract: .claude/skills/gh/create-pull-request/SKILL.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/skills/gh/create-pull-request/SKILL.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a6d1e18e384bf288", "name": "Agent authority lacks a verifier contract: .claude/skills/prediction/SKILL.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/skills/prediction/SKILL.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e43e1c2bca17a7ad", "name": "Agent authority lacks a verifier contract: .claude/skills/duckdb-ops/SKILL.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/skills/duckdb-ops/SKILL.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-7979711ecd3a3804", "name": "Agent authority lacks a verifier contract: .claude/skills/troubleshooting/SKILL.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/skills/troubleshooting/SKILL.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-7afd79e6f1db738e", "name": "Legacy-named symbol `job_daily_backup` in python/run_scheduler.py:134", "shortDescription": {"text": "Legacy-named symbol `job_daily_backup` in python/run_scheduler.py:134"}, "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-be9461db70941252", "name": "Legacy-named symbol `run_backup` in python/run_backup.py:5", "shortDescription": {"text": "Legacy-named symbol `run_backup` in python/run_backup.py:5"}, "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-4a3fb73d8f6e5c61", "name": "Legacy-named symbol `external_v1` in python/tests/unit/test_external_v1_endpoint.py:1", "shortDescription": {"text": "Legacy-named symbol `external_v1` in python/tests/unit/test_external_v1_endpoint.py:1"}, "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-614b2f1559c3df60", "name": "Legacy-named symbol `prod_v1` in python/tests/unit/test_shadow_mode.py:377", "shortDescription": {"text": "Legacy-named symbol `prod_v1` in python/tests/unit/test_shadow_mode.py:377"}, "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-0950c7fc62735652", "name": "Legacy-named symbol `test_swap_keeps_backup` in python/tests/unit/test_db_compact.py:78", "shortDescription": {"text": "Legacy-named symbol `test_swap_keeps_backup` in python/tests/unit/test_db_compact.py:78"}, "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-6881da3bb986dcd0", "name": "Legacy-named symbol `test_dry_run_logs_but_does_not_copy` in python/tests/unit/test_shadow_evaluation_unit.py:236", "shortDescription": {"text": "Legacy-named symbol `test_dry_run_logs_but_does_not_copy` in python/tests/unit/test_shadow_evaluation_unit.py:236"}, "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-5a4c3dbd0dd02d4b", "name": "Legacy-named symbol `run_db_backup` in python/src/orchestration/backup_pipeline.py:26", "shortDescription": {"text": "Legacy-named symbol `run_db_backup` in python/src/orchestration/backup_pipeline.py:26"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8a47bbe0b78fdbb2", "name": "Legacy-named symbol `run_daily_backup` in python/src/orchestration/scheduler.py:1065", "shortDescription": {"text": "Legacy-named symbol `run_daily_backup` in python/src/orchestration/scheduler.py:1065"}, "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-1b41cad70aeec98d", "name": "Legacy-named symbol `external_v1` in python/src/api/health.py:98", "shortDescription": {"text": "Legacy-named symbol `external_v1` in python/src/api/health.py:98"}, "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-798d1d00c4d67533", "name": "Stub function `train` (body is just `pass`/`return`) \u2014 python/src/utils/ml_base.py:24", "shortDescription": {"text": "Stub function `train` (body is just `pass`/`return`) \u2014 python/src/utils/ml_base.py:24"}, "fullDescription": {"text": "Likely an AI scaffold that was never filled in. Remove or implement."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2e123a61c5a762d4", "name": "Legacy-named symbol `db_data_copy` in python/src/market_data/loader.py:274", "shortDescription": {"text": "Legacy-named symbol `db_data_copy` in python/src/market_data/loader.py:274"}, "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-d96e871dc7bbfded", "name": "Network/subprocess call without timeout or try/except \u2014 .github/hooks/run_import_linter.py:12", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 .github/hooks/run_import_linter.py:12"}, "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-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:\npython/run_rule_evaluate.py:main, python/run_rule_backtest.py:main, python/run_backtest_portfolio.py:main, python/run_backtest_optimize_batch.py:main\n\nThis is *the* AI-coder failure mode (4\u00d7 more duplication in vibe-coded repos \u2014 see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-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:\npython/src/backtest/optimizer.py:run_optimization, python/src/backtest/optimizer.py:run_optuna_optimization\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:\npython/src/backtest/rules/composite.py:generate_signal, python/src/backtest/rules/composite.py:generate_signal, python/src/rule_engine/rules/composite.py:generate_signal, python/src/rule_engine/rules/composite.py:generate_signal\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-fe1d9311d6aee734", "name": "Near-duplicate function bodies in 12 places", "shortDescription": {"text": "Near-duplicate function bodies in 12 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\npython/src/backtest/rules/technical.py:generate_signal, python/src/backtest/rules/technical.py:generate_signal, python/src/backtest/rules/technical.py:generate_signal, python/src/backtest/rules/technical.py:generate_signal\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-33a6b62e30ce7ab4", "name": "Near-duplicate function bodies in 6 places", "shortDescription": {"text": "Near-duplicate function bodies in 6 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\npython/src/orchestration/executor.py:name, python/src/orchestration/executor.py:name, python/src/orchestration/executor.py:name, python/src/orchestration/executor.py:name\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-09ea416a92c56190", "name": "Unused endpoint: ANY /api/v1/predictions/top", "shortDescription": {"text": "Unused endpoint: ANY /api/v1/predictions/top"}, "fullDescription": {"text": "`python/src/api/external_v1.py` declares `ANY /api/v1/predictions/top` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-fb4e263a0c8bd18c", "name": "Unused endpoint: ANY /api/v1/reports/monthly", "shortDescription": {"text": "Unused endpoint: ANY /api/v1/reports/monthly"}, "fullDescription": {"text": "`python/src/api/external_v1.py` declares `ANY /api/v1/reports/monthly` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}]}}, "automationDetails": {"id": "repobility/17991"}, "properties": {"repository": "rei4725/StockFixer", "repoUrl": "https://github.com/rei4725/StockFixer", "branch": "main"}, "results": [{"ruleId": "scanner-7aecde7a5a56c4f9", "level": "note", "message": {"text": "Possibly dead Python function: job_daily_pipeline"}, "properties": {"repobilityId": "e4d25e9e305de8c7", "scanner": "scanner-primary", "fingerprint": "7aecde7a5a56c4f9", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "python/run_scheduler.py:43"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-e5af8ca2316ed90f", "level": "note", "message": {"text": "Possibly dead Python function: job_weekly_model_training"}, "properties": {"repobilityId": "4d74205b5fa482b2", "scanner": "scanner-primary", "fingerprint": "e5af8ca2316ed90f", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "python/run_scheduler.py:50"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-57309d26c2b1a017", "level": "note", "message": {"text": "Possibly dead Python function: job_weekly_report"}, "properties": {"repobilityId": "b503812a68ff175f", "scanner": "scanner-primary", "fingerprint": "57309d26c2b1a017", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "python/run_scheduler.py:57"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-7397768664c09bae", "level": "note", "message": {"text": "Possibly dead Python function: job_daily_auto_order"}, "properties": {"repobilityId": "149f98d881927ec6", "scanner": "scanner-primary", "fingerprint": "7397768664c09bae", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "python/run_scheduler.py:64"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-6fb3106b97b520f1", "level": "note", "message": {"text": "Possibly dead Python function: job_daily_settle_orders"}, "properties": {"repobilityId": "aae9db30313d2e0d", "scanner": "scanner-primary", "fingerprint": "6fb3106b97b520f1", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "python/run_scheduler.py:71"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-84169bebdfabbe8d", "level": "note", "message": {"text": "Possibly dead Python function: job_daily_paper_trade_report"}, "properties": {"repobilityId": "da78e57781808b10", "scanner": "scanner-primary", "fingerprint": "84169bebdfabbe8d", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "python/run_scheduler.py:78"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-a114999b31aaf70f", "level": "note", "message": {"text": "Possibly dead Python function: job_weekly_optimization"}, "properties": {"repobilityId": "4bfee50bc9f8216b", "scanner": "scanner-primary", "fingerprint": "a114999b31aaf70f", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "python/run_scheduler.py:85"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-636a0872faf19935", "level": "note", "message": {"text": "Possibly dead Python function: job_weekly_walk_forward_report"}, "properties": {"repobilityId": "ac2ec8b4a8ffb5a7", "scanner": "scanner-primary", "fingerprint": "636a0872faf19935", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "python/run_scheduler.py:92"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-9a18f5a3930b4ce4", "level": "note", "message": {"text": "Possibly dead Python function: job_daily_drift_check"}, "properties": {"repobilityId": "26f8afeb5b4efa29", "scanner": "scanner-primary", "fingerprint": "9a18f5a3930b4ce4", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "python/run_scheduler.py:99"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-a030ddd08f27be1a", "level": "note", "message": {"text": "Possibly dead Python function: job_weekly_db_maintenance"}, "properties": {"repobilityId": "c72625fdf0dfe5d9", "scanner": "scanner-primary", "fingerprint": "a030ddd08f27be1a", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "python/run_scheduler.py:106"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-55ee5fc46ac58cbd", "level": "note", "message": {"text": "Possibly dead Python function: job_weekly_rule_evaluation"}, "properties": {"repobilityId": "0ea0356b8eb4cf70", "scanner": "scanner-primary", "fingerprint": "55ee5fc46ac58cbd", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "python/run_scheduler.py:113"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-a42648c321f2248f", "level": "note", "message": {"text": "Possibly dead Python function: job_daily_rule_signals"}, "properties": {"repobilityId": "9016bd7cd6bf52b3", "scanner": "scanner-primary", "fingerprint": "a42648c321f2248f", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "python/run_scheduler.py:120"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-e8045641d142c406", "level": "note", "message": {"text": "Possibly dead Python function: job_pre_close_alert"}, "properties": {"repobilityId": "aa61c579dd609d12", "scanner": "scanner-primary", "fingerprint": "e8045641d142c406", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "python/run_scheduler.py:127"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-afd5e5ac629191f7", "level": "note", "message": {"text": "Possibly dead Python function: job_daily_backup"}, "properties": {"repobilityId": "9fb8b4dd75606122", "scanner": "scanner-primary", "fingerprint": "afd5e5ac629191f7", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "python/run_scheduler.py:134"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-aa35e7dd586415b0", "level": "note", "message": {"text": "Possibly dead Python function: job_monthly_report"}, "properties": {"repobilityId": "3d4039015565cae0", "scanner": "scanner-primary", "fingerprint": "aa35e7dd586415b0", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "python/run_scheduler.py:141"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-7c7894d1d86423d7", "level": "note", "message": {"text": "Possibly dead Python function: job_monthly_multibagger"}, "properties": {"repobilityId": "e9f89bb518190397", "scanner": "scanner-primary", "fingerprint": "7c7894d1d86423d7", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "python/run_scheduler.py:148"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-1fa60338100bacbc", "level": "note", "message": {"text": "Possibly dead Python function: job_nightly_strategy_factory"}, "properties": {"repobilityId": "e7255618d261aad2", "scanner": "scanner-primary", "fingerprint": "1fa60338100bacbc", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "python/run_scheduler.py:155"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-71e78ace82af4b9d", "level": "note", "message": {"text": "Possibly dead Python function: format_percent"}, "properties": {"repobilityId": "15da8b6aef3cd913", "scanner": "scanner-primary", "fingerprint": "71e78ace82af4b9d", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "python/src/reporting/discord/discord_formatters.py:114"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-91e28a004836e11e", "level": "note", "message": {"text": "Possibly dead Python function: format_interval"}, "properties": {"repobilityId": "2f45b85e4efd3a67", "scanner": "scanner-primary", "fingerprint": "91e28a004836e11e", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "python/src/reporting/discord/discord_formatters.py:126"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-bbfd8c36035e0fa9", "level": "note", "message": {"text": "Possibly dead Python function: send_shap_batch_summary"}, "properties": {"repobilityId": "607e1f19e181c15a", "scanner": "scanner-primary", "fingerprint": "bbfd8c36035e0fa9", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "python/src/reporting/discord/discord_utils.py:984"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-29357a35e2a13814", "level": "note", "message": {"text": "Possibly dead Python function: load_rule_signals_by_date"}, "properties": {"repobilityId": "7c3ccb69934f2eec", "scanner": "scanner-primary", "fingerprint": "29357a35e2a13814", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "python/src/utils/db/rule_results.py:172"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-d5b007c28928e6c6", "level": "note", "message": {"text": "Possibly dead Python function: init_tables"}, "properties": {"repobilityId": "dbb5396b342ef416", "scanner": "scanner-primary", "fingerprint": "d5b007c28928e6c6", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "python/src/utils/db/_connection.py:470"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-c2c5118ae58b3d21", "level": "note", "message": {"text": "Possibly dead Python function: predict_wrapper"}, "properties": {"repobilityId": "7be016c14365e366", "scanner": "scanner-primary", "fingerprint": "c2c5118ae58b3d21", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "python/src/prediction/predict_unified.py:255"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-d825a6cb3439fe9b", "level": "note", "message": {"text": "Possibly dead Python function: wrapper"}, "properties": {"repobilityId": "1dc9acbcc8ce537d", "scanner": "scanner-primary", "fingerprint": "d825a6cb3439fe9b", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "python/src/prediction/prediction_pipeline.py:141"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-fa38b6939729ade6", "level": "note", "message": {"text": "Possibly dead Python function: check_python_version"}, "properties": {"repobilityId": "6ee33fb7ae5dab1e", "scanner": "scanner-primary", "fingerprint": "fa38b6939729ade6", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/hooks/setup_precommit.py:22"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-ad162cca91195c9a", "level": "note", "message": {"text": "Possibly dead Python function: check_pip"}, "properties": {"repobilityId": "867c558af9fcc0b0", "scanner": "scanner-primary", "fingerprint": "ad162cca91195c9a", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/hooks/setup_precommit.py:34"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-025467c8f0b35dcd", "level": "note", "message": {"text": "Possibly dead Python function: install_dependencies"}, "properties": {"repobilityId": "461c814fa775f9cc", "scanner": "scanner-primary", "fingerprint": "025467c8f0b35dcd", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/hooks/setup_precommit.py:47"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-be7a129b7b755b56", "level": "note", "message": {"text": "Possibly dead Python function: setup_git_hooks"}, "properties": {"repobilityId": "1071f352ec44cc4a", "scanner": "scanner-primary", "fingerprint": "be7a129b7b755b56", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/hooks/setup_precommit.py:71"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-d062af3b08128a1a", "level": "note", "message": {"text": "Possibly dead Python function: verify_setup"}, "properties": {"repobilityId": "575aab683d31ba30", "scanner": "scanner-primary", "fingerprint": "d062af3b08128a1a", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/hooks/setup_precommit.py:87"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-ce6d4b79ab249354", "level": "warning", "message": {"text": "Dockerfile runs as root: python/Dockerfile"}, "properties": {"repobilityId": "22c95f7276919818", "scanner": "scanner-primary", "fingerprint": "ce6d4b79ab249354", "layer": "hardware", "severity": "medium", "confidence": 1.0, "tags": ["security", "container"]}}, {"ruleId": "scanner-659838469f1bd215", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: python:3.12-slim"}, "properties": {"repobilityId": "a17f8e96ad6507cf", "scanner": "scanner-primary", "fingerprint": "659838469f1bd215", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "python/Dockerfile"}, "region": {"startLine": 2}}}]}, {"ruleId": "scanner-aa5acaa49eb8315b", "level": "note", "message": {"text": "Containers defined but no K8s/orchestration manifest found"}, "properties": {"repobilityId": "b230ea9b68736081", "scanner": "scanner-primary", "fingerprint": "aa5acaa49eb8315b", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["coverage", "deployment"]}}, {"ruleId": "scanner-9710c8d059e53154", "level": "none", "message": {"text": "No frontend routes/components detected"}, "properties": {"repobilityId": "44ca61485762e494", "scanner": "scanner-primary", "fingerprint": "9710c8d059e53154", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["coverage"]}}, {"ruleId": "scanner-851a02187b82d7d4", "level": "warning", "message": {"text": "Insecure pattern 'subprocess_shell_true' in .claude/skills/troubleshooting/SKILL.md:103"}, "properties": {"repobilityId": "c0cd7a7ab1b2a2dc", "scanner": "scanner-primary", "fingerprint": "851a02187b82d7d4", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "subprocess_shell_true"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/troubleshooting/SKILL.md"}, "region": {"startLine": 103}}}]}, {"ruleId": "scanner-71a759f5056eb105", "level": "warning", "message": {"text": "Insecure pattern 'subprocess_shell_true' in .github/hooks/setup_precommit.py:13"}, "properties": {"repobilityId": "062fa2e9587de059", "scanner": "scanner-primary", "fingerprint": "71a759f5056eb105", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "subprocess_shell_true"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/hooks/setup_precommit.py"}, "region": {"startLine": 13}}}]}, {"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-a216830d174aa053", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "593cc9279e0dd54e", "scanner": "scanner-primary", "fingerprint": "a216830d174aa053", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/integration-tests.yml"}, "region": {"startLine": 24}}}]}, {"ruleId": "scanner-a216830d174aa053", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "208782e115aeb005", "scanner": "scanner-primary", "fingerprint": "a216830d174aa053", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/integration-tests.yml"}, "region": {"startLine": 27}}}]}, {"ruleId": "scanner-a216830d174aa053", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "3b74b287b68eea2f", "scanner": "scanner-primary", "fingerprint": "a216830d174aa053", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/integration-tests.yml"}, "region": {"startLine": 45}}}]}, {"ruleId": "scanner-a216830d174aa053", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "593cc9279e0dd54e", "scanner": "scanner-primary", "fingerprint": "a216830d174aa053", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/integration-tests.yml"}, "region": {"startLine": 58}}}]}, {"ruleId": "scanner-a216830d174aa053", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "208782e115aeb005", "scanner": "scanner-primary", "fingerprint": "a216830d174aa053", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/integration-tests.yml"}, "region": {"startLine": 61}}}]}, {"ruleId": "scanner-a216830d174aa053", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "3b74b287b68eea2f", "scanner": "scanner-primary", "fingerprint": "a216830d174aa053", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/integration-tests.yml"}, "region": {"startLine": 79}}}]}, {"ruleId": "scanner-6019b9b67ba2a387", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "dc7975aebde18611", "scanner": "scanner-primary", "fingerprint": "6019b9b67ba2a387", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/require-review-approval.yml"}, "region": {"startLine": 16}}}]}, {"ruleId": "scanner-740b88ab8dd23d2f", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "01e3c21631c1bdb4", "scanner": "scanner-primary", "fingerprint": "740b88ab8dd23d2f", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/dependabot-auto-merge.yml"}, "region": {"startLine": 19}}}]}, {"ruleId": "scanner-740b88ab8dd23d2f", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "7c9ac9c4bc7f878a", "scanner": "scanner-primary", "fingerprint": "740b88ab8dd23d2f", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/dependabot-auto-merge.yml"}, "region": {"startLine": 27}}}]}, {"ruleId": "scanner-740b88ab8dd23d2f", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "7c9ac9c4bc7f878a", "scanner": "scanner-primary", "fingerprint": "740b88ab8dd23d2f", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/dependabot-auto-merge.yml"}, "region": {"startLine": 40}}}]}, {"ruleId": "scanner-768e8f28c1850d98", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "f3c306ca3743dfa1", "scanner": "scanner-primary", "fingerprint": "768e8f28c1850d98", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/dependabot-auto-merge.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-5b7e341c084ba8be", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "84a9c2a712e7c1ad", "scanner": "scanner-primary", "fingerprint": "5b7e341c084ba8be", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/model-drift-check.yml"}, "region": {"startLine": 16}}}]}, {"ruleId": "scanner-5b7e341c084ba8be", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "c649c2349b012aa3", "scanner": "scanner-primary", "fingerprint": "5b7e341c084ba8be", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/model-drift-check.yml"}, "region": {"startLine": 19}}}]}, {"ruleId": "scanner-3a7f444a5c9aab5d", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "ec9d82bc37012a86", "scanner": "scanner-primary", "fingerprint": "3a7f444a5c9aab5d", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/experiments.yml"}, "region": {"startLine": 25}}}]}, {"ruleId": "scanner-3a7f444a5c9aab5d", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "00ca53b1a44c510f", "scanner": "scanner-primary", "fingerprint": "3a7f444a5c9aab5d", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/experiments.yml"}, "region": {"startLine": 28}}}]}, {"ruleId": "scanner-3a7f444a5c9aab5d", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "ec9d82bc37012a86", "scanner": "scanner-primary", "fingerprint": "3a7f444a5c9aab5d", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/experiments.yml"}, "region": {"startLine": 50}}}]}, {"ruleId": "scanner-3a7f444a5c9aab5d", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "00ca53b1a44c510f", "scanner": "scanner-primary", "fingerprint": "3a7f444a5c9aab5d", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/experiments.yml"}, "region": {"startLine": 53}}}]}, {"ruleId": "scanner-77767aca2c278185", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "eab06522f116ebc4", "scanner": "scanner-primary", "fingerprint": "77767aca2c278185", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/perf-benchmark.yml"}, "region": {"startLine": 27}}}]}, {"ruleId": "scanner-77767aca2c278185", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "c0c8c872a3ed6be3", "scanner": "scanner-primary", "fingerprint": "77767aca2c278185", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/perf-benchmark.yml"}, "region": {"startLine": 30}}}]}, {"ruleId": "scanner-77767aca2c278185", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "93a63a0238b7ce8d", "scanner": "scanner-primary", "fingerprint": "77767aca2c278185", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/perf-benchmark.yml"}, "region": {"startLine": 45}}}]}, {"ruleId": "scanner-77767aca2c278185", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "8e42c0fc46e5562a", "scanner": "scanner-primary", "fingerprint": "77767aca2c278185", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/perf-benchmark.yml"}, "region": {"startLine": 98}}}]}, {"ruleId": "scanner-77767aca2c278185", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "31ffc63d353d4b29", "scanner": "scanner-primary", "fingerprint": "77767aca2c278185", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/perf-benchmark.yml"}, "region": {"startLine": 115}}}]}, {"ruleId": "scanner-87110ef1617069e3", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "377fcc623f868c5f", "scanner": "scanner-primary", "fingerprint": "87110ef1617069e3", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/circular-dep-check.yml"}, "region": {"startLine": 25}}}]}, {"ruleId": "scanner-87110ef1617069e3", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "98de5c2186be9b5d", "scanner": "scanner-primary", "fingerprint": "87110ef1617069e3", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/circular-dep-check.yml"}, "region": {"startLine": 28}}}]}, {"ruleId": "scanner-c2d472a9a9d37473", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "85d38afd5a0b21dd", "scanner": "scanner-primary", "fingerprint": "c2d472a9a9d37473", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/sync-pr-branches.yml"}, "region": {"startLine": 19}}}]}, {"ruleId": "scanner-83d4e80fce0bac07", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "69c07519f0d96ca1", "scanner": "scanner-primary", "fingerprint": "83d4e80fce0bac07", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/sync-pr-branches.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-ca38d7a4ed16bc09", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "985a3f4e2647dce9", "scanner": "scanner-primary", "fingerprint": "ca38d7a4ed16bc09", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/import-linter-check.yml"}, "region": {"startLine": 26}}}]}, {"ruleId": "scanner-ca38d7a4ed16bc09", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "88dbd088839bec6a", "scanner": "scanner-primary", "fingerprint": "ca38d7a4ed16bc09", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/import-linter-check.yml"}, "region": {"startLine": 29}}}]}, {"ruleId": "scanner-12522bf27bea173c", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "b2704fa1d7a70eba", "scanner": "scanner-primary", "fingerprint": "12522bf27bea173c", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/secret-scan.yml"}, "region": {"startLine": 16}}}]}, {"ruleId": "scanner-12522bf27bea173c", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "b5a63b98c363d324", "scanner": "scanner-primary", "fingerprint": "12522bf27bea173c", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/secret-scan.yml"}, "region": {"startLine": 21}}}]}, {"ruleId": "scanner-21aa0c39a7c1ca23", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "2fdc0456c2cf4f92", "scanner": "scanner-primary", "fingerprint": "21aa0c39a7c1ca23", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/security.yml"}, "region": {"startLine": 29}}}]}, {"ruleId": "scanner-21aa0c39a7c1ca23", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "9f421b7c89e116d7", "scanner": "scanner-primary", "fingerprint": "21aa0c39a7c1ca23", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/security.yml"}, "region": {"startLine": 32}}}]}, {"ruleId": "scanner-21aa0c39a7c1ca23", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "2fdc0456c2cf4f92", "scanner": "scanner-primary", "fingerprint": "21aa0c39a7c1ca23", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/security.yml"}, "region": {"startLine": 103}}}]}, {"ruleId": "scanner-21aa0c39a7c1ca23", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "9f421b7c89e116d7", "scanner": "scanner-primary", "fingerprint": "21aa0c39a7c1ca23", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/security.yml"}, "region": {"startLine": 106}}}]}, {"ruleId": "scanner-21aa0c39a7c1ca23", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "9b22c56ad2532f66", "scanner": "scanner-primary", "fingerprint": "21aa0c39a7c1ca23", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/security.yml"}, "region": {"startLine": 155}}}]}, {"ruleId": "scanner-47b0515c3860ca68", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "a22cd20e945fe0cb", "scanner": "scanner-primary", "fingerprint": "47b0515c3860ca68", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/unit-tests.yml"}, "region": {"startLine": 27}}}]}, {"ruleId": "scanner-47b0515c3860ca68", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "db3864f675b2f43b", "scanner": "scanner-primary", "fingerprint": "47b0515c3860ca68", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/unit-tests.yml"}, "region": {"startLine": 30}}}]}, {"ruleId": "scanner-47b0515c3860ca68", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "a22cd20e945fe0cb", "scanner": "scanner-primary", "fingerprint": "47b0515c3860ca68", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/unit-tests.yml"}, "region": {"startLine": 59}}}]}, {"ruleId": "scanner-47b0515c3860ca68", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "db3864f675b2f43b", "scanner": "scanner-primary", "fingerprint": "47b0515c3860ca68", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/unit-tests.yml"}, "region": {"startLine": 62}}}]}, {"ruleId": "scanner-f431d8e4bc38bdfc", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "3bdebb15d8d7f9df", "scanner": "scanner-primary", "fingerprint": "f431d8e4bc38bdfc", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/weekly-watchlist-refresh.yml"}, "region": {"startLine": 19}}}]}, {"ruleId": "scanner-f431d8e4bc38bdfc", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "95a5c64c3cb3bb63", "scanner": "scanner-primary", "fingerprint": "f431d8e4bc38bdfc", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/weekly-watchlist-refresh.yml"}, "region": {"startLine": 25}}}]}, {"ruleId": "scanner-bcbd454159b52039", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "681a18437852b80c", "scanner": "scanner-primary", "fingerprint": "bcbd454159b52039", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/weekly-watchlist-refresh.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-5bc4cf5aa717df4c", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "f9cc68aec36826a4", "scanner": "scanner-primary", "fingerprint": "5bc4cf5aa717df4c", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/auto-release.yml"}, "region": {"startLine": 21}}}]}, {"ruleId": "scanner-5bc4cf5aa717df4c", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "d7f1b803040d533a", "scanner": "scanner-primary", "fingerprint": "5bc4cf5aa717df4c", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/auto-release.yml"}, "region": {"startLine": 83}}}]}, {"ruleId": "scanner-fc1c6dcb00af79ac", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "e06242eaaa2adbf9", "scanner": "scanner-primary", "fingerprint": "fc1c6dcb00af79ac", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/auto-release.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-96e933c75c4ffbf3", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "941623c5c1277a42", "scanner": "scanner-primary", "fingerprint": "96e933c75c4ffbf3", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/docker-scan.yml"}, "region": {"startLine": 29}}}]}, {"ruleId": "scanner-96e933c75c4ffbf3", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "3e458ca9612f2ea1", "scanner": "scanner-primary", "fingerprint": "96e933c75c4ffbf3", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/docker-scan.yml"}, "region": {"startLine": 35}}}]}, {"ruleId": "scanner-96e933c75c4ffbf3", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "3e458ca9612f2ea1", "scanner": "scanner-primary", "fingerprint": "96e933c75c4ffbf3", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/docker-scan.yml"}, "region": {"startLine": 45}}}]}, {"ruleId": "scanner-96e933c75c4ffbf3", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "3e458ca9612f2ea1", "scanner": "scanner-primary", "fingerprint": "96e933c75c4ffbf3", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/docker-scan.yml"}, "region": {"startLine": 56}}}]}, {"ruleId": "scanner-96e933c75c4ffbf3", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "4173a801de372f66", "scanner": "scanner-primary", "fingerprint": "96e933c75c4ffbf3", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/docker-scan.yml"}, "region": {"startLine": 67}}}]}, {"ruleId": "scanner-a1b2242ac980bc30", "level": "note", "message": {"text": "Very large file: python/run_backtest_ui.py (1359 lines)"}, "properties": {"repobilityId": "370093b49ee31274", "scanner": "scanner-primary", "fingerprint": "a1b2242ac980bc30", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-fb2319deb7489255", "level": "note", "message": {"text": "Very large file: python/src/orchestration/scheduler.py (1231 lines)"}, "properties": {"repobilityId": "3cad9b52606ccd39", "scanner": "scanner-primary", "fingerprint": "fb2319deb7489255", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-3ee06d18aaf8d98a", "level": "note", "message": {"text": "Very large file: python/src/reporting/discord/discord_utils.py (1430 lines)"}, "properties": {"repobilityId": "32d851aa70cecede", "scanner": "scanner-primary", "fingerprint": "3ee06d18aaf8d98a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-141b30a41e03817b", "level": "note", "message": {"text": "No license file detected"}, "properties": {"repobilityId": "5a83142c3228a386", "scanner": "scanner-primary", "fingerprint": "141b30a41e03817b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["license", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "6fcef4b5689e7e28", "scanner": "scanner-primary", "fingerprint": "3ab5d313dda8e5f9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["debug", "cleanup", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-749d4bc1bd66df5f", "level": "warning", "message": {"text": "Agent instructions exist but release-hardening basics are missing"}, "properties": {"repobilityId": "a16920f5a2d74770", "scanner": "scanner-primary", "fingerprint": "749d4bc1bd66df5f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-ea8f3013f588db25", "level": "note", "message": {"text": "Shallow git history limits provenance confidence"}, "properties": {"repobilityId": "ada30ae9e8e2323f", "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": "390ea6b64e4fa8f9", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-6eaef0ee7cfd8fd5", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/commands/prediction.md"}, "properties": {"repobilityId": "c2b24b4f23843dee", "scanner": "scanner-primary", "fingerprint": "6eaef0ee7cfd8fd5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/commands/prediction.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-81f3880562566e32", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/commands/add-symbol.md"}, "properties": {"repobilityId": "cf380371ebbc6920", "scanner": "scanner-primary", "fingerprint": "81f3880562566e32", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/commands/add-symbol.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-48e0ae561a12f99c", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/commands/version-mgmt.md"}, "properties": {"repobilityId": "bcf97c86188a5738", "scanner": "scanner-primary", "fingerprint": "48e0ae561a12f99c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/commands/version-mgmt.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-dd8e09297af74679", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/commands/duckdb-ops.md"}, "properties": {"repobilityId": "8cf2e657264c38fd", "scanner": "scanner-primary", "fingerprint": "dd8e09297af74679", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/commands/duckdb-ops.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-1dfe4206397d66f5", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/commands/troubleshooting.md"}, "properties": {"repobilityId": "d681a1e54a915dba", "scanner": "scanner-primary", "fingerprint": "1dfe4206397d66f5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/commands/troubleshooting.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-8dc7957372e33eab", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/commands/model-training.md"}, "properties": {"repobilityId": "db88b9f97f3e2512", "scanner": "scanner-primary", "fingerprint": "8dc7957372e33eab", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/commands/model-training.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-5a014732c2d5a177", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/commands/data-pipeline.md"}, "properties": {"repobilityId": "68fb5d0ec11eac85", "scanner": "scanner-primary", "fingerprint": "5a014732c2d5a177", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/commands/data-pipeline.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-d70c476d26c5bd6c", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/commands/backtest.md"}, "properties": {"repobilityId": "1223af159e6d85af", "scanner": "scanner-primary", "fingerprint": "d70c476d26c5bd6c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/commands/backtest.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-e5eb33912374c75b", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/agents/plam.agent.md"}, "properties": {"repobilityId": "05e8f56321e4c5ea", "scanner": "scanner-primary", "fingerprint": "e5eb33912374c75b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/agents/plam.agent.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-b203aeff5b22eb8b", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/agents/issue.agent.md"}, "properties": {"repobilityId": "017f40e999a8a2f8", "scanner": "scanner-primary", "fingerprint": "b203aeff5b22eb8b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/agents/issue.agent.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-7a9cccd9510b2644", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/agents/review.agent.md"}, "properties": {"repobilityId": "1ac4616065c51499", "scanner": "scanner-primary", "fingerprint": "7a9cccd9510b2644", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/agents/review.agent.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-9e4fcce0f29d832c", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/agents/pr.agent.md"}, "properties": {"repobilityId": "b67e68369095e96a", "scanner": "scanner-primary", "fingerprint": "9e4fcce0f29d832c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/agents/pr.agent.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-9c3451cd8930502c", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/agents/impl.agent.md"}, "properties": {"repobilityId": "a5703f70fd4f7e36", "scanner": "scanner-primary", "fingerprint": "9c3451cd8930502c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/agents/impl.agent.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-34b5de1afe5e2d0f", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/skills/backtest/SKILL.md"}, "properties": {"repobilityId": "302f9dfd7780fd18", "scanner": "scanner-primary", "fingerprint": "34b5de1afe5e2d0f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/backtest/SKILL.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-bb45a80cfb3a6a69", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/skills/data-pipeline/SKILL.md"}, "properties": {"repobilityId": "c411bc26abe32ef8", "scanner": "scanner-primary", "fingerprint": "bb45a80cfb3a6a69", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/data-pipeline/SKILL.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-cdee74b9665806e6", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/skills/add-symbol/SKILL.md"}, "properties": {"repobilityId": "540a54a49a3b7dce", "scanner": "scanner-primary", "fingerprint": "cdee74b9665806e6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/add-symbol/SKILL.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-fc57192ce719a8ad", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/skills/model-training/SKILL.md"}, "properties": {"repobilityId": "43dc9a2f5c4f0a88", "scanner": "scanner-primary", "fingerprint": "fc57192ce719a8ad", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/model-training/SKILL.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-b7358ed6c15112ad", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/skills/gh/merge-pull-request/SKILL.md"}, "properties": {"repobilityId": "febaa48a925315f2", "scanner": "scanner-primary", "fingerprint": "b7358ed6c15112ad", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/gh/merge-pull-request/SKILL.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-41ceff17427a0d73", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/skills/gh/create-issue/SKILL.md"}, "properties": {"repobilityId": "cf93e3555036a70e", "scanner": "scanner-primary", "fingerprint": "41ceff17427a0d73", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/gh/create-issue/SKILL.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-fbdcd2040e898110", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/skills/gh/create-pull-request/SKILL.md"}, "properties": {"repobilityId": "a02f98e0de63b38a", "scanner": "scanner-primary", "fingerprint": "fbdcd2040e898110", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/gh/create-pull-request/SKILL.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-a6d1e18e384bf288", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/skills/prediction/SKILL.md"}, "properties": {"repobilityId": "a30f84448eb744d4", "scanner": "scanner-primary", "fingerprint": "a6d1e18e384bf288", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/prediction/SKILL.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-e43e1c2bca17a7ad", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/skills/duckdb-ops/SKILL.md"}, "properties": {"repobilityId": "9fba8024b35a6cbd", "scanner": "scanner-primary", "fingerprint": "e43e1c2bca17a7ad", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/duckdb-ops/SKILL.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-7979711ecd3a3804", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/skills/troubleshooting/SKILL.md"}, "properties": {"repobilityId": "cececfcbe28985c1", "scanner": "scanner-primary", "fingerprint": "7979711ecd3a3804", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/troubleshooting/SKILL.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-7afd79e6f1db738e", "level": "note", "message": {"text": "Legacy-named symbol `job_daily_backup` in python/run_scheduler.py:134"}, "properties": {"repobilityId": "f11fa058413256d5", "scanner": "scanner-primary", "fingerprint": "7afd79e6f1db738e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-be9461db70941252", "level": "note", "message": {"text": "Legacy-named symbol `run_backup` in python/run_backup.py:5"}, "properties": {"repobilityId": "192867e85ac0dd47", "scanner": "scanner-primary", "fingerprint": "be9461db70941252", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-4a3fb73d8f6e5c61", "level": "note", "message": {"text": "Legacy-named symbol `external_v1` in python/tests/unit/test_external_v1_endpoint.py:1"}, "properties": {"repobilityId": "34a7c73adfa5eee6", "scanner": "scanner-primary", "fingerprint": "4a3fb73d8f6e5c61", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-614b2f1559c3df60", "level": "note", "message": {"text": "Legacy-named symbol `prod_v1` in python/tests/unit/test_shadow_mode.py:377"}, "properties": {"repobilityId": "b7deb822c65b7e15", "scanner": "scanner-primary", "fingerprint": "614b2f1559c3df60", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-0950c7fc62735652", "level": "note", "message": {"text": "Legacy-named symbol `test_swap_keeps_backup` in python/tests/unit/test_db_compact.py:78"}, "properties": {"repobilityId": "9984acc7c461af31", "scanner": "scanner-primary", "fingerprint": "0950c7fc62735652", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-6881da3bb986dcd0", "level": "note", "message": {"text": "Legacy-named symbol `test_dry_run_logs_but_does_not_copy` in python/tests/unit/test_shadow_evaluation_unit.py:236"}, "properties": {"repobilityId": "bb55f4c1c4c66c68", "scanner": "scanner-primary", "fingerprint": "6881da3bb986dcd0", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-5a4c3dbd0dd02d4b", "level": "note", "message": {"text": "Legacy-named symbol `run_db_backup` in python/src/orchestration/backup_pipeline.py:26"}, "properties": {"repobilityId": "22368c28673b8c74", "scanner": "scanner-primary", "fingerprint": "5a4c3dbd0dd02d4b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-8a47bbe0b78fdbb2", "level": "note", "message": {"text": "Legacy-named symbol `run_daily_backup` in python/src/orchestration/scheduler.py:1065"}, "properties": {"repobilityId": "c2908113b1ae0391", "scanner": "scanner-primary", "fingerprint": "8a47bbe0b78fdbb2", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-1b41cad70aeec98d", "level": "note", "message": {"text": "Legacy-named symbol `external_v1` in python/src/api/health.py:98"}, "properties": {"repobilityId": "450a4a71e85a7df3", "scanner": "scanner-primary", "fingerprint": "1b41cad70aeec98d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-798d1d00c4d67533", "level": "note", "message": {"text": "Stub function `train` (body is just `pass`/`return`) \u2014 python/src/utils/ml_base.py:24"}, "properties": {"repobilityId": "b7591539b9407471", "scanner": "scanner-primary", "fingerprint": "798d1d00c4d67533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "empty-handler", "dead-code"]}}, {"ruleId": "scanner-2e123a61c5a762d4", "level": "note", "message": {"text": "Legacy-named symbol `db_data_copy` in python/src/market_data/loader.py:274"}, "properties": {"repobilityId": "36794573473c1d78", "scanner": "scanner-primary", "fingerprint": "2e123a61c5a762d4", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-d96e871dc7bbfded", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 .github/hooks/run_import_linter.py:12"}, "properties": {"repobilityId": "c18d83d3b1b5704c", "scanner": "scanner-primary", "fingerprint": "d96e871dc7bbfded", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-02525d39071dd2c7", "level": "note", "message": {"text": "Near-duplicate function bodies in 5 places"}, "properties": {"repobilityId": "39c4b52ab7fb24c6", "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": "23f3cdf0760dca4d", "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": "a850d186130534ff", "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": "ee56538592cb685c", "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": "7597b7a8dbe4be2e", "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": "6b86e9df32a5d5b5", "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": "03773e0291dc8ce7", "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": "d5f98f9415c25088", "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": "06be8f6c1bfc6377", "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": "bc8bc5798c7f3d36", "scanner": "scanner-primary", "fingerprint": "49c98f7cedd9c977", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-fe1d9311d6aee734", "level": "note", "message": {"text": "Near-duplicate function bodies in 12 places"}, "properties": {"repobilityId": "4d5df250e7b7e1d7", "scanner": "scanner-primary", "fingerprint": "fe1d9311d6aee734", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-33a6b62e30ce7ab4", "level": "note", "message": {"text": "Near-duplicate function bodies in 6 places"}, "properties": {"repobilityId": "15dfaa33d1ee05ff", "scanner": "scanner-primary", "fingerprint": "33a6b62e30ce7ab4", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-33a6b62e30ce7ab4", "level": "note", "message": {"text": "Near-duplicate function bodies in 6 places"}, "properties": {"repobilityId": "a493fabb95018558", "scanner": "scanner-primary", "fingerprint": "33a6b62e30ce7ab4", "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": "bc755d0cb8b01ee5", "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": "9359002f9bd83e7e", "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": "6b5d71401c586ef7", "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": "c264fbf56986b33b", "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": "5e470f28b3f0e4a8", "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": "7bc0a76d72ad1a14", "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": "fe02180c91230758", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-09ea416a92c56190", "level": "note", "message": {"text": "Unused endpoint: ANY /api/v1/predictions/top"}, "properties": {"repobilityId": "beb38ef3ddb43dad", "scanner": "scanner-primary", "fingerprint": "09ea416a92c56190", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-fb4e263a0c8bd18c", "level": "note", "message": {"text": "Unused endpoint: ANY /api/v1/reports/monthly"}, "properties": {"repobilityId": "2f60cc222310353d", "scanner": "scanner-primary", "fingerprint": "fb4e263a0c8bd18c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}