{"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-5cecd8697b652ac1", "name": "Possibly dead Python function: owner_required", "shortDescription": {"text": "Possibly dead Python function: owner_required"}, "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-94a373cb06f81290", "name": "Possibly dead Python function: manager_or_above_required", "shortDescription": {"text": "Possibly dead Python function: manager_or_above_required"}, "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-e345b4b9a26b3abf", "name": "Possibly dead Python function: manager_or_perm_required", "shortDescription": {"text": "Possibly dead Python function: manager_or_perm_required"}, "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-e0dfcf63c4918295", "name": "Possibly dead Python function: wrapper", "shortDescription": {"text": "Possibly dead Python function: wrapper"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9710c8d059e53154", "name": "No frontend routes/components detected", "shortDescription": {"text": "No frontend routes/components detected"}, "fullDescription": {"text": "No React/Vue/Next routes were found. This is fine for backend-only repos."}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3cb09506eb0e1081", "name": "Insecure pattern 'document_write' in app.py:4739", "shortDescription": {"text": "Insecure pattern 'document_write' in app.py:4739"}, "fullDescription": {"text": "Found a known-risky pattern (document_write). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4601e3ad3bb28677", "name": "No CI/CD pipelines detected", "shortDescription": {"text": "No CI/CD pipelines detected"}, "fullDescription": {"text": "No GitHub Actions, GitLab CI, or CircleCI configs found. Without CI you can't gate deploys on tests/lints."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-578081e6621f8eed", "name": "Very large file: app.py (16925 lines)", "shortDescription": {"text": "Very large file: app.py (16925 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 4 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-faccb9061e9b52a0", "name": "No README detected", "shortDescription": {"text": "No README detected"}, "fullDescription": {"text": "No README file was found. Generated repos without README context are hard to operate, validate, or safely hand off."}, "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 5 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-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, operator-readme. 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-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, ci, tests, operator-readme. Treat this as a contract gap: the agent is guided, but the generated output is not yet guarded by the controls that make it repeatable."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ea8f3013f588db25", "name": "Shallow git history limits provenance confidence", "shortDescription": {"text": "Shallow git history limits provenance confidence"}, "fullDescription": {"text": "The repository is a shallow clone. Origin/evolution analysis cannot distinguish fresh generation, imported legacy code, or long-lived human code with high confidence."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8424db9c75e04ba4", "name": "Very short observed git history", "shortDescription": {"text": "Very short observed git history"}, "fullDescription": {"text": "The repo has multiple source files but two or fewer visible commits. This is not a failure by itself, but it lowers confidence in evolution-based diagnosis."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ecb0d2c55ed6875d", "name": "Agent authority lacks a verifier contract: .claude/settings.local.json", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/settings.local.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-ca440f08ff65fc63", "name": "Legacy-named symbol `catch_copy` in app.py:1007", "shortDescription": {"text": "Legacy-named symbol `catch_copy` in app.py:1007"}, "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-3ec62dc3abeba991", "name": "Commented-code block (6 lines) in app.py:16549", "shortDescription": {"text": "Commented-code block (6 lines) in app.py:16549"}, "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-8e047ab7af03962f", "name": "7 env vars used in code but missing from .env.example", "shortDescription": {"text": "7 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `APP_BASE_URL`, `DATABASE_URL`, `GMAIL_PUBSUB_TOPIC`, `GMAIL_PUSH_KEY`, `MAIL_FROM`, `PORT`, `RESEND_API_KEY`. 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:\napp.py:sync_session_role, app.py:sync\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-46969939caf8120b", "name": "Near-duplicate function bodies in 9 places", "shortDescription": {"text": "Near-duplicate function bodies in 9 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\napp.py:to_dict, app.py:to_dict, app.py:to_dict, app.py:to_dict\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:\napp.py:owner_required, app.py:wrapper, app.py:wrapper\n\nThis is *the* AI-coder failure mode (4\u00d7 more duplication in vibe-coded repos \u2014 see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-49c98f7cedd9c977", "name": "Near-duplicate function bodies in 4 places", "shortDescription": {"text": "Near-duplicate function bodies in 4 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\napp.py:pd, app.py:pd, app.py:pd, app.py:pd\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-1a6d91f2236825bf", "name": "Unused endpoint: ANY /", "shortDescription": {"text": "Unused endpoint: ANY /"}, "fullDescription": {"text": "`app.py` declares `ANY /` 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-280e30f62b45114a", "name": "Unused endpoint: ANY /lp", "shortDescription": {"text": "Unused endpoint: ANY /lp"}, "fullDescription": {"text": "`app.py` declares `ANY /lp` 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-6b5fa3c50d49d52e", "name": "Unused endpoint: ANY /roompick-lp", "shortDescription": {"text": "Unused endpoint: ANY /roompick-lp"}, "fullDescription": {"text": "`app.py` declares `ANY /roompick-lp` 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-dfcafeb46a1d1ec2", "name": "Unused endpoint: ANY /app-login", "shortDescription": {"text": "Unused endpoint: ANY /app-login"}, "fullDescription": {"text": "`app.py` declares `ANY /app-login` 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-89a71df47b839e01", "name": "Unused endpoint: ANY /app-logout", "shortDescription": {"text": "Unused endpoint: ANY /app-logout"}, "fullDescription": {"text": "`app.py` declares `ANY /app-logout` 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-d0b1f39122ad13fc", "name": "Unused endpoint: ANY /executive", "shortDescription": {"text": "Unused endpoint: ANY /executive"}, "fullDescription": {"text": "`app.py` declares `ANY /executive` 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-1a20d043b82f162f", "name": "Unused endpoint: ANY /sales", "shortDescription": {"text": "Unused endpoint: ANY /sales"}, "fullDescription": {"text": "`app.py` declares `ANY /sales` 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-faa913962d6a9176", "name": "Unused endpoint: ANY /customer-management", "shortDescription": {"text": "Unused endpoint: ANY /customer-management"}, "fullDescription": {"text": "`app.py` declares `ANY /customer-management` 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-0f8047d2f714e558", "name": "Unused endpoint: ANY /contract-customers", "shortDescription": {"text": "Unused endpoint: ANY /contract-customers"}, "fullDescription": {"text": "`app.py` declares `ANY /contract-customers` 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-09d42a8e21c4607b", "name": "Unused endpoint: ANY /api/contract-customers", "shortDescription": {"text": "Unused endpoint: ANY /api/contract-customers"}, "fullDescription": {"text": "`app.py` declares `ANY /api/contract-customers` 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-8107e24a8cc444c2", "name": "Unused endpoint: ANY /past-customers", "shortDescription": {"text": "Unused endpoint: ANY /past-customers"}, "fullDescription": {"text": "`app.py` declares `ANY /past-customers` 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-9533b5cc44d8f558", "name": "Unused endpoint: ANY /api/past-customers", "shortDescription": {"text": "Unused endpoint: ANY /api/past-customers"}, "fullDescription": {"text": "`app.py` declares `ANY /api/past-customers` 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-8040b46117c9401c", "name": "Unused endpoint: ANY /api/contract-customers/<int:rid>/past", "shortDescription": {"text": "Unused endpoint: ANY /api/contract-customers/<int:rid>/past"}, "fullDescription": {"text": "`app.py` declares `ANY /api/contract-customers/<int:rid>/past` 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-c7cf74243cdc16f2", "name": "Unused endpoint: ANY /contract-customers/<int:rid>/edit", "shortDescription": {"text": "Unused endpoint: ANY /contract-customers/<int:rid>/edit"}, "fullDescription": {"text": "`app.py` declares `ANY /contract-customers/<int:rid>/edit` 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-8b82a2a6ab221dec", "name": "Unused endpoint: ANY /contract-customers/<int:rid>/doc-edit/<int:tpl_id>", "shortDescription": {"text": "Unused endpoint: ANY /contract-customers/<int:rid>/doc-edit/<int:tpl_id>"}, "fullDescription": {"text": "`app.py` declares `ANY /contract-customers/<int:rid>/doc-edit/<int:tpl_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-414794764bbe827b", "name": "Unused endpoint: ANY /api/contract-customers/<int:rid>/doc-overrides/<int:tpl_id>", "shortDescription": {"text": "Unused endpoint: ANY /api/contract-customers/<int:rid>/doc-overrides/<int:tpl_id>"}, "fullDescription": {"text": "`app.py` declares `ANY /api/contract-customers/<int:rid>/doc-overrides/<int:tpl_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-3b8d60547aa82887", "name": "Unused endpoint: ANY /api/ai-status", "shortDescription": {"text": "Unused endpoint: ANY /api/ai-status"}, "fullDescription": {"text": "`app.py` declares `ANY /api/ai-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-5eeb42aae53b8c3f", "name": "Unused endpoint: ANY /api/contract-customers/<int:rid>/document-data", "shortDescription": {"text": "Unused endpoint: ANY /api/contract-customers/<int:rid>/document-data"}, "fullDescription": {"text": "`app.py` declares `ANY /api/contract-customers/<int:rid>/document-data` 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-9f0460c525b4b33f", "name": "Unused endpoint: ANY /api/contract-customers/<int:rid>/attachments", "shortDescription": {"text": "Unused endpoint: ANY /api/contract-customers/<int:rid>/attachments"}, "fullDescription": {"text": "`app.py` declares `ANY /api/contract-customers/<int:rid>/attachments` 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-233b516bf9ee4bf2", "name": "Unused endpoint: ANY /api/contract-customers/<int:rid>/attachments/<int:aid>", "shortDescription": {"text": "Unused endpoint: ANY /api/contract-customers/<int:rid>/attachments/<int:aid>"}, "fullDescription": {"text": "`app.py` declares `ANY /api/contract-customers/<int:rid>/attachments/<int:aid>` 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-26457eb276539876", "name": "Unused endpoint: ANY /api/contract-customers/<int:rid>/attachments/<int:aid>/delete", "shortDescription": {"text": "Unused endpoint: ANY /api/contract-customers/<int:rid>/attachments/<int:aid>/delete"}, "fullDescription": {"text": "`app.py` declares `ANY /api/contract-customers/<int:rid>/attachments/<int:aid>/delete` 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-a32aedd8769c333b", "name": "Unused endpoint: ANY /api/contract-customers/<int:rid>/extract-document", "shortDescription": {"text": "Unused endpoint: ANY /api/contract-customers/<int:rid>/extract-document"}, "fullDescription": {"text": "`app.py` declares `ANY /api/contract-customers/<int:rid>/extract-document` 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-f6c7dfa4e4731e85", "name": "Unused endpoint: ANY /doc-templates", "shortDescription": {"text": "Unused endpoint: ANY /doc-templates"}, "fullDescription": {"text": "`app.py` declares `ANY /doc-templates` 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-ac726b20a8e8b2ed", "name": "Unused endpoint: ANY /doc-templates/embed", "shortDescription": {"text": "Unused endpoint: ANY /doc-templates/embed"}, "fullDescription": {"text": "`app.py` declares `ANY /doc-templates/embed` 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-544b067f6768a60e", "name": "Unused endpoint: ANY /api/doc-company-info", "shortDescription": {"text": "Unused endpoint: ANY /api/doc-company-info"}, "fullDescription": {"text": "`app.py` declares `ANY /api/doc-company-info` 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-201e7970a522741c", "name": "Unused endpoint: ANY /api/doc-templates", "shortDescription": {"text": "Unused endpoint: ANY /api/doc-templates"}, "fullDescription": {"text": "`app.py` declares `ANY /api/doc-templates` 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-24b44315d0a0363d", "name": "Unused endpoint: ANY /api/doc-templates/<int:tpl_id>", "shortDescription": {"text": "Unused endpoint: ANY /api/doc-templates/<int:tpl_id>"}, "fullDescription": {"text": "`app.py` declares `ANY /api/doc-templates/<int:tpl_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-29dfec859f9cc4cb", "name": "Unused endpoint: ANY /api/doc-templates/<int:tpl_id>/mapping", "shortDescription": {"text": "Unused endpoint: ANY /api/doc-templates/<int:tpl_id>/mapping"}, "fullDescription": {"text": "`app.py` declares `ANY /api/doc-templates/<int:tpl_id>/mapping` 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-b899df33d6dc7212", "name": "Unused endpoint: ANY /doc-generate/<int:tpl_id>", "shortDescription": {"text": "Unused endpoint: ANY /doc-generate/<int:tpl_id>"}, "fullDescription": {"text": "`app.py` declares `ANY /doc-generate/<int:tpl_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-bf41992ff84d8137", "name": "Unused endpoint: ANY /api/doc-templates/<int:tpl_id>/extract", "shortDescription": {"text": "Unused endpoint: ANY /api/doc-templates/<int:tpl_id>/extract"}, "fullDescription": {"text": "`app.py` declares `ANY /api/doc-templates/<int:tpl_id>/extract` 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-ed8181aa643a27eb", "name": "Unused endpoint: ANY /api/doc-templates/<int:tpl_id>/render", "shortDescription": {"text": "Unused endpoint: ANY /api/doc-templates/<int:tpl_id>/render"}, "fullDescription": {"text": "`app.py` declares `ANY /api/doc-templates/<int:tpl_id>/render` 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-9eb62b1449675d6d", "name": "Unused endpoint: ANY /api/doc-templates/<int:tpl_id>/print-view", "shortDescription": {"text": "Unused endpoint: ANY /api/doc-templates/<int:tpl_id>/print-view"}, "fullDescription": {"text": "`app.py` declares `ANY /api/doc-templates/<int:tpl_id>/print-view` 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-c3487f6cf39df94e", "name": "Unused endpoint: ANY /api/doc-templates/<int:tpl_id>/pdf", "shortDescription": {"text": "Unused endpoint: ANY /api/doc-templates/<int:tpl_id>/pdf"}, "fullDescription": {"text": "`app.py` declares `ANY /api/doc-templates/<int:tpl_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-5f71ed17273a0436", "name": "Unused endpoint: ANY /api/doc-templates/combined-schema", "shortDescription": {"text": "Unused endpoint: ANY /api/doc-templates/combined-schema"}, "fullDescription": {"text": "`app.py` declares `ANY /api/doc-templates/combined-schema` 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-c056234794813729", "name": "Unused endpoint: ANY /api/doc-templates/extract-combined", "shortDescription": {"text": "Unused endpoint: ANY /api/doc-templates/extract-combined"}, "fullDescription": {"text": "`app.py` declares `ANY /api/doc-templates/extract-combined` 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-51250cbcc48369a3", "name": "Unused endpoint: ANY /floorplan", "shortDescription": {"text": "Unused endpoint: ANY /floorplan"}, "fullDescription": {"text": "`app.py` declares `ANY /floorplan` 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-db74d7a11f1f7c10", "name": "Unused endpoint: ANY /image-editor", "shortDescription": {"text": "Unused endpoint: ANY /image-editor"}, "fullDescription": {"text": "`app.py` declares `ANY /image-editor` 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-0ab85d117426a56b", "name": "Unused endpoint: ANY /api/floorplans", "shortDescription": {"text": "Unused endpoint: ANY /api/floorplans"}, "fullDescription": {"text": "`app.py` declares `ANY /api/floorplans` 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-5b632549b9a8ebd4", "name": "Unused endpoint: ANY /api/floorplans/<int:fid>", "shortDescription": {"text": "Unused endpoint: ANY /api/floorplans/<int:fid>"}, "fullDescription": {"text": "`app.py` declares `ANY /api/floorplans/<int:fid>` 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-eba3c6b8b843a9fa", "name": "Unused endpoint: ANY /api/floorplan-folders", "shortDescription": {"text": "Unused endpoint: ANY /api/floorplan-folders"}, "fullDescription": {"text": "`app.py` declares `ANY /api/floorplan-folders` 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-993f916c2145418a", "name": "Unused endpoint: ANY /api/floorplan-folders/<int:folder_id>", "shortDescription": {"text": "Unused endpoint: ANY /api/floorplan-folders/<int:folder_id>"}, "fullDescription": {"text": "`app.py` declares `ANY /api/floorplan-folders/<int:folder_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-80a41c0716bd1f84", "name": "Unused endpoint: ANY /api/floorplans/<int:fid>/move", "shortDescription": {"text": "Unused endpoint: ANY /api/floorplans/<int:fid>/move"}, "fullDescription": {"text": "`app.py` declares `ANY /api/floorplans/<int:fid>/move` 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-1c256817d8585521", "name": "Unused endpoint: ANY /api/floorplan-room-types", "shortDescription": {"text": "Unused endpoint: ANY /api/floorplan-room-types"}, "fullDescription": {"text": "`app.py` declares `ANY /api/floorplan-room-types` 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-a5f7e52e35fb4ea8", "name": "Unused endpoint: ANY /api/floorplan-room-types/<int:rid>", "shortDescription": {"text": "Unused endpoint: ANY /api/floorplan-room-types/<int:rid>"}, "fullDescription": {"text": "`app.py` declares `ANY /api/floorplan-room-types/<int:rid>` 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-7d22c9cea5a7d786", "name": "Unused endpoint: ANY /api/floorplan-settings", "shortDescription": {"text": "Unused endpoint: ANY /api/floorplan-settings"}, "fullDescription": {"text": "`app.py` declares `ANY /api/floorplan-settings` 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-b328b4c8e62214a2", "name": "Unused endpoint: ANY /api/floorplans/ai-import", "shortDescription": {"text": "Unused endpoint: ANY /api/floorplans/ai-import"}, "fullDescription": {"text": "`app.py` declares `ANY /api/floorplans/ai-import` 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-fe34f61551e555f2", "name": "Unused endpoint: ANY /converter", "shortDescription": {"text": "Unused endpoint: ANY /converter"}, "fullDescription": {"text": "`app.py` declares `ANY /converter` 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-7dba031f69fec63e", "name": "Unused endpoint: ANY /api/properties", "shortDescription": {"text": "Unused endpoint: ANY /api/properties"}, "fullDescription": {"text": "`app.py` declares `ANY /api/properties` 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-7c1d42cf638a31e9", "name": "Unused endpoint: ANY /api/properties/<int:pid>", "shortDescription": {"text": "Unused endpoint: ANY /api/properties/<int:pid>"}, "fullDescription": {"text": "`app.py` declares `ANY /api/properties/<int:pid>` 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-be2471bc11f131ea", "name": "Unused endpoint: ANY /api/properties/<int:pid>/ai-comment", "shortDescription": {"text": "Unused endpoint: ANY /api/properties/<int:pid>/ai-comment"}, "fullDescription": {"text": "`app.py` declares `ANY /api/properties/<int:pid>/ai-comment` 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/20959"}, "properties": {"repository": "tenera0701/mieroom-app", "repoUrl": "https://github.com/tenera0701/mieroom-app", "branch": "main"}, "results": [{"ruleId": "scanner-5cecd8697b652ac1", "level": "note", "message": {"text": "Possibly dead Python function: owner_required"}, "properties": {"repobilityId": "3bb7bccf2d438d46", "scanner": "scanner-primary", "fingerprint": "5cecd8697b652ac1", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app.py:2915"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-94a373cb06f81290", "level": "note", "message": {"text": "Possibly dead Python function: manager_or_above_required"}, "properties": {"repobilityId": "6ed45a3321e35995", "scanner": "scanner-primary", "fingerprint": "94a373cb06f81290", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app.py:2980"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-e345b4b9a26b3abf", "level": "note", "message": {"text": "Possibly dead Python function: manager_or_perm_required"}, "properties": {"repobilityId": "0116276eddbef95d", "scanner": "scanner-primary", "fingerprint": "e345b4b9a26b3abf", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app.py:2997"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-e0dfcf63c4918295", "level": "note", "message": {"text": "Possibly dead Python function: wrapper"}, "properties": {"repobilityId": "1dc9acbcc8ce537d", "scanner": "scanner-primary", "fingerprint": "e0dfcf63c4918295", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app.py:3023"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-9710c8d059e53154", "level": "none", "message": {"text": "No frontend routes/components detected"}, "properties": {"repobilityId": "44ca61485762e494", "scanner": "scanner-primary", "fingerprint": "9710c8d059e53154", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["coverage"]}}, {"ruleId": "scanner-3cb09506eb0e1081", "level": "note", "message": {"text": "Insecure pattern 'document_write' in app.py:4739"}, "properties": {"repobilityId": "a5a7fac8dce3bcfd", "scanner": "scanner-primary", "fingerprint": "3cb09506eb0e1081", "layer": "security", "severity": "low", "confidence": 1.0, "tags": ["owasp", "document_write"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app.py"}, "region": {"startLine": 4739}}}]}, {"ruleId": "scanner-4601e3ad3bb28677", "level": "warning", "message": {"text": "No CI/CD pipelines detected"}, "properties": {"repobilityId": "c3ee439bce2bc51e", "scanner": "scanner-primary", "fingerprint": "4601e3ad3bb28677", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["coverage"]}}, {"ruleId": "scanner-578081e6621f8eed", "level": "note", "message": {"text": "Very large file: app.py (16925 lines)"}, "properties": {"repobilityId": "5a74e6652f3a10d4", "scanner": "scanner-primary", "fingerprint": "578081e6621f8eed", "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": "e6df818f8806312e", "scanner": "scanner-primary", "fingerprint": "141b30a41e03817b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["license", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-faccb9061e9b52a0", "level": "note", "message": {"text": "No README detected"}, "properties": {"repobilityId": "e3fa691b00f93324", "scanner": "scanner-primary", "fingerprint": "faccb9061e9b52a0", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["docs", "readme", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "eb59cce96a3c721b", "scanner": "scanner-primary", "fingerprint": "3ab5d313dda8e5f9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["debug", "cleanup", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-b9088664ace7f748", "level": "warning", "message": {"text": "Composite production-readiness gap"}, "properties": {"repobilityId": "4e078c3281921a58", "scanner": "scanner-primary", "fingerprint": "b9088664ace7f748", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["production-readiness", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-749d4bc1bd66df5f", "level": "warning", "message": {"text": "Agent instructions exist but release-hardening basics are missing"}, "properties": {"repobilityId": "ed6deb6854eca8ad", "scanner": "scanner-primary", "fingerprint": "749d4bc1bd66df5f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-ea8f3013f588db25", "level": "note", "message": {"text": "Shallow git history limits provenance confidence"}, "properties": {"repobilityId": "4647f2ccdd3b9159", "scanner": "scanner-primary", "fingerprint": "ea8f3013f588db25", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-8424db9c75e04ba4", "level": "none", "message": {"text": "Very short observed git history"}, "properties": {"repobilityId": "b3e83c004e32c6bc", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-ecb0d2c55ed6875d", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/settings.local.json"}, "properties": {"repobilityId": "d8bae33a6d517bf0", "scanner": "scanner-primary", "fingerprint": "ecb0d2c55ed6875d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/settings.local.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-ca440f08ff65fc63", "level": "note", "message": {"text": "Legacy-named symbol `catch_copy` in app.py:1007"}, "properties": {"repobilityId": "cbcc0d285f4cbde4", "scanner": "scanner-primary", "fingerprint": "ca440f08ff65fc63", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-3ec62dc3abeba991", "level": "none", "message": {"text": "Commented-code block (6 lines) in app.py:16549"}, "properties": {"repobilityId": "f73ca9b3d68efe60", "scanner": "scanner-primary", "fingerprint": "3ec62dc3abeba991", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8e047ab7af03962f", "level": "note", "message": {"text": "7 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "5a0455f6498c27ad", "scanner": "scanner-primary", "fingerprint": "8e047ab7af03962f", "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": "2473f12dc06bc60f", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-46969939caf8120b", "level": "note", "message": {"text": "Near-duplicate function bodies in 9 places"}, "properties": {"repobilityId": "7d594230e7b27c76", "scanner": "scanner-primary", "fingerprint": "46969939caf8120b", "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": "d63d6fc672dff5b8", "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": "0e9f0621e6e6cd7e", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-46969939caf8120b", "level": "note", "message": {"text": "Near-duplicate function bodies in 9 places"}, "properties": {"repobilityId": "00e9248b31808997", "scanner": "scanner-primary", "fingerprint": "46969939caf8120b", "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": "17e9feb2bcce2542", "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": "5c65494535cf0023", "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": "4412bb4d50641dac", "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": "8d8c43d266e9096d", "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": "78900ab1f3469be7", "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": "70e3cf27d2951697", "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": "4baeae041da4cca2", "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": "2dc580eba271a36b", "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": "c68d7e9d1b77b7a5", "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": "3170101857a55af4", "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": "2bad69f2b979467e", "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": "4397b37c990d3044", "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": "87153db6c62357f8", "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": "ab6ec659809168b7", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-49c98f7cedd9c977", "level": "note", "message": {"text": "Near-duplicate function bodies in 4 places"}, "properties": {"repobilityId": "af7a3592492bdb2e", "scanner": "scanner-primary", "fingerprint": "49c98f7cedd9c977", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-1a6d91f2236825bf", "level": "note", "message": {"text": "Unused endpoint: ANY /"}, "properties": {"repobilityId": "302fe621a396c5fd", "scanner": "scanner-primary", "fingerprint": "1a6d91f2236825bf", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-280e30f62b45114a", "level": "note", "message": {"text": "Unused endpoint: ANY /lp"}, "properties": {"repobilityId": "f17ff34ed7ea9901", "scanner": "scanner-primary", "fingerprint": "280e30f62b45114a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6b5fa3c50d49d52e", "level": "note", "message": {"text": "Unused endpoint: ANY /roompick-lp"}, "properties": {"repobilityId": "c9a9d633f9efcb5d", "scanner": "scanner-primary", "fingerprint": "6b5fa3c50d49d52e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-dfcafeb46a1d1ec2", "level": "note", "message": {"text": "Unused endpoint: ANY /app-login"}, "properties": {"repobilityId": "eccb347a9cffe588", "scanner": "scanner-primary", "fingerprint": "dfcafeb46a1d1ec2", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-89a71df47b839e01", "level": "note", "message": {"text": "Unused endpoint: ANY /app-logout"}, "properties": {"repobilityId": "94f30b471a1d9041", "scanner": "scanner-primary", "fingerprint": "89a71df47b839e01", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d0b1f39122ad13fc", "level": "note", "message": {"text": "Unused endpoint: ANY /executive"}, "properties": {"repobilityId": "ef9119853438cc39", "scanner": "scanner-primary", "fingerprint": "d0b1f39122ad13fc", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1a20d043b82f162f", "level": "note", "message": {"text": "Unused endpoint: ANY /sales"}, "properties": {"repobilityId": "22008824b884eb30", "scanner": "scanner-primary", "fingerprint": "1a20d043b82f162f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-faa913962d6a9176", "level": "note", "message": {"text": "Unused endpoint: ANY /customer-management"}, "properties": {"repobilityId": "62b936ce12aa483f", "scanner": "scanner-primary", "fingerprint": "faa913962d6a9176", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-0f8047d2f714e558", "level": "note", "message": {"text": "Unused endpoint: ANY /contract-customers"}, "properties": {"repobilityId": "a5cf812a5f200fc5", "scanner": "scanner-primary", "fingerprint": "0f8047d2f714e558", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-09d42a8e21c4607b", "level": "note", "message": {"text": "Unused endpoint: ANY /api/contract-customers"}, "properties": {"repobilityId": "20a10339fecc1b91", "scanner": "scanner-primary", "fingerprint": "09d42a8e21c4607b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8107e24a8cc444c2", "level": "note", "message": {"text": "Unused endpoint: ANY /past-customers"}, "properties": {"repobilityId": "d6eaf9a8916479f0", "scanner": "scanner-primary", "fingerprint": "8107e24a8cc444c2", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-9533b5cc44d8f558", "level": "note", "message": {"text": "Unused endpoint: ANY /api/past-customers"}, "properties": {"repobilityId": "a0612234eabf43ba", "scanner": "scanner-primary", "fingerprint": "9533b5cc44d8f558", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8040b46117c9401c", "level": "note", "message": {"text": "Unused endpoint: ANY /api/contract-customers/<int:rid>/past"}, "properties": {"repobilityId": "37b5355cfc18ccde", "scanner": "scanner-primary", "fingerprint": "8040b46117c9401c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c7cf74243cdc16f2", "level": "note", "message": {"text": "Unused endpoint: ANY /contract-customers/<int:rid>/edit"}, "properties": {"repobilityId": "890d2f0dacf24e83", "scanner": "scanner-primary", "fingerprint": "c7cf74243cdc16f2", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8b82a2a6ab221dec", "level": "note", "message": {"text": "Unused endpoint: ANY /contract-customers/<int:rid>/doc-edit/<int:tpl_id>"}, "properties": {"repobilityId": "bb8e3868934b8ee0", "scanner": "scanner-primary", "fingerprint": "8b82a2a6ab221dec", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-414794764bbe827b", "level": "note", "message": {"text": "Unused endpoint: ANY /api/contract-customers/<int:rid>/doc-overrides/<int:tpl_id>"}, "properties": {"repobilityId": "17148bbb03b71d64", "scanner": "scanner-primary", "fingerprint": "414794764bbe827b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3b8d60547aa82887", "level": "note", "message": {"text": "Unused endpoint: ANY /api/ai-status"}, "properties": {"repobilityId": "4d779968e1bae682", "scanner": "scanner-primary", "fingerprint": "3b8d60547aa82887", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5eeb42aae53b8c3f", "level": "note", "message": {"text": "Unused endpoint: ANY /api/contract-customers/<int:rid>/document-data"}, "properties": {"repobilityId": "87424d9ecea8ab6f", "scanner": "scanner-primary", "fingerprint": "5eeb42aae53b8c3f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-9f0460c525b4b33f", "level": "note", "message": {"text": "Unused endpoint: ANY /api/contract-customers/<int:rid>/attachments"}, "properties": {"repobilityId": "fab67d4d25f6392b", "scanner": "scanner-primary", "fingerprint": "9f0460c525b4b33f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-233b516bf9ee4bf2", "level": "note", "message": {"text": "Unused endpoint: ANY /api/contract-customers/<int:rid>/attachments/<int:aid>"}, "properties": {"repobilityId": "3c98586aeac71a0c", "scanner": "scanner-primary", "fingerprint": "233b516bf9ee4bf2", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-26457eb276539876", "level": "note", "message": {"text": "Unused endpoint: ANY /api/contract-customers/<int:rid>/attachments/<int:aid>/delete"}, "properties": {"repobilityId": "150c278bbbde3b0e", "scanner": "scanner-primary", "fingerprint": "26457eb276539876", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a32aedd8769c333b", "level": "note", "message": {"text": "Unused endpoint: ANY /api/contract-customers/<int:rid>/extract-document"}, "properties": {"repobilityId": "8913889b0ad1c4f0", "scanner": "scanner-primary", "fingerprint": "a32aedd8769c333b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f6c7dfa4e4731e85", "level": "note", "message": {"text": "Unused endpoint: ANY /doc-templates"}, "properties": {"repobilityId": "c9a8ba81bd3f44a0", "scanner": "scanner-primary", "fingerprint": "f6c7dfa4e4731e85", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ac726b20a8e8b2ed", "level": "note", "message": {"text": "Unused endpoint: ANY /doc-templates/embed"}, "properties": {"repobilityId": "ecc70ebdf5237380", "scanner": "scanner-primary", "fingerprint": "ac726b20a8e8b2ed", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-544b067f6768a60e", "level": "note", "message": {"text": "Unused endpoint: ANY /api/doc-company-info"}, "properties": {"repobilityId": "33cf347f4dfc9089", "scanner": "scanner-primary", "fingerprint": "544b067f6768a60e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-201e7970a522741c", "level": "note", "message": {"text": "Unused endpoint: ANY /api/doc-templates"}, "properties": {"repobilityId": "b412f343dc51da50", "scanner": "scanner-primary", "fingerprint": "201e7970a522741c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-24b44315d0a0363d", "level": "note", "message": {"text": "Unused endpoint: ANY /api/doc-templates/<int:tpl_id>"}, "properties": {"repobilityId": "36163458fde749d1", "scanner": "scanner-primary", "fingerprint": "24b44315d0a0363d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-29dfec859f9cc4cb", "level": "note", "message": {"text": "Unused endpoint: ANY /api/doc-templates/<int:tpl_id>/mapping"}, "properties": {"repobilityId": "e683aa7207599817", "scanner": "scanner-primary", "fingerprint": "29dfec859f9cc4cb", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b899df33d6dc7212", "level": "note", "message": {"text": "Unused endpoint: ANY /doc-generate/<int:tpl_id>"}, "properties": {"repobilityId": "46285bb062655b93", "scanner": "scanner-primary", "fingerprint": "b899df33d6dc7212", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-bf41992ff84d8137", "level": "note", "message": {"text": "Unused endpoint: ANY /api/doc-templates/<int:tpl_id>/extract"}, "properties": {"repobilityId": "b16706b423597ff1", "scanner": "scanner-primary", "fingerprint": "bf41992ff84d8137", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ed8181aa643a27eb", "level": "note", "message": {"text": "Unused endpoint: ANY /api/doc-templates/<int:tpl_id>/render"}, "properties": {"repobilityId": "327882003492811b", "scanner": "scanner-primary", "fingerprint": "ed8181aa643a27eb", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-9eb62b1449675d6d", "level": "note", "message": {"text": "Unused endpoint: ANY /api/doc-templates/<int:tpl_id>/print-view"}, "properties": {"repobilityId": "59399cfefece383d", "scanner": "scanner-primary", "fingerprint": "9eb62b1449675d6d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c3487f6cf39df94e", "level": "note", "message": {"text": "Unused endpoint: ANY /api/doc-templates/<int:tpl_id>/pdf"}, "properties": {"repobilityId": "fc5af70669dec8bc", "scanner": "scanner-primary", "fingerprint": "c3487f6cf39df94e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5f71ed17273a0436", "level": "note", "message": {"text": "Unused endpoint: ANY /api/doc-templates/combined-schema"}, "properties": {"repobilityId": "3653f3820c1b2378", "scanner": "scanner-primary", "fingerprint": "5f71ed17273a0436", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c056234794813729", "level": "note", "message": {"text": "Unused endpoint: ANY /api/doc-templates/extract-combined"}, "properties": {"repobilityId": "ad5bec2e2248ed9d", "scanner": "scanner-primary", "fingerprint": "c056234794813729", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-51250cbcc48369a3", "level": "note", "message": {"text": "Unused endpoint: ANY /floorplan"}, "properties": {"repobilityId": "acafee17c02b0a3e", "scanner": "scanner-primary", "fingerprint": "51250cbcc48369a3", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-db74d7a11f1f7c10", "level": "note", "message": {"text": "Unused endpoint: ANY /image-editor"}, "properties": {"repobilityId": "9aa43425405fee01", "scanner": "scanner-primary", "fingerprint": "db74d7a11f1f7c10", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-0ab85d117426a56b", "level": "note", "message": {"text": "Unused endpoint: ANY /api/floorplans"}, "properties": {"repobilityId": "59c9c9b0d78ae4af", "scanner": "scanner-primary", "fingerprint": "0ab85d117426a56b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5b632549b9a8ebd4", "level": "note", "message": {"text": "Unused endpoint: ANY /api/floorplans/<int:fid>"}, "properties": {"repobilityId": "fda3783c93536914", "scanner": "scanner-primary", "fingerprint": "5b632549b9a8ebd4", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-eba3c6b8b843a9fa", "level": "note", "message": {"text": "Unused endpoint: ANY /api/floorplan-folders"}, "properties": {"repobilityId": "0b33557f21b515b4", "scanner": "scanner-primary", "fingerprint": "eba3c6b8b843a9fa", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-993f916c2145418a", "level": "note", "message": {"text": "Unused endpoint: ANY /api/floorplan-folders/<int:folder_id>"}, "properties": {"repobilityId": "43af778b46bcb083", "scanner": "scanner-primary", "fingerprint": "993f916c2145418a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-80a41c0716bd1f84", "level": "note", "message": {"text": "Unused endpoint: ANY /api/floorplans/<int:fid>/move"}, "properties": {"repobilityId": "27bd1885f84abda3", "scanner": "scanner-primary", "fingerprint": "80a41c0716bd1f84", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1c256817d8585521", "level": "note", "message": {"text": "Unused endpoint: ANY /api/floorplan-room-types"}, "properties": {"repobilityId": "305e102a1522423d", "scanner": "scanner-primary", "fingerprint": "1c256817d8585521", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a5f7e52e35fb4ea8", "level": "note", "message": {"text": "Unused endpoint: ANY /api/floorplan-room-types/<int:rid>"}, "properties": {"repobilityId": "7edb247a10cfd73e", "scanner": "scanner-primary", "fingerprint": "a5f7e52e35fb4ea8", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7d22c9cea5a7d786", "level": "note", "message": {"text": "Unused endpoint: ANY /api/floorplan-settings"}, "properties": {"repobilityId": "c30ba4981432d645", "scanner": "scanner-primary", "fingerprint": "7d22c9cea5a7d786", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b328b4c8e62214a2", "level": "note", "message": {"text": "Unused endpoint: ANY /api/floorplans/ai-import"}, "properties": {"repobilityId": "d4c2159ef386b876", "scanner": "scanner-primary", "fingerprint": "b328b4c8e62214a2", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-fe34f61551e555f2", "level": "note", "message": {"text": "Unused endpoint: ANY /converter"}, "properties": {"repobilityId": "7a8457adef241a02", "scanner": "scanner-primary", "fingerprint": "fe34f61551e555f2", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7dba031f69fec63e", "level": "note", "message": {"text": "Unused endpoint: ANY /api/properties"}, "properties": {"repobilityId": "63d2d0a695678384", "scanner": "scanner-primary", "fingerprint": "7dba031f69fec63e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7c1d42cf638a31e9", "level": "note", "message": {"text": "Unused endpoint: ANY /api/properties/<int:pid>"}, "properties": {"repobilityId": "8333128e0bb73d00", "scanner": "scanner-primary", "fingerprint": "7c1d42cf638a31e9", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-be2471bc11f131ea", "level": "note", "message": {"text": "Unused endpoint: ANY /api/properties/<int:pid>/ai-comment"}, "properties": {"repobilityId": "37d66faa946aaf5c", "scanner": "scanner-primary", "fingerprint": "be2471bc11f131ea", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}