{"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-b98cffc1885991db", "name": "Possibly dead Python function: bank_stats", "shortDescription": {"text": "Possibly dead Python function: bank_stats"}, "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-5183a69ed48f12da", "name": "Possibly dead Python function: snapshot", "shortDescription": {"text": "Possibly dead Python function: snapshot"}, "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-56c84db11bac3ba0", "name": "Possibly dead Python function: is_master_known", "shortDescription": {"text": "Possibly dead Python function: is_master_known"}, "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-bd6fe3a4ec50c0e8", "name": "Possibly dead Python function: advertiser_url", "shortDescription": {"text": "Possibly dead Python function: advertiser_url"}, "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-4df43c74433ce60b", "name": "Possibly dead Python function: has_keywords_for", "shortDescription": {"text": "Possibly dead Python function: has_keywords_for"}, "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-d994ea1ae8a6357d", "name": "Possibly dead Python function: is_available", "shortDescription": {"text": "Possibly dead Python function: is_available"}, "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-0dccbbba75115509", "name": "Possibly dead Python function: pool_error", "shortDescription": {"text": "Possibly dead Python function: pool_error"}, "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-e7b0ffbd5780bc4f", "name": "Possibly dead Python function: role_required", "shortDescription": {"text": "Possibly dead Python function: role_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-e61a9781f5148c41", "name": "Possibly dead Python function: deco", "shortDescription": {"text": "Possibly dead Python function: deco"}, "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-77da9d3b6108be3c", "name": "Possibly dead Python function: seed_default_users", "shortDescription": {"text": "Possibly dead Python function: seed_default_users"}, "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-4f90c75b53d2c588", "name": "Possibly dead Python function: progress_cb", "shortDescription": {"text": "Possibly dead Python function: progress_cb"}, "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-1efc2e7f6a45630b", "name": "Possibly dead Python function: is_decision_maker", "shortDescription": {"text": "Possibly dead Python function: is_decision_maker"}, "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-d1402b8183ade001", "name": "Possibly dead Python function: infer_personal_email", "shortDescription": {"text": "Possibly dead Python function: infer_personal_email"}, "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-a1b75fd6857d5b1e", "name": "Possibly dead Python function: main_gui", "shortDescription": {"text": "Possibly dead Python function: main_gui"}, "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-30b915d23037d38c", "name": "Possibly dead Python function: progress_cb", "shortDescription": {"text": "Possibly dead Python function: progress_cb"}, "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-f87046a98c731d6b", "name": "Possibly dead Python function: is_valid_phone", "shortDescription": {"text": "Possibly dead Python function: is_valid_phone"}, "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-d72d541b4485153e", "name": "Possibly dead Python function: is_disposable_email", "shortDescription": {"text": "Possibly dead Python function: is_disposable_email"}, "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-89307aded6ddbe10", "name": "Possibly dead Python function: extract_domain_from_email", "shortDescription": {"text": "Possibly dead Python function: extract_domain_from_email"}, "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-29ec469a6c1828d9", "name": "Possibly dead Python function: name_to_initials", "shortDescription": {"text": "Possibly dead Python function: name_to_initials"}, "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-b67fcbd70ff7e8db", "name": "Possibly dead Python function: slug_to_name", "shortDescription": {"text": "Possibly dead Python function: slug_to_name"}, "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-97c2023165131054", "name": "Possibly dead Python function: is_valid_domain", "shortDescription": {"text": "Possibly dead Python function: is_valid_domain"}, "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-f45ef46516320a84", "name": "Possibly dead Python function: write_leads_csv", "shortDescription": {"text": "Possibly dead Python function: write_leads_csv"}, "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-145f980e6fddd076", "name": "Possibly dead Python function: read_leads_csv", "shortDescription": {"text": "Possibly dead Python function: read_leads_csv"}, "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-8566203bff20d47f", "name": "Possibly dead Python function: deduplicate_leads", "shortDescription": {"text": "Possibly dead Python function: deduplicate_leads"}, "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-684f5db67f3c78ec", "name": "Stray `console.log` in TS/JS \u2014 user-flow-chart/build-preview.js:67", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 user-flow-chart/build-preview.js:67"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-49e767b6f8e60214", "name": "Insecure pattern 'direct_innerhtml_assignment' in index_legacy.html:674", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in index_legacy.html:674"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-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-dbecb6bf22b605cc", "name": "Very large file: db.py (1476 lines)", "shortDescription": {"text": "Very large file: db.py (1476 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-43950b3c21b6a4df", "name": "Very large file: city_pipeline.py (2221 lines)", "shortDescription": {"text": "Very large file: city_pipeline.py (2221 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-bef894b21957e31e", "name": "Very large file: wsgi.py (1947 lines)", "shortDescription": {"text": "Very large file: wsgi.py (1947 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-74326ce80fa992ee", "name": "Very large file: V5.py (13148 lines)", "shortDescription": {"text": "Very large file: V5.py (13148 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-56e030c99816e318", "name": "Very large file: user-flow-chart/UserFlowChart.jsx (1024 lines)", "shortDescription": {"text": "Very large file: user-flow-chart/UserFlowChart.jsx (1024 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ea3b5e389d8c9c0f", "name": "Low test-to-source ratio", "shortDescription": {"text": "Low test-to-source ratio"}, "fullDescription": {"text": "5 tests / 28 src (ratio 0.18)."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-141b30a41e03817b", "name": "No license file detected", "shortDescription": {"text": "No license file detected"}, "fullDescription": {"text": "No LICENSE/COPYING/NOTICE file was found. Generated repositories often omit licensing, which blocks reuse and automated intake."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3ab5d313dda8e5f9", "name": "Debug logging residue appears in source files", "shortDescription": {"text": "Debug logging residue appears in source files"}, "fullDescription": {"text": "Found 56 console/debugger/print-style debug statements in non-test source. This is a common fast-generation residue before production cleanup."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-72b2a6250083a784", "name": "Placeholder or mock-heavy implementation detected", "shortDescription": {"text": "Placeholder or mock-heavy implementation detected"}, "fullDescription": {"text": "Found 12 placeholder/mock markers across 7 source files. This often means the repo looks complete while core flows still use generated scaffolding or fake data."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2d0c7b7ab8f8aacf", "name": "Critical user flow still appears backed by mock or placeholder data", "shortDescription": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "fullDescription": {"text": "A payment/auth/admin/order/billing-style flow contains mock, fake, TODO, dummy, or placeholder markers in runtime source. In the Fable corpus this is a high-leverage completeness smell: the app can look finished while the money, identity, or tenant flow is still scaffolded."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b9088664ace7f748", "name": "Composite production-readiness gap", "shortDescription": {"text": "Composite production-readiness gap"}, "fullDescription": {"text": "Multiple low-cost hardening controls are missing together: license, ci. 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": "low", "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-e78ba538d3f523d8", "name": "Commented-code block (5 lines) in keyword_bank.py:110", "shortDescription": {"text": "Commented-code block (5 lines) in keyword_bank.py:110"}, "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-4f24afce99933f6d", "name": "Network/subprocess call without timeout or try/except \u2014 rate_limiter.py:49", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 rate_limiter.py:49"}, "fullDescription": {"text": "`requests.post(...)` here lacks both a `timeout=` arg and an enclosing try/except. This is exactly the class of bug that took down our git-clone earlier (HTTP/2 stream cancel surfaced as a fatal). Add a `timeout=` and wrap in try/except, or use a wrapper that retries."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-7ce494fb6610fbc4", "name": "Commented-code block (6 lines) in google_ads_transparency.py:366", "shortDescription": {"text": "Commented-code block (6 lines) in google_ads_transparency.py:366"}, "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-219ea6d6f97484f1", "name": "Commented-code block (9 lines) in db.py:130", "shortDescription": {"text": "Commented-code block (9 lines) in db.py:130"}, "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-e09d0009695b6c50", "name": "Commented-code block (5 lines) in city_pipeline.py:51", "shortDescription": {"text": "Commented-code block (5 lines) in city_pipeline.py:51"}, "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-13ff3fa9d91b29ac", "name": "Commented-code block (7 lines) in wsgi.py:362", "shortDescription": {"text": "Commented-code block (7 lines) in wsgi.py:362"}, "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-377946d74f68c662", "name": "Commented-code block (7 lines) in V5.py:73", "shortDescription": {"text": "Commented-code block (7 lines) in V5.py:73"}, "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-69b46b486afa79e6", "name": "Network/subprocess call without timeout or try/except \u2014 V5.py:13084", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 V5.py:13084"}, "fullDescription": {"text": "`requests.post(...)` here lacks both a `timeout=` arg and an enclosing try/except. This is exactly the class of bug that took down our git-clone earlier (HTTP/2 stream cancel surfaced as a fatal). Add a `timeout=` and wrap in try/except, or use a wrapper that retries."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-557c6a53a6cb03ab", "name": "Commented-code block (5 lines) in test_semrush_budget.py:81", "shortDescription": {"text": "Commented-code block (5 lines) in test_semrush_budget.py:81"}, "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-7ea7dd1adbf06cbd", "name": "Legacy-named symbol `_archive_legacy` in build_master_keyword_bank.py:9", "shortDescription": {"text": "Legacy-named symbol `_archive_legacy` in build_master_keyword_bank.py:9"}, "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-1c6d257c26bbbfe9", "name": "Commented-code block (13 lines) in build_master_keyword_bank.py:11", "shortDescription": {"text": "Commented-code block (13 lines) in build_master_keyword_bank.py:11"}, "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-29932f03c8650673", "name": "Commented-code block (5 lines) in build_ecom_index.py:47", "shortDescription": {"text": "Commented-code block (5 lines) in build_ecom_index.py:47"}, "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-decb0e341d1642d9", "name": "Commented-code block (8 lines) in google_places_intent.py:72", "shortDescription": {"text": "Commented-code block (8 lines) in google_places_intent.py:72"}, "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-979755d93ae9e000", "name": "Legacy-named symbol `test_pricing_math_and_monthly_unused` in tests/test_pipeline_smoke.py:260", "shortDescription": {"text": "Legacy-named symbol `test_pricing_math_and_monthly_unused` in tests/test_pipeline_smoke.py:260"}, "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-59b992d62d86a65a", "name": "25 env vars used in code but missing from .env.example", "shortDescription": {"text": "25 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `ATC_SWEEP_MAX`, `CLEAR_DB_ON_STARTUP`, `CRM_ROSTER_JSON`, `ENRICH_MAX_CHARS`, `ENRICH_MAX_PAGES`, `ENRICH_OPENAI_MODEL`, `ENRICH_PER_LEAD_DELAY`, `ENRICH_POLL_SECONDS` + 17 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:\ndb.py:list_page, db.py:list_page\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:\nauth.py:wrapped, auth.py:wrapped, auth.py:wrapped, auth.py:wrapped\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-02525d39071dd2c7", "name": "Near-duplicate function bodies in 5 places", "shortDescription": {"text": "Near-duplicate function bodies in 5 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nwsgi.py:progress_cb, wsgi.py:progress_cb, wsgi.py:progress_cb, V5.py:progress_cb\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:\nwsgi.py:log_cb, wsgi.py:log_cb, wsgi.py:log_cb\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-7619429fb7e4a37b", "name": "Flask mutation route `login` without `@login_required` \u2014 wsgi.py:198", "shortDescription": {"text": "Flask mutation route `login` without `@login_required` \u2014 wsgi.py:198"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2bc48e3a0123e6da", "name": "Flask mutation route `logout` without `@login_required` \u2014 wsgi.py:264", "shortDescription": {"text": "Flask mutation route `logout` without `@login_required` \u2014 wsgi.py:264"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-89792bf81ed5cc04", "name": "Flask mutation route `refresh_credits` without `@login_required` \u2014 wsgi.py:536", "shortDescription": {"text": "Flask mutation route `refresh_credits` without `@login_required` \u2014 wsgi.py:536"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c295c012c53497b6", "name": "Flask mutation route `api_users_create` without `@login_required` \u2014 wsgi.py:633", "shortDescription": {"text": "Flask mutation route `api_users_create` without `@login_required` \u2014 wsgi.py:633"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-fa2fc0e9df2c1fb1", "name": "Flask mutation route `api_users_update` without `@login_required` \u2014 wsgi.py:659", "shortDescription": {"text": "Flask mutation route `api_users_update` without `@login_required` \u2014 wsgi.py:659"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1976725cc3be744c", "name": "Flask mutation route `api_users_password` without `@login_required` \u2014 wsgi.py:675", "shortDescription": {"text": "Flask mutation route `api_users_password` without `@login_required` \u2014 wsgi.py:675"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a8b61a3245a8b028", "name": "Flask mutation route `api_allocation_auto` without `@login_required` \u2014 wsgi.py:709", "shortDescription": {"text": "Flask mutation route `api_allocation_auto` without `@login_required` \u2014 wsgi.py:709"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f81b858d9d439ed9", "name": "Flask mutation route `api_lead_reassign` without `@login_required` \u2014 wsgi.py:724", "shortDescription": {"text": "Flask mutation route `api_lead_reassign` without `@login_required` \u2014 wsgi.py:724"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9d03e5ce725d69bc", "name": "Flask mutation route `api_lead_contacted` without `@login_required` \u2014 wsgi.py:746", "shortDescription": {"text": "Flask mutation route `api_lead_contacted` without `@login_required` \u2014 wsgi.py:746"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a16ab6847812d686", "name": "Flask mutation route `api_lead_manual_add` without `@login_required` \u2014 wsgi.py:776", "shortDescription": {"text": "Flask mutation route `api_lead_manual_add` without `@login_required` \u2014 wsgi.py:776"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-87ab7d070d5a9b2c", "name": "Flask mutation route `api_lead_recrawl` without `@login_required` \u2014 wsgi.py:820", "shortDescription": {"text": "Flask mutation route `api_lead_recrawl` without `@login_required` \u2014 wsgi.py:820"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b0bd71fd2de22c5c", "name": "Flask mutation route `threecx_webhook` without `@login_required` \u2014 wsgi.py:841", "shortDescription": {"text": "Flask mutation route `threecx_webhook` without `@login_required` \u2014 wsgi.py:841"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0060949cf2dfd8fb", "name": "Flask mutation route `api_3cx_test_call` without `@login_required` \u2014 wsgi.py:879", "shortDescription": {"text": "Flask mutation route `api_3cx_test_call` without `@login_required` \u2014 wsgi.py:879"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4340b71dbf94cd93", "name": "Flask mutation route `api_3cx_sync` without `@login_required` \u2014 wsgi.py:895", "shortDescription": {"text": "Flask mutation route `api_3cx_sync` without `@login_required` \u2014 wsgi.py:895"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9fc96d9f14962465", "name": "Flask mutation route `api_me_mobile` without `@login_required` \u2014 wsgi.py:906", "shortDescription": {"text": "Flask mutation route `api_me_mobile` without `@login_required` \u2014 wsgi.py:906"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f9a3832610508f10", "name": "Flask mutation route `db_clear_all` without `@login_required` \u2014 wsgi.py:946", "shortDescription": {"text": "Flask mutation route `db_clear_all` without `@login_required` \u2014 wsgi.py:946"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7eeca97799272bb6", "name": "Flask mutation route `api_save_pricing` without `@login_required` \u2014 wsgi.py:1064", "shortDescription": {"text": "Flask mutation route `api_save_pricing` without `@login_required` \u2014 wsgi.py:1064"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-66bf5545095804dd", "name": "Flask mutation route `generate` without `@login_required` \u2014 wsgi.py:1217", "shortDescription": {"text": "Flask mutation route `generate` without `@login_required` \u2014 wsgi.py:1217"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-254961a66f1da8cd", "name": "Flask mutation route `generate_city` without `@login_required` \u2014 wsgi.py:1422", "shortDescription": {"text": "Flask mutation route `generate_city` without `@login_required` \u2014 wsgi.py:1422"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ccc7105029d3d2a8", "name": "Flask mutation route `generate_multi` without `@login_required` \u2014 wsgi.py:1602", "shortDescription": {"text": "Flask mutation route `generate_multi` without `@login_required` \u2014 wsgi.py:1602"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-aacb14067eae7b77", "name": "Flask mutation route `cancel` without `@login_required` \u2014 wsgi.py:1852", "shortDescription": {"text": "Flask mutation route `cancel` without `@login_required` \u2014 wsgi.py:1852"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7814abb842aaa44c", "name": "Flask mutation route `apollo_phone_callback` without `@login_required` \u2014 wsgi.py:1898", "shortDescription": {"text": "Flask mutation route `apollo_phone_callback` without `@login_required` \u2014 wsgi.py:1898"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4c7ad61ba1b23915", "name": "Unused endpoint: ANY /login", "shortDescription": {"text": "Unused endpoint: ANY /login"}, "fullDescription": {"text": "`wsgi.py` declares `ANY /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-c9e449c3b9e73b73", "name": "Unused endpoint: ANY /logout", "shortDescription": {"text": "Unused endpoint: ANY /logout"}, "fullDescription": {"text": "`wsgi.py` declares `ANY /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-ec8a2a284b9a88c4", "name": "Unused endpoint: ANY /whoami", "shortDescription": {"text": "Unused endpoint: ANY /whoami"}, "fullDescription": {"text": "`wsgi.py` declares `ANY /whoami` 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-1a6d91f2236825bf", "name": "Unused endpoint: ANY /", "shortDescription": {"text": "Unused endpoint: ANY /"}, "fullDescription": {"text": "`wsgi.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-e568bdfce08b33f5", "name": "Unused endpoint: ANY /<path:filename>", "shortDescription": {"text": "Unused endpoint: ANY /<path:filename>"}, "fullDescription": {"text": "`wsgi.py` declares `ANY /<path:filename>` 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-d9b277c3cb5aac50", "name": "Unused endpoint: ANY /industries", "shortDescription": {"text": "Unused endpoint: ANY /industries"}, "fullDescription": {"text": "`wsgi.py` declares `ANY /industries` 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-488ffabc71386140", "name": "Unused endpoint: ANY /api/au-cities", "shortDescription": {"text": "Unused endpoint: ANY /api/au-cities"}, "fullDescription": {"text": "`wsgi.py` declares `ANY /api/au-cities` 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-a13f7eb82537a919", "name": "Unused endpoint: ANY /api/credits", "shortDescription": {"text": "Unused endpoint: ANY /api/credits"}, "fullDescription": {"text": "`wsgi.py` declares `ANY /api/credits` 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-0c0a62ec28077af5", "name": "Unused endpoint: ANY /api/credits/refresh", "shortDescription": {"text": "Unused endpoint: ANY /api/credits/refresh"}, "fullDescription": {"text": "`wsgi.py` declares `ANY /api/credits/refresh` 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-1689fee901aeffdc", "name": "Unused endpoint: ANY /api/master-stats", "shortDescription": {"text": "Unused endpoint: ANY /api/master-stats"}, "fullDescription": {"text": "`wsgi.py` declares `ANY /api/master-stats` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-98356fa7ff420a14", "name": "Unused endpoint: ANY /admin", "shortDescription": {"text": "Unused endpoint: ANY /admin"}, "fullDescription": {"text": "`wsgi.py` declares `ANY /admin` 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-73344ad56881805a", "name": "Unused endpoint: ANY /admin/users", "shortDescription": {"text": "Unused endpoint: ANY /admin/users"}, "fullDescription": {"text": "`wsgi.py` declares `ANY /admin/users` 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-f83fa35fc52062d0", "name": "Unused endpoint: ANY /admin/runs", "shortDescription": {"text": "Unused endpoint: ANY /admin/runs"}, "fullDescription": {"text": "`wsgi.py` declares `ANY /admin/runs` 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-33de9c10cc501140", "name": "Unused endpoint: ANY /api/users", "shortDescription": {"text": "Unused endpoint: ANY /api/users"}, "fullDescription": {"text": "`wsgi.py` declares `ANY /api/users` 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-ae12253fae97dd11", "name": "Unused endpoint: ANY /api/users/<int:user_id>", "shortDescription": {"text": "Unused endpoint: ANY /api/users/<int:user_id>"}, "fullDescription": {"text": "`wsgi.py` declares `ANY /api/users/<int:user_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-f930a5aed19ad804", "name": "Unused endpoint: ANY /api/users/<int:user_id>/password", "shortDescription": {"text": "Unused endpoint: ANY /api/users/<int:user_id>/password"}, "fullDescription": {"text": "`wsgi.py` declares `ANY /api/users/<int:user_id>/password` 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-911fe7317c97fef4", "name": "Unused endpoint: ANY /api/allocation/bdes", "shortDescription": {"text": "Unused endpoint: ANY /api/allocation/bdes"}, "fullDescription": {"text": "`wsgi.py` declares `ANY /api/allocation/bdes` 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-c55dda4b14a7bd0c", "name": "Unused endpoint: ANY /api/allocation/auto", "shortDescription": {"text": "Unused endpoint: ANY /api/allocation/auto"}, "fullDescription": {"text": "`wsgi.py` declares `ANY /api/allocation/auto` 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-ef79974794fc2242", "name": "Unused endpoint: ANY /api/leads/<int:lead_id>/reassign", "shortDescription": {"text": "Unused endpoint: ANY /api/leads/<int:lead_id>/reassign"}, "fullDescription": {"text": "`wsgi.py` declares `ANY /api/leads/<int:lead_id>/reassign` 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-cd6bb0105aa7f415", "name": "Unused endpoint: ANY /api/leads/<int:lead_id>/contacted", "shortDescription": {"text": "Unused endpoint: ANY /api/leads/<int:lead_id>/contacted"}, "fullDescription": {"text": "`wsgi.py` declares `ANY /api/leads/<int:lead_id>/contacted` 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-fb237fb4cb578540", "name": "Unused endpoint: ANY /api/allocation/contacted-feed", "shortDescription": {"text": "Unused endpoint: ANY /api/allocation/contacted-feed"}, "fullDescription": {"text": "`wsgi.py` declares `ANY /api/allocation/contacted-feed` 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-9677b47b69f2e6d7", "name": "Unused endpoint: ANY /api/leads/manual-add", "shortDescription": {"text": "Unused endpoint: ANY /api/leads/manual-add"}, "fullDescription": {"text": "`wsgi.py` declares `ANY /api/leads/manual-add` 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-a6c3360079176f02", "name": "Unused endpoint: ANY /api/lead/<int:lead_id>/full", "shortDescription": {"text": "Unused endpoint: ANY /api/lead/<int:lead_id>/full"}, "fullDescription": {"text": "`wsgi.py` declares `ANY /api/lead/<int:lead_id>/full` 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-926c1f91edfef5d0", "name": "Unused endpoint: ANY /api/lead/<int:lead_id>/recrawl", "shortDescription": {"text": "Unused endpoint: ANY /api/lead/<int:lead_id>/recrawl"}, "fullDescription": {"text": "`wsgi.py` declares `ANY /api/lead/<int:lead_id>/recrawl` 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-afefb2ed9bd327b5", "name": "Unused endpoint: ANY /api/crawler/status", "shortDescription": {"text": "Unused endpoint: ANY /api/crawler/status"}, "fullDescription": {"text": "`wsgi.py` declares `ANY /api/crawler/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-50dbf3904df89c05", "name": "Unused endpoint: ANY /api/3cx/webhook", "shortDescription": {"text": "Unused endpoint: ANY /api/3cx/webhook"}, "fullDescription": {"text": "`wsgi.py` declares `ANY /api/3cx/webhook` 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-7cbe3c5684722d91", "name": "Unused endpoint: ANY /api/lead/<int:lead_id>/calls", "shortDescription": {"text": "Unused endpoint: ANY /api/lead/<int:lead_id>/calls"}, "fullDescription": {"text": "`wsgi.py` declares `ANY /api/lead/<int:lead_id>/calls` 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-136424d80072c521", "name": "Unused endpoint: ANY /api/3cx/test-call", "shortDescription": {"text": "Unused endpoint: ANY /api/3cx/test-call"}, "fullDescription": {"text": "`wsgi.py` declares `ANY /api/3cx/test-call` 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-2c57063198c902fc", "name": "Unused endpoint: ANY /api/3cx/sync", "shortDescription": {"text": "Unused endpoint: ANY /api/3cx/sync"}, "fullDescription": {"text": "`wsgi.py` declares `ANY /api/3cx/sync` 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-34a9675687179203", "name": "Unused endpoint: ANY /api/me/mobile", "shortDescription": {"text": "Unused endpoint: ANY /api/me/mobile"}, "fullDescription": {"text": "`wsgi.py` declares `ANY /api/me/mobile` 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-e3aa356ebe8df037", "name": "Unused endpoint: ANY /api/db/debug", "shortDescription": {"text": "Unused endpoint: ANY /api/db/debug"}, "fullDescription": {"text": "`wsgi.py` declares `ANY /api/db/debug` 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-d093136ffc70c928", "name": "Unused endpoint: ANY /api/db/clear-all", "shortDescription": {"text": "Unused endpoint: ANY /api/db/clear-all"}, "fullDescription": {"text": "`wsgi.py` declares `ANY /api/db/clear-all` 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-9c5d3a7c415b9079", "name": "Unused endpoint: ANY /api/db/master-leads", "shortDescription": {"text": "Unused endpoint: ANY /api/db/master-leads"}, "fullDescription": {"text": "`wsgi.py` declares `ANY /api/db/master-leads` 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-78c0e97c60402c03", "name": "Unused endpoint: ANY /api/db/run-history", "shortDescription": {"text": "Unused endpoint: ANY /api/db/run-history"}, "fullDescription": {"text": "`wsgi.py` declares `ANY /api/db/run-history` 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-f4b26bc03d79f2f5", "name": "Unused endpoint: ANY /api/pricing", "shortDescription": {"text": "Unused endpoint: ANY /api/pricing"}, "fullDescription": {"text": "`wsgi.py` declares `ANY /api/pricing` 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-a4fd78cfc9522311", "name": "Unused endpoint: ANY /generate", "shortDescription": {"text": "Unused endpoint: ANY /generate"}, "fullDescription": {"text": "`wsgi.py` declares `ANY /generate` 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-e56e012f3c5d4b56", "name": "Unused endpoint: ANY /generate-city", "shortDescription": {"text": "Unused endpoint: ANY /generate-city"}, "fullDescription": {"text": "`wsgi.py` declares `ANY /generate-city` 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-a3cd8b494913e3a0", "name": "Unused endpoint: ANY /generate-multi", "shortDescription": {"text": "Unused endpoint: ANY /generate-multi"}, "fullDescription": {"text": "`wsgi.py` declares `ANY /generate-multi` 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-bf5930a2dfea1f4e", "name": "Unused endpoint: ANY /cancel", "shortDescription": {"text": "Unused endpoint: ANY /cancel"}, "fullDescription": {"text": "`wsgi.py` declares `ANY /cancel` 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-42443798f45e7a13", "name": "Unused endpoint: ANY /download-partial/<job_id>", "shortDescription": {"text": "Unused endpoint: ANY /download-partial/<job_id>"}, "fullDescription": {"text": "`wsgi.py` declares `ANY /download-partial/<job_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-64869886d4abaca1", "name": "Unused endpoint: ANY /apollo-phone-callback", "shortDescription": {"text": "Unused endpoint: ANY /apollo-phone-callback"}, "fullDescription": {"text": "`wsgi.py` declares `ANY /apollo-phone-callback` 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-1cd41aefb48f1f2b", "name": "Unused endpoint: ANY /api/test-google-places", "shortDescription": {"text": "Unused endpoint: ANY /api/test-google-places"}, "fullDescription": {"text": "`V5.py` declares `ANY /api/test-google-places` 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/17769"}, "properties": {"repository": "rajtrafficradius/LEAD_FORGE_GENERATOR-24-4-2026-", "repoUrl": "https://github.com/rajtrafficradius/LEAD_FORGE_GENERATOR-24-4-2026-", "branch": "main"}, "results": [{"ruleId": "scanner-b98cffc1885991db", "level": "note", "message": {"text": "Possibly dead Python function: bank_stats"}, "properties": {"repobilityId": "d310418acd317f8c", "scanner": "scanner-primary", "fingerprint": "b98cffc1885991db", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "keyword_bank.py:327"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-5183a69ed48f12da", "level": "note", "message": {"text": "Possibly dead Python function: snapshot"}, "properties": {"repobilityId": "b01f931ff8dbca4f", "scanner": "scanner-primary", "fingerprint": "5183a69ed48f12da", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "rate_limiter.py:105"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-56c84db11bac3ba0", "level": "note", "message": {"text": "Possibly dead Python function: is_master_known"}, "properties": {"repobilityId": "59069decd7dd5e71", "scanner": "scanner-primary", "fingerprint": "56c84db11bac3ba0", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "lead_pool.py:110"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-bd6fe3a4ec50c0e8", "level": "note", "message": {"text": "Possibly dead Python function: advertiser_url"}, "properties": {"repobilityId": "ba221c7d654a8ddc", "scanner": "scanner-primary", "fingerprint": "bd6fe3a4ec50c0e8", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "google_ads_transparency.py:71"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-4df43c74433ce60b", "level": "note", "message": {"text": "Possibly dead Python function: has_keywords_for"}, "properties": {"repobilityId": "bdf9e0abba00a803", "scanner": "scanner-primary", "fingerprint": "4df43c74433ce60b", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "secondary_keywords.py:31"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-d994ea1ae8a6357d", "level": "note", "message": {"text": "Possibly dead Python function: is_available"}, "properties": {"repobilityId": "19896608512daf00", "scanner": "scanner-primary", "fingerprint": "d994ea1ae8a6357d", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "db.py:173"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-0dccbbba75115509", "level": "note", "message": {"text": "Possibly dead Python function: pool_error"}, "properties": {"repobilityId": "7e0e9a0ee2bc3e2b", "scanner": "scanner-primary", "fingerprint": "0dccbbba75115509", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "db.py:178"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-e7b0ffbd5780bc4f", "level": "note", "message": {"text": "Possibly dead Python function: role_required"}, "properties": {"repobilityId": "3644757bdb7de38f", "scanner": "scanner-primary", "fingerprint": "e7b0ffbd5780bc4f", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "auth.py:180"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-e61a9781f5148c41", "level": "note", "message": {"text": "Possibly dead Python function: deco"}, "properties": {"repobilityId": "11da05572c448654", "scanner": "scanner-primary", "fingerprint": "e61a9781f5148c41", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "auth.py:183"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-77da9d3b6108be3c", "level": "note", "message": {"text": "Possibly dead Python function: seed_default_users"}, "properties": {"repobilityId": "63e9f7905ed5cb11", "scanner": "scanner-primary", "fingerprint": "77da9d3b6108be3c", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "auth.py:246"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-4f90c75b53d2c588", "level": "note", "message": {"text": "Possibly dead Python function: progress_cb"}, "properties": {"repobilityId": "0bcda563538102e0", "scanner": "scanner-primary", "fingerprint": "4f90c75b53d2c588", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "wsgi.py:1660"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-1efc2e7f6a45630b", "level": "note", "message": {"text": "Possibly dead Python function: is_decision_maker"}, "properties": {"repobilityId": "b21c3fb5e2f07643", "scanner": "scanner-primary", "fingerprint": "1efc2e7f6a45630b", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "V5.py:1979"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-d1402b8183ade001", "level": "note", "message": {"text": "Possibly dead Python function: infer_personal_email"}, "properties": {"repobilityId": "9e81fe8157b4f6a7", "scanner": "scanner-primary", "fingerprint": "d1402b8183ade001", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "V5.py:4436"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-a1b75fd6857d5b1e", "level": "note", "message": {"text": "Possibly dead Python function: main_gui"}, "properties": {"repobilityId": "071993b48f587701", "scanner": "scanner-primary", "fingerprint": "a1b75fd6857d5b1e", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "V5.py:11906"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-30b915d23037d38c", "level": "note", "message": {"text": "Possibly dead Python function: progress_cb"}, "properties": {"repobilityId": "0bcda563538102e0", "scanner": "scanner-primary", "fingerprint": "30b915d23037d38c", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "V5.py:12786"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-f87046a98c731d6b", "level": "note", "message": {"text": "Possibly dead Python function: is_valid_phone"}, "properties": {"repobilityId": "c75aded9250052df", "scanner": "scanner-primary", "fingerprint": "f87046a98c731d6b", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "utils.py:49"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-d72d541b4485153e", "level": "note", "message": {"text": "Possibly dead Python function: is_disposable_email"}, "properties": {"repobilityId": "da5baec9ba30faed", "scanner": "scanner-primary", "fingerprint": "d72d541b4485153e", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "utils.py:77"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-89307aded6ddbe10", "level": "note", "message": {"text": "Possibly dead Python function: extract_domain_from_email"}, "properties": {"repobilityId": "850dadc1f65a30fc", "scanner": "scanner-primary", "fingerprint": "89307aded6ddbe10", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "utils.py:96"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-29ec469a6c1828d9", "level": "note", "message": {"text": "Possibly dead Python function: name_to_initials"}, "properties": {"repobilityId": "669484b1a13b8e36", "scanner": "scanner-primary", "fingerprint": "29ec469a6c1828d9", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "utils.py:127"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-b67fcbd70ff7e8db", "level": "note", "message": {"text": "Possibly dead Python function: slug_to_name"}, "properties": {"repobilityId": "e6047372eb5811c4", "scanner": "scanner-primary", "fingerprint": "b67fcbd70ff7e8db", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "utils.py:137"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-97c2023165131054", "level": "note", "message": {"text": "Possibly dead Python function: is_valid_domain"}, "properties": {"repobilityId": "5d61e56ae33a33a6", "scanner": "scanner-primary", "fingerprint": "97c2023165131054", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "utils.py:177"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-f45ef46516320a84", "level": "note", "message": {"text": "Possibly dead Python function: write_leads_csv"}, "properties": {"repobilityId": "1cbd9cc55f4bde27", "scanner": "scanner-primary", "fingerprint": "f45ef46516320a84", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "utils.py:195"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-145f980e6fddd076", "level": "note", "message": {"text": "Possibly dead Python function: read_leads_csv"}, "properties": {"repobilityId": "5ef51c7a1e1134ed", "scanner": "scanner-primary", "fingerprint": "145f980e6fddd076", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "utils.py:209"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-8566203bff20d47f", "level": "note", "message": {"text": "Possibly dead Python function: deduplicate_leads"}, "properties": {"repobilityId": "987b01d6604c9b94", "scanner": "scanner-primary", "fingerprint": "8566203bff20d47f", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "utils.py:219"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-684f5db67f3c78ec", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 user-flow-chart/build-preview.js:67"}, "properties": {"repobilityId": "d982affb51cfef5d", "scanner": "scanner-primary", "fingerprint": "684f5db67f3c78ec", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-49e767b6f8e60214", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in index_legacy.html:674"}, "properties": {"repobilityId": "ffaf1c9d7280089f", "scanner": "scanner-primary", "fingerprint": "49e767b6f8e60214", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "index_legacy.html"}, "region": {"startLine": 674}}}]}, {"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-dbecb6bf22b605cc", "level": "note", "message": {"text": "Very large file: db.py (1476 lines)"}, "properties": {"repobilityId": "db396cedc3482ca7", "scanner": "scanner-primary", "fingerprint": "dbecb6bf22b605cc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-43950b3c21b6a4df", "level": "note", "message": {"text": "Very large file: city_pipeline.py (2221 lines)"}, "properties": {"repobilityId": "3415e789c12ad3fb", "scanner": "scanner-primary", "fingerprint": "43950b3c21b6a4df", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-bef894b21957e31e", "level": "note", "message": {"text": "Very large file: wsgi.py (1947 lines)"}, "properties": {"repobilityId": "93b571b1d69b9a27", "scanner": "scanner-primary", "fingerprint": "bef894b21957e31e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-74326ce80fa992ee", "level": "note", "message": {"text": "Very large file: V5.py (13148 lines)"}, "properties": {"repobilityId": "fe7b00c9b3aabf99", "scanner": "scanner-primary", "fingerprint": "74326ce80fa992ee", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-56e030c99816e318", "level": "note", "message": {"text": "Very large file: user-flow-chart/UserFlowChart.jsx (1024 lines)"}, "properties": {"repobilityId": "0700badc98738a14", "scanner": "scanner-primary", "fingerprint": "56e030c99816e318", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-ea3b5e389d8c9c0f", "level": "note", "message": {"text": "Low test-to-source ratio"}, "properties": {"repobilityId": "ef7b2552cc00a375", "scanner": "scanner-primary", "fingerprint": "ea3b5e389d8c9c0f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["tests"]}}, {"ruleId": "scanner-141b30a41e03817b", "level": "note", "message": {"text": "No license file detected"}, "properties": {"repobilityId": "e51876c75e41f1b5", "scanner": "scanner-primary", "fingerprint": "141b30a41e03817b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["license", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "32beeb1044b62eaf", "scanner": "scanner-primary", "fingerprint": "3ab5d313dda8e5f9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["debug", "cleanup", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-72b2a6250083a784", "level": "warning", "message": {"text": "Placeholder or mock-heavy implementation detected"}, "properties": {"repobilityId": "c9a3f08dfd35206e", "scanner": "scanner-primary", "fingerprint": "72b2a6250083a784", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "incomplete", "generated-repo-pattern"]}}, {"ruleId": "scanner-2d0c7b7ab8f8aacf", "level": "warning", "message": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "properties": {"repobilityId": "805dd193aea37b90", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-b9088664ace7f748", "level": "note", "message": {"text": "Composite production-readiness gap"}, "properties": {"repobilityId": "76ddc6240ce459d8", "scanner": "scanner-primary", "fingerprint": "b9088664ace7f748", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["production-readiness", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-ea8f3013f588db25", "level": "note", "message": {"text": "Shallow git history limits provenance confidence"}, "properties": {"repobilityId": "81e83813891cb523", "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": "d0e6538fe2fcf294", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-e78ba538d3f523d8", "level": "none", "message": {"text": "Commented-code block (5 lines) in keyword_bank.py:110"}, "properties": {"repobilityId": "f1052fb53b45f721", "scanner": "scanner-primary", "fingerprint": "e78ba538d3f523d8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4f24afce99933f6d", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 rate_limiter.py:49"}, "properties": {"repobilityId": "9ae98e409ae98c4b", "scanner": "scanner-primary", "fingerprint": "4f24afce99933f6d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-7ce494fb6610fbc4", "level": "none", "message": {"text": "Commented-code block (6 lines) in google_ads_transparency.py:366"}, "properties": {"repobilityId": "f2e0b1419de595f0", "scanner": "scanner-primary", "fingerprint": "7ce494fb6610fbc4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-219ea6d6f97484f1", "level": "none", "message": {"text": "Commented-code block (9 lines) in db.py:130"}, "properties": {"repobilityId": "c486492deed55e42", "scanner": "scanner-primary", "fingerprint": "219ea6d6f97484f1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e09d0009695b6c50", "level": "none", "message": {"text": "Commented-code block (5 lines) in city_pipeline.py:51"}, "properties": {"repobilityId": "b34365089a4b65be", "scanner": "scanner-primary", "fingerprint": "e09d0009695b6c50", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-13ff3fa9d91b29ac", "level": "none", "message": {"text": "Commented-code block (7 lines) in wsgi.py:362"}, "properties": {"repobilityId": "a082b7996f93e329", "scanner": "scanner-primary", "fingerprint": "13ff3fa9d91b29ac", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-377946d74f68c662", "level": "none", "message": {"text": "Commented-code block (7 lines) in V5.py:73"}, "properties": {"repobilityId": "d1010b170db13e49", "scanner": "scanner-primary", "fingerprint": "377946d74f68c662", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-69b46b486afa79e6", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 V5.py:13084"}, "properties": {"repobilityId": "6a1477421427bc98", "scanner": "scanner-primary", "fingerprint": "69b46b486afa79e6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-557c6a53a6cb03ab", "level": "none", "message": {"text": "Commented-code block (5 lines) in test_semrush_budget.py:81"}, "properties": {"repobilityId": "673d2f5d085bf818", "scanner": "scanner-primary", "fingerprint": "557c6a53a6cb03ab", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7ea7dd1adbf06cbd", "level": "note", "message": {"text": "Legacy-named symbol `_archive_legacy` in build_master_keyword_bank.py:9"}, "properties": {"repobilityId": "0c35c3f2e2358868", "scanner": "scanner-primary", "fingerprint": "7ea7dd1adbf06cbd", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-1c6d257c26bbbfe9", "level": "none", "message": {"text": "Commented-code block (13 lines) in build_master_keyword_bank.py:11"}, "properties": {"repobilityId": "6f183a5ff6792394", "scanner": "scanner-primary", "fingerprint": "1c6d257c26bbbfe9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-29932f03c8650673", "level": "none", "message": {"text": "Commented-code block (5 lines) in build_ecom_index.py:47"}, "properties": {"repobilityId": "c9ee1b20e760198d", "scanner": "scanner-primary", "fingerprint": "29932f03c8650673", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-decb0e341d1642d9", "level": "none", "message": {"text": "Commented-code block (8 lines) in google_places_intent.py:72"}, "properties": {"repobilityId": "cfd56c8d496ed9be", "scanner": "scanner-primary", "fingerprint": "decb0e341d1642d9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-979755d93ae9e000", "level": "note", "message": {"text": "Legacy-named symbol `test_pricing_math_and_monthly_unused` in tests/test_pipeline_smoke.py:260"}, "properties": {"repobilityId": "7e2b4b402647c69a", "scanner": "scanner-primary", "fingerprint": "979755d93ae9e000", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-59b992d62d86a65a", "level": "note", "message": {"text": "25 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "58b9516d72ffa8ba", "scanner": "scanner-primary", "fingerprint": "59b992d62d86a65a", "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": "a2df470e2f39bf5c", "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": "d96b776413e2c643", "scanner": "scanner-primary", "fingerprint": "49c98f7cedd9c977", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "a7616a069efb40c0", "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": "254c6809cfcd053e", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-02525d39071dd2c7", "level": "note", "message": {"text": "Near-duplicate function bodies in 5 places"}, "properties": {"repobilityId": "3bddc6995f3654a5", "scanner": "scanner-primary", "fingerprint": "02525d39071dd2c7", "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": "494f9e5d1a48c5fd", "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": "096370bd322ea20b", "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": "01de6fd74f29f996", "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": "d62d7660696f4fef", "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": "e5b20639e4e3342c", "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": "b412adf1f2ce9d31", "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": "dc27ef91b0a0d475", "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": "3b0d174dcf5c487c", "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": "df5661e94d401ba2", "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": "943912c561682467", "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": "7e6bfa877e54650a", "scanner": "scanner-primary", "fingerprint": "be46ea126aa5d8dc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-7619429fb7e4a37b", "level": "error", "message": {"text": "Flask mutation route `login` without `@login_required` \u2014 wsgi.py:198"}, "properties": {"repobilityId": "2a4cadf279a9802d", "scanner": "scanner-primary", "fingerprint": "7619429fb7e4a37b", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "wsgi.py"}, "region": {"startLine": 198}}}]}, {"ruleId": "scanner-2bc48e3a0123e6da", "level": "error", "message": {"text": "Flask mutation route `logout` without `@login_required` \u2014 wsgi.py:264"}, "properties": {"repobilityId": "0272511d48616aa3", "scanner": "scanner-primary", "fingerprint": "2bc48e3a0123e6da", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "wsgi.py"}, "region": {"startLine": 264}}}]}, {"ruleId": "scanner-89792bf81ed5cc04", "level": "error", "message": {"text": "Flask mutation route `refresh_credits` without `@login_required` \u2014 wsgi.py:536"}, "properties": {"repobilityId": "bae2c8f3d372289f", "scanner": "scanner-primary", "fingerprint": "89792bf81ed5cc04", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "wsgi.py"}, "region": {"startLine": 536}}}]}, {"ruleId": "scanner-c295c012c53497b6", "level": "error", "message": {"text": "Flask mutation route `api_users_create` without `@login_required` \u2014 wsgi.py:633"}, "properties": {"repobilityId": "0295c73745809b59", "scanner": "scanner-primary", "fingerprint": "c295c012c53497b6", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "wsgi.py"}, "region": {"startLine": 633}}}]}, {"ruleId": "scanner-fa2fc0e9df2c1fb1", "level": "error", "message": {"text": "Flask mutation route `api_users_update` without `@login_required` \u2014 wsgi.py:659"}, "properties": {"repobilityId": "35ce26cddf60ea8b", "scanner": "scanner-primary", "fingerprint": "fa2fc0e9df2c1fb1", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "wsgi.py"}, "region": {"startLine": 659}}}]}, {"ruleId": "scanner-1976725cc3be744c", "level": "error", "message": {"text": "Flask mutation route `api_users_password` without `@login_required` \u2014 wsgi.py:675"}, "properties": {"repobilityId": "7e736b3f87e4bbf6", "scanner": "scanner-primary", "fingerprint": "1976725cc3be744c", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "wsgi.py"}, "region": {"startLine": 675}}}]}, {"ruleId": "scanner-a8b61a3245a8b028", "level": "error", "message": {"text": "Flask mutation route `api_allocation_auto` without `@login_required` \u2014 wsgi.py:709"}, "properties": {"repobilityId": "a4ec12d25c6656fa", "scanner": "scanner-primary", "fingerprint": "a8b61a3245a8b028", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "wsgi.py"}, "region": {"startLine": 709}}}]}, {"ruleId": "scanner-f81b858d9d439ed9", "level": "error", "message": {"text": "Flask mutation route `api_lead_reassign` without `@login_required` \u2014 wsgi.py:724"}, "properties": {"repobilityId": "32afb2ef5f431988", "scanner": "scanner-primary", "fingerprint": "f81b858d9d439ed9", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "wsgi.py"}, "region": {"startLine": 724}}}]}, {"ruleId": "scanner-9d03e5ce725d69bc", "level": "error", "message": {"text": "Flask mutation route `api_lead_contacted` without `@login_required` \u2014 wsgi.py:746"}, "properties": {"repobilityId": "915cbf9a9a440a6b", "scanner": "scanner-primary", "fingerprint": "9d03e5ce725d69bc", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "wsgi.py"}, "region": {"startLine": 746}}}]}, {"ruleId": "scanner-a16ab6847812d686", "level": "error", "message": {"text": "Flask mutation route `api_lead_manual_add` without `@login_required` \u2014 wsgi.py:776"}, "properties": {"repobilityId": "861e407fc8093590", "scanner": "scanner-primary", "fingerprint": "a16ab6847812d686", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "wsgi.py"}, "region": {"startLine": 776}}}]}, {"ruleId": "scanner-87ab7d070d5a9b2c", "level": "error", "message": {"text": "Flask mutation route `api_lead_recrawl` without `@login_required` \u2014 wsgi.py:820"}, "properties": {"repobilityId": "6c8c8c3a6631e79e", "scanner": "scanner-primary", "fingerprint": "87ab7d070d5a9b2c", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "wsgi.py"}, "region": {"startLine": 820}}}]}, {"ruleId": "scanner-b0bd71fd2de22c5c", "level": "error", "message": {"text": "Flask mutation route `threecx_webhook` without `@login_required` \u2014 wsgi.py:841"}, "properties": {"repobilityId": "a16017f2af7903d0", "scanner": "scanner-primary", "fingerprint": "b0bd71fd2de22c5c", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "wsgi.py"}, "region": {"startLine": 841}}}]}, {"ruleId": "scanner-0060949cf2dfd8fb", "level": "error", "message": {"text": "Flask mutation route `api_3cx_test_call` without `@login_required` \u2014 wsgi.py:879"}, "properties": {"repobilityId": "81e37f83fbcf2af5", "scanner": "scanner-primary", "fingerprint": "0060949cf2dfd8fb", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "wsgi.py"}, "region": {"startLine": 879}}}]}, {"ruleId": "scanner-4340b71dbf94cd93", "level": "error", "message": {"text": "Flask mutation route `api_3cx_sync` without `@login_required` \u2014 wsgi.py:895"}, "properties": {"repobilityId": "65fbd51c9a526376", "scanner": "scanner-primary", "fingerprint": "4340b71dbf94cd93", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "wsgi.py"}, "region": {"startLine": 895}}}]}, {"ruleId": "scanner-9fc96d9f14962465", "level": "error", "message": {"text": "Flask mutation route `api_me_mobile` without `@login_required` \u2014 wsgi.py:906"}, "properties": {"repobilityId": "2ba6554ec20c9c34", "scanner": "scanner-primary", "fingerprint": "9fc96d9f14962465", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "wsgi.py"}, "region": {"startLine": 906}}}]}, {"ruleId": "scanner-f9a3832610508f10", "level": "error", "message": {"text": "Flask mutation route `db_clear_all` without `@login_required` \u2014 wsgi.py:946"}, "properties": {"repobilityId": "674fa22c2e510d09", "scanner": "scanner-primary", "fingerprint": "f9a3832610508f10", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "wsgi.py"}, "region": {"startLine": 946}}}]}, {"ruleId": "scanner-7eeca97799272bb6", "level": "error", "message": {"text": "Flask mutation route `api_save_pricing` without `@login_required` \u2014 wsgi.py:1064"}, "properties": {"repobilityId": "bc659f9a2ea0dad8", "scanner": "scanner-primary", "fingerprint": "7eeca97799272bb6", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "wsgi.py"}, "region": {"startLine": 1064}}}]}, {"ruleId": "scanner-66bf5545095804dd", "level": "error", "message": {"text": "Flask mutation route `generate` without `@login_required` \u2014 wsgi.py:1217"}, "properties": {"repobilityId": "017e0d3f1e9123a0", "scanner": "scanner-primary", "fingerprint": "66bf5545095804dd", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "wsgi.py"}, "region": {"startLine": 1217}}}]}, {"ruleId": "scanner-254961a66f1da8cd", "level": "error", "message": {"text": "Flask mutation route `generate_city` without `@login_required` \u2014 wsgi.py:1422"}, "properties": {"repobilityId": "ec71cd246a42ecd9", "scanner": "scanner-primary", "fingerprint": "254961a66f1da8cd", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "wsgi.py"}, "region": {"startLine": 1422}}}]}, {"ruleId": "scanner-ccc7105029d3d2a8", "level": "error", "message": {"text": "Flask mutation route `generate_multi` without `@login_required` \u2014 wsgi.py:1602"}, "properties": {"repobilityId": "92cede5531d348aa", "scanner": "scanner-primary", "fingerprint": "ccc7105029d3d2a8", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "wsgi.py"}, "region": {"startLine": 1602}}}]}, {"ruleId": "scanner-aacb14067eae7b77", "level": "error", "message": {"text": "Flask mutation route `cancel` without `@login_required` \u2014 wsgi.py:1852"}, "properties": {"repobilityId": "9908dc7a40b72db6", "scanner": "scanner-primary", "fingerprint": "aacb14067eae7b77", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "wsgi.py"}, "region": {"startLine": 1852}}}]}, {"ruleId": "scanner-7814abb842aaa44c", "level": "error", "message": {"text": "Flask mutation route `apollo_phone_callback` without `@login_required` \u2014 wsgi.py:1898"}, "properties": {"repobilityId": "447b3e555f3f6251", "scanner": "scanner-primary", "fingerprint": "7814abb842aaa44c", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "wsgi.py"}, "region": {"startLine": 1898}}}]}, {"ruleId": "scanner-4c7ad61ba1b23915", "level": "note", "message": {"text": "Unused endpoint: ANY /login"}, "properties": {"repobilityId": "78c17ce95b4170b2", "scanner": "scanner-primary", "fingerprint": "4c7ad61ba1b23915", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c9e449c3b9e73b73", "level": "note", "message": {"text": "Unused endpoint: ANY /logout"}, "properties": {"repobilityId": "efae8c98c17df7ec", "scanner": "scanner-primary", "fingerprint": "c9e449c3b9e73b73", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ec8a2a284b9a88c4", "level": "note", "message": {"text": "Unused endpoint: ANY /whoami"}, "properties": {"repobilityId": "b4ad1eae17668831", "scanner": "scanner-primary", "fingerprint": "ec8a2a284b9a88c4", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1a6d91f2236825bf", "level": "note", "message": {"text": "Unused endpoint: ANY /"}, "properties": {"repobilityId": "7f3ab704eacb0494", "scanner": "scanner-primary", "fingerprint": "1a6d91f2236825bf", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e568bdfce08b33f5", "level": "note", "message": {"text": "Unused endpoint: ANY /<path:filename>"}, "properties": {"repobilityId": "84f3f0b9c13e3275", "scanner": "scanner-primary", "fingerprint": "e568bdfce08b33f5", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d9b277c3cb5aac50", "level": "note", "message": {"text": "Unused endpoint: ANY /industries"}, "properties": {"repobilityId": "d24fb22b0af245e2", "scanner": "scanner-primary", "fingerprint": "d9b277c3cb5aac50", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-488ffabc71386140", "level": "note", "message": {"text": "Unused endpoint: ANY /api/au-cities"}, "properties": {"repobilityId": "28ec46f707821b65", "scanner": "scanner-primary", "fingerprint": "488ffabc71386140", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a13f7eb82537a919", "level": "note", "message": {"text": "Unused endpoint: ANY /api/credits"}, "properties": {"repobilityId": "74ce0c8d50adadf0", "scanner": "scanner-primary", "fingerprint": "a13f7eb82537a919", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-0c0a62ec28077af5", "level": "note", "message": {"text": "Unused endpoint: ANY /api/credits/refresh"}, "properties": {"repobilityId": "01525aa0e23c4846", "scanner": "scanner-primary", "fingerprint": "0c0a62ec28077af5", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1689fee901aeffdc", "level": "note", "message": {"text": "Unused endpoint: ANY /api/master-stats"}, "properties": {"repobilityId": "e12b40d7fccc5744", "scanner": "scanner-primary", "fingerprint": "1689fee901aeffdc", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-98356fa7ff420a14", "level": "note", "message": {"text": "Unused endpoint: ANY /admin"}, "properties": {"repobilityId": "2a84e84a3073dc2e", "scanner": "scanner-primary", "fingerprint": "98356fa7ff420a14", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-73344ad56881805a", "level": "note", "message": {"text": "Unused endpoint: ANY /admin/users"}, "properties": {"repobilityId": "6a6d92c26ac66446", "scanner": "scanner-primary", "fingerprint": "73344ad56881805a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f83fa35fc52062d0", "level": "note", "message": {"text": "Unused endpoint: ANY /admin/runs"}, "properties": {"repobilityId": "2e8ede790743962a", "scanner": "scanner-primary", "fingerprint": "f83fa35fc52062d0", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-33de9c10cc501140", "level": "note", "message": {"text": "Unused endpoint: ANY /api/users"}, "properties": {"repobilityId": "6200fb30361b283e", "scanner": "scanner-primary", "fingerprint": "33de9c10cc501140", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ae12253fae97dd11", "level": "note", "message": {"text": "Unused endpoint: ANY /api/users/<int:user_id>"}, "properties": {"repobilityId": "88e55e258e682527", "scanner": "scanner-primary", "fingerprint": "ae12253fae97dd11", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f930a5aed19ad804", "level": "note", "message": {"text": "Unused endpoint: ANY /api/users/<int:user_id>/password"}, "properties": {"repobilityId": "9b792f6aa3ddc3ea", "scanner": "scanner-primary", "fingerprint": "f930a5aed19ad804", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-911fe7317c97fef4", "level": "note", "message": {"text": "Unused endpoint: ANY /api/allocation/bdes"}, "properties": {"repobilityId": "a88fba353cd96099", "scanner": "scanner-primary", "fingerprint": "911fe7317c97fef4", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c55dda4b14a7bd0c", "level": "note", "message": {"text": "Unused endpoint: ANY /api/allocation/auto"}, "properties": {"repobilityId": "45fd436b00a8a029", "scanner": "scanner-primary", "fingerprint": "c55dda4b14a7bd0c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ef79974794fc2242", "level": "note", "message": {"text": "Unused endpoint: ANY /api/leads/<int:lead_id>/reassign"}, "properties": {"repobilityId": "6da1810fc2c363b1", "scanner": "scanner-primary", "fingerprint": "ef79974794fc2242", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-cd6bb0105aa7f415", "level": "note", "message": {"text": "Unused endpoint: ANY /api/leads/<int:lead_id>/contacted"}, "properties": {"repobilityId": "ac0ee6af72d295b4", "scanner": "scanner-primary", "fingerprint": "cd6bb0105aa7f415", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-fb237fb4cb578540", "level": "note", "message": {"text": "Unused endpoint: ANY /api/allocation/contacted-feed"}, "properties": {"repobilityId": "661040ce22299ec8", "scanner": "scanner-primary", "fingerprint": "fb237fb4cb578540", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-9677b47b69f2e6d7", "level": "note", "message": {"text": "Unused endpoint: ANY /api/leads/manual-add"}, "properties": {"repobilityId": "4946fde15360543e", "scanner": "scanner-primary", "fingerprint": "9677b47b69f2e6d7", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a6c3360079176f02", "level": "note", "message": {"text": "Unused endpoint: ANY /api/lead/<int:lead_id>/full"}, "properties": {"repobilityId": "ca13bfd57afa5f17", "scanner": "scanner-primary", "fingerprint": "a6c3360079176f02", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-926c1f91edfef5d0", "level": "note", "message": {"text": "Unused endpoint: ANY /api/lead/<int:lead_id>/recrawl"}, "properties": {"repobilityId": "66451f4e08b7e743", "scanner": "scanner-primary", "fingerprint": "926c1f91edfef5d0", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-afefb2ed9bd327b5", "level": "note", "message": {"text": "Unused endpoint: ANY /api/crawler/status"}, "properties": {"repobilityId": "1bd4ddf8dce76207", "scanner": "scanner-primary", "fingerprint": "afefb2ed9bd327b5", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-50dbf3904df89c05", "level": "note", "message": {"text": "Unused endpoint: ANY /api/3cx/webhook"}, "properties": {"repobilityId": "4599c651f7ed9565", "scanner": "scanner-primary", "fingerprint": "50dbf3904df89c05", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7cbe3c5684722d91", "level": "note", "message": {"text": "Unused endpoint: ANY /api/lead/<int:lead_id>/calls"}, "properties": {"repobilityId": "08f75c41bcef2c9a", "scanner": "scanner-primary", "fingerprint": "7cbe3c5684722d91", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-136424d80072c521", "level": "note", "message": {"text": "Unused endpoint: ANY /api/3cx/test-call"}, "properties": {"repobilityId": "4ba75933a1f533a8", "scanner": "scanner-primary", "fingerprint": "136424d80072c521", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2c57063198c902fc", "level": "note", "message": {"text": "Unused endpoint: ANY /api/3cx/sync"}, "properties": {"repobilityId": "94e7573fc634d053", "scanner": "scanner-primary", "fingerprint": "2c57063198c902fc", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-34a9675687179203", "level": "note", "message": {"text": "Unused endpoint: ANY /api/me/mobile"}, "properties": {"repobilityId": "77821fd164713060", "scanner": "scanner-primary", "fingerprint": "34a9675687179203", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e3aa356ebe8df037", "level": "note", "message": {"text": "Unused endpoint: ANY /api/db/debug"}, "properties": {"repobilityId": "e07eb33a941af32a", "scanner": "scanner-primary", "fingerprint": "e3aa356ebe8df037", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d093136ffc70c928", "level": "note", "message": {"text": "Unused endpoint: ANY /api/db/clear-all"}, "properties": {"repobilityId": "e60c442c9c1812e5", "scanner": "scanner-primary", "fingerprint": "d093136ffc70c928", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-9c5d3a7c415b9079", "level": "note", "message": {"text": "Unused endpoint: ANY /api/db/master-leads"}, "properties": {"repobilityId": "20194e4661039ad8", "scanner": "scanner-primary", "fingerprint": "9c5d3a7c415b9079", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-78c0e97c60402c03", "level": "note", "message": {"text": "Unused endpoint: ANY /api/db/run-history"}, "properties": {"repobilityId": "a67746b6c8593326", "scanner": "scanner-primary", "fingerprint": "78c0e97c60402c03", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f4b26bc03d79f2f5", "level": "note", "message": {"text": "Unused endpoint: ANY /api/pricing"}, "properties": {"repobilityId": "49dd8548f19bd98b", "scanner": "scanner-primary", "fingerprint": "f4b26bc03d79f2f5", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a4fd78cfc9522311", "level": "note", "message": {"text": "Unused endpoint: ANY /generate"}, "properties": {"repobilityId": "1b3bcb49ea258b52", "scanner": "scanner-primary", "fingerprint": "a4fd78cfc9522311", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e56e012f3c5d4b56", "level": "note", "message": {"text": "Unused endpoint: ANY /generate-city"}, "properties": {"repobilityId": "45e4b660834e30ac", "scanner": "scanner-primary", "fingerprint": "e56e012f3c5d4b56", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a3cd8b494913e3a0", "level": "note", "message": {"text": "Unused endpoint: ANY /generate-multi"}, "properties": {"repobilityId": "1cefe5f5a0d1557a", "scanner": "scanner-primary", "fingerprint": "a3cd8b494913e3a0", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-bf5930a2dfea1f4e", "level": "note", "message": {"text": "Unused endpoint: ANY /cancel"}, "properties": {"repobilityId": "495ec55ff78f3a42", "scanner": "scanner-primary", "fingerprint": "bf5930a2dfea1f4e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-42443798f45e7a13", "level": "note", "message": {"text": "Unused endpoint: ANY /download-partial/<job_id>"}, "properties": {"repobilityId": "3c32b0a531e51742", "scanner": "scanner-primary", "fingerprint": "42443798f45e7a13", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-64869886d4abaca1", "level": "note", "message": {"text": "Unused endpoint: ANY /apollo-phone-callback"}, "properties": {"repobilityId": "3bb94837558372ce", "scanner": "scanner-primary", "fingerprint": "64869886d4abaca1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1cd41aefb48f1f2b", "level": "note", "message": {"text": "Unused endpoint: ANY /api/test-google-places"}, "properties": {"repobilityId": "bd0ddc7e8984bff6", "scanner": "scanner-primary", "fingerprint": "1cd41aefb48f1f2b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}