{"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-8a0c9bb34b61f283", "name": "Possibly dead Python function: to_dict", "shortDescription": {"text": "Possibly dead Python function: to_dict"}, "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-2ff19ffa8d5d8b35", "name": "Possibly dead Python function: verify_credentials", "shortDescription": {"text": "Possibly dead Python function: verify_credentials"}, "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-18b569f096ae3084", "name": "Possibly dead Python function: do_login", "shortDescription": {"text": "Possibly dead Python function: do_login"}, "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-829b04cec4da70d6", "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-d5ab80997bb21166", "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-b8c58d3a8912848f", "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-c13524aa75cb4278", "name": "Very large file: city_pipeline.py (2021 lines)", "shortDescription": {"text": "Very large file: city_pipeline.py (2021 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-0f2bdf4c05d55c03", "name": "Very large file: wsgi.py (1550 lines)", "shortDescription": {"text": "Very large file: wsgi.py (1550 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-26cb191e03fef068", "name": "Very large file: V5.py (13036 lines)", "shortDescription": {"text": "Very large file: V5.py (13036 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 / 26 src (ratio 0.19)."}, "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-d5700757f92c6f95", "name": "Commented-code block (5 lines) in google_ads_transparency.py:397", "shortDescription": {"text": "Commented-code block (5 lines) in google_ads_transparency.py:397"}, "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-7bf522f424d12984", "name": "Commented-code block (5 lines) in auth.py:87", "shortDescription": {"text": "Commented-code block (5 lines) in auth.py:87"}, "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-d6df68b5d02482ac", "name": "Commented-code block (5 lines) in wsgi.py:165", "shortDescription": {"text": "Commented-code block (5 lines) in wsgi.py:165"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-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-0d7591afafc23d39", "name": "Network/subprocess call without timeout or try/except \u2014 V5.py:12972", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 V5.py:12972"}, "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-d0b17c8c07a7421d", "name": "8 env vars used in code but missing from .env.example", "shortDescription": {"text": "8 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`, `HUNTER_API_KEY`, `PAID_ONLY_ALL`, `PORT`, `SEMRUSH_DB`, `SMART_KEYWORDS`, `WEBHOOK_BASE_URL`. 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-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-b803d22244e44c02", "name": "Flask mutation route `login` without `@login_required` \u2014 wsgi.py:170", "shortDescription": {"text": "Flask mutation route `login` without `@login_required` \u2014 wsgi.py:170"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-810cf8c946ce8ad5", "name": "Flask mutation route `logout` without `@login_required` \u2014 wsgi.py:203", "shortDescription": {"text": "Flask mutation route `logout` without `@login_required` \u2014 wsgi.py:203"}, "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-b7bc2f4ea722eb4a", "name": "Flask mutation route `refresh_credits` without `@login_required` \u2014 wsgi.py:480", "shortDescription": {"text": "Flask mutation route `refresh_credits` without `@login_required` \u2014 wsgi.py:480"}, "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-2ad424977137de0e", "name": "Flask mutation route `db_clear_all` without `@login_required` \u2014 wsgi.py:583", "shortDescription": {"text": "Flask mutation route `db_clear_all` without `@login_required` \u2014 wsgi.py:583"}, "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-6f8e71c9c006ad7f", "name": "Flask mutation route `api_save_pricing` without `@login_required` \u2014 wsgi.py:687", "shortDescription": {"text": "Flask mutation route `api_save_pricing` without `@login_required` \u2014 wsgi.py:687"}, "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-c7b56a9882cf87b9", "name": "Flask mutation route `generate` without `@login_required` \u2014 wsgi.py:839", "shortDescription": {"text": "Flask mutation route `generate` without `@login_required` \u2014 wsgi.py:839"}, "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-b2b54fc9b28ecef4", "name": "Flask mutation route `generate_city` without `@login_required` \u2014 wsgi.py:1044", "shortDescription": {"text": "Flask mutation route `generate_city` without `@login_required` \u2014 wsgi.py:1044"}, "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-4e0c6894d3041c8d", "name": "Flask mutation route `generate_multi` without `@login_required` \u2014 wsgi.py:1224", "shortDescription": {"text": "Flask mutation route `generate_multi` without `@login_required` \u2014 wsgi.py:1224"}, "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-b8417dc36a6ee98d", "name": "Flask mutation route `cancel` without `@login_required` \u2014 wsgi.py:1474", "shortDescription": {"text": "Flask mutation route `cancel` without `@login_required` \u2014 wsgi.py:1474"}, "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-30219f9a6ce1e361", "name": "Flask mutation route `apollo_phone_callback` without `@login_required` \u2014 wsgi.py:1520", "shortDescription": {"text": "Flask mutation route `apollo_phone_callback` without `@login_required` \u2014 wsgi.py:1520"}, "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-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/17774"}, "properties": {"repository": "rajtrafficradius/LEAD_FORGE_LEAD_GENERATOR", "repoUrl": "https://github.com/rajtrafficradius/LEAD_FORGE_LEAD_GENERATOR", "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-8a0c9bb34b61f283", "level": "note", "message": {"text": "Possibly dead Python function: to_dict"}, "properties": {"repobilityId": "017f31ed997ca27d", "scanner": "scanner-primary", "fingerprint": "8a0c9bb34b61f283", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "auth.py:68"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-2ff19ffa8d5d8b35", "level": "note", "message": {"text": "Possibly dead Python function: verify_credentials"}, "properties": {"repobilityId": "c9f1543d4173d257", "scanner": "scanner-primary", "fingerprint": "2ff19ffa8d5d8b35", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "auth.py:152"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-18b569f096ae3084", "level": "note", "message": {"text": "Possibly dead Python function: do_login"}, "properties": {"repobilityId": "90e07ee0d2ed6be2", "scanner": "scanner-primary", "fingerprint": "18b569f096ae3084", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "auth.py:165"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-829b04cec4da70d6", "level": "note", "message": {"text": "Possibly dead Python function: progress_cb"}, "properties": {"repobilityId": "0bcda563538102e0", "scanner": "scanner-primary", "fingerprint": "829b04cec4da70d6", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "wsgi.py:1282"}, "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-d5ab80997bb21166", "level": "note", "message": {"text": "Possibly dead Python function: main_gui"}, "properties": {"repobilityId": "071993b48f587701", "scanner": "scanner-primary", "fingerprint": "d5ab80997bb21166", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "V5.py:11794"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-b8c58d3a8912848f", "level": "note", "message": {"text": "Possibly dead Python function: progress_cb"}, "properties": {"repobilityId": "0bcda563538102e0", "scanner": "scanner-primary", "fingerprint": "b8c58d3a8912848f", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "V5.py:12674"}, "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-c13524aa75cb4278", "level": "note", "message": {"text": "Very large file: city_pipeline.py (2021 lines)"}, "properties": {"repobilityId": "3415e789c12ad3fb", "scanner": "scanner-primary", "fingerprint": "c13524aa75cb4278", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-0f2bdf4c05d55c03", "level": "note", "message": {"text": "Very large file: wsgi.py (1550 lines)"}, "properties": {"repobilityId": "93b571b1d69b9a27", "scanner": "scanner-primary", "fingerprint": "0f2bdf4c05d55c03", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-26cb191e03fef068", "level": "note", "message": {"text": "Very large file: V5.py (13036 lines)"}, "properties": {"repobilityId": "fe7b00c9b3aabf99", "scanner": "scanner-primary", "fingerprint": "26cb191e03fef068", "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": "48a62416e0a55ccf", "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": "d79b56885eb383d6", "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": "6c771518d072c1c6", "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": "2cbc8ae56e816a86", "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": "96ee4846445c5748", "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": "bf81314a4b3e3af6", "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": "8808d263b339716a", "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-d5700757f92c6f95", "level": "none", "message": {"text": "Commented-code block (5 lines) in google_ads_transparency.py:397"}, "properties": {"repobilityId": "b54be9a053429ba0", "scanner": "scanner-primary", "fingerprint": "d5700757f92c6f95", "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-7bf522f424d12984", "level": "none", "message": {"text": "Commented-code block (5 lines) in auth.py:87"}, "properties": {"repobilityId": "608914d91517ea72", "scanner": "scanner-primary", "fingerprint": "7bf522f424d12984", "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-d6df68b5d02482ac", "level": "none", "message": {"text": "Commented-code block (5 lines) in wsgi.py:165"}, "properties": {"repobilityId": "8be4fca6d68a7702", "scanner": "scanner-primary", "fingerprint": "d6df68b5d02482ac", "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-0d7591afafc23d39", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 V5.py:12972"}, "properties": {"repobilityId": "dcb8fab05a63d67e", "scanner": "scanner-primary", "fingerprint": "0d7591afafc23d39", "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-d0b17c8c07a7421d", "level": "note", "message": {"text": "8 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "17fe720e8247f9df", "scanner": "scanner-primary", "fingerprint": "d0b17c8c07a7421d", "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-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "14cfc47fef26ffec", "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": "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-b803d22244e44c02", "level": "error", "message": {"text": "Flask mutation route `login` without `@login_required` \u2014 wsgi.py:170"}, "properties": {"repobilityId": "d67d1a03759d3fae", "scanner": "scanner-primary", "fingerprint": "b803d22244e44c02", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "wsgi.py"}, "region": {"startLine": 170}}}]}, {"ruleId": "scanner-810cf8c946ce8ad5", "level": "error", "message": {"text": "Flask mutation route `logout` without `@login_required` \u2014 wsgi.py:203"}, "properties": {"repobilityId": "71be1dc3366e5e2d", "scanner": "scanner-primary", "fingerprint": "810cf8c946ce8ad5", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "wsgi.py"}, "region": {"startLine": 203}}}]}, {"ruleId": "scanner-b7bc2f4ea722eb4a", "level": "error", "message": {"text": "Flask mutation route `refresh_credits` without `@login_required` \u2014 wsgi.py:480"}, "properties": {"repobilityId": "1f426374831d9d9f", "scanner": "scanner-primary", "fingerprint": "b7bc2f4ea722eb4a", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "wsgi.py"}, "region": {"startLine": 480}}}]}, {"ruleId": "scanner-2ad424977137de0e", "level": "error", "message": {"text": "Flask mutation route `db_clear_all` without `@login_required` \u2014 wsgi.py:583"}, "properties": {"repobilityId": "0068d222ebd11c6e", "scanner": "scanner-primary", "fingerprint": "2ad424977137de0e", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "wsgi.py"}, "region": {"startLine": 583}}}]}, {"ruleId": "scanner-6f8e71c9c006ad7f", "level": "error", "message": {"text": "Flask mutation route `api_save_pricing` without `@login_required` \u2014 wsgi.py:687"}, "properties": {"repobilityId": "967366cc17e16e00", "scanner": "scanner-primary", "fingerprint": "6f8e71c9c006ad7f", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "wsgi.py"}, "region": {"startLine": 687}}}]}, {"ruleId": "scanner-c7b56a9882cf87b9", "level": "error", "message": {"text": "Flask mutation route `generate` without `@login_required` \u2014 wsgi.py:839"}, "properties": {"repobilityId": "cc7e292ece74cf6a", "scanner": "scanner-primary", "fingerprint": "c7b56a9882cf87b9", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "wsgi.py"}, "region": {"startLine": 839}}}]}, {"ruleId": "scanner-b2b54fc9b28ecef4", "level": "error", "message": {"text": "Flask mutation route `generate_city` without `@login_required` \u2014 wsgi.py:1044"}, "properties": {"repobilityId": "018a768eb75cbc06", "scanner": "scanner-primary", "fingerprint": "b2b54fc9b28ecef4", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "wsgi.py"}, "region": {"startLine": 1044}}}]}, {"ruleId": "scanner-4e0c6894d3041c8d", "level": "error", "message": {"text": "Flask mutation route `generate_multi` without `@login_required` \u2014 wsgi.py:1224"}, "properties": {"repobilityId": "b28df5860fb6e1c4", "scanner": "scanner-primary", "fingerprint": "4e0c6894d3041c8d", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "wsgi.py"}, "region": {"startLine": 1224}}}]}, {"ruleId": "scanner-b8417dc36a6ee98d", "level": "error", "message": {"text": "Flask mutation route `cancel` without `@login_required` \u2014 wsgi.py:1474"}, "properties": {"repobilityId": "f4f3139de68187a7", "scanner": "scanner-primary", "fingerprint": "b8417dc36a6ee98d", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "wsgi.py"}, "region": {"startLine": 1474}}}]}, {"ruleId": "scanner-30219f9a6ce1e361", "level": "error", "message": {"text": "Flask mutation route `apollo_phone_callback` without `@login_required` \u2014 wsgi.py:1520"}, "properties": {"repobilityId": "9561902a911d7e7f", "scanner": "scanner-primary", "fingerprint": "30219f9a6ce1e361", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "wsgi.py"}, "region": {"startLine": 1520}}}]}, {"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-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"]}}]}]}