{"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-a2a38cef42743886", "name": "Possibly dead Python function: scrape_metrics", "shortDescription": {"text": "Possibly dead Python function: scrape_metrics"}, "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-87b979f6d39ab68f", "name": "Possibly dead Python function: init_mood_routes", "shortDescription": {"text": "Possibly dead Python function: init_mood_routes"}, "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-7aa13436db2e0b4f", "name": "Possibly dead Python function: mark_reviewed", "shortDescription": {"text": "Possibly dead Python function: mark_reviewed"}, "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-e0338d04ef1e262f", "name": "Possibly dead Python function: create_relationship_blueprint", "shortDescription": {"text": "Possibly dead Python function: create_relationship_blueprint"}, "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-8e6585e0a5c69091", "name": "Possibly dead Python function: check_server", "shortDescription": {"text": "Possibly dead Python function: check_server"}, "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-cb6a3f6d8fc4a8c7", "name": "Possibly dead Python function: check_rate_limit", "shortDescription": {"text": "Possibly dead Python function: check_rate_limit"}, "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-e23dc6f94618ff45", "name": "Possibly dead Python function: can_drip", "shortDescription": {"text": "Possibly dead Python function: can_drip"}, "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-64aefc521d4ac980", "name": "Possibly dead Python function: record_drip", "shortDescription": {"text": "Possibly dead Python function: record_drip"}, "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-7ba1ffe7b2d6d603", "name": "Possibly dead Python function: check_replay_attack", "shortDescription": {"text": "Possibly dead Python function: check_replay_attack"}, "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-ce2ebdfe251f2b5c", "name": "Possibly dead Python function: record_submission", "shortDescription": {"text": "Possibly dead Python function: record_submission"}, "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-cd6e7768465f209c", "name": "Possibly dead Python function: check_anomalies", "shortDescription": {"text": "Possibly dead Python function: check_anomalies"}, "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-c283e313350eb215", "name": "Possibly dead Python function: register_ledger_routes", "shortDescription": {"text": "Possibly dead Python function: register_ledger_routes"}, "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-bec552f1ebe29a96", "name": "Possibly dead Python function: invalidate", "shortDescription": {"text": "Possibly dead Python function: invalidate"}, "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-19e0725caa23cdb4", "name": "Possibly dead Python function: start_cache_refresh", "shortDescription": {"text": "Possibly dead Python function: start_cache_refresh"}, "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-9e4cc49ef77d7d4e", "name": "Possibly dead Python function: reject_delivery", "shortDescription": {"text": "Possibly dead Python function: reject_delivery"}, "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-a043641b199f2677", "name": "Possibly dead Python function: dispute_job", "shortDescription": {"text": "Possibly dead Python function: dispute_job"}, "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-0910c209df7b6365", "name": "Possibly dead Python function: cancel_job", "shortDescription": {"text": "Possibly dead Python function: cancel_job"}, "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-6d2f3f10af88ca21", "name": "Possibly dead Python function: broadcast_job", "shortDescription": {"text": "Possibly dead Python function: broadcast_job"}, "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-c164bd382a55929e", "name": "Possibly dead Python function: dispute_job", "shortDescription": {"text": "Possibly dead Python function: dispute_job"}, "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-e9d3a47c96f1717e", "name": "Possibly dead Python function: cancel_job", "shortDescription": {"text": "Possibly dead Python function: cancel_job"}, "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-e066691601852931", "name": "Docker base image is tag-pinned but not digest-pinned: python:3.11-slim", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: python:3.11-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-1f47122924a6561d", "name": "Insecure pattern 'exec_used' in test_p2p_replay_fix.py:124", "shortDescription": {"text": "Insecure pattern 'exec_used' in test_p2p_replay_fix.py:124"}, "fullDescription": {"text": "Found a known-risky pattern (exec_used). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-91e0e5da5b7f8416", "name": "Insecure pattern 'direct_innerhtml_assignment' in mining-simulator.html:268", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in mining-simulator.html:268"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e515d8000c5f8641", "name": "Insecure pattern 'direct_innerhtml_assignment' in faucet.py:316", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in faucet.py:316"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9e5748ef39945d99", "name": "Insecure pattern 'tls_verify_false' in install-miner.sh:215", "shortDescription": {"text": "Insecure pattern 'tls_verify_false' in install-miner.sh:215"}, "fullDescription": {"text": "Found a known-risky pattern (tls_verify_false). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3ffa3e01079d378b", "name": "Insecure pattern 'direct_innerhtml_assignment' in security_test_payment_widget.py:113", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in security_test_payment_widget.py:113"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6372cebde0220094", "name": "No auth library detected", "shortDescription": {"text": "No auth library detected"}, "fullDescription": {"text": "The scanner did not find any standard auth library (JWT, OAuth, NextAuth, Auth0, etc.). The repo has auth/admin/session surface indicators, so auth may live in custom code, in a separate service, or be missing."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0a672bed579c691e", "name": "Very large file: agent_relationships.py (1313 lines)", "shortDescription": {"text": "Very large file: agent_relationships.py (1313 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3ab5d313dda8e5f9", "name": "Debug logging residue appears in source files", "shortDescription": {"text": "Debug logging residue appears in source files"}, "fullDescription": {"text": "Found 566 console/debugger/print-style debug statements in non-test source. This is a common fast-generation residue before production cleanup."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-72b2a6250083a784", "name": "Placeholder or mock-heavy implementation detected", "shortDescription": {"text": "Placeholder or mock-heavy implementation detected"}, "fullDescription": {"text": "Found 17 placeholder/mock markers across 10 source files. This often means the repo looks complete while core flows still use generated scaffolding or fake data."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2d0c7b7ab8f8aacf", "name": "Critical user flow still appears backed by mock or placeholder data", "shortDescription": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "fullDescription": {"text": "A payment/auth/admin/order/billing-style flow contains mock, fake, TODO, dummy, or placeholder markers in runtime source. In the Fable corpus this is a high-leverage completeness smell: the app can look finished while the money, identity, or tenant flow is still scaffolded."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-aa0dec063466041c", "name": "Network/subprocess call without timeout or try/except \u2014 validate_bounty_2303.py:176", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 validate_bounty_2303.py:176"}, "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-7012c98698089f5a", "name": "Legacy-named symbol `IBM_5150_v1` in keeper_explorer.py:361", "shortDescription": {"text": "Legacy-named symbol `IBM_5150_v1` in keeper_explorer.py:361"}, "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-929c98e83310fc2c", "name": "Legacy-named symbol `rustchain_v2_integrated_v2` in replay_defense.py:18", "shortDescription": {"text": "Legacy-named symbol `rustchain_v2_integrated_v2` in replay_defense.py:18"}, "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-dcd5d96d0931eae0", "name": "Legacy-named symbol `rustchain_v2` in docker-entrypoint.py:24", "shortDescription": {"text": "Legacy-named symbol `rustchain_v2` in docker-entrypoint.py:24"}, "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-79151470a4ab1c2b", "name": "Legacy-named symbol `rustchain_v2_integrated_v2` in integrated_node.py:10", "shortDescription": {"text": "Legacy-named symbol `rustchain_v2_integrated_v2` in integrated_node.py:10"}, "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-7f4c4fa1a8a84437", "name": "Legacy-named symbol `rustchain_v2_integrated_v2` in replay_attack_poc.py:174", "shortDescription": {"text": "Legacy-named symbol `rustchain_v2_integrated_v2` in replay_attack_poc.py:174"}, "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-c4302658ccc3d550", "name": "Legacy-named symbol `rustchain_v2_integrated_v2` in payout_ledger.py:5", "shortDescription": {"text": "Legacy-named symbol `rustchain_v2_integrated_v2` in payout_ledger.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-be5cb5ad1698ab35", "name": "Network/subprocess call without timeout or try/except \u2014 test_ppa_compliance.py:55", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 test_ppa_compliance.py:55"}, "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-f9202f6d157bfb5d", "name": "Network/subprocess call without timeout or try/except \u2014 test_ppa_visualizer.py:101", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 test_ppa_visualizer.py:101"}, "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-554feb1b3b1bb17d", "name": "Commented-code block (6 lines) in rip302_agent_economy.py:619", "shortDescription": {"text": "Commented-code block (6 lines) in rip302_agent_economy.py:619"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2734089e2746a7df", "name": "Legacy-named symbol `rustchain_mac_miner_v2` in setup_miner.py:26", "shortDescription": {"text": "Legacy-named symbol `rustchain_mac_miner_v2` in setup_miner.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-8c41a51f7af94bf7", "name": "Network/subprocess call without timeout or try/except \u2014 setup_miner.py:88", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 setup_miner.py:88"}, "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-81e14fa1245dfeb9", "name": "Commented-code block (5 lines) in rip201_bucket_fix.py:181", "shortDescription": {"text": "Commented-code block (5 lines) in rip201_bucket_fix.py:181"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d30f85c43b86dcf0", "name": "27 env vars used in code but missing from .env.example", "shortDescription": {"text": "27 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `BCOS_DIRECTORY_DEBUG`, `BCOS_DIRECTORY_HOST`, `BCOS_DIRECTORY_PORT`, `BCOS_DIRECTORY_SECRET_KEY`, `CONTRIBUTOR_ADMIN_KEY`, `CONTRIBUTOR_REGISTRATION_KEY`, `CONTRIBUTOR_REGISTRY_DEBUG`, `CONTRIBUTOR_SECRET_KEY` + 19 more. Add them (with a placeholder/comment) to .env.example so onboarding doesn't break."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2c04133e54348533", "name": "Near-duplicate function bodies in 2 places", "shortDescription": {"text": "Near-duplicate function bodies in 2 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\ntest_rpc_malformed_json.py:post, test_rpc_cors_csrf.py:post\n\nThis is *the* AI-coder failure mode (4\u00d7 more duplication in vibe-coded repos \u2014 see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-be46ea126aa5d8dc", "name": "Near-duplicate function bodies in 3 places", "shortDescription": {"text": "Near-duplicate function bodies in 3 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nagent_relationships.py:disagree, agent_relationships.py:collaborate, agent_relationships.py:reconcile\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:\ntest_agent_relationships.py:setUp, test_agent_relationships.py:setUp, test_agent_relationships.py:setUp, test_agent_relationships.py:setUp\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-deaced46978e917c", "name": "Flask mutation route `disagree` without `@login_required` \u2014 agent_relationships.py:1108", "shortDescription": {"text": "Flask mutation route `disagree` without `@login_required` \u2014 agent_relationships.py:1108"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-bc97f4c048507618", "name": "Flask mutation route `collaborate` without `@login_required` \u2014 agent_relationships.py:1133", "shortDescription": {"text": "Flask mutation route `collaborate` without `@login_required` \u2014 agent_relationships.py:1133"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-91cc50e0c92d7c4f", "name": "Flask mutation route `reconcile` without `@login_required` \u2014 agent_relationships.py:1160", "shortDescription": {"text": "Flask mutation route `reconcile` without `@login_required` \u2014 agent_relationships.py:1160"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e3afd7eb04425f8c", "name": "Flask mutation route `admin_intervene` without `@login_required` \u2014 agent_relationships.py:1183", "shortDescription": {"text": "Flask mutation route `admin_intervene` without `@login_required` \u2014 agent_relationships.py:1183"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-57ff39c6da81c5d0", "name": "Flask mutation route `faucet_drip` without `@login_required` \u2014 keeper_explorer.py:120", "shortDescription": {"text": "Flask mutation route `faucet_drip` without `@login_required` \u2014 keeper_explorer.py:120"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-73e1e7c222d63031", "name": "Flask mutation route `drip` without `@login_required` \u2014 faucet.py:383", "shortDescription": {"text": "Flask mutation route `drip` without `@login_required` \u2014 faucet.py:383"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2f9d2814b31e65fa", "name": "Flask mutation route `api_ledger_create` without `@login_required` \u2014 payout_ledger.py:284", "shortDescription": {"text": "Flask mutation route `api_ledger_create` without `@login_required` \u2014 payout_ledger.py:284"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e5588a4b852f0a37", "name": "Flask mutation route `api_ledger_update` without `@login_required` \u2014 payout_ledger.py:311", "shortDescription": {"text": "Flask mutation route `api_ledger_update` without `@login_required` \u2014 payout_ledger.py:311"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0cb1e9fa76413005", "name": "Flask mutation route `create_badge` without `@login_required` \u2014 profile_badge_generator.py:170", "shortDescription": {"text": "Flask mutation route `create_badge` without `@login_required` \u2014 profile_badge_generator.py:170"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6ff4763e5ea7622e", "name": "Flask mutation route `agent_post_job` without `@login_required` \u2014 rip302_agent_economy.py:327", "shortDescription": {"text": "Flask mutation route `agent_post_job` without `@login_required` \u2014 rip302_agent_economy.py:327"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b4c814950ff54c8c", "name": "Flask mutation route `agent_claim_job` without `@login_required` \u2014 rip302_agent_economy.py:437", "shortDescription": {"text": "Flask mutation route `agent_claim_job` without `@login_required` \u2014 rip302_agent_economy.py:437"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1e2874906d1df835", "name": "Flask mutation route `agent_deliver_job` without `@login_required` \u2014 rip302_agent_economy.py:511", "shortDescription": {"text": "Flask mutation route `agent_deliver_job` without `@login_required` \u2014 rip302_agent_economy.py:511"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5d9f875e746c365c", "name": "Flask mutation route `agent_accept_delivery` without `@login_required` \u2014 rip302_agent_economy.py:586", "shortDescription": {"text": "Flask mutation route `agent_accept_delivery` without `@login_required` \u2014 rip302_agent_economy.py:586"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a69fbf2d6eb02801", "name": "Flask mutation route `agent_dispute_job` without `@login_required` \u2014 rip302_agent_economy.py:703", "shortDescription": {"text": "Flask mutation route `agent_dispute_job` without `@login_required` \u2014 rip302_agent_economy.py:703"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8664ba341a30c7cb", "name": "Flask mutation route `agent_cancel_job` without `@login_required` \u2014 rip302_agent_economy.py:765", "shortDescription": {"text": "Flask mutation route `agent_cancel_job` without `@login_required` \u2014 rip302_agent_economy.py:765"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d9f522aa4f569b3d", "name": "Flask mutation route `process_payment` without `@login_required` \u2014 security_test_payment_widget.py:185", "shortDescription": {"text": "Flask mutation route `process_payment` without `@login_required` \u2014 security_test_payment_widget.py:185"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-78cf598323ee14c5", "name": "Flask mutation route `admin_login` without `@login_required` \u2014 security_test_payment_widget.py:271", "shortDescription": {"text": "Flask mutation route `admin_login` without `@login_required` \u2014 security_test_payment_widget.py:271"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6fb43fcf42ed44dd", "name": "Flask mutation route `register` without `@login_required` \u2014 contributor_registry.py:266", "shortDescription": {"text": "Flask mutation route `register` without `@login_required` \u2014 contributor_registry.py:266"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d5682999f4125b4a", "name": "Flask mutation route `approve_contributor` without `@login_required` \u2014 contributor_registry.py:313", "shortDescription": {"text": "Flask mutation route `approve_contributor` without `@login_required` \u2014 contributor_registry.py:313"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b6de85a9bf33f71b", "name": "Flask mutation route `inspect_fingerprint` without `@login_required` \u2014 sophia_api.py:80", "shortDescription": {"text": "Flask mutation route `inspect_fingerprint` without `@login_required` \u2014 sophia_api.py:80"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}]}}, "automationDetails": {"id": "repobility/29342"}, "properties": {"repository": "Scottcjn/Rustchain", "repoUrl": "https://github.com/Scottcjn/Rustchain", "branch": "main"}, "results": [{"ruleId": "scanner-a2a38cef42743886", "level": "note", "message": {"text": "Possibly dead Python function: scrape_metrics"}, "properties": {"repobilityId": "3c99c22eed8d6a2f", "scanner": "scanner-primary", "fingerprint": "a2a38cef42743886", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "prometheus_exporter.py:141"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-87b979f6d39ab68f", "level": "note", "message": {"text": "Possibly dead Python function: init_mood_routes"}, "properties": {"repobilityId": "ee1ac9bcd40ac23e", "scanner": "scanner-primary", "fingerprint": "87b979f6d39ab68f", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "bottube_mood_engine.py:1117"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-7aa13436db2e0b4f", "level": "note", "message": {"text": "Possibly dead Python function: mark_reviewed"}, "properties": {"repobilityId": "531fff039e54dc22", "scanner": "scanner-primary", "fingerprint": "7aa13436db2e0b4f", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "sophia_db.py:182"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-e0338d04ef1e262f", "level": "note", "message": {"text": "Possibly dead Python function: create_relationship_blueprint"}, "properties": {"repobilityId": "f5127259663432b4", "scanner": "scanner-primary", "fingerprint": "e0338d04ef1e262f", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "agent_relationships.py:1032"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-8e6585e0a5c69091", "level": "note", "message": {"text": "Possibly dead Python function: check_server"}, "properties": {"repobilityId": "5696ab70a31a30b4", "scanner": "scanner-primary", "fingerprint": "8e6585e0a5c69091", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "validate_web_explorer.py:12"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-cb6a3f6d8fc4a8c7", "level": "note", "message": {"text": "Possibly dead Python function: check_rate_limit"}, "properties": {"repobilityId": "6069ae1c618678f4", "scanner": "scanner-primary", "fingerprint": "cb6a3f6d8fc4a8c7", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "keeper_explorer.py:61"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-e23dc6f94618ff45", "level": "note", "message": {"text": "Possibly dead Python function: can_drip"}, "properties": {"repobilityId": "a618147f391c19cd", "scanner": "scanner-primary", "fingerprint": "e23dc6f94618ff45", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "faucet.py:87"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-64aefc521d4ac980", "level": "note", "message": {"text": "Possibly dead Python function: record_drip"}, "properties": {"repobilityId": "a8cfb28c9ec1bd15", "scanner": "scanner-primary", "fingerprint": "64aefc521d4ac980", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "faucet.py:115"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-7ba1ffe7b2d6d603", "level": "note", "message": {"text": "Possibly dead Python function: check_replay_attack"}, "properties": {"repobilityId": "fecbe1de6378ec5c", "scanner": "scanner-primary", "fingerprint": "7ba1ffe7b2d6d603", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "replay_defense.py:134"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-ce2ebdfe251f2b5c", "level": "note", "message": {"text": "Possibly dead Python function: record_submission"}, "properties": {"repobilityId": "f1edac2bbe6a12e2", "scanner": "scanner-primary", "fingerprint": "ce2ebdfe251f2b5c", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "replay_defense.py:218"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-cd6e7768465f209c", "level": "note", "message": {"text": "Possibly dead Python function: check_anomalies"}, "properties": {"repobilityId": "b8b55e82d4359f0d", "scanner": "scanner-primary", "fingerprint": "cd6e7768465f209c", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "replay_defense.py:292"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-c283e313350eb215", "level": "note", "message": {"text": "Possibly dead Python function: register_ledger_routes"}, "properties": {"repobilityId": "4e638a13f79400cb", "scanner": "scanner-primary", "fingerprint": "c283e313350eb215", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "payout_ledger.py:248"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-bec552f1ebe29a96", "level": "note", "message": {"text": "Possibly dead Python function: invalidate"}, "properties": {"repobilityId": "528be77e1d75b539", "scanner": "scanner-primary", "fingerprint": "bec552f1ebe29a96", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "agent_reputation.py:300"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-19e0725caa23cdb4", "level": "note", "message": {"text": "Possibly dead Python function: start_cache_refresh"}, "properties": {"repobilityId": "45895efa63e649bc", "scanner": "scanner-primary", "fingerprint": "19e0725caa23cdb4", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "agent_reputation.py:325"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-9e4cc49ef77d7d4e", "level": "note", "message": {"text": "Possibly dead Python function: reject_delivery"}, "properties": {"repobilityId": "ae3a766bc6c3ab43", "scanner": "scanner-primary", "fingerprint": "9e4cc49ef77d7d4e", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "agent_economy_sdk.py:77"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-a043641b199f2677", "level": "note", "message": {"text": "Possibly dead Python function: dispute_job"}, "properties": {"repobilityId": "a8f154832077d00c", "scanner": "scanner-primary", "fingerprint": "a043641b199f2677", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "agent_economy_sdk.py:94"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-0910c209df7b6365", "level": "note", "message": {"text": "Possibly dead Python function: cancel_job"}, "properties": {"repobilityId": "fd8d8c165089e0c3", "scanner": "scanner-primary", "fingerprint": "0910c209df7b6365", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "agent_economy_sdk.py:98"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-6d2f3f10af88ca21", "level": "note", "message": {"text": "Possibly dead Python function: broadcast_job"}, "properties": {"repobilityId": "fa3044d357bd4e8d", "scanner": "scanner-primary", "fingerprint": "6d2f3f10af88ca21", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "agent_economy_sdk.py:114"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-c164bd382a55929e", "level": "note", "message": {"text": "Possibly dead Python function: dispute_job"}, "properties": {"repobilityId": "a8f154832077d00c", "scanner": "scanner-primary", "fingerprint": "c164bd382a55929e", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "agent_sdk_demo.py:126"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-e9d3a47c96f1717e", "level": "note", "message": {"text": "Possibly dead Python function: cancel_job"}, "properties": {"repobilityId": "fd8d8c165089e0c3", "scanner": "scanner-primary", "fingerprint": "e9d3a47c96f1717e", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "agent_sdk_demo.py:138"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-e066691601852931", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: python:3.11-slim"}, "properties": {"repobilityId": "ef7fef5b775baeb4", "scanner": "scanner-primary", "fingerprint": "e066691601852931", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "Dockerfile"}, "region": {"startLine": 2}}}]}, {"ruleId": "scanner-1f47122924a6561d", "level": "error", "message": {"text": "Insecure pattern 'exec_used' in test_p2p_replay_fix.py:124"}, "properties": {"repobilityId": "d7bb2edf7fbfed14", "scanner": "scanner-primary", "fingerprint": "1f47122924a6561d", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["owasp", "exec_used"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "test_p2p_replay_fix.py"}, "region": {"startLine": 124}}}]}, {"ruleId": "scanner-91e0e5da5b7f8416", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in mining-simulator.html:268"}, "properties": {"repobilityId": "0e3f18de244af8f2", "scanner": "scanner-primary", "fingerprint": "91e0e5da5b7f8416", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "mining-simulator.html"}, "region": {"startLine": 268}}}]}, {"ruleId": "scanner-e515d8000c5f8641", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in faucet.py:316"}, "properties": {"repobilityId": "137032fd0b9dea8e", "scanner": "scanner-primary", "fingerprint": "e515d8000c5f8641", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "faucet.py"}, "region": {"startLine": 316}}}]}, {"ruleId": "scanner-9e5748ef39945d99", "level": "error", "message": {"text": "Insecure pattern 'tls_verify_false' in install-miner.sh:215"}, "properties": {"repobilityId": "c28807d548c8124d", "scanner": "scanner-primary", "fingerprint": "9e5748ef39945d99", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["owasp", "tls_verify_false"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "install-miner.sh"}, "region": {"startLine": 215}}}]}, {"ruleId": "scanner-3ffa3e01079d378b", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in security_test_payment_widget.py:113"}, "properties": {"repobilityId": "877046e6f0a71c24", "scanner": "scanner-primary", "fingerprint": "3ffa3e01079d378b", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "security_test_payment_widget.py"}, "region": {"startLine": 113}}}]}, {"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-0a672bed579c691e", "level": "note", "message": {"text": "Very large file: agent_relationships.py (1313 lines)"}, "properties": {"repobilityId": "f4427d27e1de8c1d", "scanner": "scanner-primary", "fingerprint": "0a672bed579c691e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "9db7967a59034d48", "scanner": "scanner-primary", "fingerprint": "3ab5d313dda8e5f9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["debug", "cleanup", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-72b2a6250083a784", "level": "warning", "message": {"text": "Placeholder or mock-heavy implementation detected"}, "properties": {"repobilityId": "55e2a17f11044799", "scanner": "scanner-primary", "fingerprint": "72b2a6250083a784", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "incomplete", "generated-repo-pattern"]}}, {"ruleId": "scanner-2d0c7b7ab8f8aacf", "level": "warning", "message": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "properties": {"repobilityId": "7efc5df6b259139e", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-aa0dec063466041c", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 validate_bounty_2303.py:176"}, "properties": {"repobilityId": "42fad50dc296f1ce", "scanner": "scanner-primary", "fingerprint": "aa0dec063466041c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-7012c98698089f5a", "level": "note", "message": {"text": "Legacy-named symbol `IBM_5150_v1` in keeper_explorer.py:361"}, "properties": {"repobilityId": "11a16cc84e791608", "scanner": "scanner-primary", "fingerprint": "7012c98698089f5a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-929c98e83310fc2c", "level": "note", "message": {"text": "Legacy-named symbol `rustchain_v2_integrated_v2` in replay_defense.py:18"}, "properties": {"repobilityId": "feb559d115bde768", "scanner": "scanner-primary", "fingerprint": "929c98e83310fc2c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-dcd5d96d0931eae0", "level": "note", "message": {"text": "Legacy-named symbol `rustchain_v2` in docker-entrypoint.py:24"}, "properties": {"repobilityId": "84018162ea35ab2e", "scanner": "scanner-primary", "fingerprint": "dcd5d96d0931eae0", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-79151470a4ab1c2b", "level": "note", "message": {"text": "Legacy-named symbol `rustchain_v2_integrated_v2` in integrated_node.py:10"}, "properties": {"repobilityId": "e4c135054e786e69", "scanner": "scanner-primary", "fingerprint": "79151470a4ab1c2b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-7f4c4fa1a8a84437", "level": "note", "message": {"text": "Legacy-named symbol `rustchain_v2_integrated_v2` in replay_attack_poc.py:174"}, "properties": {"repobilityId": "6428aea5e3b8e017", "scanner": "scanner-primary", "fingerprint": "7f4c4fa1a8a84437", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-c4302658ccc3d550", "level": "note", "message": {"text": "Legacy-named symbol `rustchain_v2_integrated_v2` in payout_ledger.py:5"}, "properties": {"repobilityId": "2a6dab5e6251c264", "scanner": "scanner-primary", "fingerprint": "c4302658ccc3d550", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-be5cb5ad1698ab35", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 test_ppa_compliance.py:55"}, "properties": {"repobilityId": "f1985b9af196f609", "scanner": "scanner-primary", "fingerprint": "be5cb5ad1698ab35", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f9202f6d157bfb5d", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 test_ppa_visualizer.py:101"}, "properties": {"repobilityId": "3b5ab2932ae54539", "scanner": "scanner-primary", "fingerprint": "f9202f6d157bfb5d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-554feb1b3b1bb17d", "level": "none", "message": {"text": "Commented-code block (6 lines) in rip302_agent_economy.py:619"}, "properties": {"repobilityId": "3a5ab8936a410c14", "scanner": "scanner-primary", "fingerprint": "554feb1b3b1bb17d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2734089e2746a7df", "level": "note", "message": {"text": "Legacy-named symbol `rustchain_mac_miner_v2` in setup_miner.py:26"}, "properties": {"repobilityId": "8b3ddeffad29f747", "scanner": "scanner-primary", "fingerprint": "2734089e2746a7df", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-8c41a51f7af94bf7", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 setup_miner.py:88"}, "properties": {"repobilityId": "38a23cd35cbbe0d1", "scanner": "scanner-primary", "fingerprint": "8c41a51f7af94bf7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-81e14fa1245dfeb9", "level": "none", "message": {"text": "Commented-code block (5 lines) in rip201_bucket_fix.py:181"}, "properties": {"repobilityId": "12835c0e200a5d33", "scanner": "scanner-primary", "fingerprint": "81e14fa1245dfeb9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d30f85c43b86dcf0", "level": "note", "message": {"text": "27 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "4816db1c74a26e4a", "scanner": "scanner-primary", "fingerprint": "d30f85c43b86dcf0", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "config-drift"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "b72096883f684861", "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": "ddd437a1bbe0caa9", "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": "4e3ce986593cce87", "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": "4b15d1dcd836e46a", "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": "cbcc965c344dab6d", "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": "aa9e625e21b2c57d", "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": "b980c2ff8e6eb9b1", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-be46ea126aa5d8dc", "level": "note", "message": {"text": "Near-duplicate function bodies in 3 places"}, "properties": {"repobilityId": "cd6cb47da107a93e", "scanner": "scanner-primary", "fingerprint": "be46ea126aa5d8dc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "c6fe6c7a94d23017", "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": "d8347f612cca3301", "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": "858fb8fb0d85f805", "scanner": "scanner-primary", "fingerprint": "49c98f7cedd9c977", "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": "806a9a59f95cbe2e", "scanner": "scanner-primary", "fingerprint": "49c98f7cedd9c977", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "8353774d3741c565", "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": "d72792d29ee2dce1", "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": "5c6e073bf8cca500", "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": "4190ffd8da077506", "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": "5e788633bac8a0a3", "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": "f6fadecb7b66fc4d", "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": "aa6055a62a3955bd", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-deaced46978e917c", "level": "error", "message": {"text": "Flask mutation route `disagree` without `@login_required` \u2014 agent_relationships.py:1108"}, "properties": {"repobilityId": "8d731316a5bf56f5", "scanner": "scanner-primary", "fingerprint": "deaced46978e917c", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "agent_relationships.py"}, "region": {"startLine": 1108}}}]}, {"ruleId": "scanner-bc97f4c048507618", "level": "error", "message": {"text": "Flask mutation route `collaborate` without `@login_required` \u2014 agent_relationships.py:1133"}, "properties": {"repobilityId": "61d9c0313e2819ac", "scanner": "scanner-primary", "fingerprint": "bc97f4c048507618", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "agent_relationships.py"}, "region": {"startLine": 1133}}}]}, {"ruleId": "scanner-91cc50e0c92d7c4f", "level": "error", "message": {"text": "Flask mutation route `reconcile` without `@login_required` \u2014 agent_relationships.py:1160"}, "properties": {"repobilityId": "10ae54701644a36a", "scanner": "scanner-primary", "fingerprint": "91cc50e0c92d7c4f", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "agent_relationships.py"}, "region": {"startLine": 1160}}}]}, {"ruleId": "scanner-e3afd7eb04425f8c", "level": "error", "message": {"text": "Flask mutation route `admin_intervene` without `@login_required` \u2014 agent_relationships.py:1183"}, "properties": {"repobilityId": "ac6f2d2a9215e306", "scanner": "scanner-primary", "fingerprint": "e3afd7eb04425f8c", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "agent_relationships.py"}, "region": {"startLine": 1183}}}]}, {"ruleId": "scanner-57ff39c6da81c5d0", "level": "error", "message": {"text": "Flask mutation route `faucet_drip` without `@login_required` \u2014 keeper_explorer.py:120"}, "properties": {"repobilityId": "57ea17abc1ecdfb2", "scanner": "scanner-primary", "fingerprint": "57ff39c6da81c5d0", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "keeper_explorer.py"}, "region": {"startLine": 120}}}]}, {"ruleId": "scanner-73e1e7c222d63031", "level": "error", "message": {"text": "Flask mutation route `drip` without `@login_required` \u2014 faucet.py:383"}, "properties": {"repobilityId": "dd20b042a3e832af", "scanner": "scanner-primary", "fingerprint": "73e1e7c222d63031", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "faucet.py"}, "region": {"startLine": 383}}}]}, {"ruleId": "scanner-2f9d2814b31e65fa", "level": "error", "message": {"text": "Flask mutation route `api_ledger_create` without `@login_required` \u2014 payout_ledger.py:284"}, "properties": {"repobilityId": "23608dc25730349a", "scanner": "scanner-primary", "fingerprint": "2f9d2814b31e65fa", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "payout_ledger.py"}, "region": {"startLine": 284}}}]}, {"ruleId": "scanner-e5588a4b852f0a37", "level": "error", "message": {"text": "Flask mutation route `api_ledger_update` without `@login_required` \u2014 payout_ledger.py:311"}, "properties": {"repobilityId": "2d53b10c5ea8d9f6", "scanner": "scanner-primary", "fingerprint": "e5588a4b852f0a37", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "payout_ledger.py"}, "region": {"startLine": 311}}}]}, {"ruleId": "scanner-0cb1e9fa76413005", "level": "error", "message": {"text": "Flask mutation route `create_badge` without `@login_required` \u2014 profile_badge_generator.py:170"}, "properties": {"repobilityId": "9e963d1f40e8bb79", "scanner": "scanner-primary", "fingerprint": "0cb1e9fa76413005", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "profile_badge_generator.py"}, "region": {"startLine": 170}}}]}, {"ruleId": "scanner-6ff4763e5ea7622e", "level": "error", "message": {"text": "Flask mutation route `agent_post_job` without `@login_required` \u2014 rip302_agent_economy.py:327"}, "properties": {"repobilityId": "488b7c650018682f", "scanner": "scanner-primary", "fingerprint": "6ff4763e5ea7622e", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "rip302_agent_economy.py"}, "region": {"startLine": 327}}}]}, {"ruleId": "scanner-b4c814950ff54c8c", "level": "error", "message": {"text": "Flask mutation route `agent_claim_job` without `@login_required` \u2014 rip302_agent_economy.py:437"}, "properties": {"repobilityId": "f38b6e05f582d55b", "scanner": "scanner-primary", "fingerprint": "b4c814950ff54c8c", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "rip302_agent_economy.py"}, "region": {"startLine": 437}}}]}, {"ruleId": "scanner-1e2874906d1df835", "level": "error", "message": {"text": "Flask mutation route `agent_deliver_job` without `@login_required` \u2014 rip302_agent_economy.py:511"}, "properties": {"repobilityId": "e6b61a2ece692047", "scanner": "scanner-primary", "fingerprint": "1e2874906d1df835", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "rip302_agent_economy.py"}, "region": {"startLine": 511}}}]}, {"ruleId": "scanner-5d9f875e746c365c", "level": "error", "message": {"text": "Flask mutation route `agent_accept_delivery` without `@login_required` \u2014 rip302_agent_economy.py:586"}, "properties": {"repobilityId": "9c1d1ef281106437", "scanner": "scanner-primary", "fingerprint": "5d9f875e746c365c", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "rip302_agent_economy.py"}, "region": {"startLine": 586}}}]}, {"ruleId": "scanner-a69fbf2d6eb02801", "level": "error", "message": {"text": "Flask mutation route `agent_dispute_job` without `@login_required` \u2014 rip302_agent_economy.py:703"}, "properties": {"repobilityId": "2b35a148b655ebb0", "scanner": "scanner-primary", "fingerprint": "a69fbf2d6eb02801", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "rip302_agent_economy.py"}, "region": {"startLine": 703}}}]}, {"ruleId": "scanner-8664ba341a30c7cb", "level": "error", "message": {"text": "Flask mutation route `agent_cancel_job` without `@login_required` \u2014 rip302_agent_economy.py:765"}, "properties": {"repobilityId": "51dad3df46794463", "scanner": "scanner-primary", "fingerprint": "8664ba341a30c7cb", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "rip302_agent_economy.py"}, "region": {"startLine": 765}}}]}, {"ruleId": "scanner-d9f522aa4f569b3d", "level": "error", "message": {"text": "Flask mutation route `process_payment` without `@login_required` \u2014 security_test_payment_widget.py:185"}, "properties": {"repobilityId": "955cbcfb8e95c06a", "scanner": "scanner-primary", "fingerprint": "d9f522aa4f569b3d", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "security_test_payment_widget.py"}, "region": {"startLine": 185}}}]}, {"ruleId": "scanner-78cf598323ee14c5", "level": "error", "message": {"text": "Flask mutation route `admin_login` without `@login_required` \u2014 security_test_payment_widget.py:271"}, "properties": {"repobilityId": "1e9f3ead799947c8", "scanner": "scanner-primary", "fingerprint": "78cf598323ee14c5", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "security_test_payment_widget.py"}, "region": {"startLine": 271}}}]}, {"ruleId": "scanner-6fb43fcf42ed44dd", "level": "error", "message": {"text": "Flask mutation route `register` without `@login_required` \u2014 contributor_registry.py:266"}, "properties": {"repobilityId": "b61efdaa62b69a6c", "scanner": "scanner-primary", "fingerprint": "6fb43fcf42ed44dd", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "contributor_registry.py"}, "region": {"startLine": 266}}}]}, {"ruleId": "scanner-d5682999f4125b4a", "level": "error", "message": {"text": "Flask mutation route `approve_contributor` without `@login_required` \u2014 contributor_registry.py:313"}, "properties": {"repobilityId": "0f2d9714a019fcb1", "scanner": "scanner-primary", "fingerprint": "d5682999f4125b4a", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "contributor_registry.py"}, "region": {"startLine": 313}}}]}, {"ruleId": "scanner-b6de85a9bf33f71b", "level": "error", "message": {"text": "Flask mutation route `inspect_fingerprint` without `@login_required` \u2014 sophia_api.py:80"}, "properties": {"repobilityId": "a6365afa6a7d1c7a", "scanner": "scanner-primary", "fingerprint": "b6de85a9bf33f71b", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "sophia_api.py"}, "region": {"startLine": 80}}}]}]}]}