{"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-b5a06c30c988afbd", "name": "Possibly dead Python function: normalize_account", "shortDescription": {"text": "Possibly dead Python function: normalize_account"}, "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-ef4cf74d3bb4bcbd", "name": "Possibly dead Python function: account_label", "shortDescription": {"text": "Possibly dead Python function: account_label"}, "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-421b22b413b1f6f9", "name": "Possibly dead Python function: find_first_file", "shortDescription": {"text": "Possibly dead Python function: find_first_file"}, "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-3da9417bbff4a275", "name": "Possibly dead Python function: zero_balances", "shortDescription": {"text": "Possibly dead Python function: zero_balances"}, "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-7ef5284dded8e114", "name": "Possibly dead Python function: add_paragraph_border", "shortDescription": {"text": "Possibly dead Python function: add_paragraph_border"}, "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-dc50c323f17b11b3", "name": "Possibly dead Python function: add_bullet_paragraph", "shortDescription": {"text": "Possibly dead Python function: add_bullet_paragraph"}, "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-77823522087892ae", "name": "Possibly dead Python function: set_row_height", "shortDescription": {"text": "Possibly dead Python function: set_row_height"}, "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-53bf9cfd23ba9b76", "name": "Possibly dead Python function: set_vertical_alignment", "shortDescription": {"text": "Possibly dead Python function: set_vertical_alignment"}, "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-b0356bf8210e76eb", "name": "Possibly dead Python function: set_cell_border", "shortDescription": {"text": "Possibly dead Python function: set_cell_border"}, "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-85fa6344cf434186", "name": "Possibly dead Python function: add_page_number", "shortDescription": {"text": "Possibly dead Python function: add_page_number"}, "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-260cca7e0eeef0a0", "name": "Possibly dead Python function: cached_build_financial_model", "shortDescription": {"text": "Possibly dead Python function: cached_build_financial_model"}, "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-82091f84677c6a97", "name": "Possibly dead Python function: clear_model_cache", "shortDescription": {"text": "Possibly dead Python function: clear_model_cache"}, "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-c6d3cf4f647c3833", "name": "Possibly dead Python function: load_cpa_profile", "shortDescription": {"text": "Possibly dead Python function: load_cpa_profile"}, "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-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-be3ba7556036ebce", "name": "Very large file: financial_model.py (1793 lines)", "shortDescription": {"text": "Very large file: financial_model.py (1793 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-6893a6c8b0861585", "name": "Very low test-to-source ratio", "shortDescription": {"text": "Very low test-to-source ratio"}, "fullDescription": {"text": "0 test file(s) for 21 source file(s) (ratio 0.00). Consider adding integration or unit tests for critical paths."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "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-b9088664ace7f748", "name": "Composite production-readiness gap", "shortDescription": {"text": "Composite production-readiness gap"}, "fullDescription": {"text": "Multiple low-cost hardening controls are missing together: license, ci, tests. Opus verification showed these co-occurring gaps are a better readiness signal than reading each flag in isolation."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f808a4ef3e1071fb", "name": "14 env vars used in code but missing from .env.example", "shortDescription": {"text": "14 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `CERTAPP_AUTH_TOKEN`, `CERTAPP_CPA_PROFILE`, `CERTAPP_CPA_USER`, `CERTAPP_DB_REQUIRE_ALEMBIC`, `CERTAPP_DEBUG`, `CERTAPP_HOST`, `CERTAPP_MODEL_STORE_DIR`, `CERTAPP_TEMPLATE_CACHE` + 6 more. Add them (with a placeholder/comment) to .env.example so onboarding doesn't break."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2c04133e54348533", "name": "Near-duplicate function bodies in 2 places", "shortDescription": {"text": "Near-duplicate function bodies in 2 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nweb_server.py:model_voucher_detail, web_server.py:model_voucher_reverse\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:\nfinancial_model.py:row, financial_model.py:row, financial_model.py:row\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-284a40be18ecfda2", "name": "FastAPI POST `api_create_cliente` without auth dependency \u2014 web_server.py:327", "shortDescription": {"text": "FastAPI POST `api_create_cliente` without auth dependency \u2014 web_server.py:327"}, "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-d672c3426fe85589", "name": "FastAPI PUT `api_update_cliente` without auth dependency \u2014 web_server.py:347", "shortDescription": {"text": "FastAPI PUT `api_update_cliente` without auth dependency \u2014 web_server.py:347"}, "fullDescription": {"text": "`@router.put` 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-13ebe1e151fbca9e", "name": "FastAPI DELETE `api_delete_cliente` without auth dependency \u2014 web_server.py:358", "shortDescription": {"text": "FastAPI DELETE `api_delete_cliente` without auth dependency \u2014 web_server.py:358"}, "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-c333cc3c2e6f80cd", "name": "FastAPI PUT `api_set_cliente_plantilla` without auth dependency \u2014 web_server.py:380", "shortDescription": {"text": "FastAPI PUT `api_set_cliente_plantilla` without auth dependency \u2014 web_server.py:380"}, "fullDescription": {"text": "`@router.put` 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-5246612843a9d30d", "name": "FastAPI POST `api_cliente_extract_from_docs` without auth dependency \u2014 web_server.py:393", "shortDescription": {"text": "FastAPI POST `api_cliente_extract_from_docs` without auth dependency \u2014 web_server.py:393"}, "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-c31741f26c9da8c6", "name": "FastAPI POST `api_create_periodo` without auth dependency \u2014 web_server.py:431", "shortDescription": {"text": "FastAPI POST `api_create_periodo` without auth dependency \u2014 web_server.py:431"}, "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-888265168bab768f", "name": "FastAPI POST `api_rollforward_preview` without auth dependency \u2014 web_server.py:441", "shortDescription": {"text": "FastAPI POST `api_rollforward_preview` without auth dependency \u2014 web_server.py:441"}, "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-a171cfb5d2ca022d", "name": "FastAPI PUT `api_update_periodo` without auth dependency \u2014 web_server.py:472", "shortDescription": {"text": "FastAPI PUT `api_update_periodo` without auth dependency \u2014 web_server.py:472"}, "fullDescription": {"text": "`@router.put` 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-b5f258695007996b", "name": "FastAPI PUT `api_update_periodo_payload` without auth dependency \u2014 web_server.py:481", "shortDescription": {"text": "FastAPI PUT `api_update_periodo_payload` without auth dependency \u2014 web_server.py:481"}, "fullDescription": {"text": "`@router.put` 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-7df6b2472749429d", "name": "FastAPI POST `api_preview_periodo` without auth dependency \u2014 web_server.py:492", "shortDescription": {"text": "FastAPI POST `api_preview_periodo` without auth dependency \u2014 web_server.py:492"}, "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-f8e564eb0f98c31d", "name": "FastAPI POST `api_finalize_periodo` without auth dependency \u2014 web_server.py:501", "shortDescription": {"text": "FastAPI POST `api_finalize_periodo` without auth dependency \u2014 web_server.py:501"}, "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-18c3128ad49b6683", "name": "FastAPI POST `api_duplicate_periodo` without auth dependency \u2014 web_server.py:510", "shortDescription": {"text": "FastAPI POST `api_duplicate_periodo` without auth dependency \u2014 web_server.py:510"}, "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-a2618c2502fed87c", "name": "FastAPI DELETE `api_delete_periodo` without auth dependency \u2014 web_server.py:519", "shortDescription": {"text": "FastAPI DELETE `api_delete_periodo` without auth dependency \u2014 web_server.py:519"}, "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-0c6e8dc1ed81f7ce", "name": "FastAPI POST `api_generate_periodo_document` without auth dependency \u2014 web_server.py:530", "shortDescription": {"text": "FastAPI POST `api_generate_periodo_document` without auth dependency \u2014 web_server.py:530"}, "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-9557f688393c1997", "name": "FastAPI POST `api_agent_command` without auth dependency \u2014 web_server.py:552", "shortDescription": {"text": "FastAPI POST `api_agent_command` without auth dependency \u2014 web_server.py:552"}, "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-67e831bb4cb3cac5", "name": "FastAPI POST `api_agent_apply_proposal` without auth dependency \u2014 web_server.py:571", "shortDescription": {"text": "FastAPI POST `api_agent_apply_proposal` without auth dependency \u2014 web_server.py:571"}, "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-b5101bdb86ea29a9", "name": "FastAPI POST `api_agent_discard_proposal` without auth dependency \u2014 web_server.py:580", "shortDescription": {"text": "FastAPI POST `api_agent_discard_proposal` without auth dependency \u2014 web_server.py:580"}, "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-aff79e2196c72c33", "name": "FastAPI POST `api_agent_apply_plan` without auth dependency \u2014 web_server.py:598", "shortDescription": {"text": "FastAPI POST `api_agent_apply_plan` without auth dependency \u2014 web_server.py:598"}, "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-7bad0af4c0c593c7", "name": "FastAPI POST `api_agent_discard_plan` without auth dependency \u2014 web_server.py:607", "shortDescription": {"text": "FastAPI POST `api_agent_discard_plan` without auth dependency \u2014 web_server.py:607"}, "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-74f493b5c2bbf95b", "name": "FastAPI POST `upload` without auth dependency \u2014 web_server.py:630", "shortDescription": {"text": "FastAPI POST `upload` without auth dependency \u2014 web_server.py:630"}, "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-483d775a5947f4ee", "name": "FastAPI POST `model_preview` without auth dependency \u2014 web_server.py:861", "shortDescription": {"text": "FastAPI POST `model_preview` without auth dependency \u2014 web_server.py:861"}, "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-6a1d50a1b21d67ec", "name": "FastAPI POST `model_voucher_reverse` without auth dependency \u2014 web_server.py:910", "shortDescription": {"text": "FastAPI POST `model_voucher_reverse` without auth dependency \u2014 web_server.py:910"}, "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-37959c414bf6c036", "name": "FastAPI POST `model_documents_extract` without auth dependency \u2014 web_server.py:958", "shortDescription": {"text": "FastAPI POST `model_documents_extract` without auth dependency \u2014 web_server.py:958"}, "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-c29b2d7aec525c5e", "name": "FastAPI POST `model_save_draft` without auth dependency \u2014 web_server.py:988", "shortDescription": {"text": "FastAPI POST `model_save_draft` without auth dependency \u2014 web_server.py:988"}, "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-4ad72db699e6313e", "name": "FastAPI DELETE `model_delete_draft` without auth dependency \u2014 web_server.py:1013", "shortDescription": {"text": "FastAPI DELETE `model_delete_draft` without auth dependency \u2014 web_server.py:1013"}, "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-5fe4b58076a9a86a", "name": "FastAPI POST `model_duplicate_final` without auth dependency \u2014 web_server.py:1035", "shortDescription": {"text": "FastAPI POST `model_duplicate_final` without auth dependency \u2014 web_server.py:1035"}, "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-8024dff33d3efac9", "name": "FastAPI POST `model_generate_doc` without auth dependency \u2014 web_server.py:1052", "shortDescription": {"text": "FastAPI POST `model_generate_doc` without auth dependency \u2014 web_server.py:1052"}, "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-a2954e6914eb9c2f", "name": "FastAPI POST `model_save_final` without auth dependency \u2014 web_server.py:1117", "shortDescription": {"text": "FastAPI POST `model_save_final` without auth dependency \u2014 web_server.py:1117"}, "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}}]}}, "automationDetails": {"id": "repobility/30529"}, "properties": {"repository": "yamilgnr22/certificacion_app", "repoUrl": "https://github.com/yamilgnr22/certificacion_app", "branch": "main"}, "results": [{"ruleId": "scanner-b5a06c30c988afbd", "level": "note", "message": {"text": "Possibly dead Python function: normalize_account"}, "properties": {"repobilityId": "673d147297198120", "scanner": "scanner-primary", "fingerprint": "b5a06c30c988afbd", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "accounting_accounts.py:82"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-ef4cf74d3bb4bcbd", "level": "note", "message": {"text": "Possibly dead Python function: account_label"}, "properties": {"repobilityId": "3a30ba2b414fcf5f", "scanner": "scanner-primary", "fingerprint": "ef4cf74d3bb4bcbd", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "accounting_accounts.py:97"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-421b22b413b1f6f9", "level": "note", "message": {"text": "Possibly dead Python function: find_first_file"}, "properties": {"repobilityId": "0f75b5825b136260", "scanner": "scanner-primary", "fingerprint": "421b22b413b1f6f9", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "path_utils.py:12"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3da9417bbff4a275", "level": "note", "message": {"text": "Possibly dead Python function: zero_balances"}, "properties": {"repobilityId": "b41529fdd22877f7", "scanner": "scanner-primary", "fingerprint": "3da9417bbff4a275", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "financial_model.py:65"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-7ef5284dded8e114", "level": "note", "message": {"text": "Possibly dead Python function: add_paragraph_border"}, "properties": {"repobilityId": "f6b200ec62b06ce3", "scanner": "scanner-primary", "fingerprint": "7ef5284dded8e114", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "word_helpers.py:43"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-dc50c323f17b11b3", "level": "note", "message": {"text": "Possibly dead Python function: add_bullet_paragraph"}, "properties": {"repobilityId": "0d413cd0c9fc4ede", "scanner": "scanner-primary", "fingerprint": "dc50c323f17b11b3", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "word_helpers.py:57"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-77823522087892ae", "level": "note", "message": {"text": "Possibly dead Python function: set_row_height"}, "properties": {"repobilityId": "4131fb86b5e9d3a8", "scanner": "scanner-primary", "fingerprint": "77823522087892ae", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "word_helpers.py:90"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-53bf9cfd23ba9b76", "level": "note", "message": {"text": "Possibly dead Python function: set_vertical_alignment"}, "properties": {"repobilityId": "8388de5e183ff180", "scanner": "scanner-primary", "fingerprint": "53bf9cfd23ba9b76", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "word_helpers.py:99"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-b0356bf8210e76eb", "level": "note", "message": {"text": "Possibly dead Python function: set_cell_border"}, "properties": {"repobilityId": "3ae4c9c41ad4d0bd", "scanner": "scanner-primary", "fingerprint": "b0356bf8210e76eb", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "word_helpers.py:107"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-85fa6344cf434186", "level": "note", "message": {"text": "Possibly dead Python function: add_page_number"}, "properties": {"repobilityId": "4d002de3b577b731", "scanner": "scanner-primary", "fingerprint": "85fa6344cf434186", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "word_helpers.py:141"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-260cca7e0eeef0a0", "level": "note", "message": {"text": "Possibly dead Python function: cached_build_financial_model"}, "properties": {"repobilityId": "5484222fdf59dfb4", "scanner": "scanner-primary", "fingerprint": "260cca7e0eeef0a0", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "model_cache.py:37"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-82091f84677c6a97", "level": "note", "message": {"text": "Possibly dead Python function: clear_model_cache"}, "properties": {"repobilityId": "5906f5e542094be4", "scanner": "scanner-primary", "fingerprint": "82091f84677c6a97", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "model_cache.py:53"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-c6d3cf4f647c3833", "level": "note", "message": {"text": "Possibly dead Python function: load_cpa_profile"}, "properties": {"repobilityId": "153cde24927bc0d8", "scanner": "scanner-primary", "fingerprint": "c6d3cf4f647c3833", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "config_cpa.py:49"}, "region": {"startLine": 1}}}]}, {"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-be3ba7556036ebce", "level": "note", "message": {"text": "Very large file: financial_model.py (1793 lines)"}, "properties": {"repobilityId": "aae5f39c62765ca5", "scanner": "scanner-primary", "fingerprint": "be3ba7556036ebce", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-6893a6c8b0861585", "level": "warning", "message": {"text": "Very low test-to-source ratio"}, "properties": {"repobilityId": "54a7de3f06314bf0", "scanner": "scanner-primary", "fingerprint": "6893a6c8b0861585", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["tests", "coverage"]}}, {"ruleId": "scanner-141b30a41e03817b", "level": "note", "message": {"text": "No license file detected"}, "properties": {"repobilityId": "e8195e1cacfe3d8c", "scanner": "scanner-primary", "fingerprint": "141b30a41e03817b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["license", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-b9088664ace7f748", "level": "warning", "message": {"text": "Composite production-readiness gap"}, "properties": {"repobilityId": "d11c10d5a8894ef6", "scanner": "scanner-primary", "fingerprint": "b9088664ace7f748", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["production-readiness", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-f808a4ef3e1071fb", "level": "note", "message": {"text": "14 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "ce6b2ec4be4ec75a", "scanner": "scanner-primary", "fingerprint": "f808a4ef3e1071fb", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "config-drift"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "f628747462cd8209", "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": "cbeb490a392992b8", "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": "182e0b16bd0d09fb", "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": "3d77328538196e7f", "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": "70d4ab40f9827431", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-284a40be18ecfda2", "level": "error", "message": {"text": "FastAPI POST `api_create_cliente` without auth dependency \u2014 web_server.py:327"}, "properties": {"repobilityId": "86286f3cd366f61a", "scanner": "scanner-primary", "fingerprint": "284a40be18ecfda2", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "web_server.py"}, "region": {"startLine": 327}}}]}, {"ruleId": "scanner-d672c3426fe85589", "level": "error", "message": {"text": "FastAPI PUT `api_update_cliente` without auth dependency \u2014 web_server.py:347"}, "properties": {"repobilityId": "d362a4fc5eaf00c6", "scanner": "scanner-primary", "fingerprint": "d672c3426fe85589", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "web_server.py"}, "region": {"startLine": 347}}}]}, {"ruleId": "scanner-13ebe1e151fbca9e", "level": "error", "message": {"text": "FastAPI DELETE `api_delete_cliente` without auth dependency \u2014 web_server.py:358"}, "properties": {"repobilityId": "7c4f4907c37a444b", "scanner": "scanner-primary", "fingerprint": "13ebe1e151fbca9e", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "web_server.py"}, "region": {"startLine": 358}}}]}, {"ruleId": "scanner-c333cc3c2e6f80cd", "level": "error", "message": {"text": "FastAPI PUT `api_set_cliente_plantilla` without auth dependency \u2014 web_server.py:380"}, "properties": {"repobilityId": "7849d2428f10d51c", "scanner": "scanner-primary", "fingerprint": "c333cc3c2e6f80cd", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "web_server.py"}, "region": {"startLine": 380}}}]}, {"ruleId": "scanner-5246612843a9d30d", "level": "error", "message": {"text": "FastAPI POST `api_cliente_extract_from_docs` without auth dependency \u2014 web_server.py:393"}, "properties": {"repobilityId": "f5b6a80c4f81390f", "scanner": "scanner-primary", "fingerprint": "5246612843a9d30d", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "web_server.py"}, "region": {"startLine": 393}}}]}, {"ruleId": "scanner-c31741f26c9da8c6", "level": "error", "message": {"text": "FastAPI POST `api_create_periodo` without auth dependency \u2014 web_server.py:431"}, "properties": {"repobilityId": "768d216c84357d79", "scanner": "scanner-primary", "fingerprint": "c31741f26c9da8c6", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "web_server.py"}, "region": {"startLine": 431}}}]}, {"ruleId": "scanner-888265168bab768f", "level": "error", "message": {"text": "FastAPI POST `api_rollforward_preview` without auth dependency \u2014 web_server.py:441"}, "properties": {"repobilityId": "fa20f19e7964ed93", "scanner": "scanner-primary", "fingerprint": "888265168bab768f", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "web_server.py"}, "region": {"startLine": 441}}}]}, {"ruleId": "scanner-a171cfb5d2ca022d", "level": "error", "message": {"text": "FastAPI PUT `api_update_periodo` without auth dependency \u2014 web_server.py:472"}, "properties": {"repobilityId": "3c9d82a5cce442cb", "scanner": "scanner-primary", "fingerprint": "a171cfb5d2ca022d", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "web_server.py"}, "region": {"startLine": 472}}}]}, {"ruleId": "scanner-b5f258695007996b", "level": "error", "message": {"text": "FastAPI PUT `api_update_periodo_payload` without auth dependency \u2014 web_server.py:481"}, "properties": {"repobilityId": "b691c7b3dde53cfe", "scanner": "scanner-primary", "fingerprint": "b5f258695007996b", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "web_server.py"}, "region": {"startLine": 481}}}]}, {"ruleId": "scanner-7df6b2472749429d", "level": "error", "message": {"text": "FastAPI POST `api_preview_periodo` without auth dependency \u2014 web_server.py:492"}, "properties": {"repobilityId": "4609e1b03e8f0838", "scanner": "scanner-primary", "fingerprint": "7df6b2472749429d", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "web_server.py"}, "region": {"startLine": 492}}}]}, {"ruleId": "scanner-f8e564eb0f98c31d", "level": "error", "message": {"text": "FastAPI POST `api_finalize_periodo` without auth dependency \u2014 web_server.py:501"}, "properties": {"repobilityId": "01d9a117c51ef7ef", "scanner": "scanner-primary", "fingerprint": "f8e564eb0f98c31d", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "web_server.py"}, "region": {"startLine": 501}}}]}, {"ruleId": "scanner-18c3128ad49b6683", "level": "error", "message": {"text": "FastAPI POST `api_duplicate_periodo` without auth dependency \u2014 web_server.py:510"}, "properties": {"repobilityId": "d630144e38e02e51", "scanner": "scanner-primary", "fingerprint": "18c3128ad49b6683", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "web_server.py"}, "region": {"startLine": 510}}}]}, {"ruleId": "scanner-a2618c2502fed87c", "level": "error", "message": {"text": "FastAPI DELETE `api_delete_periodo` without auth dependency \u2014 web_server.py:519"}, "properties": {"repobilityId": "520ee10744dad353", "scanner": "scanner-primary", "fingerprint": "a2618c2502fed87c", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "web_server.py"}, "region": {"startLine": 519}}}]}, {"ruleId": "scanner-0c6e8dc1ed81f7ce", "level": "error", "message": {"text": "FastAPI POST `api_generate_periodo_document` without auth dependency \u2014 web_server.py:530"}, "properties": {"repobilityId": "c3718d3caa3a94da", "scanner": "scanner-primary", "fingerprint": "0c6e8dc1ed81f7ce", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "web_server.py"}, "region": {"startLine": 530}}}]}, {"ruleId": "scanner-9557f688393c1997", "level": "error", "message": {"text": "FastAPI POST `api_agent_command` without auth dependency \u2014 web_server.py:552"}, "properties": {"repobilityId": "e4951efedbab4c89", "scanner": "scanner-primary", "fingerprint": "9557f688393c1997", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "web_server.py"}, "region": {"startLine": 552}}}]}, {"ruleId": "scanner-67e831bb4cb3cac5", "level": "error", "message": {"text": "FastAPI POST `api_agent_apply_proposal` without auth dependency \u2014 web_server.py:571"}, "properties": {"repobilityId": "e3b5294eabfcdbf4", "scanner": "scanner-primary", "fingerprint": "67e831bb4cb3cac5", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "web_server.py"}, "region": {"startLine": 571}}}]}, {"ruleId": "scanner-b5101bdb86ea29a9", "level": "error", "message": {"text": "FastAPI POST `api_agent_discard_proposal` without auth dependency \u2014 web_server.py:580"}, "properties": {"repobilityId": "c95e9ea260ebe3f5", "scanner": "scanner-primary", "fingerprint": "b5101bdb86ea29a9", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "web_server.py"}, "region": {"startLine": 580}}}]}, {"ruleId": "scanner-aff79e2196c72c33", "level": "error", "message": {"text": "FastAPI POST `api_agent_apply_plan` without auth dependency \u2014 web_server.py:598"}, "properties": {"repobilityId": "db328cc981c599c7", "scanner": "scanner-primary", "fingerprint": "aff79e2196c72c33", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "web_server.py"}, "region": {"startLine": 598}}}]}, {"ruleId": "scanner-7bad0af4c0c593c7", "level": "error", "message": {"text": "FastAPI POST `api_agent_discard_plan` without auth dependency \u2014 web_server.py:607"}, "properties": {"repobilityId": "0420abf9d07367ae", "scanner": "scanner-primary", "fingerprint": "7bad0af4c0c593c7", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "web_server.py"}, "region": {"startLine": 607}}}]}, {"ruleId": "scanner-74f493b5c2bbf95b", "level": "error", "message": {"text": "FastAPI POST `upload` without auth dependency \u2014 web_server.py:630"}, "properties": {"repobilityId": "be24409188305bfa", "scanner": "scanner-primary", "fingerprint": "74f493b5c2bbf95b", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "web_server.py"}, "region": {"startLine": 630}}}]}, {"ruleId": "scanner-483d775a5947f4ee", "level": "error", "message": {"text": "FastAPI POST `model_preview` without auth dependency \u2014 web_server.py:861"}, "properties": {"repobilityId": "4d60e14345ba0597", "scanner": "scanner-primary", "fingerprint": "483d775a5947f4ee", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "web_server.py"}, "region": {"startLine": 861}}}]}, {"ruleId": "scanner-6a1d50a1b21d67ec", "level": "error", "message": {"text": "FastAPI POST `model_voucher_reverse` without auth dependency \u2014 web_server.py:910"}, "properties": {"repobilityId": "a16f346d63a34912", "scanner": "scanner-primary", "fingerprint": "6a1d50a1b21d67ec", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "web_server.py"}, "region": {"startLine": 910}}}]}, {"ruleId": "scanner-37959c414bf6c036", "level": "error", "message": {"text": "FastAPI POST `model_documents_extract` without auth dependency \u2014 web_server.py:958"}, "properties": {"repobilityId": "be05c66e3d3f276c", "scanner": "scanner-primary", "fingerprint": "37959c414bf6c036", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "web_server.py"}, "region": {"startLine": 958}}}]}, {"ruleId": "scanner-c29b2d7aec525c5e", "level": "error", "message": {"text": "FastAPI POST `model_save_draft` without auth dependency \u2014 web_server.py:988"}, "properties": {"repobilityId": "5a2b553c9256213f", "scanner": "scanner-primary", "fingerprint": "c29b2d7aec525c5e", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "web_server.py"}, "region": {"startLine": 988}}}]}, {"ruleId": "scanner-4ad72db699e6313e", "level": "error", "message": {"text": "FastAPI DELETE `model_delete_draft` without auth dependency \u2014 web_server.py:1013"}, "properties": {"repobilityId": "102c334d8e17d7e7", "scanner": "scanner-primary", "fingerprint": "4ad72db699e6313e", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "web_server.py"}, "region": {"startLine": 1013}}}]}, {"ruleId": "scanner-5fe4b58076a9a86a", "level": "error", "message": {"text": "FastAPI POST `model_duplicate_final` without auth dependency \u2014 web_server.py:1035"}, "properties": {"repobilityId": "5078686f218e88f1", "scanner": "scanner-primary", "fingerprint": "5fe4b58076a9a86a", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "web_server.py"}, "region": {"startLine": 1035}}}]}, {"ruleId": "scanner-8024dff33d3efac9", "level": "error", "message": {"text": "FastAPI POST `model_generate_doc` without auth dependency \u2014 web_server.py:1052"}, "properties": {"repobilityId": "e49dcecdcda77e02", "scanner": "scanner-primary", "fingerprint": "8024dff33d3efac9", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "web_server.py"}, "region": {"startLine": 1052}}}]}, {"ruleId": "scanner-a2954e6914eb9c2f", "level": "error", "message": {"text": "FastAPI POST `model_save_final` without auth dependency \u2014 web_server.py:1117"}, "properties": {"repobilityId": "7daae77de92120bc", "scanner": "scanner-primary", "fingerprint": "a2954e6914eb9c2f", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "web_server.py"}, "region": {"startLine": 1117}}}]}]}]}