{"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-86af3f752456bd58", "name": "Possibly dead Python function: safe_float", "shortDescription": {"text": "Possibly dead Python function: safe_float"}, "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-32ea879c0a6e9d0e", "name": "Possibly dead Python function: safe_int", "shortDescription": {"text": "Possibly dead Python function: safe_int"}, "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-25f182326c6635c9", "name": "Possibly dead Python function: rebuild_city_scores", "shortDescription": {"text": "Possibly dead Python function: rebuild_city_scores"}, "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-d779d1cca39cfd96", "name": "Possibly dead Python function: list_tool_items", "shortDescription": {"text": "Possibly dead Python function: list_tool_items"}, "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-0bdc163eec34e848", "name": "Possibly dead Python function: compute_take_home", "shortDescription": {"text": "Possibly dead Python function: compute_take_home"}, "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-93fc6ea1bc999df7", "name": "Possibly dead Python function: load_latest_agent_workflow_task_results", "shortDescription": {"text": "Possibly dead Python function: load_latest_agent_workflow_task_results"}, "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-19f0e7b07f2fbcee", "name": "Possibly dead Python function: load_floor_by_province_industry", "shortDescription": {"text": "Possibly dead Python function: load_floor_by_province_industry"}, "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-547213e9ba48c529", "name": "Possibly dead Python function: reject_duplicate_keys", "shortDescription": {"text": "Possibly dead Python function: reject_duplicate_keys"}, "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-5606f45eb8ef2ccb", "name": "Possibly dead Python function: reload_configs", "shortDescription": {"text": "Possibly dead Python function: reload_configs"}, "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-2d23f20f3dcd083f", "name": "Possibly dead Python function: load_latest_agent_workflow_task_claims", "shortDescription": {"text": "Possibly dead Python function: load_latest_agent_workflow_task_claims"}, "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-207e872e111924e6", "name": "Possibly dead Python function: load_latest_agent_workflow_run_summary", "shortDescription": {"text": "Possibly dead Python function: load_latest_agent_workflow_run_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-70e841a9e7daa7b0", "name": "Possibly dead Python function: load_latest_agent_workflow_tasks", "shortDescription": {"text": "Possibly dead Python function: load_latest_agent_workflow_tasks"}, "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-4b1f1542fff131bc", "name": "Possibly dead Python function: require_case_questionnaire_ready", "shortDescription": {"text": "Possibly dead Python function: require_case_questionnaire_ready"}, "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-d62f45b628e9636d", "name": "Possibly dead Python function: ping", "shortDescription": {"text": "Possibly dead Python function: ping"}, "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-dbf5e7af1cd6e5da", "name": "Possibly dead Python function: ping", "shortDescription": {"text": "Possibly dead Python function: ping"}, "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-421193a334f3dbcd", "name": "Possibly dead Python function: build_onet_candidates", "shortDescription": {"text": "Possibly dead Python function: build_onet_candidates"}, "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-0b991c9357b3818a", "name": "Possibly dead Python function: reject_duplicate_keys", "shortDescription": {"text": "Possibly dead Python function: reject_duplicate_keys"}, "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-847ad23be373b7a9", "name": "Possibly dead Python function: write_manifest", "shortDescription": {"text": "Possibly dead Python function: write_manifest"}, "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-701b6ba7460ef93f", "name": "Insecure pattern 'subprocess_shell_true' in scripts/gen_doc_facts.py:51", "shortDescription": {"text": "Insecure pattern 'subprocess_shell_true' in scripts/gen_doc_facts.py:51"}, "fullDescription": {"text": "Found a known-risky pattern (subprocess_shell_true). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-49ff06bbf39e1dd0", "name": "Insecure pattern 'direct_innerhtml_assignment' in frontend/console.html:76", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in frontend/console.html:76"}, "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-772f10c8d2cf507b", "name": "Insecure pattern 'direct_innerhtml_assignment' in frontend/data_catalog.html:70", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in frontend/data_catalog.html:70"}, "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-628779c2ce6aeb36", "name": "Insecure pattern 'direct_innerhtml_assignment' in holland/frontend/result.html:32", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in holland/frontend/result.html:32"}, "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-d8d86fb61ae72ce0", "name": "Insecure pattern 'direct_innerhtml_assignment' in holland/frontend/js/chart.js:179", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in holland/frontend/js/chart.js:179"}, "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-386d3f47eedc52c9", "name": "Insecure pattern 'direct_innerhtml_assignment' in holland/frontend/js/survey_config.js:66", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in holland/frontend/js/survey_config.js:66"}, "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-f00d3f8cbc649c4a", "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-56cb9f4bdf8ed210", "name": "Very large file: backend/tests/test_phase0.py (12762 lines)", "shortDescription": {"text": "Very large file: backend/tests/test_phase0.py (12762 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-13db2fedf4b59095", "name": "Very large file: frontend/js/screens_data.js (1588 lines)", "shortDescription": {"text": "Very large file: frontend/js/screens_data.js (1588 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-8a6cba19f9d01bf8", "name": "Very large file: frontend/js/screens_reportpage.js (1045 lines)", "shortDescription": {"text": "Very large file: frontend/js/screens_reportpage.js (1045 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-9abdc48530d48422", "name": "Very large file: frontend/js/screens_tool_registry.js (2385 lines)", "shortDescription": {"text": "Very large file: frontend/js/screens_tool_registry.js (2385 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-0be3543907b36939", "name": "Very large file: datahub/tests/test_contract.py (17373 lines)", "shortDescription": {"text": "Very large file: datahub/tests/test_contract.py (17373 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-ea3b5e389d8c9c0f", "name": "Low test-to-source ratio", "shortDescription": {"text": "Low test-to-source ratio"}, "fullDescription": {"text": "72 tests / 656 src (ratio 0.11)."}, "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 1175 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 42 placeholder/mock markers across 17 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-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-2679282aa1c484b5", "name": "Agent authority lacks a verifier contract: AGENTS.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: AGENTS.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-122f91b7f2906dc4", "name": "Agent authority lacks a verifier contract: .claude/settings.json", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/settings.json"}, "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-bb5f930783af61a4", "name": "Agent authority lacks a verifier contract: .claude/skills/lifehack-project-workflow/SKILL.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/skills/lifehack-project-workflow/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-9728fea3e44e1b60", "name": "Agent authority lacks a verifier contract: .claude/skills/lifehack-project-workflow/references/checklist.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/skills/lifehack-project-workflow/references/checklist.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-2f6dd35a4de5e580", "name": "Agent authority lacks a verifier contract: .claude/skills/architecture-review/SKILL.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/skills/architecture-review/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-38903053d70aaaf9", "name": "Agent authority lacks a verifier contract: .claude/skills/architecture-review/references/refactoring-patterns.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/skills/architecture-review/references/refactoring-patterns.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-19f2b6a833259de0", "name": "Agent authority lacks a verifier contract: .claude/skills/first-principles-thinking/README.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/skills/first-principles-thinking/README.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-473b2634ec886069", "name": "Agent authority lacks a verifier contract: .claude/skills/chunkymonkey-review-gate/SKILL.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/skills/chunkymonkey-review-gate/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-3d580c40ba34463e", "name": "Agent authority lacks a verifier contract: .claude/skills/chunkymonkey-governance/SKILL.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/skills/chunkymonkey-governance/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-5d12d34f27598852", "name": "Agent authority lacks a verifier contract: .claude/skills/code-simplifier/SKILL.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/skills/code-simplifier/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-c22ab899451edc5e", "name": "Legacy-named symbol `test_health_prefers_yearbook_over_legacy` in backend/tests/test_city_features_health.py:51", "shortDescription": {"text": "Legacy-named symbol `test_health_prefers_yearbook_over_legacy` in backend/tests/test_city_features_health.py:51"}, "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-f47f86e09cf000ea", "name": "Commented-code block (5 lines) in backend/tests/test_major_tags.py:148", "shortDescription": {"text": "Commented-code block (5 lines) in backend/tests/test_major_tags.py:148"}, "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-d5449a28dc61df41", "name": "Legacy-named symbol `career_default_v1` in backend/tests/test_phase0.py:547", "shortDescription": {"text": "Legacy-named symbol `career_default_v1` in backend/tests/test_phase0.py:547"}, "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-979491b50bbd0ec6", "name": "Commented-code block (5 lines) in backend/tests/test_phase0.py:65", "shortDescription": {"text": "Commented-code block (5 lines) in backend/tests/test_phase0.py:65"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e6141b53a0ab049b", "name": "Legacy-named symbol `by_old` in backend/scripts/sync_schema_registry.py:304", "shortDescription": {"text": "Legacy-named symbol `by_old` in backend/scripts/sync_schema_registry.py:304"}, "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-77e5b04b12864ead", "name": "Network/subprocess call without timeout or try/except \u2014 backend/scripts/agent_handoff.py:51", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 backend/scripts/agent_handoff.py:51"}, "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-30a488ab5bf214dd", "name": "Commented-code block (9 lines) in backend/scripts/build_decision_tags.py:40", "shortDescription": {"text": "Commented-code block (9 lines) in backend/scripts/build_decision_tags.py:40"}, "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-1590add04e12e7e5", "name": "Network/subprocess call without timeout or try/except \u2014 backend/scripts/deployment_readiness.py:89", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 backend/scripts/deployment_readiness.py:89"}, "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-41948e4fd0191da1", "name": "Legacy-named symbol `legacy_unused` in backend/scripts/migrate_register_consultation_case_2026_05_28.py:6", "shortDescription": {"text": "Legacy-named symbol `legacy_unused` in backend/scripts/migrate_register_consultation_case_2026_05_28.py:6"}, "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-3bf95206a89d4770", "name": "Legacy-named symbol `_build_copy` in backend/services/report_building_content.py:56", "shortDescription": {"text": "Legacy-named symbol `_build_copy` in backend/services/report_building_content.py:56"}, "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-8fb812555e0a7f40", "name": "Commented-code block (8 lines) in backend/services/major_city_employment_dispatch.py:297", "shortDescription": {"text": "Commented-code block (8 lines) in backend/services/major_city_employment_dispatch.py:297"}, "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-9ede5d95ec86d730", "name": "Commented-code block (5 lines) in backend/services/contract_recommend_vs_report.py:163", "shortDescription": {"text": "Commented-code block (5 lines) in backend/services/contract_recommend_vs_report.py:163"}, "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-9737f1f5b0f91dfd", "name": "Commented-code block (5 lines) in backend/services/agent_workflow_task_results.py:149", "shortDescription": {"text": "Commented-code block (5 lines) in backend/services/agent_workflow_task_results.py:149"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3abe723fee1c99e5", "name": "Legacy-named symbol `penetration_sw_v1` in backend/services/major_industry_penetration.py:90", "shortDescription": {"text": "Legacy-named symbol `penetration_sw_v1` in backend/services/major_industry_penetration.py:90"}, "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-661f115dd5e27488", "name": "Legacy-named symbol `_build_copy` in backend/services/report_building_support.py:8", "shortDescription": {"text": "Legacy-named symbol `_build_copy` in backend/services/report_building_support.py:8"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1f2ca95db5d48109", "name": "Commented-code block (5 lines) in backend/services/rank_destination.py:89", "shortDescription": {"text": "Commented-code block (5 lines) in backend/services/rank_destination.py:89"}, "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-643bd7b4a994c103", "name": "Legacy-named symbol `_build_copy` in backend/services/report_building.py:14", "shortDescription": {"text": "Legacy-named symbol `_build_copy` in backend/services/report_building.py:14"}, "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-67f29e5f0b288494", "name": "Legacy-named symbol `industry_lifecycle_v2` in backend/services/industry_lifecycle.py:33", "shortDescription": {"text": "Legacy-named symbol `industry_lifecycle_v2` in backend/services/industry_lifecycle.py:33"}, "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-233961f75fbb264f", "name": "Legacy-named symbol `fa_mart_case_recommendation_v2` in backend/services/recommendation/recommendation_repository.py:66", "shortDescription": {"text": "Legacy-named symbol `fa_mart_case_recommendation_v2` in backend/services/recommendation/recommendation_repository.py:66"}, "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-ecded1d06abbd2ca", "name": "Commented-code block (9 lines) in backend/services/recommendation/major_city_employment_evidence.py:74", "shortDescription": {"text": "Commented-code block (9 lines) in backend/services/recommendation/major_city_employment_evidence.py:74"}, "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-3e0b002db9dc2ff3", "name": "Network/subprocess call without timeout or try/except \u2014 scripts/run_source.py:56", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 scripts/run_source.py:56"}, "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-e4906abdf13b819e", "name": "Legacy-named symbol `primary_old` in scripts/gen_feature_catalog.py:1005", "shortDescription": {"text": "Legacy-named symbol `primary_old` in scripts/gen_feature_catalog.py:1005"}, "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-804d04bdc2c81bec", "name": "Network/subprocess call without timeout or try/except \u2014 scripts/gen_doc_facts.py:51", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 scripts/gen_doc_facts.py:51"}, "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-87794840af48fb23", "name": "Commented-code block (7 lines) in frontend/js/tweaks-panel.js:12", "shortDescription": {"text": "Commented-code block (7 lines) in frontend/js/tweaks-panel.js:12"}, "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-d0dda9985b5879e4", "name": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/js/screens_tool_registry.js:719", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/js/screens_tool_registry.js:719"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d9477b7b63e7432c", "name": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/js/app_state_api.js:33", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/js/app_state_api.js:33"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-80a5ec15adcd27a9", "name": "Commented-code block (5 lines) in frontend/js/modules/t_assembler.js:1", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/js/modules/t_assembler.js:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-65b59e7b7ea8cea5", "name": "Network/subprocess call without timeout or try/except \u2014 holland/scripts/fetch_onet.py:27", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 holland/scripts/fetch_onet.py:27"}, "fullDescription": {"text": "`urllib.request.urlopen(...)` 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-410c4750a2798f43", "name": "Network/subprocess call without timeout or try/except \u2014 holland/scripts/fetch_ipip.py:27", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 holland/scripts/fetch_ipip.py:27"}, "fullDescription": {"text": "`urllib.request.urlopen(...)` 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-8db61879848d1e1e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 holland/frontend/js/api.js:14", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 holland/frontend/js/api.js:14"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-88c6122744370c6f", "name": "Legacy-named symbol `family_report_template_v1` in design/screens.jsx:368", "shortDescription": {"text": "Legacy-named symbol `family_report_template_v1` in design/screens.jsx:368"}, "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-c59f98f85dfa211a", "name": "Commented-code block (7 lines) in design/tweaks-panel.jsx:12", "shortDescription": {"text": "Commented-code block (7 lines) in design/tweaks-panel.jsx:12"}, "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-ca5cbb1f31c1689f", "name": "Legacy-named symbol `whitepaper_v1` in design/data.jsx:1", "shortDescription": {"text": "Legacy-named symbol `whitepaper_v1` in design/data.jsx: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-ced4935e855cebff", "name": "Legacy-named symbol `career_default_v1` in datahub/tests/test_contract.py:7473", "shortDescription": {"text": "Legacy-named symbol `career_default_v1` in datahub/tests/test_contract.py:7473"}, "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-0aa47dfc409c10b3", "name": "Commented-code block (6 lines) in datahub/datahub/builders/outcome_policy_hint_batch.py:851", "shortDescription": {"text": "Commented-code block (6 lines) in datahub/datahub/builders/outcome_policy_hint_batch.py:851"}, "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-f4425147e4e0d9ea", "name": "Commented-code block (5 lines) in datahub/datahub/builders/city_yearbook_package.py:165", "shortDescription": {"text": "Commented-code block (5 lines) in datahub/datahub/builders/city_yearbook_package.py:165"}, "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-df9245f1ff35e3c9", "name": "Legacy-named symbol `career_default_v1` in datahub/datahub/builders/career_score.py:142", "shortDescription": {"text": "Legacy-named symbol `career_default_v1` in datahub/datahub/builders/career_score.py:142"}, "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-8ebfb0858967076c", "name": "Network/subprocess call without timeout or try/except \u2014 datahub/datahub/parsers/ln_score_distribution_grid_images.py:292", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 datahub/datahub/parsers/ln_score_distribution_grid_images.py:292"}, "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-a128a6634ce6fe20", "name": "Commented-code block (7 lines) in datahub/datahub/connectors/chsi_admission_regulation.py:121", "shortDescription": {"text": "Commented-code block (7 lines) in datahub/datahub/connectors/chsi_admission_regulation.py:121"}, "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-6c3b873ac8a4768f", "name": "Commented-code block (6 lines) in datahub/datahub/connectors/moe_official.py:259", "shortDescription": {"text": "Commented-code block (6 lines) in datahub/datahub/connectors/moe_official.py:259"}, "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-e196f6d8b7614ba1", "name": "Commented-code block (6 lines) in datahub/datahub/connectors/amap_brand_density.py:135", "shortDescription": {"text": "Commented-code block (6 lines) in datahub/datahub/connectors/amap_brand_density.py:135"}, "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-bd6f1c78ec733d68", "name": "Legacy-named symbol `tmp_copy` in datahub/datahub/connectors/amap_transit_batch.py:59", "shortDescription": {"text": "Legacy-named symbol `tmp_copy` in datahub/datahub/connectors/amap_transit_batch.py:59"}, "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-1dba75aef03555fd", "name": "Network/subprocess call without timeout or try/except \u2014 datahub/datahub/connectors/macos_vision_ocr.py:78", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 datahub/datahub/connectors/macos_vision_ocr.py:78"}, "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-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:\nbackend/api/router_console.py:configs, backend/api/router_console.py:config\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:\nbackend/scripts/build_zhilian_salary.py:import_zhilian_salary_package, backend/scripts/build_major_setup_change.py:import_major_setup_change_package, backend/scripts/build_discipline_eval.py:import_discipline_eval_package, backend/scripts/build_school_salary_ranking.py:import_school_salary_ranking_package\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:\nbackend/services/model_tuning.py:save_model_tuning_run, backend/services/model_audit.py:save_model_audit_run, backend/services/model_feedback.py:save_model_feedback_run\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-71e059d0e7d79301", "name": "FastAPI POST `save_answers` without auth dependency \u2014 backend/api/router_questionnaire.py:208", "shortDescription": {"text": "FastAPI POST `save_answers` without auth dependency \u2014 backend/api/router_questionnaire.py:208"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d2d7febf5604f981", "name": "FastAPI DELETE `clear_answers` without auth dependency \u2014 backend/api/router_questionnaire.py:232", "shortDescription": {"text": "FastAPI DELETE `clear_answers` without auth dependency \u2014 backend/api/router_questionnaire.py:232"}, "fullDescription": {"text": "`@router.delete` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-10baa65f7fe410ac", "name": "FastAPI PATCH `patch_config` without auth dependency \u2014 backend/api/router_console.py:45", "shortDescription": {"text": "FastAPI PATCH `patch_config` without auth dependency \u2014 backend/api/router_console.py:45"}, "fullDescription": {"text": "`@router.patch` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0e36df4fba5531eb", "name": "FastAPI POST `preference_match_post` without auth dependency \u2014 backend/api/router_preference_match.py:188", "shortDescription": {"text": "FastAPI POST `preference_match_post` without auth dependency \u2014 backend/api/router_preference_match.py:188"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5dd57d1ca55e20c4", "name": "FastAPI POST `data_update_run` without auth dependency \u2014 backend/api/router_data_updates.py:142", "shortDescription": {"text": "FastAPI POST `data_update_run` without auth dependency \u2014 backend/api/router_data_updates.py:142"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-cf97b92b03ee0eca", "name": "FastAPI POST `data_update_run_replay` without auth dependency \u2014 backend/api/router_data_updates.py:169", "shortDescription": {"text": "FastAPI POST `data_update_run_replay` without auth dependency \u2014 backend/api/router_data_updates.py:169"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e0438f2bdb15f4ed", "name": "FastAPI POST `scope_query` without auth dependency \u2014 backend/api/router_scope.py:33", "shortDescription": {"text": "FastAPI POST `scope_query` without auth dependency \u2014 backend/api/router_scope.py:33"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4ef995818c38b7f2", "name": "FastAPI POST `create` without auth dependency \u2014 backend/api/router_advisor_admin.py:54", "shortDescription": {"text": "FastAPI POST `create` without auth dependency \u2014 backend/api/router_advisor_admin.py:54"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8112663e440dd866", "name": "FastAPI PATCH `patch_expiry` without auth dependency \u2014 backend/api/router_advisor_admin.py:87", "shortDescription": {"text": "FastAPI PATCH `patch_expiry` without auth dependency \u2014 backend/api/router_advisor_admin.py:87"}, "fullDescription": {"text": "`@router.patch` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-cb1edfd4e0da28c7", "name": "FastAPI PATCH `patch_status` without auth dependency \u2014 backend/api/router_advisor_admin.py:101", "shortDescription": {"text": "FastAPI PATCH `patch_status` without auth dependency \u2014 backend/api/router_advisor_admin.py:101"}, "fullDescription": {"text": "`@router.patch` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e0ae1dc9e53cd94c", "name": "FastAPI POST `build_report` without auth dependency \u2014 backend/api/router_reports.py:44", "shortDescription": {"text": "FastAPI POST `build_report` without auth dependency \u2014 backend/api/router_reports.py:44"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b824116606af5b30", "name": "FastAPI POST `build_report_pdf` without auth dependency \u2014 backend/api/router_reports.py:63", "shortDescription": {"text": "FastAPI POST `build_report_pdf` without auth dependency \u2014 backend/api/router_reports.py:63"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0689bfc6dd95872d", "name": "FastAPI POST `set_weights` without auth dependency \u2014 backend/api/router_score.py:155", "shortDescription": {"text": "FastAPI POST `set_weights` without auth dependency \u2014 backend/api/router_score.py:155"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2b713e7daf7f6776", "name": "FastAPI POST `upsert_case` without auth dependency \u2014 backend/api/router_cases.py:320", "shortDescription": {"text": "FastAPI POST `upsert_case` without auth dependency \u2014 backend/api/router_cases.py:320"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4d342e4c9c1eae08", "name": "FastAPI DELETE `delete_case` without auth dependency \u2014 backend/api/router_cases.py:363", "shortDescription": {"text": "FastAPI DELETE `delete_case` without auth dependency \u2014 backend/api/router_cases.py:363"}, "fullDescription": {"text": "`@router.delete` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5fda1c9228812fc4", "name": "FastAPI POST `save_case_holland_snapshot` without auth dependency \u2014 backend/api/router_assessments.py:79", "shortDescription": {"text": "FastAPI POST `save_case_holland_snapshot` without auth dependency \u2014 backend/api/router_assessments.py:79"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-cce2168480404796", "name": "FastAPI POST `sync_case_holland_snapshot` without auth dependency \u2014 backend/api/router_assessments.py:96", "shortDescription": {"text": "FastAPI POST `sync_case_holland_snapshot` without auth dependency \u2014 backend/api/router_assessments.py:96"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1bef894c8f3786ec", "name": "FastAPI POST `data_governance_major_city_employment_backlog_claims_create` without auth dependency \u2014 backend/api/router_", "shortDescription": {"text": "FastAPI POST `data_governance_major_city_employment_backlog_claims_create` without auth dependency \u2014 backend/api/router_data_governance.py:94"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-236d9e7394c2742e", "name": "FastAPI POST `data_governance_major_city_employment_backlog_dispatch_create` without auth dependency \u2014 backend/api/route", "shortDescription": {"text": "FastAPI POST `data_governance_major_city_employment_backlog_dispatch_create` without auth dependency \u2014 backend/api/router_data_governance.py:179"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-fa950b4454fc9256", "name": "FastAPI PATCH `data_governance_major_city_employment_backlog_claims_update` without auth dependency \u2014 backend/api/router", "shortDescription": {"text": "FastAPI PATCH `data_governance_major_city_employment_backlog_claims_update` without auth dependency \u2014 backend/api/router_data_governance.py:211"}, "fullDescription": {"text": "`@router.patch` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-df12205f1a2a167c", "name": "FastAPI POST `save_agent_workflow_task_result_api` without auth dependency \u2014 backend/api/router_tools.py:254", "shortDescription": {"text": "FastAPI POST `save_agent_workflow_task_result_api` without auth dependency \u2014 backend/api/router_tools.py:254"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-04686377bc21736c", "name": "FastAPI POST `claim_agent_workflow_tasks_api` without auth dependency \u2014 backend/api/router_tools.py:297", "shortDescription": {"text": "FastAPI POST `claim_agent_workflow_tasks_api` without auth dependency \u2014 backend/api/router_tools.py:297"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-41d21bf80d9ca368", "name": "FastAPI PATCH `update_agent_workflow_task_claim_api` without auth dependency \u2014 backend/api/router_tools.py:329", "shortDescription": {"text": "FastAPI PATCH `update_agent_workflow_task_claim_api` without auth dependency \u2014 backend/api/router_tools.py:329"}, "fullDescription": {"text": "`@router.patch` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2b618cc2c7fde843", "name": "FastAPI POST `save_model_feedback` without auth dependency \u2014 backend/api/router_tools.py:399", "shortDescription": {"text": "FastAPI POST `save_model_feedback` without auth dependency \u2014 backend/api/router_tools.py:399"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0db037dde3ade047", "name": "FastAPI POST `submit_answers` without auth dependency \u2014 holland/backend/main.py:420", "shortDescription": {"text": "FastAPI POST `submit_answers` without auth dependency \u2014 holland/backend/main.py:420"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2588e21994a42776", "name": "Dangling fetch: GET /api/industry/overview (frontend/js/screens_tools.js:510)", "shortDescription": {"text": "Dangling fetch: GET /api/industry/overview (frontend/js/screens_tools.js:510)"}, "fullDescription": {"text": "`frontend/js/screens_tools.js:510` calls `GET /api/industry/overview` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/industry/overview`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4f809564d24c21ec", "name": "Dangling fetch: GET /api/config/report_template (frontend/js/screens_reportpage.js:177)", "shortDescription": {"text": "Dangling fetch: GET /api/config/report_template (frontend/js/screens_reportpage.js:177)"}, "fullDescription": {"text": "`frontend/js/screens_reportpage.js:177` calls `GET /api/config/report_template` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/config/report_template`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1c6c4699ffa1c894", "name": "Dangling fetch: GET /api/industry/overview (frontend/js/screens_reportpage.js:181)", "shortDescription": {"text": "Dangling fetch: GET /api/industry/overview (frontend/js/screens_reportpage.js:181)"}, "fullDescription": {"text": "`frontend/js/screens_reportpage.js:181` calls `GET /api/industry/overview` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/industry/overview`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-004ae2f8480b6321", "name": "Dangling fetch: POST /api/tools/workflow/task-claims (frontend/js/screens_tool_registry.js:646)", "shortDescription": {"text": "Dangling fetch: POST /api/tools/workflow/task-claims (frontend/js/screens_tool_registry.js:646)"}, "fullDescription": {"text": "`frontend/js/screens_tool_registry.js:646` calls `POST /api/tools/workflow/task-claims` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/tools/workflow/task-claims`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b9479dbd53476ceb", "name": "Dangling fetch: PATCH /api/tools/workflow/task-claims/${encodeURIComponent(claimId)} (frontend/js/screens_tool_registry.", "shortDescription": {"text": "Dangling fetch: PATCH /api/tools/workflow/task-claims/${encodeURIComponent(claimId)} (frontend/js/screens_tool_registry.js:680)"}, "fullDescription": {"text": "`frontend/js/screens_tool_registry.js:680` calls `PATCH /api/tools/workflow/task-claims/${encodeURIComponent(claimId)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/tools/workflow/task-claims/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-510a011f1484ac0c", "name": "Dangling fetch: POST /api/tools/workflow/task-results (frontend/js/screens_tool_registry.js:719)", "shortDescription": {"text": "Dangling fetch: POST /api/tools/workflow/task-results (frontend/js/screens_tool_registry.js:719)"}, "fullDescription": {"text": "`frontend/js/screens_tool_registry.js:719` calls `POST /api/tools/workflow/task-results` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/tools/workflow/task-results`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-574d4c2c2f5f673d", "name": "Dangling fetch: GET /api/config/decision_views (frontend/js/modules/decision_views.js:143)", "shortDescription": {"text": "Dangling fetch: GET /api/config/decision_views (frontend/js/modules/decision_views.js:143)"}, "fullDescription": {"text": "`frontend/js/modules/decision_views.js:143` calls `GET /api/config/decision_views` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/config/decision_views`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5baa8971ebe192a1", "name": "Unused endpoint: GET /", "shortDescription": {"text": "Unused endpoint: GET /"}, "fullDescription": {"text": "`backend/main.py` declares `GET /` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8c764236e00ab24b", "name": "Unused endpoint: GET /profile/{adcode}", "shortDescription": {"text": "Unused endpoint: GET /profile/{adcode}"}, "fullDescription": {"text": "`backend/api/router_city.py` declares `GET /profile/{adcode}` 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-1a8637967a8c4ce6", "name": "Unused endpoint: GET /top", "shortDescription": {"text": "Unused endpoint: GET /top"}, "fullDescription": {"text": "`backend/api/router_city.py` declares `GET /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-18a4887e7bea6b36", "name": "Unused endpoint: GET /compare", "shortDescription": {"text": "Unused endpoint: GET /compare"}, "fullDescription": {"text": "`backend/api/router_city.py` declares `GET /compare` 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-a35ce3e9c9f59e0a", "name": "Unused endpoint: GET /companies", "shortDescription": {"text": "Unused endpoint: GET /companies"}, "fullDescription": {"text": "`backend/api/router_city.py` declares `GET /companies` 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-34a0d470c601d97f", "name": "Unused endpoint: GET /catalog", "shortDescription": {"text": "Unused endpoint: GET /catalog"}, "fullDescription": {"text": "`backend/api/router_data.py` declares `GET /catalog` 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-d16e4fa529c520e9", "name": "Unused endpoint: GET /search", "shortDescription": {"text": "Unused endpoint: GET /search"}, "fullDescription": {"text": "`backend/api/router_occupation.py` declares `GET /search` 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-ce2a13e6f980c7f0", "name": "Unused endpoint: GET /profile/{occupation_code}", "shortDescription": {"text": "Unused endpoint: GET /profile/{occupation_code}"}, "fullDescription": {"text": "`backend/api/router_occupation.py` declares `GET /profile/{occupation_code}` 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-a6f48e60c30777ab", "name": "Unused endpoint: GET /config", "shortDescription": {"text": "Unused endpoint: GET /config"}, "fullDescription": {"text": "`backend/api/router_questionnaire.py` declares `GET /config` 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-d884f87a598b481c", "name": "Unused endpoint: GET /{case_id}", "shortDescription": {"text": "Unused endpoint: GET /{case_id}"}, "fullDescription": {"text": "`backend/api/router_questionnaire.py` declares `GET /{case_id}` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-98bba7b387c9a121", "name": "Unused endpoint: GET /{case_id}/analysis", "shortDescription": {"text": "Unused endpoint: GET /{case_id}/analysis"}, "fullDescription": {"text": "`backend/api/router_questionnaire.py` declares `GET /{case_id}/analysis` 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-e4a62e43f9d1a886", "name": "Unused endpoint: POST /{case_id}", "shortDescription": {"text": "Unused endpoint: POST /{case_id}"}, "fullDescription": {"text": "`backend/api/router_questionnaire.py` declares `POST /{case_id}` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-dd341977131ea1ae", "name": "Unused endpoint: DELETE /{case_id}", "shortDescription": {"text": "Unused endpoint: DELETE /{case_id}"}, "fullDescription": {"text": "`backend/api/router_questionnaire.py` declares `DELETE /{case_id}` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-65dcdfe977c2b64d", "name": "Unused endpoint: GET /configs", "shortDescription": {"text": "Unused endpoint: GET /configs"}, "fullDescription": {"text": "`backend/api/router_console.py` declares `GET /configs` 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-13972d1a3e1df594", "name": "Unused endpoint: GET /config/{key}", "shortDescription": {"text": "Unused endpoint: GET /config/{key}"}, "fullDescription": {"text": "`backend/api/router_console.py` declares `GET /config/{key}` 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-712609adc7919c34", "name": "Unused endpoint: PATCH /config/{key}", "shortDescription": {"text": "Unused endpoint: PATCH /config/{key}"}, "fullDescription": {"text": "`backend/api/router_console.py` declares `PATCH /config/{key}` 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-e34f02337c261a05", "name": "Unused endpoint: GET /branding", "shortDescription": {"text": "Unused endpoint: GET /branding"}, "fullDescription": {"text": "`backend/api/router_console.py` declares `GET /branding` 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-00d297d86aa253fe", "name": "Unused endpoint: GET /audit", "shortDescription": {"text": "Unused endpoint: GET /audit"}, "fullDescription": {"text": "`backend/api/router_console.py` declares `GET /audit` 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-48b28a219ae90459", "name": "Unused endpoint: GET /browse/{key}", "shortDescription": {"text": "Unused endpoint: GET /browse/{key}"}, "fullDescription": {"text": "`backend/api/router_data_browse.py` declares `GET /browse/{key}` 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-d789462128461661", "name": "Unused endpoint: GET /{key}", "shortDescription": {"text": "Unused endpoint: GET /{key}"}, "fullDescription": {"text": "`backend/api/router_config.py` declares `GET /{key}` 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-8e0e6ce0aa5f9f9a", "name": "Unused endpoint: POST /{case_id}/preference-match", "shortDescription": {"text": "Unused endpoint: POST /{case_id}/preference-match"}, "fullDescription": {"text": "`backend/api/router_preference_match.py` declares `POST /{case_id}/preference-match` 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-9000ff21e6d923fa", "name": "Unused endpoint: GET /{case_id}/preference-match", "shortDescription": {"text": "Unused endpoint: GET /{case_id}/preference-match"}, "fullDescription": {"text": "`backend/api/router_preference_match.py` declares `GET /{case_id}/preference-match` 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-0fb4d670dfdf454d", "name": "Unused endpoint: GET /{case_id}/preference-match/snapshots", "shortDescription": {"text": "Unused endpoint: GET /{case_id}/preference-match/snapshots"}, "fullDescription": {"text": "`backend/api/router_preference_match.py` declares `GET /{case_id}/preference-match/snapshots` 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-e5db59e23711517e", "name": "Unused endpoint: GET /{case_id}/preference-match/diff", "shortDescription": {"text": "Unused endpoint: GET /{case_id}/preference-match/diff"}, "fullDescription": {"text": "`backend/api/router_preference_match.py` declares `GET /{case_id}/preference-match/diff` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-69a693dfc33637f4", "name": "Unused endpoint: POST /run", "shortDescription": {"text": "Unused endpoint: POST /run"}, "fullDescription": {"text": "`backend/api/router_data_updates.py` declares `POST /run` 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-4cf54aebe21a71a6", "name": "Unused endpoint: POST /replay", "shortDescription": {"text": "Unused endpoint: POST /replay"}, "fullDescription": {"text": "`backend/api/router_data_updates.py` declares `POST /replay` 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-50c5b56f3232049a", "name": "Unused endpoint: GET /{run_id}/steps", "shortDescription": {"text": "Unused endpoint: GET /{run_id}/steps"}, "fullDescription": {"text": "`backend/api/router_data_updates.py` declares `GET /{run_id}/steps` 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-b8bdde7919452c0d", "name": "Unused endpoint: GET /{run_id}/source-health", "shortDescription": {"text": "Unused endpoint: GET /{run_id}/source-health"}, "fullDescription": {"text": "`backend/api/router_data_updates.py` declares `GET /{run_id}/source-health` 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-8d11b1c17c1c58c6", "name": "Unused endpoint: GET /facets", "shortDescription": {"text": "Unused endpoint: GET /facets"}, "fullDescription": {"text": "`backend/api/router_scope.py` declares `GET /facets` 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-7a009b1a56794f45", "name": "Unused endpoint: POST /", "shortDescription": {"text": "Unused endpoint: POST /"}, "fullDescription": {"text": "`backend/api/router_advisor_admin.py` declares `POST /` 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-e7742d6ec1214461", "name": "Unused endpoint: GET /{advisor_id}", "shortDescription": {"text": "Unused endpoint: GET /{advisor_id}"}, "fullDescription": {"text": "`backend/api/router_advisor_admin.py` declares `GET /{advisor_id}` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1ba11dbd52e505da", "name": "Unused endpoint: PATCH /{advisor_id}/expiry", "shortDescription": {"text": "Unused endpoint: PATCH /{advisor_id}/expiry"}, "fullDescription": {"text": "`backend/api/router_advisor_admin.py` declares `PATCH /{advisor_id}/expiry` 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-eaec616eb5e1d913", "name": "Unused endpoint: PATCH /{advisor_id}/status", "shortDescription": {"text": "Unused endpoint: PATCH /{advisor_id}/status"}, "fullDescription": {"text": "`backend/api/router_advisor_admin.py` declares `PATCH /{advisor_id}/status` 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-eafb61067d2cfcc3", "name": "Unused endpoint: GET /profile/{major_code}", "shortDescription": {"text": "Unused endpoint: GET /profile/{major_code}"}, "fullDescription": {"text": "`backend/api/router_major.py` declares `GET /profile/{major_code}` 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-e3cf105ca70fd620", "name": "Unused endpoint: GET /strength", "shortDescription": {"text": "Unused endpoint: GET /strength"}, "fullDescription": {"text": "`backend/api/router_major.py` declares `GET /strength` 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-3e07059cbd3422bc", "name": "Unused endpoint: GET /{major_code}/industry", "shortDescription": {"text": "Unused endpoint: GET /{major_code}/industry"}, "fullDescription": {"text": "`backend/api/router_major.py` declares `GET /{major_code}/industry` 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-53f34d2fe097426d", "name": "Unused endpoint: POST /{case_id}/build", "shortDescription": {"text": "Unused endpoint: POST /{case_id}/build"}, "fullDescription": {"text": "`backend/api/router_reports.py` declares `POST /{case_id}/build` 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-b1834509a48d6c7b", "name": "Unused endpoint: POST /{case_id}/pdf", "shortDescription": {"text": "Unused endpoint: POST /{case_id}/pdf"}, "fullDescription": {"text": "`backend/api/router_reports.py` declares `POST /{case_id}/pdf` 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-052d183299658b50", "name": "Unused endpoint: GET /{case_id}/revisit/snapshots", "shortDescription": {"text": "Unused endpoint: GET /{case_id}/revisit/snapshots"}, "fullDescription": {"text": "`backend/api/router_reports.py` declares `GET /{case_id}/revisit/snapshots` 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-b50cd2a0c1f1a91f", "name": "Unused endpoint: GET /{case_id}/revisit", "shortDescription": {"text": "Unused endpoint: GET /{case_id}/revisit"}, "fullDescription": {"text": "`backend/api/router_reports.py` declares `GET /{case_id}/revisit` 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-cd8dc4599ec52a08", "name": "Unused endpoint: GET /stats", "shortDescription": {"text": "Unused endpoint: GET /stats"}, "fullDescription": {"text": "`backend/api/router_data_stats.py` declares `GET /stats` 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-6c752fcaade5f108", "name": "Unused endpoint: GET /lineage", "shortDescription": {"text": "Unused endpoint: GET /lineage"}, "fullDescription": {"text": "`backend/api/router_data_lineage.py` declares `GET /lineage` 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-d3ef0da5b6adb169", "name": "Unused endpoint: GET /recommend", "shortDescription": {"text": "Unused endpoint: GET /recommend"}, "fullDescription": {"text": "`backend/api/router_score.py` declares `GET /recommend` 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-f83ea6b58c5846c4", "name": "Unused endpoint: GET /history/{school_code}", "shortDescription": {"text": "Unused endpoint: GET /history/{school_code}"}, "fullDescription": {"text": "`backend/api/router_score.py` declares `GET /history/{school_code}` 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-4f91d8ceddcfd408", "name": "Unused endpoint: GET /schools/search", "shortDescription": {"text": "Unused endpoint: GET /schools/search"}, "fullDescription": {"text": "`backend/api/router_score.py` declares `GET /schools/search` 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-8eefec7059b0a0ce", "name": "Unused endpoint: GET /batches", "shortDescription": {"text": "Unused endpoint: GET /batches"}, "fullDescription": {"text": "`backend/api/router_score.py` declares `GET /batches` 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-5b211dbe169ade71", "name": "Unused endpoint: GET /weights", "shortDescription": {"text": "Unused endpoint: GET /weights"}, "fullDescription": {"text": "`backend/api/router_score.py` declares `GET /weights` 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-247b70e9f0d8160d", "name": "Unused endpoint: POST /weights", "shortDescription": {"text": "Unused endpoint: POST /weights"}, "fullDescription": {"text": "`backend/api/router_score.py` declares `POST /weights` 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-784e15096c10f7c3", "name": "Unused endpoint: GET /profile/{sw_l2}", "shortDescription": {"text": "Unused endpoint: GET /profile/{sw_l2}"}, "fullDescription": {"text": "`backend/api/router_industry.py` declares `GET /profile/{sw_l2}` 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-ac2f552bf9d967ce", "name": "Unused endpoint: GET /overview", "shortDescription": {"text": "Unused endpoint: GET /overview"}, "fullDescription": {"text": "`backend/api/router_industry.py` declares `GET /overview` 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/25243"}, "properties": {"repository": "dare2live/lifehack", "repoUrl": "https://github.com/dare2live/lifehack", "branch": "main"}, "results": [{"ruleId": "scanner-86af3f752456bd58", "level": "note", "message": {"text": "Possibly dead Python function: safe_float"}, "properties": {"repobilityId": "1dbb9c8ede0ce099", "scanner": "scanner-primary", "fingerprint": "86af3f752456bd58", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/scripts/ingest_admission_data.py:46"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-32ea879c0a6e9d0e", "level": "note", "message": {"text": "Possibly dead Python function: safe_int"}, "properties": {"repobilityId": "09788d12566a407c", "scanner": "scanner-primary", "fingerprint": "32ea879c0a6e9d0e", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/scripts/ingest_admission_data.py:55"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-25f182326c6635c9", "level": "note", "message": {"text": "Possibly dead Python function: rebuild_city_scores"}, "properties": {"repobilityId": "cf6ad8a841ca69d6", "scanner": "scanner-primary", "fingerprint": "25f182326c6635c9", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/services/city_scoring.py:26"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-d779d1cca39cfd96", "level": "note", "message": {"text": "Possibly dead Python function: list_tool_items"}, "properties": {"repobilityId": "52cc5b5267092daf", "scanner": "scanner-primary", "fingerprint": "d779d1cca39cfd96", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/services/tool_registry.py:19"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-0bdc163eec34e848", "level": "note", "message": {"text": "Possibly dead Python function: compute_take_home"}, "properties": {"repobilityId": "ee322f2b05170478", "scanner": "scanner-primary", "fingerprint": "0bdc163eec34e848", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/services/take_home_wage.py:38"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-93fc6ea1bc999df7", "level": "note", "message": {"text": "Possibly dead Python function: load_latest_agent_workflow_task_results"}, "properties": {"repobilityId": "d7e8f5f4209de603", "scanner": "scanner-primary", "fingerprint": "93fc6ea1bc999df7", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/services/agent_workflow_task_results.py:413"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-19f0e7b07f2fbcee", "level": "note", "message": {"text": "Possibly dead Python function: load_floor_by_province_industry"}, "properties": {"repobilityId": "62971dbd9561675b", "scanner": "scanner-primary", "fingerprint": "19f0e7b07f2fbcee", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/services/wage_caliber.py:90"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-547213e9ba48c529", "level": "note", "message": {"text": "Possibly dead Python function: reject_duplicate_keys"}, "properties": {"repobilityId": "7135374d5ecc7826", "scanner": "scanner-primary", "fingerprint": "547213e9ba48c529", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/services/json_loader.py:21"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-5606f45eb8ef2ccb", "level": "note", "message": {"text": "Possibly dead Python function: reload_configs"}, "properties": {"repobilityId": "c90ac4e9754e508e", "scanner": "scanner-primary", "fingerprint": "5606f45eb8ef2ccb", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/services/config_loader.py:137"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-2d23f20f3dcd083f", "level": "note", "message": {"text": "Possibly dead Python function: load_latest_agent_workflow_task_claims"}, "properties": {"repobilityId": "c2fd59309197eea9", "scanner": "scanner-primary", "fingerprint": "2d23f20f3dcd083f", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/services/agent_workflow_task_claims.py:325"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-207e872e111924e6", "level": "note", "message": {"text": "Possibly dead Python function: load_latest_agent_workflow_run_summary"}, "properties": {"repobilityId": "36d726ad08e0765f", "scanner": "scanner-primary", "fingerprint": "207e872e111924e6", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/services/agent_workflow_registry.py:326"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-70e841a9e7daa7b0", "level": "note", "message": {"text": "Possibly dead Python function: load_latest_agent_workflow_tasks"}, "properties": {"repobilityId": "6cd80fb64fb26755", "scanner": "scanner-primary", "fingerprint": "70e841a9e7daa7b0", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/services/agent_workflow_registry.py:670"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-4b1f1542fff131bc", "level": "note", "message": {"text": "Possibly dead Python function: require_case_questionnaire_ready"}, "properties": {"repobilityId": "99f23bb2c6625e86", "scanner": "scanner-primary", "fingerprint": "4b1f1542fff131bc", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/services/recommendation/questionnaire_gate.py:28"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-d62f45b628e9636d", "level": "note", "message": {"text": "Possibly dead Python function: ping"}, "properties": {"repobilityId": "5b21778574bcfba0", "scanner": "scanner-primary", "fingerprint": "d62f45b628e9636d", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/services/chunky_bridge/__init__.py:67"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-dbf5e7af1cd6e5da", "level": "note", "message": {"text": "Possibly dead Python function: ping"}, "properties": {"repobilityId": "5b21778574bcfba0", "scanner": "scanner-primary", "fingerprint": "dbf5e7af1cd6e5da", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/services/chunky_bridge/queries.py:417"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-421193a334f3dbcd", "level": "note", "message": {"text": "Possibly dead Python function: build_onet_candidates"}, "properties": {"repobilityId": "829d2095bf3a1b9e", "scanner": "scanner-primary", "fingerprint": "421193a334f3dbcd", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "holland/backend/question_candidates.py:170"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-0b991c9357b3818a", "level": "note", "message": {"text": "Possibly dead Python function: reject_duplicate_keys"}, "properties": {"repobilityId": "7135374d5ecc7826", "scanner": "scanner-primary", "fingerprint": "0b991c9357b3818a", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "datahub/datahub/config.py:16"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-847ad23be373b7a9", "level": "note", "message": {"text": "Possibly dead Python function: write_manifest"}, "properties": {"repobilityId": "295bec3014a915c8", "scanner": "scanner-primary", "fingerprint": "847ad23be373b7a9", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "datahub/datahub/exporters/package_exporter.py:18"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-701b6ba7460ef93f", "level": "error", "message": {"text": "Insecure pattern 'subprocess_shell_true' in scripts/gen_doc_facts.py:51"}, "properties": {"repobilityId": "9057596435e4a91d", "scanner": "scanner-primary", "fingerprint": "701b6ba7460ef93f", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["owasp", "subprocess_shell_true"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/gen_doc_facts.py"}, "region": {"startLine": 51}}}]}, {"ruleId": "scanner-49ff06bbf39e1dd0", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in frontend/console.html:76"}, "properties": {"repobilityId": "ff16fe7c335197a4", "scanner": "scanner-primary", "fingerprint": "49ff06bbf39e1dd0", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "frontend/console.html"}, "region": {"startLine": 76}}}]}, {"ruleId": "scanner-772f10c8d2cf507b", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in frontend/data_catalog.html:70"}, "properties": {"repobilityId": "3e098ba7b3fbd346", "scanner": "scanner-primary", "fingerprint": "772f10c8d2cf507b", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "frontend/data_catalog.html"}, "region": {"startLine": 70}}}]}, {"ruleId": "scanner-628779c2ce6aeb36", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in holland/frontend/result.html:32"}, "properties": {"repobilityId": "cc2fa908031001c7", "scanner": "scanner-primary", "fingerprint": "628779c2ce6aeb36", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "holland/frontend/result.html"}, "region": {"startLine": 32}}}]}, {"ruleId": "scanner-d8d86fb61ae72ce0", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in holland/frontend/js/chart.js:179"}, "properties": {"repobilityId": "977ad1620d14daad", "scanner": "scanner-primary", "fingerprint": "d8d86fb61ae72ce0", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "holland/frontend/js/chart.js"}, "region": {"startLine": 179}}}]}, {"ruleId": "scanner-386d3f47eedc52c9", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in holland/frontend/js/survey_config.js:66"}, "properties": {"repobilityId": "25979822e5e37b49", "scanner": "scanner-primary", "fingerprint": "386d3f47eedc52c9", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "holland/frontend/js/survey_config.js"}, "region": {"startLine": 66}}}]}, {"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-f00d3f8cbc649c4a", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "664b48c6f8bd5b9e", "scanner": "scanner-primary", "fingerprint": "f00d3f8cbc649c4a", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/phase0_no_db_gates.yml"}, "region": {"startLine": 22}}}]}, {"ruleId": "scanner-f00d3f8cbc649c4a", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "b41dad1ca3c73119", "scanner": "scanner-primary", "fingerprint": "f00d3f8cbc649c4a", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/phase0_no_db_gates.yml"}, "region": {"startLine": 25}}}]}, {"ruleId": "scanner-56cb9f4bdf8ed210", "level": "note", "message": {"text": "Very large file: backend/tests/test_phase0.py (12762 lines)"}, "properties": {"repobilityId": "8a837d3a4f55505a", "scanner": "scanner-primary", "fingerprint": "56cb9f4bdf8ed210", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-13db2fedf4b59095", "level": "note", "message": {"text": "Very large file: frontend/js/screens_data.js (1588 lines)"}, "properties": {"repobilityId": "e447d3ec3a01fda6", "scanner": "scanner-primary", "fingerprint": "13db2fedf4b59095", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-8a6cba19f9d01bf8", "level": "note", "message": {"text": "Very large file: frontend/js/screens_reportpage.js (1045 lines)"}, "properties": {"repobilityId": "324d830763ba8e3f", "scanner": "scanner-primary", "fingerprint": "8a6cba19f9d01bf8", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-9abdc48530d48422", "level": "note", "message": {"text": "Very large file: frontend/js/screens_tool_registry.js (2385 lines)"}, "properties": {"repobilityId": "aa8b93e7572a8a23", "scanner": "scanner-primary", "fingerprint": "9abdc48530d48422", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-0be3543907b36939", "level": "note", "message": {"text": "Very large file: datahub/tests/test_contract.py (17373 lines)"}, "properties": {"repobilityId": "7d2b9388dc6309bf", "scanner": "scanner-primary", "fingerprint": "0be3543907b36939", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-ea3b5e389d8c9c0f", "level": "note", "message": {"text": "Low test-to-source ratio"}, "properties": {"repobilityId": "ef7b2552cc00a375", "scanner": "scanner-primary", "fingerprint": "ea3b5e389d8c9c0f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["tests"]}}, {"ruleId": "scanner-141b30a41e03817b", "level": "note", "message": {"text": "No license file detected"}, "properties": {"repobilityId": "79ec216266d54ba7", "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": "df03936dd32678d8", "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": "f1d98242949bb5a0", "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": "9172f1eaa99eb878", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-749d4bc1bd66df5f", "level": "warning", "message": {"text": "Agent instructions exist but release-hardening basics are missing"}, "properties": {"repobilityId": "7442839018712ec3", "scanner": "scanner-primary", "fingerprint": "749d4bc1bd66df5f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-2679282aa1c484b5", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: AGENTS.md"}, "properties": {"repobilityId": "27d579812e6be614", "scanner": "scanner-primary", "fingerprint": "2679282aa1c484b5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "agents_md"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "AGENTS.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-122f91b7f2906dc4", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/settings.json"}, "properties": {"repobilityId": "a2967269048b6a9d", "scanner": "scanner-primary", "fingerprint": "122f91b7f2906dc4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/settings.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-bb5f930783af61a4", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/skills/lifehack-project-workflow/SKILL.md"}, "properties": {"repobilityId": "985b6e85fcad7e3b", "scanner": "scanner-primary", "fingerprint": "bb5f930783af61a4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/lifehack-project-workflow/SKILL.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-9728fea3e44e1b60", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/skills/lifehack-project-workflow/references/checklist.md"}, "properties": {"repobilityId": "3c04c2d3464b6111", "scanner": "scanner-primary", "fingerprint": "9728fea3e44e1b60", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/lifehack-project-workflow/references/checklist.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-2f6dd35a4de5e580", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/skills/architecture-review/SKILL.md"}, "properties": {"repobilityId": "f724fb7db858f18d", "scanner": "scanner-primary", "fingerprint": "2f6dd35a4de5e580", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/architecture-review/SKILL.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-38903053d70aaaf9", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/skills/architecture-review/references/refactoring-patterns.md"}, "properties": {"repobilityId": "ac92d3c4395070cf", "scanner": "scanner-primary", "fingerprint": "38903053d70aaaf9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/architecture-review/references/refactoring-patterns.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-19f2b6a833259de0", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/skills/first-principles-thinking/README.md"}, "properties": {"repobilityId": "7a74541e90342540", "scanner": "scanner-primary", "fingerprint": "19f2b6a833259de0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/first-principles-thinking/README.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-473b2634ec886069", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/skills/chunkymonkey-review-gate/SKILL.md"}, "properties": {"repobilityId": "95a344b3fc921ffe", "scanner": "scanner-primary", "fingerprint": "473b2634ec886069", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/chunkymonkey-review-gate/SKILL.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3d580c40ba34463e", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/skills/chunkymonkey-governance/SKILL.md"}, "properties": {"repobilityId": "7f5220ef18a751cb", "scanner": "scanner-primary", "fingerprint": "3d580c40ba34463e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/chunkymonkey-governance/SKILL.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-5d12d34f27598852", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/skills/code-simplifier/SKILL.md"}, "properties": {"repobilityId": "f722719cc6c535b7", "scanner": "scanner-primary", "fingerprint": "5d12d34f27598852", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/code-simplifier/SKILL.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-c22ab899451edc5e", "level": "note", "message": {"text": "Legacy-named symbol `test_health_prefers_yearbook_over_legacy` in backend/tests/test_city_features_health.py:51"}, "properties": {"repobilityId": "c548b2c893c60dc7", "scanner": "scanner-primary", "fingerprint": "c22ab899451edc5e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-f47f86e09cf000ea", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/tests/test_major_tags.py:148"}, "properties": {"repobilityId": "fedabbc7d8eb8754", "scanner": "scanner-primary", "fingerprint": "f47f86e09cf000ea", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d5449a28dc61df41", "level": "note", "message": {"text": "Legacy-named symbol `career_default_v1` in backend/tests/test_phase0.py:547"}, "properties": {"repobilityId": "587565398810282d", "scanner": "scanner-primary", "fingerprint": "d5449a28dc61df41", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-979491b50bbd0ec6", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/tests/test_phase0.py:65"}, "properties": {"repobilityId": "b1af3e5f9fc2de0c", "scanner": "scanner-primary", "fingerprint": "979491b50bbd0ec6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e6141b53a0ab049b", "level": "note", "message": {"text": "Legacy-named symbol `by_old` in backend/scripts/sync_schema_registry.py:304"}, "properties": {"repobilityId": "212449a6c32004eb", "scanner": "scanner-primary", "fingerprint": "e6141b53a0ab049b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-77e5b04b12864ead", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 backend/scripts/agent_handoff.py:51"}, "properties": {"repobilityId": "a2986c26e6fccae0", "scanner": "scanner-primary", "fingerprint": "77e5b04b12864ead", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-30a488ab5bf214dd", "level": "none", "message": {"text": "Commented-code block (9 lines) in backend/scripts/build_decision_tags.py:40"}, "properties": {"repobilityId": "5ac94477a5fac42f", "scanner": "scanner-primary", "fingerprint": "30a488ab5bf214dd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1590add04e12e7e5", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 backend/scripts/deployment_readiness.py:89"}, "properties": {"repobilityId": "1f01f99722d72ab5", "scanner": "scanner-primary", "fingerprint": "1590add04e12e7e5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-41948e4fd0191da1", "level": "note", "message": {"text": "Legacy-named symbol `legacy_unused` in backend/scripts/migrate_register_consultation_case_2026_05_28.py:6"}, "properties": {"repobilityId": "324992c955e9a7d8", "scanner": "scanner-primary", "fingerprint": "41948e4fd0191da1", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-3bf95206a89d4770", "level": "note", "message": {"text": "Legacy-named symbol `_build_copy` in backend/services/report_building_content.py:56"}, "properties": {"repobilityId": "494a08ca9cabf4df", "scanner": "scanner-primary", "fingerprint": "3bf95206a89d4770", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-8fb812555e0a7f40", "level": "none", "message": {"text": "Commented-code block (8 lines) in backend/services/major_city_employment_dispatch.py:297"}, "properties": {"repobilityId": "2c2fd6be682874de", "scanner": "scanner-primary", "fingerprint": "8fb812555e0a7f40", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9ede5d95ec86d730", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/services/contract_recommend_vs_report.py:163"}, "properties": {"repobilityId": "4c82595075a3ddfe", "scanner": "scanner-primary", "fingerprint": "9ede5d95ec86d730", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9737f1f5b0f91dfd", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/services/agent_workflow_task_results.py:149"}, "properties": {"repobilityId": "91b9e4ec39d35b7b", "scanner": "scanner-primary", "fingerprint": "9737f1f5b0f91dfd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3abe723fee1c99e5", "level": "note", "message": {"text": "Legacy-named symbol `penetration_sw_v1` in backend/services/major_industry_penetration.py:90"}, "properties": {"repobilityId": "17041029a393097f", "scanner": "scanner-primary", "fingerprint": "3abe723fee1c99e5", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-661f115dd5e27488", "level": "note", "message": {"text": "Legacy-named symbol `_build_copy` in backend/services/report_building_support.py:8"}, "properties": {"repobilityId": "e9f36e99dd22b12c", "scanner": "scanner-primary", "fingerprint": "661f115dd5e27488", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-1f2ca95db5d48109", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/services/rank_destination.py:89"}, "properties": {"repobilityId": "0d67733b73cb2625", "scanner": "scanner-primary", "fingerprint": "1f2ca95db5d48109", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-643bd7b4a994c103", "level": "note", "message": {"text": "Legacy-named symbol `_build_copy` in backend/services/report_building.py:14"}, "properties": {"repobilityId": "b86846a3f96fd6c2", "scanner": "scanner-primary", "fingerprint": "643bd7b4a994c103", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-67f29e5f0b288494", "level": "note", "message": {"text": "Legacy-named symbol `industry_lifecycle_v2` in backend/services/industry_lifecycle.py:33"}, "properties": {"repobilityId": "967e1173b2561202", "scanner": "scanner-primary", "fingerprint": "67f29e5f0b288494", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-233961f75fbb264f", "level": "note", "message": {"text": "Legacy-named symbol `fa_mart_case_recommendation_v2` in backend/services/recommendation/recommendation_repository.py:66"}, "properties": {"repobilityId": "b9ee573567cc5678", "scanner": "scanner-primary", "fingerprint": "233961f75fbb264f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-ecded1d06abbd2ca", "level": "none", "message": {"text": "Commented-code block (9 lines) in backend/services/recommendation/major_city_employment_evidence.py:74"}, "properties": {"repobilityId": "9141b49853ff184c", "scanner": "scanner-primary", "fingerprint": "ecded1d06abbd2ca", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3e0b002db9dc2ff3", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 scripts/run_source.py:56"}, "properties": {"repobilityId": "623cd24b089cdd13", "scanner": "scanner-primary", "fingerprint": "3e0b002db9dc2ff3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e4906abdf13b819e", "level": "note", "message": {"text": "Legacy-named symbol `primary_old` in scripts/gen_feature_catalog.py:1005"}, "properties": {"repobilityId": "d1dfd129a16976b6", "scanner": "scanner-primary", "fingerprint": "e4906abdf13b819e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-804d04bdc2c81bec", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 scripts/gen_doc_facts.py:51"}, "properties": {"repobilityId": "07108a8d0ee2662b", "scanner": "scanner-primary", "fingerprint": "804d04bdc2c81bec", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-87794840af48fb23", "level": "none", "message": {"text": "Commented-code block (7 lines) in frontend/js/tweaks-panel.js:12"}, "properties": {"repobilityId": "fe3a15b65c4a7aa6", "scanner": "scanner-primary", "fingerprint": "87794840af48fb23", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d0dda9985b5879e4", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/js/screens_tool_registry.js:719"}, "properties": {"repobilityId": "b958d76f982f09fb", "scanner": "scanner-primary", "fingerprint": "d0dda9985b5879e4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d9477b7b63e7432c", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/js/app_state_api.js:33"}, "properties": {"repobilityId": "fccdb8c2cb52bfa1", "scanner": "scanner-primary", "fingerprint": "d9477b7b63e7432c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-80a5ec15adcd27a9", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/js/modules/t_assembler.js:1"}, "properties": {"repobilityId": "03f2993376c0a420", "scanner": "scanner-primary", "fingerprint": "80a5ec15adcd27a9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-65b59e7b7ea8cea5", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 holland/scripts/fetch_onet.py:27"}, "properties": {"repobilityId": "8c284547600c03ac", "scanner": "scanner-primary", "fingerprint": "65b59e7b7ea8cea5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-410c4750a2798f43", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 holland/scripts/fetch_ipip.py:27"}, "properties": {"repobilityId": "f34a1c9befde243e", "scanner": "scanner-primary", "fingerprint": "410c4750a2798f43", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-8db61879848d1e1e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 holland/frontend/js/api.js:14"}, "properties": {"repobilityId": "ec85a781fc1e11a0", "scanner": "scanner-primary", "fingerprint": "8db61879848d1e1e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-88c6122744370c6f", "level": "note", "message": {"text": "Legacy-named symbol `family_report_template_v1` in design/screens.jsx:368"}, "properties": {"repobilityId": "b3370c42268a381e", "scanner": "scanner-primary", "fingerprint": "88c6122744370c6f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-c59f98f85dfa211a", "level": "none", "message": {"text": "Commented-code block (7 lines) in design/tweaks-panel.jsx:12"}, "properties": {"repobilityId": "dec5a91b99df4a19", "scanner": "scanner-primary", "fingerprint": "c59f98f85dfa211a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ca5cbb1f31c1689f", "level": "note", "message": {"text": "Legacy-named symbol `whitepaper_v1` in design/data.jsx:1"}, "properties": {"repobilityId": "4db7d951b56d7e6e", "scanner": "scanner-primary", "fingerprint": "ca5cbb1f31c1689f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-ced4935e855cebff", "level": "note", "message": {"text": "Legacy-named symbol `career_default_v1` in datahub/tests/test_contract.py:7473"}, "properties": {"repobilityId": "35f0d8cfa36b5ab1", "scanner": "scanner-primary", "fingerprint": "ced4935e855cebff", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-0aa47dfc409c10b3", "level": "none", "message": {"text": "Commented-code block (6 lines) in datahub/datahub/builders/outcome_policy_hint_batch.py:851"}, "properties": {"repobilityId": "c2112afb8d9954a8", "scanner": "scanner-primary", "fingerprint": "0aa47dfc409c10b3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f4425147e4e0d9ea", "level": "none", "message": {"text": "Commented-code block (5 lines) in datahub/datahub/builders/city_yearbook_package.py:165"}, "properties": {"repobilityId": "9f067c7c09147caa", "scanner": "scanner-primary", "fingerprint": "f4425147e4e0d9ea", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-df9245f1ff35e3c9", "level": "note", "message": {"text": "Legacy-named symbol `career_default_v1` in datahub/datahub/builders/career_score.py:142"}, "properties": {"repobilityId": "91825f6164ac01b5", "scanner": "scanner-primary", "fingerprint": "df9245f1ff35e3c9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-8ebfb0858967076c", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 datahub/datahub/parsers/ln_score_distribution_grid_images.py:292"}, "properties": {"repobilityId": "616bc0daba7e4697", "scanner": "scanner-primary", "fingerprint": "8ebfb0858967076c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a128a6634ce6fe20", "level": "none", "message": {"text": "Commented-code block (7 lines) in datahub/datahub/connectors/chsi_admission_regulation.py:121"}, "properties": {"repobilityId": "d8e994bd9c8c6770", "scanner": "scanner-primary", "fingerprint": "a128a6634ce6fe20", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6c3b873ac8a4768f", "level": "none", "message": {"text": "Commented-code block (6 lines) in datahub/datahub/connectors/moe_official.py:259"}, "properties": {"repobilityId": "73af215e9bc898ad", "scanner": "scanner-primary", "fingerprint": "6c3b873ac8a4768f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e196f6d8b7614ba1", "level": "none", "message": {"text": "Commented-code block (6 lines) in datahub/datahub/connectors/amap_brand_density.py:135"}, "properties": {"repobilityId": "a2db9b96b7248feb", "scanner": "scanner-primary", "fingerprint": "e196f6d8b7614ba1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bd6f1c78ec733d68", "level": "note", "message": {"text": "Legacy-named symbol `tmp_copy` in datahub/datahub/connectors/amap_transit_batch.py:59"}, "properties": {"repobilityId": "0c9368c0864d06a9", "scanner": "scanner-primary", "fingerprint": "bd6f1c78ec733d68", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-1dba75aef03555fd", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 datahub/datahub/connectors/macos_vision_ocr.py:78"}, "properties": {"repobilityId": "17c25fdcff392ae0", "scanner": "scanner-primary", "fingerprint": "1dba75aef03555fd", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "5c843cf5e8f247ee", "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": "cefbdb7a2c535948", "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": "cf37ed0bc6e17ec4", "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": "882a1523c17baf0b", "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": "196a21e1f38e28e9", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "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": "d0b400fd91c20ee9", "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": "4da8ac9d65c66acc", "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": "6d3a5af26ec56cc2", "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": "23457947da0f8109", "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": "2632ee286d8eb06b", "scanner": "scanner-primary", "fingerprint": "be46ea126aa5d8dc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-be46ea126aa5d8dc", "level": "note", "message": {"text": "Near-duplicate function bodies in 3 places"}, "properties": {"repobilityId": "71c3ac718c095a26", "scanner": "scanner-primary", "fingerprint": "be46ea126aa5d8dc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-be46ea126aa5d8dc", "level": "note", "message": {"text": "Near-duplicate function bodies in 3 places"}, "properties": {"repobilityId": "0cd147db887dc28f", "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": "98fdadabfb94b404", "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": "d736f4be80275201", "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": "20e3e9e0d378354f", "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": "699c18bfa231c20b", "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": "8aa764ec96238e37", "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": "ea63a1de21c10581", "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": "b03df939a852325f", "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": "f4563a0a1fc2279a", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-71e059d0e7d79301", "level": "error", "message": {"text": "FastAPI POST `save_answers` without auth dependency \u2014 backend/api/router_questionnaire.py:208"}, "properties": {"repobilityId": "bd1dc09a8da4a532", "scanner": "scanner-primary", "fingerprint": "71e059d0e7d79301", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/api/router_questionnaire.py"}, "region": {"startLine": 208}}}]}, {"ruleId": "scanner-d2d7febf5604f981", "level": "error", "message": {"text": "FastAPI DELETE `clear_answers` without auth dependency \u2014 backend/api/router_questionnaire.py:232"}, "properties": {"repobilityId": "a01ff75bed15e989", "scanner": "scanner-primary", "fingerprint": "d2d7febf5604f981", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/api/router_questionnaire.py"}, "region": {"startLine": 232}}}]}, {"ruleId": "scanner-10baa65f7fe410ac", "level": "error", "message": {"text": "FastAPI PATCH `patch_config` without auth dependency \u2014 backend/api/router_console.py:45"}, "properties": {"repobilityId": "8fc9edc0857d0aa9", "scanner": "scanner-primary", "fingerprint": "10baa65f7fe410ac", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/api/router_console.py"}, "region": {"startLine": 45}}}]}, {"ruleId": "scanner-0e36df4fba5531eb", "level": "error", "message": {"text": "FastAPI POST `preference_match_post` without auth dependency \u2014 backend/api/router_preference_match.py:188"}, "properties": {"repobilityId": "c979ec3d913e8c5c", "scanner": "scanner-primary", "fingerprint": "0e36df4fba5531eb", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/api/router_preference_match.py"}, "region": {"startLine": 188}}}]}, {"ruleId": "scanner-5dd57d1ca55e20c4", "level": "error", "message": {"text": "FastAPI POST `data_update_run` without auth dependency \u2014 backend/api/router_data_updates.py:142"}, "properties": {"repobilityId": "9e2c612a271a7bf5", "scanner": "scanner-primary", "fingerprint": "5dd57d1ca55e20c4", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/api/router_data_updates.py"}, "region": {"startLine": 142}}}]}, {"ruleId": "scanner-cf97b92b03ee0eca", "level": "error", "message": {"text": "FastAPI POST `data_update_run_replay` without auth dependency \u2014 backend/api/router_data_updates.py:169"}, "properties": {"repobilityId": "8587290461d4b0c0", "scanner": "scanner-primary", "fingerprint": "cf97b92b03ee0eca", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/api/router_data_updates.py"}, "region": {"startLine": 169}}}]}, {"ruleId": "scanner-e0438f2bdb15f4ed", "level": "error", "message": {"text": "FastAPI POST `scope_query` without auth dependency \u2014 backend/api/router_scope.py:33"}, "properties": {"repobilityId": "6ef65454c2c13aee", "scanner": "scanner-primary", "fingerprint": "e0438f2bdb15f4ed", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/api/router_scope.py"}, "region": {"startLine": 33}}}]}, {"ruleId": "scanner-4ef995818c38b7f2", "level": "error", "message": {"text": "FastAPI POST `create` without auth dependency \u2014 backend/api/router_advisor_admin.py:54"}, "properties": {"repobilityId": "ac10d229aeee1d63", "scanner": "scanner-primary", "fingerprint": "4ef995818c38b7f2", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/api/router_advisor_admin.py"}, "region": {"startLine": 54}}}]}, {"ruleId": "scanner-8112663e440dd866", "level": "error", "message": {"text": "FastAPI PATCH `patch_expiry` without auth dependency \u2014 backend/api/router_advisor_admin.py:87"}, "properties": {"repobilityId": "49047465045959bf", "scanner": "scanner-primary", "fingerprint": "8112663e440dd866", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/api/router_advisor_admin.py"}, "region": {"startLine": 87}}}]}, {"ruleId": "scanner-cb1edfd4e0da28c7", "level": "error", "message": {"text": "FastAPI PATCH `patch_status` without auth dependency \u2014 backend/api/router_advisor_admin.py:101"}, "properties": {"repobilityId": "8a70df10551f6e95", "scanner": "scanner-primary", "fingerprint": "cb1edfd4e0da28c7", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/api/router_advisor_admin.py"}, "region": {"startLine": 101}}}]}, {"ruleId": "scanner-e0ae1dc9e53cd94c", "level": "error", "message": {"text": "FastAPI POST `build_report` without auth dependency \u2014 backend/api/router_reports.py:44"}, "properties": {"repobilityId": "b61bcee46f651d40", "scanner": "scanner-primary", "fingerprint": "e0ae1dc9e53cd94c", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/api/router_reports.py"}, "region": {"startLine": 44}}}]}, {"ruleId": "scanner-b824116606af5b30", "level": "error", "message": {"text": "FastAPI POST `build_report_pdf` without auth dependency \u2014 backend/api/router_reports.py:63"}, "properties": {"repobilityId": "5114529c6f4616a2", "scanner": "scanner-primary", "fingerprint": "b824116606af5b30", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/api/router_reports.py"}, "region": {"startLine": 63}}}]}, {"ruleId": "scanner-0689bfc6dd95872d", "level": "error", "message": {"text": "FastAPI POST `set_weights` without auth dependency \u2014 backend/api/router_score.py:155"}, "properties": {"repobilityId": "eaf3b45c8e025561", "scanner": "scanner-primary", "fingerprint": "0689bfc6dd95872d", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/api/router_score.py"}, "region": {"startLine": 155}}}]}, {"ruleId": "scanner-2b713e7daf7f6776", "level": "error", "message": {"text": "FastAPI POST `upsert_case` without auth dependency \u2014 backend/api/router_cases.py:320"}, "properties": {"repobilityId": "fe619b3ec3a7d314", "scanner": "scanner-primary", "fingerprint": "2b713e7daf7f6776", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/api/router_cases.py"}, "region": {"startLine": 320}}}]}, {"ruleId": "scanner-4d342e4c9c1eae08", "level": "error", "message": {"text": "FastAPI DELETE `delete_case` without auth dependency \u2014 backend/api/router_cases.py:363"}, "properties": {"repobilityId": "4c90fb1040ebca8f", "scanner": "scanner-primary", "fingerprint": "4d342e4c9c1eae08", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/api/router_cases.py"}, "region": {"startLine": 363}}}]}, {"ruleId": "scanner-5fda1c9228812fc4", "level": "error", "message": {"text": "FastAPI POST `save_case_holland_snapshot` without auth dependency \u2014 backend/api/router_assessments.py:79"}, "properties": {"repobilityId": "a9752652fcf0f552", "scanner": "scanner-primary", "fingerprint": "5fda1c9228812fc4", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/api/router_assessments.py"}, "region": {"startLine": 79}}}]}, {"ruleId": "scanner-cce2168480404796", "level": "error", "message": {"text": "FastAPI POST `sync_case_holland_snapshot` without auth dependency \u2014 backend/api/router_assessments.py:96"}, "properties": {"repobilityId": "ca630202b753f0a6", "scanner": "scanner-primary", "fingerprint": "cce2168480404796", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/api/router_assessments.py"}, "region": {"startLine": 96}}}]}, {"ruleId": "scanner-1bef894c8f3786ec", "level": "error", "message": {"text": "FastAPI POST `data_governance_major_city_employment_backlog_claims_create` without auth dependency \u2014 backend/api/router_data_governance.py:94"}, "properties": {"repobilityId": "1f0e8097f06b8063", "scanner": "scanner-primary", "fingerprint": "1bef894c8f3786ec", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/api/router_data_governance.py"}, "region": {"startLine": 94}}}]}, {"ruleId": "scanner-236d9e7394c2742e", "level": "error", "message": {"text": "FastAPI POST `data_governance_major_city_employment_backlog_dispatch_create` without auth dependency \u2014 backend/api/router_data_governance.py:179"}, "properties": {"repobilityId": "5b378ae4a77818b2", "scanner": "scanner-primary", "fingerprint": "236d9e7394c2742e", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/api/router_data_governance.py"}, "region": {"startLine": 179}}}]}, {"ruleId": "scanner-fa950b4454fc9256", "level": "error", "message": {"text": "FastAPI PATCH `data_governance_major_city_employment_backlog_claims_update` without auth dependency \u2014 backend/api/router_data_governance.py:211"}, "properties": {"repobilityId": "12ec140bc89e1a4d", "scanner": "scanner-primary", "fingerprint": "fa950b4454fc9256", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/api/router_data_governance.py"}, "region": {"startLine": 211}}}]}, {"ruleId": "scanner-df12205f1a2a167c", "level": "error", "message": {"text": "FastAPI POST `save_agent_workflow_task_result_api` without auth dependency \u2014 backend/api/router_tools.py:254"}, "properties": {"repobilityId": "78eb7c40d4ee1fc6", "scanner": "scanner-primary", "fingerprint": "df12205f1a2a167c", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/api/router_tools.py"}, "region": {"startLine": 254}}}]}, {"ruleId": "scanner-04686377bc21736c", "level": "error", "message": {"text": "FastAPI POST `claim_agent_workflow_tasks_api` without auth dependency \u2014 backend/api/router_tools.py:297"}, "properties": {"repobilityId": "8d048d1d80d67363", "scanner": "scanner-primary", "fingerprint": "04686377bc21736c", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/api/router_tools.py"}, "region": {"startLine": 297}}}]}, {"ruleId": "scanner-41d21bf80d9ca368", "level": "error", "message": {"text": "FastAPI PATCH `update_agent_workflow_task_claim_api` without auth dependency \u2014 backend/api/router_tools.py:329"}, "properties": {"repobilityId": "66a9043e6ec867e9", "scanner": "scanner-primary", "fingerprint": "41d21bf80d9ca368", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/api/router_tools.py"}, "region": {"startLine": 329}}}]}, {"ruleId": "scanner-2b618cc2c7fde843", "level": "error", "message": {"text": "FastAPI POST `save_model_feedback` without auth dependency \u2014 backend/api/router_tools.py:399"}, "properties": {"repobilityId": "b0ee9cbe91534b85", "scanner": "scanner-primary", "fingerprint": "2b618cc2c7fde843", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/api/router_tools.py"}, "region": {"startLine": 399}}}]}, {"ruleId": "scanner-0db037dde3ade047", "level": "error", "message": {"text": "FastAPI POST `submit_answers` without auth dependency \u2014 holland/backend/main.py:420"}, "properties": {"repobilityId": "930008c6ca92494a", "scanner": "scanner-primary", "fingerprint": "0db037dde3ade047", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "holland/backend/main.py"}, "region": {"startLine": 420}}}]}, {"ruleId": "scanner-2588e21994a42776", "level": "error", "message": {"text": "Dangling fetch: GET /api/industry/overview (frontend/js/screens_tools.js:510)"}, "properties": {"repobilityId": "bcd2721afeb51da9", "scanner": "scanner-primary", "fingerprint": "2588e21994a42776", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4f809564d24c21ec", "level": "error", "message": {"text": "Dangling fetch: GET /api/config/report_template (frontend/js/screens_reportpage.js:177)"}, "properties": {"repobilityId": "ee279c27b8ad48e1", "scanner": "scanner-primary", "fingerprint": "4f809564d24c21ec", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1c6c4699ffa1c894", "level": "error", "message": {"text": "Dangling fetch: GET /api/industry/overview (frontend/js/screens_reportpage.js:181)"}, "properties": {"repobilityId": "c68c4a7aa4b94079", "scanner": "scanner-primary", "fingerprint": "1c6c4699ffa1c894", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-004ae2f8480b6321", "level": "error", "message": {"text": "Dangling fetch: POST /api/tools/workflow/task-claims (frontend/js/screens_tool_registry.js:646)"}, "properties": {"repobilityId": "3b1ecf765343a66c", "scanner": "scanner-primary", "fingerprint": "004ae2f8480b6321", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b9479dbd53476ceb", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/tools/workflow/task-claims/${encodeURIComponent(claimId)} (frontend/js/screens_tool_registry.js:680)"}, "properties": {"repobilityId": "60652eda201b847c", "scanner": "scanner-primary", "fingerprint": "b9479dbd53476ceb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-510a011f1484ac0c", "level": "error", "message": {"text": "Dangling fetch: POST /api/tools/workflow/task-results (frontend/js/screens_tool_registry.js:719)"}, "properties": {"repobilityId": "cb8705b9beda3095", "scanner": "scanner-primary", "fingerprint": "510a011f1484ac0c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-574d4c2c2f5f673d", "level": "error", "message": {"text": "Dangling fetch: GET /api/config/decision_views (frontend/js/modules/decision_views.js:143)"}, "properties": {"repobilityId": "3603ab11f0d54e50", "scanner": "scanner-primary", "fingerprint": "574d4c2c2f5f673d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5baa8971ebe192a1", "level": "note", "message": {"text": "Unused endpoint: GET /"}, "properties": {"repobilityId": "9266ee3970fba636", "scanner": "scanner-primary", "fingerprint": "5baa8971ebe192a1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8c764236e00ab24b", "level": "note", "message": {"text": "Unused endpoint: GET /profile/{adcode}"}, "properties": {"repobilityId": "29a9d4a80f7e75fe", "scanner": "scanner-primary", "fingerprint": "8c764236e00ab24b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1a8637967a8c4ce6", "level": "note", "message": {"text": "Unused endpoint: GET /top"}, "properties": {"repobilityId": "03ea2c6457ce2bfb", "scanner": "scanner-primary", "fingerprint": "1a8637967a8c4ce6", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-18a4887e7bea6b36", "level": "note", "message": {"text": "Unused endpoint: GET /compare"}, "properties": {"repobilityId": "1f6c57e33e0fd64b", "scanner": "scanner-primary", "fingerprint": "18a4887e7bea6b36", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a35ce3e9c9f59e0a", "level": "note", "message": {"text": "Unused endpoint: GET /companies"}, "properties": {"repobilityId": "9780f349fdb22584", "scanner": "scanner-primary", "fingerprint": "a35ce3e9c9f59e0a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-34a0d470c601d97f", "level": "note", "message": {"text": "Unused endpoint: GET /catalog"}, "properties": {"repobilityId": "b5a929b813b2d448", "scanner": "scanner-primary", "fingerprint": "34a0d470c601d97f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d16e4fa529c520e9", "level": "note", "message": {"text": "Unused endpoint: GET /search"}, "properties": {"repobilityId": "0c0635e78b5fd7cc", "scanner": "scanner-primary", "fingerprint": "d16e4fa529c520e9", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ce2a13e6f980c7f0", "level": "note", "message": {"text": "Unused endpoint: GET /profile/{occupation_code}"}, "properties": {"repobilityId": "02da7fac3e69514f", "scanner": "scanner-primary", "fingerprint": "ce2a13e6f980c7f0", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a6f48e60c30777ab", "level": "note", "message": {"text": "Unused endpoint: GET /config"}, "properties": {"repobilityId": "03f735193c68b91f", "scanner": "scanner-primary", "fingerprint": "a6f48e60c30777ab", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d884f87a598b481c", "level": "note", "message": {"text": "Unused endpoint: GET /{case_id}"}, "properties": {"repobilityId": "e643701b68c38860", "scanner": "scanner-primary", "fingerprint": "d884f87a598b481c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-98bba7b387c9a121", "level": "note", "message": {"text": "Unused endpoint: GET /{case_id}/analysis"}, "properties": {"repobilityId": "c1b6a910134a3bcd", "scanner": "scanner-primary", "fingerprint": "98bba7b387c9a121", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e4a62e43f9d1a886", "level": "note", "message": {"text": "Unused endpoint: POST /{case_id}"}, "properties": {"repobilityId": "bc0d5652559b89e8", "scanner": "scanner-primary", "fingerprint": "e4a62e43f9d1a886", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-dd341977131ea1ae", "level": "note", "message": {"text": "Unused endpoint: DELETE /{case_id}"}, "properties": {"repobilityId": "35613c14f254d997", "scanner": "scanner-primary", "fingerprint": "dd341977131ea1ae", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-65dcdfe977c2b64d", "level": "note", "message": {"text": "Unused endpoint: GET /configs"}, "properties": {"repobilityId": "5a8a312a9c06f207", "scanner": "scanner-primary", "fingerprint": "65dcdfe977c2b64d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-13972d1a3e1df594", "level": "note", "message": {"text": "Unused endpoint: GET /config/{key}"}, "properties": {"repobilityId": "9ca129646f55226a", "scanner": "scanner-primary", "fingerprint": "13972d1a3e1df594", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-712609adc7919c34", "level": "note", "message": {"text": "Unused endpoint: PATCH /config/{key}"}, "properties": {"repobilityId": "7be1ffc58e6ce704", "scanner": "scanner-primary", "fingerprint": "712609adc7919c34", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e34f02337c261a05", "level": "note", "message": {"text": "Unused endpoint: GET /branding"}, "properties": {"repobilityId": "47340be2c988f2ae", "scanner": "scanner-primary", "fingerprint": "e34f02337c261a05", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-00d297d86aa253fe", "level": "note", "message": {"text": "Unused endpoint: GET /audit"}, "properties": {"repobilityId": "27cbc2507271118b", "scanner": "scanner-primary", "fingerprint": "00d297d86aa253fe", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-48b28a219ae90459", "level": "note", "message": {"text": "Unused endpoint: GET /browse/{key}"}, "properties": {"repobilityId": "f7f12cbbb7209a0b", "scanner": "scanner-primary", "fingerprint": "48b28a219ae90459", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d789462128461661", "level": "note", "message": {"text": "Unused endpoint: GET /{key}"}, "properties": {"repobilityId": "a26f772c91f1279c", "scanner": "scanner-primary", "fingerprint": "d789462128461661", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8e0e6ce0aa5f9f9a", "level": "note", "message": {"text": "Unused endpoint: POST /{case_id}/preference-match"}, "properties": {"repobilityId": "cbff9dc98a4056cc", "scanner": "scanner-primary", "fingerprint": "8e0e6ce0aa5f9f9a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-9000ff21e6d923fa", "level": "note", "message": {"text": "Unused endpoint: GET /{case_id}/preference-match"}, "properties": {"repobilityId": "b2e2fb785a683603", "scanner": "scanner-primary", "fingerprint": "9000ff21e6d923fa", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-0fb4d670dfdf454d", "level": "note", "message": {"text": "Unused endpoint: GET /{case_id}/preference-match/snapshots"}, "properties": {"repobilityId": "9aae58aec49840ed", "scanner": "scanner-primary", "fingerprint": "0fb4d670dfdf454d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e5db59e23711517e", "level": "note", "message": {"text": "Unused endpoint: GET /{case_id}/preference-match/diff"}, "properties": {"repobilityId": "40d1bf3037be1da9", "scanner": "scanner-primary", "fingerprint": "e5db59e23711517e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-69a693dfc33637f4", "level": "note", "message": {"text": "Unused endpoint: POST /run"}, "properties": {"repobilityId": "355ede87c6ddbf2a", "scanner": "scanner-primary", "fingerprint": "69a693dfc33637f4", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-4cf54aebe21a71a6", "level": "note", "message": {"text": "Unused endpoint: POST /replay"}, "properties": {"repobilityId": "6c0b264e37ccc90f", "scanner": "scanner-primary", "fingerprint": "4cf54aebe21a71a6", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-50c5b56f3232049a", "level": "note", "message": {"text": "Unused endpoint: GET /{run_id}/steps"}, "properties": {"repobilityId": "a3159bc6b3306f8c", "scanner": "scanner-primary", "fingerprint": "50c5b56f3232049a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b8bdde7919452c0d", "level": "note", "message": {"text": "Unused endpoint: GET /{run_id}/source-health"}, "properties": {"repobilityId": "39062f67d7f4a1c3", "scanner": "scanner-primary", "fingerprint": "b8bdde7919452c0d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8d11b1c17c1c58c6", "level": "note", "message": {"text": "Unused endpoint: GET /facets"}, "properties": {"repobilityId": "f1bf9036ecbfc582", "scanner": "scanner-primary", "fingerprint": "8d11b1c17c1c58c6", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7a009b1a56794f45", "level": "note", "message": {"text": "Unused endpoint: POST /"}, "properties": {"repobilityId": "c43ec493bed5eb0a", "scanner": "scanner-primary", "fingerprint": "7a009b1a56794f45", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e7742d6ec1214461", "level": "note", "message": {"text": "Unused endpoint: GET /{advisor_id}"}, "properties": {"repobilityId": "7d42fef5d9bca377", "scanner": "scanner-primary", "fingerprint": "e7742d6ec1214461", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1ba11dbd52e505da", "level": "note", "message": {"text": "Unused endpoint: PATCH /{advisor_id}/expiry"}, "properties": {"repobilityId": "9a0796bc4f8b96a6", "scanner": "scanner-primary", "fingerprint": "1ba11dbd52e505da", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-eaec616eb5e1d913", "level": "note", "message": {"text": "Unused endpoint: PATCH /{advisor_id}/status"}, "properties": {"repobilityId": "6c5000a168440953", "scanner": "scanner-primary", "fingerprint": "eaec616eb5e1d913", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-eafb61067d2cfcc3", "level": "note", "message": {"text": "Unused endpoint: GET /profile/{major_code}"}, "properties": {"repobilityId": "80e876ec3a21cc94", "scanner": "scanner-primary", "fingerprint": "eafb61067d2cfcc3", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e3cf105ca70fd620", "level": "note", "message": {"text": "Unused endpoint: GET /strength"}, "properties": {"repobilityId": "8cfc08d6b8b721f7", "scanner": "scanner-primary", "fingerprint": "e3cf105ca70fd620", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3e07059cbd3422bc", "level": "note", "message": {"text": "Unused endpoint: GET /{major_code}/industry"}, "properties": {"repobilityId": "0d6cefe8a3b179cd", "scanner": "scanner-primary", "fingerprint": "3e07059cbd3422bc", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-53f34d2fe097426d", "level": "note", "message": {"text": "Unused endpoint: POST /{case_id}/build"}, "properties": {"repobilityId": "e86fe14c2b0d0fc2", "scanner": "scanner-primary", "fingerprint": "53f34d2fe097426d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b1834509a48d6c7b", "level": "note", "message": {"text": "Unused endpoint: POST /{case_id}/pdf"}, "properties": {"repobilityId": "0275213deae972ef", "scanner": "scanner-primary", "fingerprint": "b1834509a48d6c7b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-052d183299658b50", "level": "note", "message": {"text": "Unused endpoint: GET /{case_id}/revisit/snapshots"}, "properties": {"repobilityId": "ae213757014ba299", "scanner": "scanner-primary", "fingerprint": "052d183299658b50", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b50cd2a0c1f1a91f", "level": "note", "message": {"text": "Unused endpoint: GET /{case_id}/revisit"}, "properties": {"repobilityId": "1fd7a83910639433", "scanner": "scanner-primary", "fingerprint": "b50cd2a0c1f1a91f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-cd8dc4599ec52a08", "level": "note", "message": {"text": "Unused endpoint: GET /stats"}, "properties": {"repobilityId": "d87af4e1bbc8f767", "scanner": "scanner-primary", "fingerprint": "cd8dc4599ec52a08", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6c752fcaade5f108", "level": "note", "message": {"text": "Unused endpoint: GET /lineage"}, "properties": {"repobilityId": "474d59af8ebe757c", "scanner": "scanner-primary", "fingerprint": "6c752fcaade5f108", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d3ef0da5b6adb169", "level": "note", "message": {"text": "Unused endpoint: GET /recommend"}, "properties": {"repobilityId": "339659c0a0ce1291", "scanner": "scanner-primary", "fingerprint": "d3ef0da5b6adb169", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f83ea6b58c5846c4", "level": "note", "message": {"text": "Unused endpoint: GET /history/{school_code}"}, "properties": {"repobilityId": "6fc9f3860a0be1c4", "scanner": "scanner-primary", "fingerprint": "f83ea6b58c5846c4", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-4f91d8ceddcfd408", "level": "note", "message": {"text": "Unused endpoint: GET /schools/search"}, "properties": {"repobilityId": "d700e95683341d13", "scanner": "scanner-primary", "fingerprint": "4f91d8ceddcfd408", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8eefec7059b0a0ce", "level": "note", "message": {"text": "Unused endpoint: GET /batches"}, "properties": {"repobilityId": "c55dab1e3d290c31", "scanner": "scanner-primary", "fingerprint": "8eefec7059b0a0ce", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5b211dbe169ade71", "level": "note", "message": {"text": "Unused endpoint: GET /weights"}, "properties": {"repobilityId": "91f7c8da307f33ed", "scanner": "scanner-primary", "fingerprint": "5b211dbe169ade71", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-247b70e9f0d8160d", "level": "note", "message": {"text": "Unused endpoint: POST /weights"}, "properties": {"repobilityId": "c84dcdccfa9f61b9", "scanner": "scanner-primary", "fingerprint": "247b70e9f0d8160d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-784e15096c10f7c3", "level": "note", "message": {"text": "Unused endpoint: GET /profile/{sw_l2}"}, "properties": {"repobilityId": "58e08896fb6d335e", "scanner": "scanner-primary", "fingerprint": "784e15096c10f7c3", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ac2f552bf9d967ce", "level": "note", "message": {"text": "Unused endpoint: GET /overview"}, "properties": {"repobilityId": "eb73241d0bd51fe7", "scanner": "scanner-primary", "fingerprint": "ac2f552bf9d967ce", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}