{"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-4575656211a299a0", "name": "Possibly dead Python function: assert_point_in_time", "shortDescription": {"text": "Possibly dead Python function: assert_point_in_time"}, "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-1d3ec5c377fb6f12", "name": "Possibly dead Python function: run_daily", "shortDescription": {"text": "Possibly dead Python function: run_daily"}, "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-afaf6c4f7260fae1", "name": "Possibly dead Python function: run_weekly", "shortDescription": {"text": "Possibly dead Python function: run_weekly"}, "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-af5f7982e9885f36", "name": "Possibly dead Python function: run_quarterly", "shortDescription": {"text": "Possibly dead Python function: run_quarterly"}, "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-49179bac3da18aab", "name": "Possibly dead Python function: save_price_snapshot", "shortDescription": {"text": "Possibly dead Python function: save_price_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-3bf4e5a40b114b20", "name": "Possibly dead Python function: delete_research_embeddings", "shortDescription": {"text": "Possibly dead Python function: delete_research_embeddings"}, "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-506be2b95088f5d3", "name": "git log failed \u2014 history analysis incomplete", "shortDescription": {"text": "git log failed \u2014 history analysis incomplete"}, "fullDescription": {"text": "fatal: not a git repository (or any parent up to mount point /data)\nStopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set)."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9710c8d059e53154", "name": "No frontend routes/components detected", "shortDescription": {"text": "No frontend routes/components detected"}, "fullDescription": {"text": "No React/Vue/Next routes were found. This is fine for backend-only repos."}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6372cebde0220094", "name": "No auth library detected", "shortDescription": {"text": "No auth library detected"}, "fullDescription": {"text": "The scanner did not find any standard auth library (JWT, OAuth, NextAuth, Auth0, etc.). The repo has auth/admin/session surface indicators, so auth may live in custom code, in a separate service, or be missing."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-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-677638face054534", "name": "Very large file: qse_control.py (1705 lines)", "shortDescription": {"text": "Very large file: qse_control.py (1705 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-4f100d664defa5c4", "name": "Very large file: qse_server.py (3558 lines)", "shortDescription": {"text": "Very large file: qse_server.py (3558 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-a823b6eacc886647", "name": "Very large file: news_analyzer.py (1225 lines)", "shortDescription": {"text": "Very large file: news_analyzer.py (1225 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6893a6c8b0861585", "name": "Very low test-to-source ratio", "shortDescription": {"text": "Very low test-to-source ratio"}, "fullDescription": {"text": "0 test file(s) for 32 source file(s) (ratio 0.00). Consider adding integration or unit tests for critical paths."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-141b30a41e03817b", "name": "No license file detected", "shortDescription": {"text": "No license file detected"}, "fullDescription": {"text": "No LICENSE/COPYING/NOTICE file was found. Generated repositories often omit licensing, which blocks reuse and automated intake."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3ab5d313dda8e5f9", "name": "Debug logging residue appears in source files", "shortDescription": {"text": "Debug logging residue appears in source files"}, "fullDescription": {"text": "Found 355 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-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, tests. Opus verification showed these co-occurring gaps are a better readiness signal than reading each flag in isolation."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-749d4bc1bd66df5f", "name": "Agent instructions exist but release-hardening basics are missing", "shortDescription": {"text": "Agent instructions exist but release-hardening basics are missing"}, "fullDescription": {"text": "AI-coder instruction files were found, but the repo is missing license, ci, tests. Treat this as a contract gap: the agent is guided, but the generated output is not yet guarded by the controls that make it repeatable."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9ec19e73877dce63", "name": "Commented-code block (5 lines) in macro_signals.py:380", "shortDescription": {"text": "Commented-code block (5 lines) in macro_signals.py:380"}, "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-dbd8489bdaa2b114", "name": "Network/subprocess call without timeout or try/except \u2014 macro_signals.py:240", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 macro_signals.py:240"}, "fullDescription": {"text": "`subprocess.run(...)` here lacks both a `timeout=` arg and an enclosing try/except. This is exactly the class of bug that took down our git-clone earlier (HTTP/2 stream cancel surfaced as a fatal). Add a `timeout=` and wrap in try/except, or use a wrapper that retries."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-18d0749ff330f1a4", "name": "Commented-code block (7 lines) in news_scraper.py:109", "shortDescription": {"text": "Commented-code block (7 lines) in news_scraper.py:109"}, "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-2fe18d35858e78d8", "name": "Legacy-named symbol `_migrate_legacy` in qse_portfolio.py:48", "shortDescription": {"text": "Legacy-named symbol `_migrate_legacy` in qse_portfolio.py:48"}, "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-fe72bab20b27bd0a", "name": "Commented-code block (5 lines) in news_learner.py:126", "shortDescription": {"text": "Commented-code block (5 lines) in news_learner.py:126"}, "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-5760e40c26b9321d", "name": "Network/subprocess call without timeout or try/except \u2014 qse_control.py:161", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 qse_control.py:161"}, "fullDescription": {"text": "`subprocess.run(...)` here lacks both a `timeout=` arg and an enclosing try/except. This is exactly the class of bug that took down our git-clone earlier (HTTP/2 stream cancel surfaced as a fatal). Add a `timeout=` and wrap in try/except, or use a wrapper that retries."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a67ba7acc873d6f3", "name": "Legacy-named symbol `_migrate_legacy` in qse_server.py:29", "shortDescription": {"text": "Legacy-named symbol `_migrate_legacy` in qse_server.py:29"}, "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-a83edfda28004d8b", "name": "Commented-code block (5 lines) in news_analyzer.py:287", "shortDescription": {"text": "Commented-code block (5 lines) in news_analyzer.py:287"}, "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-75d59d77110b70b5", "name": "Network/subprocess call without timeout or try/except \u2014 backup_transactions.py:51", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 backup_transactions.py:51"}, "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-a2229eb28349ea92", "name": "Legacy-named symbol `eval_v1` in gpu_guard.py:8", "shortDescription": {"text": "Legacy-named symbol `eval_v1` in gpu_guard.py:8"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6cefc29d1b53d3f3", "name": "Legacy-named symbol `use_backup` in qse_scraper.py:361", "shortDescription": {"text": "Legacy-named symbol `use_backup` in qse_scraper.py:361"}, "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-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:\nqse_portfolio.py:cmd_sell, qse_portfolio.py:cmd_target\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:\nqse_control.py:login_page, qse_control.py:login, qse_server.py:login_page, qse_server.py:login\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-0ea80d105aad46f1", "name": "Flask mutation route `login` without `@login_required` \u2014 qse_control.py:625", "shortDescription": {"text": "Flask mutation route `login` without `@login_required` \u2014 qse_control.py:625"}, "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-938b1003b3cf44c5", "name": "Flask mutation route `service_action` without `@login_required` \u2014 qse_control.py:668", "shortDescription": {"text": "Flask mutation route `service_action` without `@login_required` \u2014 qse_control.py:668"}, "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-2b9b5d681bee9f7b", "name": "Flask mutation route `pipeline_run` without `@login_required` \u2014 qse_control.py:772", "shortDescription": {"text": "Flask mutation route `pipeline_run` without `@login_required` \u2014 qse_control.py:772"}, "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-f0c96038916d143d", "name": "Flask mutation route `pipeline_run_scrape` without `@login_required` \u2014 qse_control.py:779", "shortDescription": {"text": "Flask mutation route `pipeline_run_scrape` without `@login_required` \u2014 qse_control.py:779"}, "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-3bb1a543d567ab88", "name": "Flask mutation route `pipeline_run_symbols` without `@login_required` \u2014 qse_control.py:786", "shortDescription": {"text": "Flask mutation route `pipeline_run_symbols` without `@login_required` \u2014 qse_control.py:786"}, "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-dfbf03c3cc67042b", "name": "Flask mutation route `pipeline_kill` without `@login_required` \u2014 qse_control.py:797", "shortDescription": {"text": "Flask mutation route `pipeline_kill` without `@login_required` \u2014 qse_control.py:797"}, "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-10e0e464142123ba", "name": "Flask mutation route `pipeline_learn` without `@login_required` \u2014 qse_control.py:817", "shortDescription": {"text": "Flask mutation route `pipeline_learn` without `@login_required` \u2014 qse_control.py:817"}, "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-21f7a4498162225e", "name": "Flask mutation route `schedule_enable` without `@login_required` \u2014 qse_control.py:846", "shortDescription": {"text": "Flask mutation route `schedule_enable` without `@login_required` \u2014 qse_control.py:846"}, "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-494a0f27b27e7a11", "name": "Flask mutation route `schedule_disable` without `@login_required` \u2014 qse_control.py:852", "shortDescription": {"text": "Flask mutation route `schedule_disable` without `@login_required` \u2014 qse_control.py:852"}, "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-3404cc6ddfb87bb1", "name": "Flask mutation route `intelligence_purge` without `@login_required` \u2014 qse_control.py:867", "shortDescription": {"text": "Flask mutation route `intelligence_purge` without `@login_required` \u2014 qse_control.py:867"}, "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-fff5543ada97497d", "name": "Flask mutation route `maintenance_vacuum` without `@login_required` \u2014 qse_control.py:876", "shortDescription": {"text": "Flask mutation route `maintenance_vacuum` without `@login_required` \u2014 qse_control.py:876"}, "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-9435a78626ec3806", "name": "Flask mutation route `maintenance_portfolio_push` without `@login_required` \u2014 qse_control.py:888", "shortDescription": {"text": "Flask mutation route `maintenance_portfolio_push` without `@login_required` \u2014 qse_control.py:888"}, "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-6b6a04d4ab0616da", "name": "Flask mutation route `alerts_clear` without `@login_required` \u2014 qse_control.py:906", "shortDescription": {"text": "Flask mutation route `alerts_clear` without `@login_required` \u2014 qse_control.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-6411dcf2ab108218", "name": "Flask mutation route `login` without `@login_required` \u2014 qse_server.py:876", "shortDescription": {"text": "Flask mutation route `login` without `@login_required` \u2014 qse_server.py:876"}, "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-fa2226d5a8b92584", "name": "Flask mutation route `chat` without `@login_required` \u2014 qse_server.py:898", "shortDescription": {"text": "Flask mutation route `chat` without `@login_required` \u2014 qse_server.py:898"}, "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-3100012e36a6e1a2", "name": "Flask mutation route `scrape` without `@login_required` \u2014 qse_server.py:994", "shortDescription": {"text": "Flask mutation route `scrape` without `@login_required` \u2014 qse_server.py:994"}, "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-ef7cca7918d14b78", "name": "Flask mutation route `save_portfolio` without `@login_required` \u2014 qse_server.py:1019", "shortDescription": {"text": "Flask mutation route `save_portfolio` without `@login_required` \u2014 qse_server.py:1019"}, "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-4ca54ce9fd99f63d", "name": "Flask mutation route `sell_holding` without `@login_required` \u2014 qse_server.py:1030", "shortDescription": {"text": "Flask mutation route `sell_holding` without `@login_required` \u2014 qse_server.py:1030"}, "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-b2f11f1c32a7c487", "name": "Flask mutation route `add_note` without `@login_required` \u2014 qse_server.py:1072", "shortDescription": {"text": "Flask mutation route `add_note` without `@login_required` \u2014 qse_server.py:1072"}, "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-d1eea652cc901b07", "name": "Flask mutation route `remove_note` without `@login_required` \u2014 qse_server.py:1080", "shortDescription": {"text": "Flask mutation route `remove_note` without `@login_required` \u2014 qse_server.py:1080"}, "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-ea375180b881471c", "name": "Flask mutation route `add_watchlist` without `@login_required` \u2014 qse_server.py:1111", "shortDescription": {"text": "Flask mutation route `add_watchlist` without `@login_required` \u2014 qse_server.py:1111"}, "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-0468387f036ae783", "name": "Flask mutation route `remove_watchlist` without `@login_required` \u2014 qse_server.py:1126", "shortDescription": {"text": "Flask mutation route `remove_watchlist` without `@login_required` \u2014 qse_server.py:1126"}, "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-6cde7bbea72b9926", "name": "Flask mutation route `set_analysis_mode` without `@login_required` \u2014 qse_server.py:1137", "shortDescription": {"text": "Flask mutation route `set_analysis_mode` without `@login_required` \u2014 qse_server.py:1137"}, "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-0bdc92e9f2b0d39f", "name": "Flask mutation route `create_chat` without `@login_required` \u2014 qse_server.py:1684", "shortDescription": {"text": "Flask mutation route `create_chat` without `@login_required` \u2014 qse_server.py:1684"}, "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-34ab842ca03f9d10", "name": "Flask mutation route `delete_chat_route` without `@login_required` \u2014 qse_server.py:1711", "shortDescription": {"text": "Flask mutation route `delete_chat_route` without `@login_required` \u2014 qse_server.py:1711"}, "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-9c1b87ebb8044d8c", "name": "Flask mutation route `patch_chat` without `@login_required` \u2014 qse_server.py:1718", "shortDescription": {"text": "Flask mutation route `patch_chat` without `@login_required` \u2014 qse_server.py:1718"}, "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-ce42f7159cec14e8", "name": "Flask mutation route `create_project` without `@login_required` \u2014 qse_server.py:1731", "shortDescription": {"text": "Flask mutation route `create_project` without `@login_required` \u2014 qse_server.py:1731"}, "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-80d207c83462fb86", "name": "Flask mutation route `delete_project` without `@login_required` \u2014 qse_server.py:1742", "shortDescription": {"text": "Flask mutation route `delete_project` without `@login_required` \u2014 qse_server.py:1742"}, "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-1a6d91f2236825bf", "name": "Unused endpoint: ANY /", "shortDescription": {"text": "Unused endpoint: ANY /"}, "fullDescription": {"text": "`qse_control.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-4c7ad61ba1b23915", "name": "Unused endpoint: ANY /login", "shortDescription": {"text": "Unused endpoint: ANY /login"}, "fullDescription": {"text": "`qse_control.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": "`qse_control.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-b4739924ae04d7bc", "name": "Unused endpoint: ANY /api/system/status", "shortDescription": {"text": "Unused endpoint: ANY /api/system/status"}, "fullDescription": {"text": "`qse_control.py` declares `ANY /api/system/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-8de981986ec72c89", "name": "Unused endpoint: ANY /api/service/<name>/<action>", "shortDescription": {"text": "Unused endpoint: ANY /api/service/<name>/<action>"}, "fullDescription": {"text": "`qse_control.py` declares `ANY /api/service/<name>/<action>` 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-95ed3e9168e6b0be", "name": "Unused endpoint: ANY /api/resources", "shortDescription": {"text": "Unused endpoint: ANY /api/resources"}, "fullDescription": {"text": "`qse_control.py` declares `ANY /api/resources` 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-832fcc8b9893abcf", "name": "Unused endpoint: ANY /api/logs/<service>", "shortDescription": {"text": "Unused endpoint: ANY /api/logs/<service>"}, "fullDescription": {"text": "`qse_control.py` declares `ANY /api/logs/<service>` 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-7d26d768c9be9bdc", "name": "Unused endpoint: ANY /api/pipeline/status", "shortDescription": {"text": "Unused endpoint: ANY /api/pipeline/status"}, "fullDescription": {"text": "`qse_control.py` declares `ANY /api/pipeline/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-6c7a6cb78656d6a9", "name": "Unused endpoint: ANY /api/pipeline/run", "shortDescription": {"text": "Unused endpoint: ANY /api/pipeline/run"}, "fullDescription": {"text": "`qse_control.py` declares `ANY /api/pipeline/run` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b6fe9fc8ef669ae1", "name": "Unused endpoint: ANY /api/pipeline/run-scrape", "shortDescription": {"text": "Unused endpoint: ANY /api/pipeline/run-scrape"}, "fullDescription": {"text": "`qse_control.py` declares `ANY /api/pipeline/run-scrape` 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-53f9dc9c4861928f", "name": "Unused endpoint: ANY /api/pipeline/run-symbols", "shortDescription": {"text": "Unused endpoint: ANY /api/pipeline/run-symbols"}, "fullDescription": {"text": "`qse_control.py` declares `ANY /api/pipeline/run-symbols` 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-c40bbc847339c67b", "name": "Unused endpoint: ANY /api/pipeline/kill", "shortDescription": {"text": "Unused endpoint: ANY /api/pipeline/kill"}, "fullDescription": {"text": "`qse_control.py` declares `ANY /api/pipeline/kill` 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-24d412f88325fd45", "name": "Unused endpoint: ANY /api/pipeline/tail", "shortDescription": {"text": "Unused endpoint: ANY /api/pipeline/tail"}, "fullDescription": {"text": "`qse_control.py` declares `ANY /api/pipeline/tail` 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-ba7d79424152fcc1", "name": "Unused endpoint: ANY /api/pipeline/learn", "shortDescription": {"text": "Unused endpoint: ANY /api/pipeline/learn"}, "fullDescription": {"text": "`qse_control.py` declares `ANY /api/pipeline/learn` 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-ec835712a7352c5e", "name": "Unused endpoint: ANY /api/pipeline/history", "shortDescription": {"text": "Unused endpoint: ANY /api/pipeline/history"}, "fullDescription": {"text": "`qse_control.py` declares `ANY /api/pipeline/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-f91749ada4500d72", "name": "Unused endpoint: ANY /api/schedule", "shortDescription": {"text": "Unused endpoint: ANY /api/schedule"}, "fullDescription": {"text": "`qse_control.py` declares `ANY /api/schedule` 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-de0a8a52dd21ce83", "name": "Unused endpoint: ANY /api/schedule/enable", "shortDescription": {"text": "Unused endpoint: ANY /api/schedule/enable"}, "fullDescription": {"text": "`qse_control.py` declares `ANY /api/schedule/enable` 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-c937093657ffc17a", "name": "Unused endpoint: ANY /api/schedule/disable", "shortDescription": {"text": "Unused endpoint: ANY /api/schedule/disable"}, "fullDescription": {"text": "`qse_control.py` declares `ANY /api/schedule/disable` 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-d1237b69667d7c34", "name": "Unused endpoint: ANY /api/intelligence/stats", "shortDescription": {"text": "Unused endpoint: ANY /api/intelligence/stats"}, "fullDescription": {"text": "`qse_control.py` declares `ANY /api/intelligence/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-96d4e2ddfdac3725", "name": "Unused endpoint: ANY /api/intelligence/purge", "shortDescription": {"text": "Unused endpoint: ANY /api/intelligence/purge"}, "fullDescription": {"text": "`qse_control.py` declares `ANY /api/intelligence/purge` 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-3bc6f75d6b37ac81", "name": "Unused endpoint: ANY /api/maintenance/vacuum", "shortDescription": {"text": "Unused endpoint: ANY /api/maintenance/vacuum"}, "fullDescription": {"text": "`qse_control.py` declares `ANY /api/maintenance/vacuum` 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-763cce935ea60d02", "name": "Unused endpoint: ANY /api/maintenance/git-status", "shortDescription": {"text": "Unused endpoint: ANY /api/maintenance/git-status"}, "fullDescription": {"text": "`qse_control.py` declares `ANY /api/maintenance/git-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-6191b7b9c315f2d0", "name": "Unused endpoint: ANY /api/maintenance/portfolio-push", "shortDescription": {"text": "Unused endpoint: ANY /api/maintenance/portfolio-push"}, "fullDescription": {"text": "`qse_control.py` declares `ANY /api/maintenance/portfolio-push` 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-1819a6bff5351b0a", "name": "Unused endpoint: ANY /api/maintenance/env-check", "shortDescription": {"text": "Unused endpoint: ANY /api/maintenance/env-check"}, "fullDescription": {"text": "`qse_control.py` declares `ANY /api/maintenance/env-check` 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-39b0e3ed7ddb78f2", "name": "Unused endpoint: ANY /api/alerts/state", "shortDescription": {"text": "Unused endpoint: ANY /api/alerts/state"}, "fullDescription": {"text": "`qse_control.py` declares `ANY /api/alerts/state` 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-c4d71e1913fd478c", "name": "Unused endpoint: ANY /api/alerts/clear", "shortDescription": {"text": "Unused endpoint: ANY /api/alerts/clear"}, "fullDescription": {"text": "`qse_control.py` declares `ANY /api/alerts/clear` 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-b36c3a906dce7415", "name": "Unused endpoint: ANY /api/portfolio/download", "shortDescription": {"text": "Unused endpoint: ANY /api/portfolio/download"}, "fullDescription": {"text": "`qse_control.py` declares `ANY /api/portfolio/download` 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-c7abebd7a4ed1556", "name": "Unused endpoint: ANY /api/db/download", "shortDescription": {"text": "Unused endpoint: ANY /api/db/download"}, "fullDescription": {"text": "`qse_control.py` declares `ANY /api/db/download` 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-cd2e5f273f9750ee", "name": "Unused endpoint: ANY /api/chat", "shortDescription": {"text": "Unused endpoint: ANY /api/chat"}, "fullDescription": {"text": "`qse_server.py` declares `ANY /api/chat` 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-8179083fbce97165", "name": "Unused endpoint: ANY /api/alerts/stream", "shortDescription": {"text": "Unused endpoint: ANY /api/alerts/stream"}, "fullDescription": {"text": "`qse_server.py` declares `ANY /api/alerts/stream` 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-9e31da8c304b7625", "name": "Unused endpoint: ANY /api/scrape", "shortDescription": {"text": "Unused endpoint: ANY /api/scrape"}, "fullDescription": {"text": "`qse_server.py` declares `ANY /api/scrape` 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-64a025ea08d3a390", "name": "Unused endpoint: ANY /api/portfolio", "shortDescription": {"text": "Unused endpoint: ANY /api/portfolio"}, "fullDescription": {"text": "`qse_server.py` declares `ANY /api/portfolio` 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-d294b3746b379492", "name": "Unused endpoint: ANY /api/portfolio/sell", "shortDescription": {"text": "Unused endpoint: ANY /api/portfolio/sell"}, "fullDescription": {"text": "`qse_server.py` declares `ANY /api/portfolio/sell` 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-6f354423424e0923", "name": "Unused endpoint: ANY /api/notes", "shortDescription": {"text": "Unused endpoint: ANY /api/notes"}, "fullDescription": {"text": "`qse_server.py` declares `ANY /api/notes` 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-6b783db9cd8fcf8c", "name": "Unused endpoint: ANY /api/notes/<int:index>", "shortDescription": {"text": "Unused endpoint: ANY /api/notes/<int:index>"}, "fullDescription": {"text": "`qse_server.py` declares `ANY /api/notes/<int:index>` 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-98b35db3524302e3", "name": "Unused endpoint: ANY /api/watchlist", "shortDescription": {"text": "Unused endpoint: ANY /api/watchlist"}, "fullDescription": {"text": "`qse_server.py` declares `ANY /api/watchlist` 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-39d9d0e77ea17f45", "name": "Unused endpoint: ANY /api/watchlist/<symbol>", "shortDescription": {"text": "Unused endpoint: ANY /api/watchlist/<symbol>"}, "fullDescription": {"text": "`qse_server.py` declares `ANY /api/watchlist/<symbol>` 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-cca8baccaf22bbcd", "name": "Unused endpoint: ANY /api/analysis-mode", "shortDescription": {"text": "Unused endpoint: ANY /api/analysis-mode"}, "fullDescription": {"text": "`qse_server.py` declares `ANY /api/analysis-mode` 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-dc06a82761a00b1f", "name": "Unused endpoint: ANY /api/company-info", "shortDescription": {"text": "Unused endpoint: ANY /api/company-info"}, "fullDescription": {"text": "`qse_server.py` declares `ANY /api/company-info` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9c0539ee4d941aa7", "name": "Unused endpoint: ANY /api/dividends", "shortDescription": {"text": "Unused endpoint: ANY /api/dividends"}, "fullDescription": {"text": "`qse_server.py` declares `ANY /api/dividends` 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-0e1faa16229f27ae", "name": "Unused endpoint: ANY /api/dividend-simulate", "shortDescription": {"text": "Unused endpoint: ANY /api/dividend-simulate"}, "fullDescription": {"text": "`qse_server.py` declares `ANY /api/dividend-simulate` 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-6f597dd0dd4b4b85", "name": "Unused endpoint: ANY /api/prices", "shortDescription": {"text": "Unused endpoint: ANY /api/prices"}, "fullDescription": {"text": "`qse_server.py` declares `ANY /api/prices` 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-ce9c3ea6caab18a7", "name": "Unused endpoint: ANY /api/intraday", "shortDescription": {"text": "Unused endpoint: ANY /api/intraday"}, "fullDescription": {"text": "`qse_server.py` declares `ANY /api/intraday` 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-f7d36377994d1b9b", "name": "Unused endpoint: ANY /api/intraday/<symbol>", "shortDescription": {"text": "Unused endpoint: ANY /api/intraday/<symbol>"}, "fullDescription": {"text": "`qse_server.py` declares `ANY /api/intraday/<symbol>` 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-e1a61ead29e17012", "name": "Unused endpoint: ANY /api/status", "shortDescription": {"text": "Unused endpoint: ANY /api/status"}, "fullDescription": {"text": "`qse_server.py` declares `ANY /api/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-b6f50612786df8d7", "name": "Unused endpoint: ANY /api/gpu", "shortDescription": {"text": "Unused endpoint: ANY /api/gpu"}, "fullDescription": {"text": "`qse_server.py` declares `ANY /api/gpu` 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-a234221807970ac5", "name": "Unused endpoint: ANY /api/reports", "shortDescription": {"text": "Unused endpoint: ANY /api/reports"}, "fullDescription": {"text": "`qse_server.py` declares `ANY /api/reports` 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-8b2b5f9bf7d87c08", "name": "Unused endpoint: ANY /predictions", "shortDescription": {"text": "Unused endpoint: ANY /predictions"}, "fullDescription": {"text": "`qse_server.py` declares `ANY /predictions` 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-789044ee88aa0846", "name": "Unused endpoint: ANY /api/predictions", "shortDescription": {"text": "Unused endpoint: ANY /api/predictions"}, "fullDescription": {"text": "`qse_server.py` declares `ANY /api/predictions` 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-2c8575ca5d3e67fe", "name": "Unused endpoint: ANY /api/reports/<path:filename>", "shortDescription": {"text": "Unused endpoint: ANY /api/reports/<path:filename>"}, "fullDescription": {"text": "`qse_server.py` declares `ANY /api/reports/<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}}]}}, "automationDetails": {"id": "repobility/13901"}, "properties": {"repository": "MALSADA/daleel-qse-agent", "repoUrl": "https://github.com/MALSADA/daleel-qse-agent", "branch": "main"}, "results": [{"ruleId": "scanner-4575656211a299a0", "level": "note", "message": {"text": "Possibly dead Python function: assert_point_in_time"}, "properties": {"repobilityId": "af06eafcbaab3922", "scanner": "scanner-primary", "fingerprint": "4575656211a299a0", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "training_extractor.py:79"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-1d3ec5c377fb6f12", "level": "note", "message": {"text": "Possibly dead Python function: run_daily"}, "properties": {"repobilityId": "fbfc7fe277ec1f66", "scanner": "scanner-primary", "fingerprint": "1d3ec5c377fb6f12", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "qnbfs_updater.py:80"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-afaf6c4f7260fae1", "level": "note", "message": {"text": "Possibly dead Python function: run_weekly"}, "properties": {"repobilityId": "35833df6c4ed2c63", "scanner": "scanner-primary", "fingerprint": "afaf6c4f7260fae1", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "qnbfs_updater.py:91"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-af5f7982e9885f36", "level": "note", "message": {"text": "Possibly dead Python function: run_quarterly"}, "properties": {"repobilityId": "98569919dbc97e45", "scanner": "scanner-primary", "fingerprint": "af5f7982e9885f36", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "qnbfs_updater.py:102"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-49179bac3da18aab", "level": "note", "message": {"text": "Possibly dead Python function: save_price_snapshot"}, "properties": {"repobilityId": "846f09b5dbcf1fbd", "scanner": "scanner-primary", "fingerprint": "49179bac3da18aab", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "news_db.py:432"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3bf4e5a40b114b20", "level": "note", "message": {"text": "Possibly dead Python function: delete_research_embeddings"}, "properties": {"repobilityId": "156b89b850483a15", "scanner": "scanner-primary", "fingerprint": "3bf4e5a40b114b20", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "news_db.py:1031"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-506be2b95088f5d3", "level": "none", "message": {"text": "git log failed \u2014 history analysis incomplete"}, "properties": {"repobilityId": "b424308a11bb9b22", "scanner": "scanner-primary", "fingerprint": "506be2b95088f5d3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["git", "tooling"]}}, {"ruleId": "scanner-9710c8d059e53154", "level": "none", "message": {"text": "No frontend routes/components detected"}, "properties": {"repobilityId": "44ca61485762e494", "scanner": "scanner-primary", "fingerprint": "9710c8d059e53154", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["coverage"]}}, {"ruleId": "scanner-6372cebde0220094", "level": "warning", "message": {"text": "No auth library detected"}, "properties": {"repobilityId": "a5b6035a5bbf8054", "scanner": "scanner-primary", "fingerprint": "6372cebde0220094", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["coverage", "auth"]}}, {"ruleId": "scanner-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-677638face054534", "level": "note", "message": {"text": "Very large file: qse_control.py (1705 lines)"}, "properties": {"repobilityId": "ada3d89ea7647c96", "scanner": "scanner-primary", "fingerprint": "677638face054534", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-4f100d664defa5c4", "level": "note", "message": {"text": "Very large file: qse_server.py (3558 lines)"}, "properties": {"repobilityId": "51cf5349f3cfd194", "scanner": "scanner-primary", "fingerprint": "4f100d664defa5c4", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-a823b6eacc886647", "level": "note", "message": {"text": "Very large file: news_analyzer.py (1225 lines)"}, "properties": {"repobilityId": "05ee93f17030aa59", "scanner": "scanner-primary", "fingerprint": "a823b6eacc886647", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-6893a6c8b0861585", "level": "warning", "message": {"text": "Very low test-to-source ratio"}, "properties": {"repobilityId": "54a7de3f06314bf0", "scanner": "scanner-primary", "fingerprint": "6893a6c8b0861585", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["tests", "coverage"]}}, {"ruleId": "scanner-141b30a41e03817b", "level": "note", "message": {"text": "No license file detected"}, "properties": {"repobilityId": "52b74b9ff23961b7", "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": "ef8b57a02d7da8a4", "scanner": "scanner-primary", "fingerprint": "3ab5d313dda8e5f9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["debug", "cleanup", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-2d0c7b7ab8f8aacf", "level": "warning", "message": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "properties": {"repobilityId": "e47a57a57ef93c9d", "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": "warning", "message": {"text": "Composite production-readiness gap"}, "properties": {"repobilityId": "c29237e7fb3f1e6a", "scanner": "scanner-primary", "fingerprint": "b9088664ace7f748", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["production-readiness", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-749d4bc1bd66df5f", "level": "warning", "message": {"text": "Agent instructions exist but release-hardening basics are missing"}, "properties": {"repobilityId": "ee5d973c3c1cb7f9", "scanner": "scanner-primary", "fingerprint": "749d4bc1bd66df5f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-9ec19e73877dce63", "level": "none", "message": {"text": "Commented-code block (5 lines) in macro_signals.py:380"}, "properties": {"repobilityId": "cf6b3e67c163f9a2", "scanner": "scanner-primary", "fingerprint": "9ec19e73877dce63", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-dbd8489bdaa2b114", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 macro_signals.py:240"}, "properties": {"repobilityId": "d633b4ade87a0666", "scanner": "scanner-primary", "fingerprint": "dbd8489bdaa2b114", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-18d0749ff330f1a4", "level": "none", "message": {"text": "Commented-code block (7 lines) in news_scraper.py:109"}, "properties": {"repobilityId": "ed68134e1d835549", "scanner": "scanner-primary", "fingerprint": "18d0749ff330f1a4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2fe18d35858e78d8", "level": "note", "message": {"text": "Legacy-named symbol `_migrate_legacy` in qse_portfolio.py:48"}, "properties": {"repobilityId": "1097c739a3857efb", "scanner": "scanner-primary", "fingerprint": "2fe18d35858e78d8", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-fe72bab20b27bd0a", "level": "none", "message": {"text": "Commented-code block (5 lines) in news_learner.py:126"}, "properties": {"repobilityId": "486eb5bc6f9c9b15", "scanner": "scanner-primary", "fingerprint": "fe72bab20b27bd0a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5760e40c26b9321d", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 qse_control.py:161"}, "properties": {"repobilityId": "d4a64529b9f7f1aa", "scanner": "scanner-primary", "fingerprint": "5760e40c26b9321d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a67ba7acc873d6f3", "level": "note", "message": {"text": "Legacy-named symbol `_migrate_legacy` in qse_server.py:29"}, "properties": {"repobilityId": "0e3fa6cb0b8b41c1", "scanner": "scanner-primary", "fingerprint": "a67ba7acc873d6f3", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-a83edfda28004d8b", "level": "none", "message": {"text": "Commented-code block (5 lines) in news_analyzer.py:287"}, "properties": {"repobilityId": "d08f9936dd441e08", "scanner": "scanner-primary", "fingerprint": "a83edfda28004d8b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-75d59d77110b70b5", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 backup_transactions.py:51"}, "properties": {"repobilityId": "1d6c039afab53bb0", "scanner": "scanner-primary", "fingerprint": "75d59d77110b70b5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a2229eb28349ea92", "level": "note", "message": {"text": "Legacy-named symbol `eval_v1` in gpu_guard.py:8"}, "properties": {"repobilityId": "559ec0ca7020a0b3", "scanner": "scanner-primary", "fingerprint": "a2229eb28349ea92", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-6cefc29d1b53d3f3", "level": "note", "message": {"text": "Legacy-named symbol `use_backup` in qse_scraper.py:361"}, "properties": {"repobilityId": "08cdbe92c9689597", "scanner": "scanner-primary", "fingerprint": "6cefc29d1b53d3f3", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "b5bda85489f49478", "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": "a85947116362b722", "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": "9f4a0e2b706e5d61", "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": "112ef29ec57ece83", "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": "94596e129ededb63", "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": "d6a1f6bf4793c4e9", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-0ea80d105aad46f1", "level": "error", "message": {"text": "Flask mutation route `login` without `@login_required` \u2014 qse_control.py:625"}, "properties": {"repobilityId": "d49e930dc8ea5495", "scanner": "scanner-primary", "fingerprint": "0ea80d105aad46f1", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "qse_control.py"}, "region": {"startLine": 625}}}]}, {"ruleId": "scanner-938b1003b3cf44c5", "level": "error", "message": {"text": "Flask mutation route `service_action` without `@login_required` \u2014 qse_control.py:668"}, "properties": {"repobilityId": "8499309697ec63dc", "scanner": "scanner-primary", "fingerprint": "938b1003b3cf44c5", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "qse_control.py"}, "region": {"startLine": 668}}}]}, {"ruleId": "scanner-2b9b5d681bee9f7b", "level": "error", "message": {"text": "Flask mutation route `pipeline_run` without `@login_required` \u2014 qse_control.py:772"}, "properties": {"repobilityId": "3a2b963e8fda5dcb", "scanner": "scanner-primary", "fingerprint": "2b9b5d681bee9f7b", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "qse_control.py"}, "region": {"startLine": 772}}}]}, {"ruleId": "scanner-f0c96038916d143d", "level": "error", "message": {"text": "Flask mutation route `pipeline_run_scrape` without `@login_required` \u2014 qse_control.py:779"}, "properties": {"repobilityId": "0af6a664e0c2b160", "scanner": "scanner-primary", "fingerprint": "f0c96038916d143d", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "qse_control.py"}, "region": {"startLine": 779}}}]}, {"ruleId": "scanner-3bb1a543d567ab88", "level": "error", "message": {"text": "Flask mutation route `pipeline_run_symbols` without `@login_required` \u2014 qse_control.py:786"}, "properties": {"repobilityId": "b6acca42021279f7", "scanner": "scanner-primary", "fingerprint": "3bb1a543d567ab88", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "qse_control.py"}, "region": {"startLine": 786}}}]}, {"ruleId": "scanner-dfbf03c3cc67042b", "level": "error", "message": {"text": "Flask mutation route `pipeline_kill` without `@login_required` \u2014 qse_control.py:797"}, "properties": {"repobilityId": "4912e5fd068901aa", "scanner": "scanner-primary", "fingerprint": "dfbf03c3cc67042b", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "qse_control.py"}, "region": {"startLine": 797}}}]}, {"ruleId": "scanner-10e0e464142123ba", "level": "error", "message": {"text": "Flask mutation route `pipeline_learn` without `@login_required` \u2014 qse_control.py:817"}, "properties": {"repobilityId": "ef674a9d8016a7b3", "scanner": "scanner-primary", "fingerprint": "10e0e464142123ba", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "qse_control.py"}, "region": {"startLine": 817}}}]}, {"ruleId": "scanner-21f7a4498162225e", "level": "error", "message": {"text": "Flask mutation route `schedule_enable` without `@login_required` \u2014 qse_control.py:846"}, "properties": {"repobilityId": "80b06e8f840a6985", "scanner": "scanner-primary", "fingerprint": "21f7a4498162225e", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "qse_control.py"}, "region": {"startLine": 846}}}]}, {"ruleId": "scanner-494a0f27b27e7a11", "level": "error", "message": {"text": "Flask mutation route `schedule_disable` without `@login_required` \u2014 qse_control.py:852"}, "properties": {"repobilityId": "7f4b05ac5302d030", "scanner": "scanner-primary", "fingerprint": "494a0f27b27e7a11", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "qse_control.py"}, "region": {"startLine": 852}}}]}, {"ruleId": "scanner-3404cc6ddfb87bb1", "level": "error", "message": {"text": "Flask mutation route `intelligence_purge` without `@login_required` \u2014 qse_control.py:867"}, "properties": {"repobilityId": "66ca87a985faa347", "scanner": "scanner-primary", "fingerprint": "3404cc6ddfb87bb1", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "qse_control.py"}, "region": {"startLine": 867}}}]}, {"ruleId": "scanner-fff5543ada97497d", "level": "error", "message": {"text": "Flask mutation route `maintenance_vacuum` without `@login_required` \u2014 qse_control.py:876"}, "properties": {"repobilityId": "c25c6a5dfdc414f3", "scanner": "scanner-primary", "fingerprint": "fff5543ada97497d", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "qse_control.py"}, "region": {"startLine": 876}}}]}, {"ruleId": "scanner-9435a78626ec3806", "level": "error", "message": {"text": "Flask mutation route `maintenance_portfolio_push` without `@login_required` \u2014 qse_control.py:888"}, "properties": {"repobilityId": "41f9fcefaa5afe23", "scanner": "scanner-primary", "fingerprint": "9435a78626ec3806", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "qse_control.py"}, "region": {"startLine": 888}}}]}, {"ruleId": "scanner-6b6a04d4ab0616da", "level": "error", "message": {"text": "Flask mutation route `alerts_clear` without `@login_required` \u2014 qse_control.py:906"}, "properties": {"repobilityId": "0d14b9365b6e24b1", "scanner": "scanner-primary", "fingerprint": "6b6a04d4ab0616da", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "qse_control.py"}, "region": {"startLine": 906}}}]}, {"ruleId": "scanner-6411dcf2ab108218", "level": "error", "message": {"text": "Flask mutation route `login` without `@login_required` \u2014 qse_server.py:876"}, "properties": {"repobilityId": "214a51185b8b7e6d", "scanner": "scanner-primary", "fingerprint": "6411dcf2ab108218", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "qse_server.py"}, "region": {"startLine": 876}}}]}, {"ruleId": "scanner-fa2226d5a8b92584", "level": "error", "message": {"text": "Flask mutation route `chat` without `@login_required` \u2014 qse_server.py:898"}, "properties": {"repobilityId": "1b9af50f4349ce9f", "scanner": "scanner-primary", "fingerprint": "fa2226d5a8b92584", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "qse_server.py"}, "region": {"startLine": 898}}}]}, {"ruleId": "scanner-3100012e36a6e1a2", "level": "error", "message": {"text": "Flask mutation route `scrape` without `@login_required` \u2014 qse_server.py:994"}, "properties": {"repobilityId": "2fc1b6182279b633", "scanner": "scanner-primary", "fingerprint": "3100012e36a6e1a2", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "qse_server.py"}, "region": {"startLine": 994}}}]}, {"ruleId": "scanner-ef7cca7918d14b78", "level": "error", "message": {"text": "Flask mutation route `save_portfolio` without `@login_required` \u2014 qse_server.py:1019"}, "properties": {"repobilityId": "fb1c26d4e9d12c80", "scanner": "scanner-primary", "fingerprint": "ef7cca7918d14b78", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "qse_server.py"}, "region": {"startLine": 1019}}}]}, {"ruleId": "scanner-4ca54ce9fd99f63d", "level": "error", "message": {"text": "Flask mutation route `sell_holding` without `@login_required` \u2014 qse_server.py:1030"}, "properties": {"repobilityId": "09b5fb33782aeb7d", "scanner": "scanner-primary", "fingerprint": "4ca54ce9fd99f63d", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "qse_server.py"}, "region": {"startLine": 1030}}}]}, {"ruleId": "scanner-b2f11f1c32a7c487", "level": "error", "message": {"text": "Flask mutation route `add_note` without `@login_required` \u2014 qse_server.py:1072"}, "properties": {"repobilityId": "91db92ec9b391622", "scanner": "scanner-primary", "fingerprint": "b2f11f1c32a7c487", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "qse_server.py"}, "region": {"startLine": 1072}}}]}, {"ruleId": "scanner-d1eea652cc901b07", "level": "error", "message": {"text": "Flask mutation route `remove_note` without `@login_required` \u2014 qse_server.py:1080"}, "properties": {"repobilityId": "54ea5fe1af21aaca", "scanner": "scanner-primary", "fingerprint": "d1eea652cc901b07", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "qse_server.py"}, "region": {"startLine": 1080}}}]}, {"ruleId": "scanner-ea375180b881471c", "level": "error", "message": {"text": "Flask mutation route `add_watchlist` without `@login_required` \u2014 qse_server.py:1111"}, "properties": {"repobilityId": "ed87b7d35d1012e8", "scanner": "scanner-primary", "fingerprint": "ea375180b881471c", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "qse_server.py"}, "region": {"startLine": 1111}}}]}, {"ruleId": "scanner-0468387f036ae783", "level": "error", "message": {"text": "Flask mutation route `remove_watchlist` without `@login_required` \u2014 qse_server.py:1126"}, "properties": {"repobilityId": "5391522bba5d83b6", "scanner": "scanner-primary", "fingerprint": "0468387f036ae783", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "qse_server.py"}, "region": {"startLine": 1126}}}]}, {"ruleId": "scanner-6cde7bbea72b9926", "level": "error", "message": {"text": "Flask mutation route `set_analysis_mode` without `@login_required` \u2014 qse_server.py:1137"}, "properties": {"repobilityId": "4985db27579904e2", "scanner": "scanner-primary", "fingerprint": "6cde7bbea72b9926", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "qse_server.py"}, "region": {"startLine": 1137}}}]}, {"ruleId": "scanner-0bdc92e9f2b0d39f", "level": "error", "message": {"text": "Flask mutation route `create_chat` without `@login_required` \u2014 qse_server.py:1684"}, "properties": {"repobilityId": "bce154bc8d38f5bb", "scanner": "scanner-primary", "fingerprint": "0bdc92e9f2b0d39f", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "qse_server.py"}, "region": {"startLine": 1684}}}]}, {"ruleId": "scanner-34ab842ca03f9d10", "level": "error", "message": {"text": "Flask mutation route `delete_chat_route` without `@login_required` \u2014 qse_server.py:1711"}, "properties": {"repobilityId": "c4f2c8d5bf3914a5", "scanner": "scanner-primary", "fingerprint": "34ab842ca03f9d10", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "qse_server.py"}, "region": {"startLine": 1711}}}]}, {"ruleId": "scanner-9c1b87ebb8044d8c", "level": "error", "message": {"text": "Flask mutation route `patch_chat` without `@login_required` \u2014 qse_server.py:1718"}, "properties": {"repobilityId": "ee68a02597a4f19a", "scanner": "scanner-primary", "fingerprint": "9c1b87ebb8044d8c", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "qse_server.py"}, "region": {"startLine": 1718}}}]}, {"ruleId": "scanner-ce42f7159cec14e8", "level": "error", "message": {"text": "Flask mutation route `create_project` without `@login_required` \u2014 qse_server.py:1731"}, "properties": {"repobilityId": "4680a8e9d5ba00b9", "scanner": "scanner-primary", "fingerprint": "ce42f7159cec14e8", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "qse_server.py"}, "region": {"startLine": 1731}}}]}, {"ruleId": "scanner-80d207c83462fb86", "level": "error", "message": {"text": "Flask mutation route `delete_project` without `@login_required` \u2014 qse_server.py:1742"}, "properties": {"repobilityId": "e03ce1ee7c73a9ee", "scanner": "scanner-primary", "fingerprint": "80d207c83462fb86", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "qse_server.py"}, "region": {"startLine": 1742}}}]}, {"ruleId": "scanner-1a6d91f2236825bf", "level": "note", "message": {"text": "Unused endpoint: ANY /"}, "properties": {"repobilityId": "faff9af5802e5308", "scanner": "scanner-primary", "fingerprint": "1a6d91f2236825bf", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-4c7ad61ba1b23915", "level": "note", "message": {"text": "Unused endpoint: ANY /login"}, "properties": {"repobilityId": "fc2d64ec68c8b637", "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": "af6a1b8488f3278d", "scanner": "scanner-primary", "fingerprint": "c9e449c3b9e73b73", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b4739924ae04d7bc", "level": "note", "message": {"text": "Unused endpoint: ANY /api/system/status"}, "properties": {"repobilityId": "970a9d43dbfbad5d", "scanner": "scanner-primary", "fingerprint": "b4739924ae04d7bc", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8de981986ec72c89", "level": "note", "message": {"text": "Unused endpoint: ANY /api/service/<name>/<action>"}, "properties": {"repobilityId": "99d65eb88a5b95a5", "scanner": "scanner-primary", "fingerprint": "8de981986ec72c89", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-95ed3e9168e6b0be", "level": "note", "message": {"text": "Unused endpoint: ANY /api/resources"}, "properties": {"repobilityId": "3bd8e8083f30deee", "scanner": "scanner-primary", "fingerprint": "95ed3e9168e6b0be", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-832fcc8b9893abcf", "level": "note", "message": {"text": "Unused endpoint: ANY /api/logs/<service>"}, "properties": {"repobilityId": "73106988fe396217", "scanner": "scanner-primary", "fingerprint": "832fcc8b9893abcf", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7d26d768c9be9bdc", "level": "note", "message": {"text": "Unused endpoint: ANY /api/pipeline/status"}, "properties": {"repobilityId": "e20d1a7fd76ee910", "scanner": "scanner-primary", "fingerprint": "7d26d768c9be9bdc", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6c7a6cb78656d6a9", "level": "note", "message": {"text": "Unused endpoint: ANY /api/pipeline/run"}, "properties": {"repobilityId": "c593e1c254b97c4d", "scanner": "scanner-primary", "fingerprint": "6c7a6cb78656d6a9", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b6fe9fc8ef669ae1", "level": "note", "message": {"text": "Unused endpoint: ANY /api/pipeline/run-scrape"}, "properties": {"repobilityId": "08092cc2bc873210", "scanner": "scanner-primary", "fingerprint": "b6fe9fc8ef669ae1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-53f9dc9c4861928f", "level": "note", "message": {"text": "Unused endpoint: ANY /api/pipeline/run-symbols"}, "properties": {"repobilityId": "5fe9b4a3b856f52e", "scanner": "scanner-primary", "fingerprint": "53f9dc9c4861928f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c40bbc847339c67b", "level": "note", "message": {"text": "Unused endpoint: ANY /api/pipeline/kill"}, "properties": {"repobilityId": "49acb2a1c894b0b4", "scanner": "scanner-primary", "fingerprint": "c40bbc847339c67b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-24d412f88325fd45", "level": "note", "message": {"text": "Unused endpoint: ANY /api/pipeline/tail"}, "properties": {"repobilityId": "79f9395a3aa3f5f5", "scanner": "scanner-primary", "fingerprint": "24d412f88325fd45", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ba7d79424152fcc1", "level": "note", "message": {"text": "Unused endpoint: ANY /api/pipeline/learn"}, "properties": {"repobilityId": "f5b73b01b7ee1997", "scanner": "scanner-primary", "fingerprint": "ba7d79424152fcc1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ec835712a7352c5e", "level": "note", "message": {"text": "Unused endpoint: ANY /api/pipeline/history"}, "properties": {"repobilityId": "af30661992a7117d", "scanner": "scanner-primary", "fingerprint": "ec835712a7352c5e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f91749ada4500d72", "level": "note", "message": {"text": "Unused endpoint: ANY /api/schedule"}, "properties": {"repobilityId": "1ff173c5b38a56ba", "scanner": "scanner-primary", "fingerprint": "f91749ada4500d72", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-de0a8a52dd21ce83", "level": "note", "message": {"text": "Unused endpoint: ANY /api/schedule/enable"}, "properties": {"repobilityId": "910f94b19c3a8c8c", "scanner": "scanner-primary", "fingerprint": "de0a8a52dd21ce83", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c937093657ffc17a", "level": "note", "message": {"text": "Unused endpoint: ANY /api/schedule/disable"}, "properties": {"repobilityId": "457ae5e4052ab87f", "scanner": "scanner-primary", "fingerprint": "c937093657ffc17a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d1237b69667d7c34", "level": "note", "message": {"text": "Unused endpoint: ANY /api/intelligence/stats"}, "properties": {"repobilityId": "49755a74d2f42e2d", "scanner": "scanner-primary", "fingerprint": "d1237b69667d7c34", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-96d4e2ddfdac3725", "level": "note", "message": {"text": "Unused endpoint: ANY /api/intelligence/purge"}, "properties": {"repobilityId": "9cec78a6528ec8a9", "scanner": "scanner-primary", "fingerprint": "96d4e2ddfdac3725", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3bc6f75d6b37ac81", "level": "note", "message": {"text": "Unused endpoint: ANY /api/maintenance/vacuum"}, "properties": {"repobilityId": "142ed3f22d8df570", "scanner": "scanner-primary", "fingerprint": "3bc6f75d6b37ac81", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-763cce935ea60d02", "level": "note", "message": {"text": "Unused endpoint: ANY /api/maintenance/git-status"}, "properties": {"repobilityId": "13ba41b7f93056f8", "scanner": "scanner-primary", "fingerprint": "763cce935ea60d02", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6191b7b9c315f2d0", "level": "note", "message": {"text": "Unused endpoint: ANY /api/maintenance/portfolio-push"}, "properties": {"repobilityId": "b06ff19389895d19", "scanner": "scanner-primary", "fingerprint": "6191b7b9c315f2d0", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1819a6bff5351b0a", "level": "note", "message": {"text": "Unused endpoint: ANY /api/maintenance/env-check"}, "properties": {"repobilityId": "c67a6cf8a88b99e0", "scanner": "scanner-primary", "fingerprint": "1819a6bff5351b0a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-39b0e3ed7ddb78f2", "level": "note", "message": {"text": "Unused endpoint: ANY /api/alerts/state"}, "properties": {"repobilityId": "ce92fce00e85d2c4", "scanner": "scanner-primary", "fingerprint": "39b0e3ed7ddb78f2", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c4d71e1913fd478c", "level": "note", "message": {"text": "Unused endpoint: ANY /api/alerts/clear"}, "properties": {"repobilityId": "105b5bc3390cccea", "scanner": "scanner-primary", "fingerprint": "c4d71e1913fd478c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b36c3a906dce7415", "level": "note", "message": {"text": "Unused endpoint: ANY /api/portfolio/download"}, "properties": {"repobilityId": "8fd9e71abc011846", "scanner": "scanner-primary", "fingerprint": "b36c3a906dce7415", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c7abebd7a4ed1556", "level": "note", "message": {"text": "Unused endpoint: ANY /api/db/download"}, "properties": {"repobilityId": "4adc118301d88ae5", "scanner": "scanner-primary", "fingerprint": "c7abebd7a4ed1556", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-cd2e5f273f9750ee", "level": "note", "message": {"text": "Unused endpoint: ANY /api/chat"}, "properties": {"repobilityId": "19ac4936da6e3da0", "scanner": "scanner-primary", "fingerprint": "cd2e5f273f9750ee", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8179083fbce97165", "level": "note", "message": {"text": "Unused endpoint: ANY /api/alerts/stream"}, "properties": {"repobilityId": "6993558cb873913e", "scanner": "scanner-primary", "fingerprint": "8179083fbce97165", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-9e31da8c304b7625", "level": "note", "message": {"text": "Unused endpoint: ANY /api/scrape"}, "properties": {"repobilityId": "04d31718ca569c96", "scanner": "scanner-primary", "fingerprint": "9e31da8c304b7625", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-64a025ea08d3a390", "level": "note", "message": {"text": "Unused endpoint: ANY /api/portfolio"}, "properties": {"repobilityId": "b60b55d25b3faba7", "scanner": "scanner-primary", "fingerprint": "64a025ea08d3a390", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d294b3746b379492", "level": "note", "message": {"text": "Unused endpoint: ANY /api/portfolio/sell"}, "properties": {"repobilityId": "ec97ecaa8a4b41f6", "scanner": "scanner-primary", "fingerprint": "d294b3746b379492", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6f354423424e0923", "level": "note", "message": {"text": "Unused endpoint: ANY /api/notes"}, "properties": {"repobilityId": "0848fe3579b93bfd", "scanner": "scanner-primary", "fingerprint": "6f354423424e0923", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6b783db9cd8fcf8c", "level": "note", "message": {"text": "Unused endpoint: ANY /api/notes/<int:index>"}, "properties": {"repobilityId": "f64a3dbaa55b288c", "scanner": "scanner-primary", "fingerprint": "6b783db9cd8fcf8c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-98b35db3524302e3", "level": "note", "message": {"text": "Unused endpoint: ANY /api/watchlist"}, "properties": {"repobilityId": "dcb1b4394ecdd1f2", "scanner": "scanner-primary", "fingerprint": "98b35db3524302e3", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-39d9d0e77ea17f45", "level": "note", "message": {"text": "Unused endpoint: ANY /api/watchlist/<symbol>"}, "properties": {"repobilityId": "cc19f2178354a7e5", "scanner": "scanner-primary", "fingerprint": "39d9d0e77ea17f45", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-cca8baccaf22bbcd", "level": "note", "message": {"text": "Unused endpoint: ANY /api/analysis-mode"}, "properties": {"repobilityId": "6adaf59d052050ba", "scanner": "scanner-primary", "fingerprint": "cca8baccaf22bbcd", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-dc06a82761a00b1f", "level": "note", "message": {"text": "Unused endpoint: ANY /api/company-info"}, "properties": {"repobilityId": "6a8894f8ad4b2861", "scanner": "scanner-primary", "fingerprint": "dc06a82761a00b1f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-9c0539ee4d941aa7", "level": "note", "message": {"text": "Unused endpoint: ANY /api/dividends"}, "properties": {"repobilityId": "031032301247a8a8", "scanner": "scanner-primary", "fingerprint": "9c0539ee4d941aa7", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-0e1faa16229f27ae", "level": "note", "message": {"text": "Unused endpoint: ANY /api/dividend-simulate"}, "properties": {"repobilityId": "e2a1562528ec0266", "scanner": "scanner-primary", "fingerprint": "0e1faa16229f27ae", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6f597dd0dd4b4b85", "level": "note", "message": {"text": "Unused endpoint: ANY /api/prices"}, "properties": {"repobilityId": "1df9ef8256b6388c", "scanner": "scanner-primary", "fingerprint": "6f597dd0dd4b4b85", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ce9c3ea6caab18a7", "level": "note", "message": {"text": "Unused endpoint: ANY /api/intraday"}, "properties": {"repobilityId": "62c88fbcef567f3f", "scanner": "scanner-primary", "fingerprint": "ce9c3ea6caab18a7", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f7d36377994d1b9b", "level": "note", "message": {"text": "Unused endpoint: ANY /api/intraday/<symbol>"}, "properties": {"repobilityId": "2cac4404fefa7229", "scanner": "scanner-primary", "fingerprint": "f7d36377994d1b9b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e1a61ead29e17012", "level": "note", "message": {"text": "Unused endpoint: ANY /api/status"}, "properties": {"repobilityId": "b8b309608575affe", "scanner": "scanner-primary", "fingerprint": "e1a61ead29e17012", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b6f50612786df8d7", "level": "note", "message": {"text": "Unused endpoint: ANY /api/gpu"}, "properties": {"repobilityId": "b7795a43958acafa", "scanner": "scanner-primary", "fingerprint": "b6f50612786df8d7", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a234221807970ac5", "level": "note", "message": {"text": "Unused endpoint: ANY /api/reports"}, "properties": {"repobilityId": "8a4bae2e081a01e0", "scanner": "scanner-primary", "fingerprint": "a234221807970ac5", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8b2b5f9bf7d87c08", "level": "note", "message": {"text": "Unused endpoint: ANY /predictions"}, "properties": {"repobilityId": "6ba46ac141c616fd", "scanner": "scanner-primary", "fingerprint": "8b2b5f9bf7d87c08", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-789044ee88aa0846", "level": "note", "message": {"text": "Unused endpoint: ANY /api/predictions"}, "properties": {"repobilityId": "e6857a80a3b51d9a", "scanner": "scanner-primary", "fingerprint": "789044ee88aa0846", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2c8575ca5d3e67fe", "level": "note", "message": {"text": "Unused endpoint: ANY /api/reports/<path:filename>"}, "properties": {"repobilityId": "8d00b33aad4b3820", "scanner": "scanner-primary", "fingerprint": "2c8575ca5d3e67fe", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}