{"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": "foundry_unresolved_feedback", "name": "Foundry mined unresolved feedback: StephPonce/oubon_mailbot", "shortDescription": {"text": "Foundry mined unresolved feedback: StephPonce/oubon_mailbot"}, "fullDescription": {"text": "Graph query export: Human feedback without linked fix evidence\nQuery id: unresolved_feedback\nQuery type: motif_query\nIntent: Negative/unresolved examples that should not be hallucinated into fixes.\nMotif: unlinked_feedback_needs_evidence\nTraining usage: negative_or_unresolved\nGraph gold label: needs_more_evidence\nRepo: StephPonce/oubon_mailbot\nThread: StephPonce/oubon_mailbot#2\nEvidence:\nGraph motif: Human feedback exists without a linked fix\nMotif id: unlinked_feedback_needs_evidence\nPolarity: bad\nTraining usage: negative_or_unresolved\nSeverity: medium\nRepo: StephPonce/oubon_mailbot\nThread: StephPonce/oubon_mailbot#2\nGraph gold label: needs_more_evidence\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: StephPonce/oubon_mailbot#2\nRepo: StephPonce/oubon_mailbot\nIssue/PR number: 2\nGraph consistency label: needs_more_evidence\nNodes: 12\nEdges: 20\nNode types: {'pr_file': 3, 'link_quality': 3, 'thread': 1, 'repo': 1, 'comment': 1, 'comment_chain': 1, 'issue_chain': 1, 'fix_ou"}, "properties": {"scanner": "foundry_dataset", "category": "practices", "severity": "medium", "confidence": 0.7, "cwe": "", "owasp": ""}}, {"id": "foundry_assumption_check", "name": "Foundry mined assumption checks: StephPonce/oubon_mailbot", "shortDescription": {"text": "Foundry mined assumption checks: StephPonce/oubon_mailbot"}, "fullDescription": {"text": "Comment chain pattern product: assumption_checks\nRepo: StephPonce/oubon_mailbot\nThread: StephPonce/oubon_mailbot#2\nOutcome: ambiguous_needs_more_evidence\nThread label: thread_needs_classification\nSource graph label: source_backed_multi_signal_graph\nReasons: source_graph_has_real_artifacts, source_graph_has_verification_artifacts, repo_has_isolated_helicopter_views, link_quality_unresolved\nChain evidence:\nIssue/PR evidence chain: StephPonce/oubon_mailbot#2\nRepo: StephPonce/oubon_mailbot\nThread label: thread_needs_classification\nOutcome: ambiguous_needs_more_evidence\nComment count: 1\nLinked commit count: 0\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 3\nLabels: {'human_feedback_general': 1}\nPolarities: {'neutral': 1}\nChanged file labels: {'docs_or_claims': 3}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-fe2a6e3d132c19f3\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"human_feedback_general\",\n    \"polarity\": \"neutral\",\n    \"url\": \"https://github.com/StephPonce/"}, "properties": {"scanner": "foundry_dataset", "category": "practices", "severity": "medium", "confidence": 0.62, "cwe": "", "owasp": ""}}, {"id": "foundry_failing_ci_claim", "name": "Foundry mined claimed resolved with failing ci: StephPonce/oubon_mailbot", "shortDescription": {"text": "Foundry mined claimed resolved with failing ci: StephPonce/oubon_mailbot"}, "fullDescription": {"text": "Graph query export: Claimed resolved with failing CI\nQuery id: claimed_resolved_with_failing_ci\nQuery type: motif_query\nIntent: Hard negatives where CI/failure evidence contradicts a resolution claim.\nMotif: claimed_resolved_with_failing_ci\nTraining usage: hard_negative\nGraph gold label: contradicted_by_ci_or_failure_signal\nRepo: StephPonce/oubon_mailbot\nThread: StephPonce/oubon_mailbot#1\nEvidence:\nGraph motif: Claimed resolved while CI or failure evidence contradicts it\nMotif id: claimed_resolved_with_failing_ci\nPolarity: bad\nTraining usage: hard_negative\nSeverity: critical\nRepo: StephPonce/oubon_mailbot\nThread: StephPonce/oubon_mailbot#1\nGraph gold label: contradicted_by_ci_or_failure_signal\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: StephPonce/oubon_mailbot#1\nRepo: StephPonce/oubon_mailbot\nIssue/PR number: 1\nGraph consistency label: contradicted_by_ci_or_failure_signal\nNodes: 111\nEdges: 137\nNode types: {'pr_file': 100, 'link_quality': 3, 'thread': 1, 'repo': 1,"}, "properties": {"scanner": "foundry_dataset", "category": "ci", "severity": "critical", "confidence": 0.86, "cwe": "", "owasp": ""}}, {"id": "scanner-5bdf52cc26771c6a", "name": "Possibly dead Python function: process_emails_background", "shortDescription": {"text": "Possibly dead Python function: process_emails_background"}, "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-552f0b17f2632001", "name": "Possibly dead Python function: clear_expired_cache", "shortDescription": {"text": "Possibly dead Python function: clear_expired_cache"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-914c333ea987ed7b", "name": "Possibly dead Python function: smart_check_emails_job", "shortDescription": {"text": "Possibly dead Python function: smart_check_emails_job"}, "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-cecc695269c932a9", "name": "Possibly dead Python function: is_quiet_hours", "shortDescription": {"text": "Possibly dead Python function: is_quiet_hours"}, "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-0eea6e8628af19ac", "name": "Possibly dead Python function: monitoring_task", "shortDescription": {"text": "Possibly dead Python function: monitoring_task"}, "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-ad3290ba788aef86", "name": "Possibly dead Python function: create_inbound_shipment_plan", "shortDescription": {"text": "Possibly dead Python function: create_inbound_shipment_plan"}, "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-0741027803f6c30c", "name": "Possibly dead Python function: create_report", "shortDescription": {"text": "Possibly dead Python function: create_report"}, "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-fc48ffaddcb933c8", "name": "Possibly dead Python function: check_inventory", "shortDescription": {"text": "Possibly dead Python function: check_inventory"}, "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-81054b12b9cb0872", "name": "Possibly dead Python function: delete_campaign", "shortDescription": {"text": "Possibly dead Python function: delete_campaign"}, "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-9a5a8027f3e4240c", "name": "Possibly dead Python function: search_cj_products", "shortDescription": {"text": "Possibly dead Python function: search_cj_products"}, "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-84117a213f18248b", "name": "Possibly dead Python function: search_cj_by_niche", "shortDescription": {"text": "Possibly dead Python function: search_cj_by_niche"}, "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-77461d5fed5832ec", "name": "Possibly dead Python function: bulk_fulfill", "shortDescription": {"text": "Possibly dead Python function: bulk_fulfill"}, "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-a608431476508240", "name": "Possibly dead Python function: create_and_publish_product", "shortDescription": {"text": "Possibly dead Python function: create_and_publish_product"}, "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-8139ae984d3dc91d", "name": "Possibly dead Python function: log_login_failure", "shortDescription": {"text": "Possibly dead Python function: log_login_failure"}, "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-57fea84871f1ae30", "name": "Possibly dead Python function: log_token_refresh", "shortDescription": {"text": "Possibly dead Python function: log_token_refresh"}, "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-8d2e856348abc933", "name": "Possibly dead Python function: log_logout", "shortDescription": {"text": "Possibly dead Python function: log_logout"}, "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-a01897d3eea77574", "name": "Possibly dead Python function: log_suspicious_activity", "shortDescription": {"text": "Possibly dead Python function: log_suspicious_activity"}, "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-bfdf960d4a60650e", "name": "Possibly dead Python function: log_permission_denied", "shortDescription": {"text": "Possibly dead Python function: log_permission_denied"}, "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-92eedcf889c44ca2", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/Settings.jsx:130", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/Settings.jsx:130"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-57a1087224c7abcf", "name": "Stray `console.log` in TS/JS \u2014 frontend/src/components/OiChat.jsx:96", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 frontend/src/components/OiChat.jsx:96"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ec493f78430de307", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/ProductDiscovery.jsx:1149", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/ProductDiscovery.jsx:1149"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b63caa889a38de66", "name": "Stray `console.log` in TS/JS \u2014 frontend/src/components/ProductDiscovery.jsx:1515", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 frontend/src/components/ProductDiscovery.jsx:1515"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b7c37933a8a1fbe2", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/Dashboard.jsx:158", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/Dashboard.jsx:158"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b7e651b9dc5befaa", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/Stores.jsx:236", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/Stores.jsx:236"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a4bcc0b59ff4b6a2", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/Layout.jsx:132", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/Layout.jsx:132"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f058379b68f23ef8", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/Scoreboard.jsx:200", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/Scoreboard.jsx:200"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-df5c7baef329bfbf", "name": "TODO/FIXME marker in shipping code \u2014 frontend/src/hooks/useDashboardContext.jsx:270", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 frontend/src/hooks/useDashboardContext.jsx:270"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e4526f1e303674e2", "name": "Stray `console.log` in TS/JS \u2014 frontend/src/hooks/useDashboardContext.jsx:319", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 frontend/src/hooks/useDashboardContext.jsx:319"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c0ffe0347503a801", "name": "Stray `console.log` in TS/JS \u2014 frontend/src/services/auth.js:210", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 frontend/src/services/auth.js:210"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-95ebf9d95f072efe", "name": "Stray `console.log` in TS/JS \u2014 frontend/src/services/api.js:374", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 frontend/src/services/api.js:374"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9d5b6bdb73f43e44", "name": "Stray `console.log` in TS/JS \u2014 docs/archive/frontend_visual_audit_dec2025/visual_audit.ts:134", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 docs/archive/frontend_visual_audit_dec2025/visual_audit.ts:134"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b89d0f7377681b22", "name": "Stray `console.log` in TS/JS \u2014 docs/archive/frontend_visual_audit_dec2025/list_models.ts:17", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 docs/archive/frontend_visual_audit_dec2025/list_models.ts:17"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d9668382f1ef3fca", "name": "Stray `console.log` in TS/JS \u2014 tools/tiktok-demo/server.js:1152", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/tiktok-demo/server.js:1152"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-fd55ee5239959ff1", "name": "Privileged port 13 in use", "shortDescription": {"text": "Privileged port 13 in use"}, "fullDescription": {"text": "Port 13 is privileged (<1024). Make sure the service runs with the right caps or front it with a non-privileged port via a load balancer."}, "properties": {"scanner": "scanner-primary", "layer": "network", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d63da3583b14afc0", "name": "Dockerfile runs as root: Dockerfile", "shortDescription": {"text": "Dockerfile runs as root: Dockerfile"}, "fullDescription": {"text": "No non-root USER set. Containers running as root expand the blast radius of any vulnerability inside the image."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-de3c1f217d72a063", "name": "Docker base image is tag-pinned but not digest-pinned: python:3.12-slim", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: python:3.12-slim"}, "fullDescription": {"text": "Container tags can be retagged upstream. Pin production base images to a reviewed digest (`image@sha256:...`) when reproducibility and supply-chain integrity matter."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-aa5acaa49eb8315b", "name": "Containers defined but no K8s/orchestration manifest found", "shortDescription": {"text": "Containers defined but no K8s/orchestration manifest found"}, "fullDescription": {"text": "Repo has Dockerfiles/compose but no Kubernetes/Nomad manifests. If the target deployment is K8s, the manifests may live in a separate ops repo."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7f81c9c17190c0bc", "name": "Insecure pattern 'direct_innerhtml_assignment' in static/dashboard.html:592", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in static/dashboard.html:592"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6b775fc689b1219a", "name": "Insecure pattern 'direct_innerhtml_assignment' in static/tiktok_demo.html:992", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in static/tiktok_demo.html:992"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-71e91776e969096c", "name": "Insecure pattern 'local_storage_auth_token' in static/tiktok_demo.html:873", "shortDescription": {"text": "Insecure pattern 'local_storage_auth_token' in static/tiktok_demo.html:873"}, "fullDescription": {"text": "Found a known-risky pattern (local_storage_auth_token). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2a88b4f401b57d06", "name": "Insecure pattern 'direct_innerhtml_assignment' in static/tiktok_oauth_callback.html:206", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in static/tiktok_oauth_callback.html:206"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9af47408cc17cc81", "name": "Insecure pattern 'local_storage_auth_token' in static/tiktok_oauth_callback.html:197", "shortDescription": {"text": "Insecure pattern 'local_storage_auth_token' in static/tiktok_oauth_callback.html:197"}, "fullDescription": {"text": "Found a known-risky pattern (local_storage_auth_token). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e4a32c79a3966b0b", "name": "Insecure pattern 'weak_hash' in ospra_os/api/aliexpress_oauth.py:203", "shortDescription": {"text": "Insecure pattern 'weak_hash' in ospra_os/api/aliexpress_oauth.py:203"}, "fullDescription": {"text": "Found a known-risky pattern (weak_hash). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0d327aa9894239f2", "name": "Insecure pattern 'weak_hash' in ospra_os/api/aliexpress_affiliate_oauth.py:178", "shortDescription": {"text": "Insecure pattern 'weak_hash' in ospra_os/api/aliexpress_affiliate_oauth.py:178"}, "fullDescription": {"text": "Found a known-risky pattern (weak_hash). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-cd5f2a280fdaad8d", "name": "Insecure pattern 'direct_innerhtml_assignment' in website/demo/index.html:992", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in website/demo/index.html:992"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ebe92298edb95c8a", "name": "Insecure pattern 'local_storage_auth_token' in website/demo/index.html:873", "shortDescription": {"text": "Insecure pattern 'local_storage_auth_token' in website/demo/index.html:873"}, "fullDescription": {"text": "Found a known-risky pattern (local_storage_auth_token). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-eb4396ac9a3ce7ce", "name": "Insecure pattern 'direct_innerhtml_assignment' in website/auth/tiktok/callback.html:206", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in website/auth/tiktok/callback.html:206"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-171cd94316399b01", "name": "Insecure pattern 'local_storage_auth_token' in website/auth/tiktok/callback.html:197", "shortDescription": {"text": "Insecure pattern 'local_storage_auth_token' in website/auth/tiktok/callback.html:197"}, "fullDescription": {"text": "Found a known-risky pattern (local_storage_auth_token). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-8bb29cb6204b17f5", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ae85a7a6091a6ac4", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-38634e196a8b1ccd", "name": "GitHub Actions workflow grants broad write permissions", "shortDescription": {"text": "GitHub Actions workflow grants broad write permissions"}, "fullDescription": {"text": "CI tokens with write permissions increase blast radius when an action, dependency, or PR workflow is compromised. Prefer job-level least-privilege permissions."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-975f27e3804c7491", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-56696c269185bd2e", "name": "Very large file: frontend/src/components/ProductDiscovery.jsx (3613 lines)", "shortDescription": {"text": "Very large file: frontend/src/components/ProductDiscovery.jsx (3613 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-e0f2d4d477ba88d1", "name": "Very large file: archive/legacy_mailbot/main.py (1649 lines)", "shortDescription": {"text": "Very large file: archive/legacy_mailbot/main.py (1649 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-b9f7128c70151bdd", "name": "Very large file: ospra_os/main.py (4954 lines)", "shortDescription": {"text": "Very large file: ospra_os/main.py (4954 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-102c1f8feedf1498", "name": "Very large file: ospra_os/api/aliexpress_product_routes.py (1353 lines)", "shortDescription": {"text": "Very large file: ospra_os/api/aliexpress_product_routes.py (1353 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-b10f5177d03fadc6", "name": "Very large file: ospra_os/intelligence/product_discovery.py (7053 lines)", "shortDescription": {"text": "Very large file: ospra_os/intelligence/product_discovery.py (7053 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-112fd8ceef4fd106", "name": "Very large file: ospra_os/intelligence/unified_discovery_routes.py (1751 lines)", "shortDescription": {"text": "Very large file: ospra_os/intelligence/unified_discovery_routes.py (1751 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-2990f438dab63365", "name": "Very large file: ospra_os/product_research/multi_source_discovery.py (1873 lines)", "shortDescription": {"text": "Very large file: ospra_os/product_research/multi_source_discovery.py (1873 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-d4e7359bcfc4c057", "name": "Very large file: ospra_os/product_research/connectors/social/xai_twitter.py (1441 lines)", "shortDescription": {"text": "Very large file: ospra_os/product_research/connectors/social/xai_twitter.py (1441 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ea3b5e389d8c9c0f", "name": "Low test-to-source ratio", "shortDescription": {"text": "Low test-to-source ratio"}, "fullDescription": {"text": "120 tests / 572 src (ratio 0.21)."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c6cf08c4a9cc087c", "name": "181 TODO/FIXME markers", "shortDescription": {"text": "181 TODO/FIXME markers"}, "fullDescription": {"text": "High count of TODO/FIXME/HACK markers \u2014 track them as issues so they're not forgotten."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-141b30a41e03817b", "name": "No license file detected", "shortDescription": {"text": "No license file detected"}, "fullDescription": {"text": "No LICENSE/COPYING/NOTICE file was found. Generated repositories often omit licensing, which blocks reuse and automated intake."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3ab5d313dda8e5f9", "name": "Debug logging residue appears in source files", "shortDescription": {"text": "Debug logging residue appears in source files"}, "fullDescription": {"text": "Found 2655 console/debugger/print-style debug statements in non-test source. This is a common fast-generation residue before production cleanup."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-72b2a6250083a784", "name": "Placeholder or mock-heavy implementation detected", "shortDescription": {"text": "Placeholder or mock-heavy implementation detected"}, "fullDescription": {"text": "Found 241 placeholder/mock markers across 90 source files. This often means the repo looks complete while core flows still use generated scaffolding or fake data."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9d79c4077342a7d0", "name": "Runtime service client appears to use placeholder configuration", "shortDescription": {"text": "Runtime service client appears to use placeholder configuration"}, "fullDescription": {"text": "A runtime source file appears to wire Supabase/Firebase/AI/payment-style clients to placeholder URLs, keys, or fallback values. In the Fable corpus this often means the UI/API shape is present while the backend service is not actually configured."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2d0c7b7ab8f8aacf", "name": "Critical user flow still appears backed by mock or placeholder data", "shortDescription": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "fullDescription": {"text": "A payment/auth/admin/order/billing-style flow contains mock, fake, TODO, dummy, or placeholder markers in runtime source. In the Fable corpus this is a high-leverage completeness smell: the app can look finished while the money, identity, or tenant flow is still scaffolded."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-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. Treat this as a contract gap: the agent is guided, but the generated output is not yet guarded by the controls that make it repeatable."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ea8f3013f588db25", "name": "Shallow git history limits provenance confidence", "shortDescription": {"text": "Shallow git history limits provenance confidence"}, "fullDescription": {"text": "The repository is a shallow clone. Origin/evolution analysis cannot distinguish fresh generation, imported legacy code, or long-lived human code with high confidence."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8424db9c75e04ba4", "name": "Very short observed git history", "shortDescription": {"text": "Very short observed git history"}, "fullDescription": {"text": "The repo has multiple source files but two or fewer visible commits. This is not a failure by itself, but it lowers confidence in evolution-based diagnosis."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b2b7b2761415ae64", "name": "Agent authority lacks a verifier contract: .claude/projects/-Users-stephenponce-Documents-Ospra-OS-Bots-Ospra-OS/memory/", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/projects/-Users-stephenponce-Documents-Ospra-OS-Bots-Ospra-OS/memory/discovery-open-diagnostics.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3de186cb6942d523", "name": "Commented-code block (5 lines) in frontend/vite.config.js:16", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/vite.config.js:16"}, "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-e664517e531ae68b", "name": "Commented-code block (6 lines) in frontend/src/App.jsx:21", "shortDescription": {"text": "Commented-code block (6 lines) in frontend/src/App.jsx:21"}, "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-6e6deb4fa0bf07a0", "name": "Legacy-named symbol `ad_copy` in frontend/src/components/ProductDiscovery.jsx:2561", "shortDescription": {"text": "Legacy-named symbol `ad_copy` in frontend/src/components/ProductDiscovery.jsx:2561"}, "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-3783121a0fae6cd7", "name": "Commented-code block (5 lines) in frontend/src/components/ProductDiscovery.jsx:30", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/components/ProductDiscovery.jsx:30"}, "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-15a98b6399f69fc4", "name": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/components/ProductDiscovery.jsx:3100", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/components/ProductDiscovery.jsx:3100"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c9dc26aa942792f2", "name": "Legacy-named symbol `ospra_products_v1` in frontend/src/components/OnboardingChecklist.jsx:8", "shortDescription": {"text": "Legacy-named symbol `ospra_products_v1` in frontend/src/components/OnboardingChecklist.jsx: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-85c2937d9cfdecf9", "name": "Commented-code block (13 lines) in frontend/src/components/auth/LoginForm.jsx:35", "shortDescription": {"text": "Commented-code block (13 lines) in frontend/src/components/auth/LoginForm.jsx:35"}, "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-6d866e37b0e31456", "name": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/services/auth.js:15", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/services/auth.js:15"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6197e3d56b6abdf4", "name": "Commented-code block (6 lines) in frontend/src/services/api.js:344", "shortDescription": {"text": "Commented-code block (6 lines) in frontend/src/services/api.js:344"}, "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-6eef1b62b3e758ec", "name": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/services/api.js:43", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/services/api.js:43"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-92a976de4a63ec86", "name": "Legacy-named symbol `product_intelligence_v2` in archive/legacy_mailbot/main.py:942", "shortDescription": {"text": "Legacy-named symbol `product_intelligence_v2` in archive/legacy_mailbot/main.py:942"}, "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-c413960307c18c74", "name": "Commented-code block (6 lines) in archive/legacy_mailbot/main.py:760", "shortDescription": {"text": "Commented-code block (6 lines) in archive/legacy_mailbot/main.py:760"}, "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-aaca68bec6564a49", "name": "Network/subprocess call without timeout or try/except \u2014 archive/legacy_mailbot/main.py:440", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 archive/legacy_mailbot/main.py:440"}, "fullDescription": {"text": "`requests.get(...)` 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-db1718351f8891d7", "name": "Commented-code block (5 lines) in archive/legacy_mailbot/app/email_processor.py:168", "shortDescription": {"text": "Commented-code block (5 lines) in archive/legacy_mailbot/app/email_processor.py:168"}, "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-8ee2c4cf5b68904c", "name": "Legacy-named symbol `too_old` in tests/test_webhook_verification.py:156", "shortDescription": {"text": "Legacy-named symbol `too_old` in tests/test_webhook_verification.py:156"}, "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-aff3e20f1ce28a88", "name": "Commented-code block (7 lines) in tests/conftest.py:61", "shortDescription": {"text": "Commented-code block (7 lines) in tests/conftest.py:61"}, "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-6cfbec1ddc524765", "name": "Legacy-named symbol `ad_copy` in tests/test_marketing_angles.py:245", "shortDescription": {"text": "Legacy-named symbol `ad_copy` in tests/test_marketing_angles.py:245"}, "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-ab769e9e207ba634", "name": "Commented-code block (7 lines) in tests/test_differentiation.py:52", "shortDescription": {"text": "Commented-code block (7 lines) in tests/test_differentiation.py:52"}, "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-78f8a33974f6cf13", "name": "Legacy-named symbol `test_decrypt_with_wrong_key_falls_back_to_legacy` in tests/test_credential_encryption.py:223", "shortDescription": {"text": "Legacy-named symbol `test_decrypt_with_wrong_key_falls_back_to_legacy` in tests/test_credential_encryption.py:223"}, "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-a5fe7f66e5c3b058", "name": "Commented-code block (5 lines) in tests/integration/test_tenant_isolation_scaffold.py:76", "shortDescription": {"text": "Commented-code block (5 lines) in tests/integration/test_tenant_isolation_scaffold.py:76"}, "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-d4fa730567b5d05c", "name": "Commented-code block (8 lines) in tests/unit/test_action_executor.py:164", "shortDescription": {"text": "Commented-code block (8 lines) in tests/unit/test_action_executor.py:164"}, "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-98c1764abf9b9a69", "name": "Legacy-named symbol `dashboard_v2` in ospra_os/main.py:2029", "shortDescription": {"text": "Legacy-named symbol `dashboard_v2` in ospra_os/main.py:2029"}, "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-90690ee38a9cbf3d", "name": "Commented-code block (8 lines) in ospra_os/main.py:9", "shortDescription": {"text": "Commented-code block (8 lines) in ospra_os/main.py:9"}, "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-16cc94f309edad00", "name": "Blocking `time.sleep(...)` inside `async def _run_startup_deferred` \u2014 ospra_os/main.py:1499", "shortDescription": {"text": "Blocking `time.sleep(...)` inside `async def _run_startup_deferred` \u2014 ospra_os/main.py:1499"}, "fullDescription": {"text": "Sync I/O inside an async function blocks the event loop. While `time.sleep(...)` is running, *all* other coroutines on this loop are paused \u2014 silent throughput collapse under concurrency. Use the async equivalent (`httpx.AsyncClient`, `asyncio.sleep`, `aiofiles`) or wrap with `await asyncio.to_thread(...)`."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d8a110ec9e4e6215", "name": "Commented-code block (6 lines) in ospra_os/integrations/tiktok_client.py:15", "shortDescription": {"text": "Commented-code block (6 lines) in ospra_os/integrations/tiktok_client.py:15"}, "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-6393c02922a4c592", "name": "Legacy-named symbol `generate_ad_copy` in ospra_os/integrations/meta/ad_generator.py:17", "shortDescription": {"text": "Legacy-named symbol `generate_ad_copy` in ospra_os/integrations/meta/ad_generator.py:17"}, "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-fb63e36757b55480", "name": "Legacy-named symbol `generate_ad_copy` in ospra_os/integrations/meta/campaign_builder.py:48", "shortDescription": {"text": "Legacy-named symbol `generate_ad_copy` in ospra_os/integrations/meta/campaign_builder.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-68fbba86b0913ea3", "name": "Commented-code block (8 lines) in ospra_os/integrations/cj_dropshipping/client.py:385", "shortDescription": {"text": "Commented-code block (8 lines) in ospra_os/integrations/cj_dropshipping/client.py:385"}, "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-465329cca154d90d", "name": "Commented-code block (5 lines) in ospra_os/security/auth_logger.py:84", "shortDescription": {"text": "Commented-code block (5 lines) in ospra_os/security/auth_logger.py:84"}, "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-35a982ccaabce6a4", "name": "Commented-code block (6 lines) in ospra_os/security/rate_limiting.py:145", "shortDescription": {"text": "Commented-code block (6 lines) in ospra_os/security/rate_limiting.py:145"}, "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-ba083bf63bde6259", "name": "Commented-code block (5 lines) in ospra_os/security/gdpr.py:279", "shortDescription": {"text": "Commented-code block (5 lines) in ospra_os/security/gdpr.py:279"}, "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-68f8ab4d90d2c52f", "name": "Commented-code block (7 lines) in ospra_os/platforms/amazon.py:336", "shortDescription": {"text": "Commented-code block (7 lines) in ospra_os/platforms/amazon.py:336"}, "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-ba12e2f3aa77ed2c", "name": "Legacy-named symbol `auto_fulfillment_v1` in ospra_os/fulfillment/routes.py:67", "shortDescription": {"text": "Legacy-named symbol `auto_fulfillment_v1` in ospra_os/fulfillment/routes.py:67"}, "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-44a74558858afe5c", "name": "Legacy-named symbol `ad_copy` in ospra_os/ai/model_router.py:192", "shortDescription": {"text": "Legacy-named symbol `ad_copy` in ospra_os/ai/model_router.py:192"}, "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-105a32f443992ca4", "name": "Commented-code block (7 lines) in ospra_os/ai/providers/groq_provider.py:29", "shortDescription": {"text": "Commented-code block (7 lines) in ospra_os/ai/providers/groq_provider.py:29"}, "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-e1eeb5b4ed91e65b", "name": "Commented-code block (7 lines) in ospra_os/ai/providers/gemini.py:18", "shortDescription": {"text": "Commented-code block (7 lines) in ospra_os/ai/providers/gemini.py:18"}, "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-6ed808766e0f74a1", "name": "Commented-code block (6 lines) in ospra_os/ai/providers/claude.py:318", "shortDescription": {"text": "Commented-code block (6 lines) in ospra_os/ai/providers/claude.py:318"}, "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-fa528ea84b4b1e35", "name": "Legacy-named symbol `ad_copy` in ospra_os/testing/routes.py:36", "shortDescription": {"text": "Legacy-named symbol `ad_copy` in ospra_os/testing/routes.py:36"}, "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-18278b97369d1444", "name": "Legacy-named symbol `ad_copy` in ospra_os/testing/ab_test_engine.py:35", "shortDescription": {"text": "Legacy-named symbol `ad_copy` in ospra_os/testing/ab_test_engine.py:35"}, "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-2f234a21d948f750", "name": "Legacy-named symbol `control_copy` in ospra_os/testing/ad_test_manager.py:123", "shortDescription": {"text": "Legacy-named symbol `control_copy` in ospra_os/testing/ad_test_manager.py:123"}, "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-48e3048a4e18a2b5", "name": "Commented-code block (5 lines) in ospra_os/auth/routes.py:593", "shortDescription": {"text": "Commented-code block (5 lines) in ospra_os/auth/routes.py:593"}, "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-6541fab0513c5f21", "name": "Commented-code block (6 lines) in ospra_os/auth/jwt_auth.py:60", "shortDescription": {"text": "Commented-code block (6 lines) in ospra_os/auth/jwt_auth.py:60"}, "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-188151da1ecfbe44", "name": "Commented-code block (5 lines) in ospra_os/middleware/rate_limiter.py:33", "shortDescription": {"text": "Commented-code block (5 lines) in ospra_os/middleware/rate_limiter.py:33"}, "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-21d04e53b0dbafcf", "name": "Commented-code block (9 lines) in ospra_os/middleware/timeout_middleware.py:44", "shortDescription": {"text": "Commented-code block (9 lines) in ospra_os/middleware/timeout_middleware.py:44"}, "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-5c617b2cba31b86a", "name": "Blocking `requests.get(...)` inside `async def _generate_mock` \u2014 ospra_os/media/ai_image_generator.py:398", "shortDescription": {"text": "Blocking `requests.get(...)` inside `async def _generate_mock` \u2014 ospra_os/media/ai_image_generator.py:398"}, "fullDescription": {"text": "Sync I/O inside an async function blocks the event loop. While `requests.get(...)` is running, *all* other coroutines on this loop are paused \u2014 silent throughput collapse under concurrency. Use the async equivalent (`httpx.AsyncClient`, `asyncio.sleep`, `aiofiles`) or wrap with `await asyncio.to_thread(...)`."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9e527cc59a51f42c", "name": "Blocking `requests.get(...)` inside `async def _download_and_save` \u2014 ospra_os/media/ai_image_generator.py:412", "shortDescription": {"text": "Blocking `requests.get(...)` inside `async def _download_and_save` \u2014 ospra_os/media/ai_image_generator.py:412"}, "fullDescription": {"text": "Sync I/O inside an async function blocks the event loop. While `requests.get(...)` is running, *all* other coroutines on this loop are paused \u2014 silent throughput collapse under concurrency. Use the async equivalent (`httpx.AsyncClient`, `asyncio.sleep`, `aiofiles`) or wrap with `await asyncio.to_thread(...)`."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ddb860178394daa6", "name": "Commented-code block (7 lines) in ospra_os/api/product_analysis_routes.py:58", "shortDescription": {"text": "Commented-code block (7 lines) in ospra_os/api/product_analysis_routes.py:58"}, "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-73f93ce8309b6370", "name": "Commented-code block (5 lines) in ospra_os/api/webhook_routes.py:57", "shortDescription": {"text": "Commented-code block (5 lines) in ospra_os/api/webhook_routes.py:57"}, "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-b034e7959d3b5924", "name": "Legacy-named symbol `shopify_legacy` in ospra_os/api/shopify_routes.py:64", "shortDescription": {"text": "Legacy-named symbol `shopify_legacy` in ospra_os/api/shopify_routes.py:64"}, "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-ed4d3980a6af7b60", "name": "Commented-code block (7 lines) in ospra_os/api/shopify_routes.py:39", "shortDescription": {"text": "Commented-code block (7 lines) in ospra_os/api/shopify_routes.py:39"}, "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-866d40b187ddcf55", "name": "Commented-code block (5 lines) in ospra_os/api/shopify_oauth_routes.py:51", "shortDescription": {"text": "Commented-code block (5 lines) in ospra_os/api/shopify_oauth_routes.py:51"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-90d66adc881bda55", "name": "Commented-code block (7 lines) in ospra_os/api/deployment_routes.py:82", "shortDescription": {"text": "Commented-code block (7 lines) in ospra_os/api/deployment_routes.py:82"}, "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-0b276b417260c448", "name": "Legacy-named symbol `generate_ad_copy` in ospra_os/api/ml_routes.py:276", "shortDescription": {"text": "Legacy-named symbol `generate_ad_copy` in ospra_os/api/ml_routes.py:276"}, "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-b5bf9be6e559d1e7", "name": "Commented-code block (6 lines) in ospra_os/api/ml_routes.py:172", "shortDescription": {"text": "Commented-code block (6 lines) in ospra_os/api/ml_routes.py:172"}, "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-f7c2d5f6dd19d455", "name": "Network/subprocess call without timeout or try/except \u2014 ospra_os/api/ml_routes.py:173", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 ospra_os/api/ml_routes.py:173"}, "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-cff917107a6d9309", "name": "Commented-code block (6 lines) in ospra_os/api/frontend_compat_routes.py:243", "shortDescription": {"text": "Commented-code block (6 lines) in ospra_os/api/frontend_compat_routes.py:243"}, "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-09e45f6f33c99a6d", "name": "Commented-code block (11 lines) in ospra_os/api/subscription_routes.py:407", "shortDescription": {"text": "Commented-code block (11 lines) in ospra_os/api/subscription_routes.py:407"}, "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-ca9b566857a9b459", "name": "Legacy-named symbol `auto_fulfillment_v1` in ospra_os/api/fulfillment_routes.py:105", "shortDescription": {"text": "Legacy-named symbol `auto_fulfillment_v1` in ospra_os/api/fulfillment_routes.py:105"}, "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-d45d6e980f7ba7f3", "name": "Commented-code block (6 lines) in ospra_os/api/daily_brief_routes.py:98", "shortDescription": {"text": "Commented-code block (6 lines) in ospra_os/api/daily_brief_routes.py:98"}, "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-87a7ec8824810f9f", "name": "Legacy-named symbol `days_old` in ospra_os/intelligence/saturation_tracker.py:462", "shortDescription": {"text": "Legacy-named symbol `days_old` in ospra_os/intelligence/saturation_tracker.py:462"}, "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-ae8d2191a7cef6d2", "name": "Commented-code block (9 lines) in ospra_os/intelligence/product_discovery.py:58", "shortDescription": {"text": "Commented-code block (9 lines) in ospra_os/intelligence/product_discovery.py:58"}, "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-6010e3aacdeda404", "name": "Commented-code block (7 lines) in ospra_os/intelligence/sentiment_qualitative.py:134", "shortDescription": {"text": "Commented-code block (7 lines) in ospra_os/intelligence/sentiment_qualitative.py:134"}, "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-d5d000181b855a02", "name": "Commented-code block (5 lines) in ospra_os/intelligence/unified_discovery_routes.py:987", "shortDescription": {"text": "Commented-code block (5 lines) in ospra_os/intelligence/unified_discovery_routes.py:987"}, "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-b82ca88029830b60", "name": "Legacy-named symbol `ad_copy` in ospra_os/intelligence/smart_recommendations.py:206", "shortDescription": {"text": "Legacy-named symbol `ad_copy` in ospra_os/intelligence/smart_recommendations.py:206"}, "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-4e01396bfd687abd", "name": "Legacy-named symbol `days_old` in ospra_os/intelligence/opportunity_scorer.py:582", "shortDescription": {"text": "Legacy-named symbol `days_old` in ospra_os/intelligence/opportunity_scorer.py:582"}, "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-0cc922a7977cc4a3", "name": "Commented-code block (5 lines) in ospra_os/intelligence/sentiment_composite.py:284", "shortDescription": {"text": "Commented-code block (5 lines) in ospra_os/intelligence/sentiment_composite.py:284"}, "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-4d221412cad3ace3", "name": "Commented-code block (6 lines) in ospra_os/intelligence/demand_authenticity.py:67", "shortDescription": {"text": "Commented-code block (6 lines) in ospra_os/intelligence/demand_authenticity.py:67"}, "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-6a1bc5ef7ccf84dd", "name": "Commented-code block (6 lines) in ospra_os/intelligence/trend_analyzer.py:26", "shortDescription": {"text": "Commented-code block (6 lines) in ospra_os/intelligence/trend_analyzer.py:26"}, "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-e2ea0937dd86fd20", "name": "Commented-code block (5 lines) in ospra_os/intelligence/saturation_scorer.py:198", "shortDescription": {"text": "Commented-code block (5 lines) in ospra_os/intelligence/saturation_scorer.py:198"}, "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-ab785f47fc3d8c04", "name": "Commented-code block (7 lines) in ospra_os/intelligence/trend_trajectory.py:55", "shortDescription": {"text": "Commented-code block (7 lines) in ospra_os/intelligence/trend_trajectory.py:55"}, "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-f2e93ceb372dcfd7", "name": "Legacy-named symbol `ad_copy` in ospra_os/intelligence/marketing_angle_generator.py:180", "shortDescription": {"text": "Legacy-named symbol `ad_copy` in ospra_os/intelligence/marketing_angle_generator.py:180"}, "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-b151f4cb725f1d71", "name": "Commented-code block (6 lines) in ospra_os/intelligence/marketing_angle_generator.py:274", "shortDescription": {"text": "Commented-code block (6 lines) in ospra_os/intelligence/marketing_angle_generator.py:274"}, "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-91b10a5d8d6c4e9b", "name": "Commented-code block (5 lines) in ospra_os/intelligence/unified_context.py:318", "shortDescription": {"text": "Commented-code block (5 lines) in ospra_os/intelligence/unified_context.py:318"}, "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-f94946f46a170746", "name": "Commented-code block (7 lines) in ospra_os/intelligence/ai_product_analyzer.py:518", "shortDescription": {"text": "Commented-code block (7 lines) in ospra_os/intelligence/ai_product_analyzer.py:518"}, "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-58b2a0637e322ccb", "name": "Commented-code block (6 lines) in ospra_os/learning/summary_models.py:33", "shortDescription": {"text": "Commented-code block (6 lines) in ospra_os/learning/summary_models.py:33"}, "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-c328115906f3e2e5", "name": "Commented-code block (7 lines) in ospra_os/dashboard/routes.py:44", "shortDescription": {"text": "Commented-code block (7 lines) in ospra_os/dashboard/routes.py:44"}, "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-f4e9831b7d3f8ca2", "name": "Commented-code block (6 lines) in ospra_os/tenancy/brand.py:40", "shortDescription": {"text": "Commented-code block (6 lines) in ospra_os/tenancy/brand.py:40"}, "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-2a0a8702d5b016a9", "name": "Commented-code block (5 lines) in ospra_os/tenancy/queries.py:85", "shortDescription": {"text": "Commented-code block (5 lines) in ospra_os/tenancy/queries.py:85"}, "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-865d752d6b3dd251", "name": "Stub function `create_product` (body is just `pass`/`return`) \u2014 ospra_os/tenancy/audit.py:340", "shortDescription": {"text": "Stub function `create_product` (body is just `pass`/`return`) \u2014 ospra_os/tenancy/audit.py:340"}, "fullDescription": {"text": "Likely an AI scaffold that was never filled in. Remove or implement."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7dcfcaa5d5204e42", "name": "Commented-code block (5 lines) in ospra_os/email_automation/email_processor.py:210", "shortDescription": {"text": "Commented-code block (5 lines) in ospra_os/email_automation/email_processor.py:210"}, "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-0ee5fc366f0ed4eb", "name": "Stub function `set_tag` (body is just `pass`/`return`) \u2014 ospra_os/observability/error_tracking.py:336", "shortDescription": {"text": "Stub function `set_tag` (body is just `pass`/`return`) \u2014 ospra_os/observability/error_tracking.py:336"}, "fullDescription": {"text": "Likely an AI scaffold that was never filled in. Remove or implement."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-80ff3ca012604744", "name": "Commented-code block (7 lines) in ospra_os/oi/oi_service.py:181", "shortDescription": {"text": "Commented-code block (7 lines) in ospra_os/oi/oi_service.py:181"}, "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-43143ff6c9cc7059", "name": "Legacy-named symbol `ad_copy` in ospra_os/database/advertising_models.py:55", "shortDescription": {"text": "Legacy-named symbol `ad_copy` in ospra_os/database/advertising_models.py:55"}, "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-fa714a830c0d751b", "name": "Commented-code block (6 lines) in ospra_os/database/__init__.py:111", "shortDescription": {"text": "Commented-code block (6 lines) in ospra_os/database/__init__.py:111"}, "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-cd5ddfab331a1ff2", "name": "Commented-code block (7 lines) in ospra_os/database/federated_models.py:43", "shortDescription": {"text": "Commented-code block (7 lines) in ospra_os/database/federated_models.py:43"}, "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-10871b06abf24896", "name": "Legacy-named symbol `ad_copy` in ospra_os/database/testing_models.py:28", "shortDescription": {"text": "Legacy-named symbol `ad_copy` in ospra_os/database/testing_models.py:28"}, "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-6c5ca9004532025f", "name": "Commented-code block (10 lines) in ospra_os/database/template_models.py:73", "shortDescription": {"text": "Commented-code block (10 lines) in ospra_os/database/template_models.py:73"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-851544508f24a2d3", "name": "Commented-code block (5 lines) in ospra_os/database/connection.py:57", "shortDescription": {"text": "Commented-code block (5 lines) in ospra_os/database/connection.py:57"}, "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-6cfb983235f6a4e5", "name": "Stub function `endpoint` (body is just `pass`/`return`) \u2014 ospra_os/database/connection.py:14", "shortDescription": {"text": "Stub function `endpoint` (body is just `pass`/`return`) \u2014 ospra_os/database/connection.py:14"}, "fullDescription": {"text": "Likely an AI scaffold that was never filled in. Remove or implement."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-83f69b6e9d94ae2d", "name": "Commented-code block (5 lines) in ospra_os/product_research/routes.py:79", "shortDescription": {"text": "Commented-code block (5 lines) in ospra_os/product_research/routes.py:79"}, "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-b5ae4f3249f37003", "name": "Commented-code block (5 lines) in ospra_os/product_research/multi_source_discovery.py:262", "shortDescription": {"text": "Commented-code block (5 lines) in ospra_os/product_research/multi_source_discovery.py:262"}, "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-dd0bb16ecba74585", "name": "Commented-code block (10 lines) in ospra_os/product_research/connectors/base.py:46", "shortDescription": {"text": "Commented-code block (10 lines) in ospra_os/product_research/connectors/base.py:46"}, "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-687b7115ae536b0d", "name": "Commented-code block (5 lines) in ospra_os/product_research/connectors/apify/etsy_trending.py:55", "shortDescription": {"text": "Commented-code block (5 lines) in ospra_os/product_research/connectors/apify/etsy_trending.py:55"}, "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-96cd122e1a81f52e", "name": "Commented-code block (5 lines) in ospra_os/product_research/connectors/apify/meta_ads_library.py:56", "shortDescription": {"text": "Commented-code block (5 lines) in ospra_os/product_research/connectors/apify/meta_ads_library.py:56"}, "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-5f8aa098f4c76958", "name": "Commented-code block (6 lines) in ospra_os/product_research/connectors/apify/google_trends_apify.py:240", "shortDescription": {"text": "Commented-code block (6 lines) in ospra_os/product_research/connectors/apify/google_trends_apify.py:240"}, "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-203ed5bd9e04cd15", "name": "Commented-code block (10 lines) in ospra_os/product_research/connectors/apify/aliexpress_reviews.py:35", "shortDescription": {"text": "Commented-code block (10 lines) in ospra_os/product_research/connectors/apify/aliexpress_reviews.py:35"}, "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-bc9d9bf423e3c4a9", "name": "Commented-code block (7 lines) in ospra_os/product_research/connectors/apify/pinterest_trends.py:36", "shortDescription": {"text": "Commented-code block (7 lines) in ospra_os/product_research/connectors/apify/pinterest_trends.py:36"}, "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-4d62ba76c33ce023", "name": "Commented-code block (7 lines) in ospra_os/product_research/connectors/apify/base_apify.py:67", "shortDescription": {"text": "Commented-code block (7 lines) in ospra_os/product_research/connectors/apify/base_apify.py:67"}, "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-bbddbbd576f72292", "name": "Commented-code block (6 lines) in ospra_os/product_research/connectors/apify/tiktok_shop.py:19", "shortDescription": {"text": "Commented-code block (6 lines) in ospra_os/product_research/connectors/apify/tiktok_shop.py:19"}, "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-c88d971c7f3a81e7", "name": "Commented-code block (5 lines) in ospra_os/product_research/connectors/social/twitter.py:51", "shortDescription": {"text": "Commented-code block (5 lines) in ospra_os/product_research/connectors/social/twitter.py:51"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3825a80747bdcaea", "name": "Commented-code block (5 lines) in ospra_os/product_research/connectors/social/xai_twitter.py:589", "shortDescription": {"text": "Commented-code block (5 lines) in ospra_os/product_research/connectors/social/xai_twitter.py:589"}, "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-61a7199c0609a628", "name": "Blocking `requests.get(...)` inside `async def _search_affiliate` \u2014 ospra_os/product_research/connectors/suppliers/aliex", "shortDescription": {"text": "Blocking `requests.get(...)` inside `async def _search_affiliate` \u2014 ospra_os/product_research/connectors/suppliers/aliexpress.py:338"}, "fullDescription": {"text": "Sync I/O inside an async function blocks the event loop. While `requests.get(...)` is running, *all* other coroutines on this loop are paused \u2014 silent throughput collapse under concurrency. Use the async equivalent (`httpx.AsyncClient`, `asyncio.sleep`, `aiofiles`) or wrap with `await asyncio.to_thread(...)`."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f6963839fe15362e", "name": "Blocking `requests.get(...)` inside `async def _get_feed_products` \u2014 ospra_os/product_research/connectors/suppliers/alie", "shortDescription": {"text": "Blocking `requests.get(...)` inside `async def _get_feed_products` \u2014 ospra_os/product_research/connectors/suppliers/aliexpress.py:446"}, "fullDescription": {"text": "Sync I/O inside an async function blocks the event loop. While `requests.get(...)` is running, *all* other coroutines on this loop are paused \u2014 silent throughput collapse under concurrency. Use the async equivalent (`httpx.AsyncClient`, `asyncio.sleep`, `aiofiles`) or wrap with `await asyncio.to_thread(...)`."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e270770c43f9da16", "name": "Blocking `requests.get(...)` inside `async def search_by_category` \u2014 ospra_os/product_research/connectors/suppliers/alie", "shortDescription": {"text": "Blocking `requests.get(...)` inside `async def search_by_category` \u2014 ospra_os/product_research/connectors/suppliers/aliexpress.py:557"}, "fullDescription": {"text": "Sync I/O inside an async function blocks the event loop. While `requests.get(...)` is running, *all* other coroutines on this loop are paused \u2014 silent throughput collapse under concurrency. Use the async equivalent (`httpx.AsyncClient`, `asyncio.sleep`, `aiofiles`) or wrap with `await asyncio.to_thread(...)`."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c937c7f78af660ba", "name": "Blocking `requests.get(...)` inside `async def get_product_details` \u2014 ospra_os/product_research/connectors/suppliers/ali", "shortDescription": {"text": "Blocking `requests.get(...)` inside `async def get_product_details` \u2014 ospra_os/product_research/connectors/suppliers/aliexpress.py:633"}, "fullDescription": {"text": "Sync I/O inside an async function blocks the event loop. While `requests.get(...)` is running, *all* other coroutines on this loop are paused \u2014 silent throughput collapse under concurrency. Use the async equivalent (`httpx.AsyncClient`, `asyncio.sleep`, `aiofiles`) or wrap with `await asyncio.to_thread(...)`."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b438cfac024f4e8e", "name": "Commented-code block (5 lines) in ospra_os/tasks/action_tasks.py:60", "shortDescription": {"text": "Commented-code block (5 lines) in ospra_os/tasks/action_tasks.py:60"}, "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-d5b60d92d5efc69a", "name": "Commented-code block (9 lines) in ospra_os/tasks/sync_tasks.py:167", "shortDescription": {"text": "Commented-code block (9 lines) in ospra_os/tasks/sync_tasks.py:167"}, "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-d69c3deb950af44a", "name": "Commented-code block (6 lines) in ospra_os/tasks/email_tasks.py:56", "shortDescription": {"text": "Commented-code block (6 lines) in ospra_os/tasks/email_tasks.py:56"}, "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-3c7ab960921a4a04", "name": "Commented-code block (5 lines) in ospra_os/tasks/learning_tasks.py:167", "shortDescription": {"text": "Commented-code block (5 lines) in ospra_os/tasks/learning_tasks.py:167"}, "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-f2bffba4351da061", "name": "Commented-code block (7 lines) in ospra_os/tasks/analytics_tasks.py:117", "shortDescription": {"text": "Commented-code block (7 lines) in ospra_os/tasks/analytics_tasks.py:117"}, "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-21a002df6d0d1ca0", "name": "Commented-code block (7 lines) in ospra_os/tasks/base.py:110", "shortDescription": {"text": "Commented-code block (7 lines) in ospra_os/tasks/base.py:110"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cf98b2da972af16c", "name": "Commented-code block (5 lines) in ospra_os/tasks/feedback_tasks.py:306", "shortDescription": {"text": "Commented-code block (5 lines) in ospra_os/tasks/feedback_tasks.py:306"}, "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-dbfcc41992943802", "name": "Legacy-named symbol `dashboard_v2` in ospra_os/admin/routes.py:143", "shortDescription": {"text": "Legacy-named symbol `dashboard_v2` in ospra_os/admin/routes.py:143"}, "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-7c928222807489de", "name": "Commented-code block (6 lines) in ospra_os/deployment/unified_deployer.py:151", "shortDescription": {"text": "Commented-code block (6 lines) in ospra_os/deployment/unified_deployer.py:151"}, "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-ad81afbc19ca529b", "name": "Legacy-named symbol `generate_ad_copy` in ospra_os/ml/ai_client.py:24", "shortDescription": {"text": "Legacy-named symbol `generate_ad_copy` in ospra_os/ml/ai_client.py:24"}, "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-e61a071542533d30", "name": "Network/subprocess call without timeout or try/except \u2014 ospra_os/ml/ai_client.py:255", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 ospra_os/ml/ai_client.py:255"}, "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-fef971173690bf02", "name": "Legacy-named symbol `ad_copy` in ospra_os/ml/model_router.py:131", "shortDescription": {"text": "Legacy-named symbol `ad_copy` in ospra_os/ml/model_router.py:131"}, "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-24a16ef305df3b20", "name": "Legacy-named symbol `ad_copy` in ospra_os/ml/training_data.py:44", "shortDescription": {"text": "Legacy-named symbol `ad_copy` in ospra_os/ml/training_data.py:44"}, "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-45b93aa89023753f", "name": "Commented-code block (8 lines) in ospra_os/onboarding/stratosphere_onboarding.py:461", "shortDescription": {"text": "Commented-code block (8 lines) in ospra_os/onboarding/stratosphere_onboarding.py:461"}, "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-ea089a50c325ffe8", "name": "Commented-code block (5 lines) in ospra_os/payments/shopify_billing.py:63", "shortDescription": {"text": "Commented-code block (5 lines) in ospra_os/payments/shopify_billing.py:63"}, "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-391b199a3966b477", "name": "Commented-code block (5 lines) in ospra_os/services/shopify/oauth.py:34", "shortDescription": {"text": "Commented-code block (5 lines) in ospra_os/services/shopify/oauth.py:34"}, "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-d625d2afd38a9eee", "name": "Legacy-named symbol `ad_copy` in ospra_os/advertising/routes.py:170", "shortDescription": {"text": "Legacy-named symbol `ad_copy` in ospra_os/advertising/routes.py:170"}, "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-77e557b46844ad75", "name": "Legacy-named symbol `generate_ad_copy` in ospra_os/advertising/scheduler.py:178", "shortDescription": {"text": "Legacy-named symbol `generate_ad_copy` in ospra_os/advertising/scheduler.py:178"}, "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-6c693cd499a94d20", "name": "Legacy-named symbol `generate_ad_copy` in ospra_os/advertising/creative_generator.py:28", "shortDescription": {"text": "Legacy-named symbol `generate_ad_copy` in ospra_os/advertising/creative_generator.py:28"}, "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-09bebfe5b3e47945", "name": "Legacy-named symbol `ad_copy` in ospra_os/advertising/google/google_ads.py:25", "shortDescription": {"text": "Legacy-named symbol `ad_copy` in ospra_os/advertising/google/google_ads.py:25"}, "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-40461fd1dc5047b9", "name": "Legacy-named symbol `ad_copy` in ospra_os/advertising/meta/meta_ads.py:40", "shortDescription": {"text": "Legacy-named symbol `ad_copy` in ospra_os/advertising/meta/meta_ads.py:40"}, "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-d30e90912a837b36", "name": "Legacy-named symbol `ai_listing_copy` in ospra_os/core/tiers.py:92", "shortDescription": {"text": "Legacy-named symbol `ai_listing_copy` in ospra_os/core/tiers.py:92"}, "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-0a0045c2b5f7edf8", "name": "Commented-code block (5 lines) in ospra_os/core/settings.py:111", "shortDescription": {"text": "Commented-code block (5 lines) in ospra_os/core/settings.py:111"}, "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-2924a9f4fdd29c78", "name": "Commented-code block (5 lines) in ospra_os/aliexpress/routes.py:46", "shortDescription": {"text": "Commented-code block (5 lines) in ospra_os/aliexpress/routes.py:46"}, "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-d0142e9c4670309e", "name": "Blocking `requests.get(...)` inside `async def _scraper_api_request` \u2014 ospra_os/scraping/proxy_manager.py:69", "shortDescription": {"text": "Blocking `requests.get(...)` inside `async def _scraper_api_request` \u2014 ospra_os/scraping/proxy_manager.py:69"}, "fullDescription": {"text": "Sync I/O inside an async function blocks the event loop. While `requests.get(...)` is running, *all* other coroutines on this loop are paused \u2014 silent throughput collapse under concurrency. Use the async equivalent (`httpx.AsyncClient`, `asyncio.sleep`, `aiofiles`) or wrap with `await asyncio.to_thread(...)`."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "high", "confidence": 1.0}}, {"id": "scanner-54e2d5b02b031067", "name": "Blocking `requests.get(...)` inside `async def _free_proxy_request` \u2014 ospra_os/scraping/proxy_manager.py:93", "shortDescription": {"text": "Blocking `requests.get(...)` inside `async def _free_proxy_request` \u2014 ospra_os/scraping/proxy_manager.py:93"}, "fullDescription": {"text": "Sync I/O inside an async function blocks the event loop. While `requests.get(...)` is running, *all* other coroutines on this loop are paused \u2014 silent throughput collapse under concurrency. Use the async equivalent (`httpx.AsyncClient`, `asyncio.sleep`, `aiofiles`) or wrap with `await asyncio.to_thread(...)`."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "high", "confidence": 1.0}}, {"id": "scanner-57eb8c46ebc19c81", "name": "Blocking `requests.get(...)` inside `async def _free_proxy_request` \u2014 ospra_os/scraping/proxy_manager.py:121", "shortDescription": {"text": "Blocking `requests.get(...)` inside `async def _free_proxy_request` \u2014 ospra_os/scraping/proxy_manager.py:121"}, "fullDescription": {"text": "Sync I/O inside an async function blocks the event loop. While `requests.get(...)` is running, *all* other coroutines on this loop are paused \u2014 silent throughput collapse under concurrency. Use the async equivalent (`httpx.AsyncClient`, `asyncio.sleep`, `aiofiles`) or wrap with `await asyncio.to_thread(...)`."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3a3e7a3c6379f604", "name": "Blocking `requests.get(...)` inside `async def _fetch_free_proxies` \u2014 ospra_os/scraping/proxy_manager.py:155", "shortDescription": {"text": "Blocking `requests.get(...)` inside `async def _fetch_free_proxies` \u2014 ospra_os/scraping/proxy_manager.py:155"}, "fullDescription": {"text": "Sync I/O inside an async function blocks the event loop. While `requests.get(...)` is running, *all* other coroutines on this loop are paused \u2014 silent throughput collapse under concurrency. Use the async equivalent (`httpx.AsyncClient`, `asyncio.sleep`, `aiofiles`) or wrap with `await asyncio.to_thread(...)`."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "high", "confidence": 1.0}}, {"id": "scanner-887bf6f38fd2f717", "name": "Commented-code block (9 lines) in ospra_os/tiktok/routes.py:208", "shortDescription": {"text": "Commented-code block (9 lines) in ospra_os/tiktok/routes.py:208"}, "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-f25281f005fe76b5", "name": "Commented-code block (7 lines) in ospra_os/jobs/scheduler.py:78", "shortDescription": {"text": "Commented-code block (7 lines) in ospra_os/jobs/scheduler.py:78"}, "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-fd0fe9ff4019d59b", "name": "Commented-code block (5 lines) in ospra_os/webhooks/shopify_webhooks.py:550", "shortDescription": {"text": "Commented-code block (5 lines) in ospra_os/webhooks/shopify_webhooks.py:550"}, "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-53136b2d75abdd07", "name": "Network/subprocess call without timeout or try/except \u2014 ospra_os/background_jobs/product_monitor.py:275", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 ospra_os/background_jobs/product_monitor.py:275"}, "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-c3acfef288d06d86", "name": "Commented-code block (5 lines) in ospra_os/background_jobs/auto_discovery.py:210", "shortDescription": {"text": "Commented-code block (5 lines) in ospra_os/background_jobs/auto_discovery.py:210"}, "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-76518a04374f78de", "name": "Commented-code block (5 lines) in scripts/smoke_test_deployment.py:364", "shortDescription": {"text": "Commented-code block (5 lines) in scripts/smoke_test_deployment.py:364"}, "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-7090482bac485231", "name": "Commented-code block (6 lines) in scripts/test_score_variance.py:214", "shortDescription": {"text": "Commented-code block (6 lines) in scripts/test_score_variance.py:214"}, "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-a4ec9d7bd525e9ba", "name": "Network/subprocess call without timeout or try/except \u2014 scripts/smoke/multi_store_system.py:38", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 scripts/smoke/multi_store_system.py:38"}, "fullDescription": {"text": "`requests.get(...)` 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-246bd8f7cd8bd542", "name": "Commented-code block (6 lines) in tools/tiktok-demo/server.js:114", "shortDescription": {"text": "Commented-code block (6 lines) in tools/tiktok-demo/server.js:114"}, "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-89db609793a591ea", "name": "207 env vars used in code but missing from .env.example", "shortDescription": {"text": "207 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `ACCESS_TOKEN_EXPIRE_MINUTES`, `ADMIN_EMAIL`, `AE_DS_DETAIL_TTL_SECONDS`, `AE_DS_MIN_INTERVAL`, `ALERT_RECIPIENT_EMAIL`, `ALIEXPRESS_ACCESS_TOKEN`, `ALIEXPRESS_AFFILIATE_APP_KEY`, `ALIEXPRESS_AFFILIATE_APP_SECRET` + 199 more. Add them (with a placeholder/comment) to .env.example so onboarding doesn't break."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2c04133e54348533", "name": "Near-duplicate function bodies in 2 places", "shortDescription": {"text": "Near-duplicate function bodies in 2 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\narchive/legacy_mailbot/main.py:process_inbox2, archive/legacy_mailbot/main.py:process_inbox\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:\narchive/legacy_mailbot/app/gmail_client.py:build_auth_url, archive/legacy_mailbot/app/gmail_client.py:exchange_code_for_tokens, ospra_os/email_automation/gmail_client.py:build_auth_url, ospra_os/email_automation/gmail_client.py:exchange_code_for_tokens\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-e864cf02de4f5409", "name": "Frontend route `/reset-password` has no Link/navigate to it \u2014 frontend/src/App.jsx", "shortDescription": {"text": "Frontend route `/reset-password` has no Link/navigate to it \u2014 frontend/src/App.jsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4746e7aef17d703c", "name": "Frontend route `/billing/success` has no Link/navigate to it \u2014 frontend/src/App.jsx", "shortDescription": {"text": "Frontend route `/billing/success` has no Link/navigate to it \u2014 frontend/src/App.jsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-458a5f221960f02f", "name": "Frontend route `/bulk-deploy` has no Link/navigate to it \u2014 frontend/src/App.jsx", "shortDescription": {"text": "Frontend route `/bulk-deploy` has no Link/navigate to it \u2014 frontend/src/App.jsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ea448dd929be42ae", "name": "Frontend route `/oi` has no Link/navigate to it \u2014 frontend/src/App.jsx", "shortDescription": {"text": "Frontend route `/oi` has no Link/navigate to it \u2014 frontend/src/App.jsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b759559a78ac34c1", "name": "FastAPI POST `gmail_ingest` without auth dependency \u2014 archive/legacy_mailbot/main.py:279", "shortDescription": {"text": "FastAPI POST `gmail_ingest` without auth dependency \u2014 archive/legacy_mailbot/main.py:279"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8b872c0c03cfe3df", "name": "FastAPI POST `gmail_send_demo` without auth dependency \u2014 archive/legacy_mailbot/main.py:290", "shortDescription": {"text": "FastAPI POST `gmail_send_demo` without auth dependency \u2014 archive/legacy_mailbot/main.py:290"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-064f7534ad0b4fc5", "name": "FastAPI POST `templates_upsert` without auth dependency \u2014 archive/legacy_mailbot/main.py:367", "shortDescription": {"text": "FastAPI POST `templates_upsert` without auth dependency \u2014 archive/legacy_mailbot/main.py:367"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d8ba26a08b7e140d", "name": "FastAPI POST `set_rules` without auth dependency \u2014 archive/legacy_mailbot/main.py:378", "shortDescription": {"text": "FastAPI POST `set_rules` without auth dependency \u2014 archive/legacy_mailbot/main.py:378"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6d8142bb13bc08c2", "name": "FastAPI POST `ensure_labels` without auth dependency \u2014 archive/legacy_mailbot/main.py:394", "shortDescription": {"text": "FastAPI POST `ensure_labels` without auth dependency \u2014 archive/legacy_mailbot/main.py:394"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d9ecd45a601339ca", "name": "FastAPI POST `process_inbox2` without auth dependency \u2014 archive/legacy_mailbot/main.py:476", "shortDescription": {"text": "FastAPI POST `process_inbox2` without auth dependency \u2014 archive/legacy_mailbot/main.py:476"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-025f07ea49184a68", "name": "FastAPI POST `process_inbox` without auth dependency \u2014 archive/legacy_mailbot/main.py:605", "shortDescription": {"text": "FastAPI POST `process_inbox` without auth dependency \u2014 archive/legacy_mailbot/main.py:605"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-aa2437638e34f99c", "name": "FastAPI POST `ai_reply_draft` without auth dependency \u2014 archive/legacy_mailbot/main.py:703", "shortDescription": {"text": "FastAPI POST `ai_reply_draft` without auth dependency \u2014 archive/legacy_mailbot/main.py:703"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ad9622ff18314389", "name": "FastAPI POST `smart_process_inbox` without auth dependency \u2014 archive/legacy_mailbot/main.py:711", "shortDescription": {"text": "FastAPI POST `smart_process_inbox` without auth dependency \u2014 archive/legacy_mailbot/main.py:711"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b790ed98d3961df2", "name": "FastAPI POST `gmail_pubsub_webhook` without auth dependency \u2014 archive/legacy_mailbot/main.py:742", "shortDescription": {"text": "FastAPI POST `gmail_pubsub_webhook` without auth dependency \u2014 archive/legacy_mailbot/main.py:742"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-982a63d021a30591", "name": "FastAPI POST `start_gmail_watch` without auth dependency \u2014 archive/legacy_mailbot/main.py:807", "shortDescription": {"text": "FastAPI POST `start_gmail_watch` without auth dependency \u2014 archive/legacy_mailbot/main.py:807"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e7c2e3a4b032cc06", "name": "FastAPI POST `stop_gmail_watch` without auth dependency \u2014 archive/legacy_mailbot/main.py:814", "shortDescription": {"text": "FastAPI POST `stop_gmail_watch` without auth dependency \u2014 archive/legacy_mailbot/main.py:814"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d75ae178bde10fab", "name": "FastAPI POST `chat_with_claude` without auth dependency \u2014 archive/legacy_mailbot/main.py:880", "shortDescription": {"text": "FastAPI POST `chat_with_claude` without auth dependency \u2014 archive/legacy_mailbot/main.py:880"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c4aed4337e957bfd", "name": "FastAPI POST `reset_claude_chat` without auth dependency \u2014 archive/legacy_mailbot/main.py:900", "shortDescription": {"text": "FastAPI POST `reset_claude_chat` without auth dependency \u2014 archive/legacy_mailbot/main.py:900"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ed82e9a4d3dd1d07", "name": "FastAPI POST `discover_winning_products` without auth dependency \u2014 archive/legacy_mailbot/main.py:929", "shortDescription": {"text": "FastAPI POST `discover_winning_products` without auth dependency \u2014 archive/legacy_mailbot/main.py:929"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-62a77dff4b9fdaa8", "name": "FastAPI POST `discover_products_v2` without auth dependency \u2014 archive/legacy_mailbot/main.py:1040", "shortDescription": {"text": "FastAPI POST `discover_products_v2` without auth dependency \u2014 archive/legacy_mailbot/main.py:1040"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8ede22c19cc4ddb7", "name": "FastAPI POST `ai_chat` without auth dependency \u2014 archive/legacy_mailbot/main.py:1595", "shortDescription": {"text": "FastAPI POST `ai_chat` without auth dependency \u2014 archive/legacy_mailbot/main.py:1595"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c1e8749fab5c3464", "name": "FastAPI POST `sync_emails` without auth dependency \u2014 archive/legacy_mailbot/main.py:1612", "shortDescription": {"text": "FastAPI POST `sync_emails` without auth dependency \u2014 archive/legacy_mailbot/main.py:1612"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ecf03fbb14f2d9c9", "name": "FastAPI POST `run_discovery_now` without auth dependency \u2014 ospra_os/main.py:2090", "shortDescription": {"text": "FastAPI POST `run_discovery_now` without auth dependency \u2014 ospra_os/main.py:2090"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f9c049bdb7b8d769", "name": "FastAPI POST `test_platform_credentials` without auth dependency \u2014 ospra_os/main.py:2190", "shortDescription": {"text": "FastAPI POST `test_platform_credentials` without auth dependency \u2014 ospra_os/main.py:2190"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0b4401e7598d5b19", "name": "FastAPI POST `discover_products_api` without auth dependency \u2014 ospra_os/main.py:2239", "shortDescription": {"text": "FastAPI POST `discover_products_api` without auth dependency \u2014 ospra_os/main.py:2239"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-07416ac867742e72", "name": "FastAPI POST `validate_product_api` without auth dependency \u2014 ospra_os/main.py:2382", "shortDescription": {"text": "FastAPI POST `validate_product_api` without auth dependency \u2014 ospra_os/main.py:2382"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-09c0eb21941fb7df", "name": "FastAPI POST `discover_multi_niche` without auth dependency \u2014 ospra_os/main.py:2438", "shortDescription": {"text": "FastAPI POST `discover_multi_niche` without auth dependency \u2014 ospra_os/main.py:2438"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8e5eacc41ea97989", "name": "FastAPI POST `deploy_to_shopify` without auth dependency \u2014 ospra_os/main.py:2575", "shortDescription": {"text": "FastAPI POST `deploy_to_shopify` without auth dependency \u2014 ospra_os/main.py:2575"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-18fcb37676f1da4e", "name": "FastAPI POST `generate_product_content` without auth dependency \u2014 ospra_os/main.py:2635", "shortDescription": {"text": "FastAPI POST `generate_product_content` without auth dependency \u2014 ospra_os/main.py:2635"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9e59ee3ceff905ec", "name": "FastAPI POST `scrape_aliexpress_product` without auth dependency \u2014 ospra_os/main.py:2693", "shortDescription": {"text": "FastAPI POST `scrape_aliexpress_product` without auth dependency \u2014 ospra_os/main.py:2693"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c4f144789ad5222a", "name": "FastAPI POST `optimize_product_price` without auth dependency \u2014 ospra_os/main.py:2725", "shortDescription": {"text": "FastAPI POST `optimize_product_price` without auth dependency \u2014 ospra_os/main.py:2725"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-443491fbb71ba46c", "name": "FastAPI POST `claude_chat` without auth dependency \u2014 ospra_os/main.py:2846", "shortDescription": {"text": "FastAPI POST `claude_chat` without auth dependency \u2014 ospra_os/main.py:2846"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b180d0be564f32af", "name": "FastAPI POST `generate_marketing_angle` without auth dependency \u2014 ospra_os/main.py:3019", "shortDescription": {"text": "FastAPI POST `generate_marketing_angle` without auth dependency \u2014 ospra_os/main.py:3019"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7bd3eda01fd1a108", "name": "FastAPI POST `generate_multiple_angles` without auth dependency \u2014 ospra_os/main.py:3076", "shortDescription": {"text": "FastAPI POST `generate_multiple_angles` without auth dependency \u2014 ospra_os/main.py:3076"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-782bba0b488f78ec", "name": "FastAPI POST `deploy_to_shopify` without auth dependency \u2014 ospra_os/main.py:3302", "shortDescription": {"text": "FastAPI POST `deploy_to_shopify` without auth dependency \u2014 ospra_os/main.py:3302"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-cf4c0b8bed2f8dd3", "name": "FastAPI POST `bulk_deploy_to_shopify` without auth dependency \u2014 ospra_os/main.py:3360", "shortDescription": {"text": "FastAPI POST `bulk_deploy_to_shopify` without auth dependency \u2014 ospra_os/main.py:3360"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e4779ce140d5db30", "name": "FastAPI DELETE `delete_shopify_product` without auth dependency \u2014 ospra_os/main.py:3462", "shortDescription": {"text": "FastAPI DELETE `delete_shopify_product` without auth dependency \u2014 ospra_os/main.py:3462"}, "fullDescription": {"text": "`@router.delete` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8f0edd195e40ada0", "name": "FastAPI POST `search_aliexpress` without auth dependency \u2014 ospra_os/main.py:3504", "shortDescription": {"text": "FastAPI POST `search_aliexpress` without auth dependency \u2014 ospra_os/main.py:3504"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3b8f1f517596dd75", "name": "FastAPI POST `generate_affiliate_links` without auth dependency \u2014 ospra_os/main.py:3551", "shortDescription": {"text": "FastAPI POST `generate_affiliate_links` without auth dependency \u2014 ospra_os/main.py:3551"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1bb3d50a4e7397d8", "name": "FastAPI POST `fulfill_order` without auth dependency \u2014 ospra_os/main.py:3595", "shortDescription": {"text": "FastAPI POST `fulfill_order` without auth dependency \u2014 ospra_os/main.py:3595"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9b971331d59aa7d6", "name": "FastAPI POST `sync_inventory` without auth dependency \u2014 ospra_os/main.py:3640", "shortDescription": {"text": "FastAPI POST `sync_inventory` without auth dependency \u2014 ospra_os/main.py:3640"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b276b558cdf2efaf", "name": "FastAPI POST `monitor_prices` without auth dependency \u2014 ospra_os/main.py:3686", "shortDescription": {"text": "FastAPI POST `monitor_prices` without auth dependency \u2014 ospra_os/main.py:3686"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-73701bc619f701f9", "name": "FastAPI POST `create_meta_campaign` without auth dependency \u2014 ospra_os/main.py:3739", "shortDescription": {"text": "FastAPI POST `create_meta_campaign` without auth dependency \u2014 ospra_os/main.py:3739"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1c7d15d48a3ce1f5", "name": "FastAPI POST `create_bulk_campaigns` without auth dependency \u2014 ospra_os/main.py:3780", "shortDescription": {"text": "FastAPI POST `create_bulk_campaigns` without auth dependency \u2014 ospra_os/main.py:3780"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c2c1ba9fa2f2bc5d", "name": "FastAPI POST `update_campaign_status` without auth dependency \u2014 ospra_os/main.py:3850", "shortDescription": {"text": "FastAPI POST `update_campaign_status` without auth dependency \u2014 ospra_os/main.py:3850"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-dcedf2085c7571f4", "name": "FastAPI POST `update_ad_set_budget` without auth dependency \u2014 ospra_os/main.py:3885", "shortDescription": {"text": "FastAPI POST `update_ad_set_budget` without auth dependency \u2014 ospra_os/main.py:3885"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-acb3e208e863a553", "name": "FastAPI POST `create_ad_schedule` without auth dependency \u2014 ospra_os/main.py:3926", "shortDescription": {"text": "FastAPI POST `create_ad_schedule` without auth dependency \u2014 ospra_os/main.py:3926"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ce3fb1a1a7274e2e", "name": "FastAPI DELETE `cancel_schedule` without auth dependency \u2014 ospra_os/main.py:4044", "shortDescription": {"text": "FastAPI DELETE `cancel_schedule` without auth dependency \u2014 ospra_os/main.py:4044"}, "fullDescription": {"text": "`@router.delete` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5629a9e3cac2f0e9", "name": "FastAPI POST `manually_process_schedules` without auth dependency \u2014 ospra_os/main.py:4068", "shortDescription": {"text": "FastAPI POST `manually_process_schedules` without auth dependency \u2014 ospra_os/main.py:4068"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3da004bac7403af8", "name": "FastAPI POST `pause_campaign` without auth dependency \u2014 ospra_os/integrations/meta/routes.py:105", "shortDescription": {"text": "FastAPI POST `pause_campaign` without auth dependency \u2014 ospra_os/integrations/meta/routes.py:105"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-03bdbc023679772f", "name": "FastAPI POST `resume_campaign` without auth dependency \u2014 ospra_os/integrations/meta/routes.py:132", "shortDescription": {"text": "FastAPI POST `resume_campaign` without auth dependency \u2014 ospra_os/integrations/meta/routes.py:132"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-fcf8d40e4999969f", "name": "FastAPI POST `deploy_product` without auth dependency \u2014 ospra_os/integrations/shopify/routes.py:255", "shortDescription": {"text": "FastAPI POST `deploy_product` without auth dependency \u2014 ospra_os/integrations/shopify/routes.py:255"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b0c26152547e7cd2", "name": "FastAPI POST `preview_deployment` without auth dependency \u2014 ospra_os/integrations/shopify/routes.py:349", "shortDescription": {"text": "FastAPI POST `preview_deployment` without auth dependency \u2014 ospra_os/integrations/shopify/routes.py:349"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9cb88274c24c3232", "name": "FastAPI POST `bulk_deploy_products` without auth dependency \u2014 ospra_os/integrations/shopify/routes.py:408", "shortDescription": {"text": "FastAPI POST `bulk_deploy_products` without auth dependency \u2014 ospra_os/integrations/shopify/routes.py:408"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-de424c93b9b4dc11", "name": "FastAPI DELETE `delete_product` without auth dependency \u2014 ospra_os/integrations/shopify/routes.py:457", "shortDescription": {"text": "FastAPI DELETE `delete_product` without auth dependency \u2014 ospra_os/integrations/shopify/routes.py:457"}, "fullDescription": {"text": "`@router.delete` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3acc91af5f8ca271", "name": "FastAPI PATCH `update_inventory` without auth dependency \u2014 ospra_os/integrations/shopify/routes.py:474", "shortDescription": {"text": "FastAPI PATCH `update_inventory` without auth dependency \u2014 ospra_os/integrations/shopify/routes.py:474"}, "fullDescription": {"text": "`@router.patch` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7d0b2769747001c1", "name": "FastAPI POST `test_integration` without auth dependency \u2014 ospra_os/monitoring/routes.py:125", "shortDescription": {"text": "FastAPI POST `test_integration` without auth dependency \u2014 ospra_os/monitoring/routes.py:125"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ac28c9f02042b6b1", "name": "FastAPI POST `trigger_job` without auth dependency \u2014 ospra_os/monitoring/routes.py:207", "shortDescription": {"text": "FastAPI POST `trigger_job` without auth dependency \u2014 ospra_os/monitoring/routes.py:207"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-168bf2807c1720b8", "name": "FastAPI POST `disable_job` without auth dependency \u2014 ospra_os/monitoring/routes.py:219", "shortDescription": {"text": "FastAPI POST `disable_job` without auth dependency \u2014 ospra_os/monitoring/routes.py:219"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9fdacbe520648fa1", "name": "FastAPI POST `enable_job` without auth dependency \u2014 ospra_os/monitoring/routes.py:232", "shortDescription": {"text": "FastAPI POST `enable_job` without auth dependency \u2014 ospra_os/monitoring/routes.py:232"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6c566dae2b363e1c", "name": "FastAPI POST `acknowledge_error` without auth dependency \u2014 ospra_os/monitoring/routes.py:342", "shortDescription": {"text": "FastAPI POST `acknowledge_error` without auth dependency \u2014 ospra_os/monitoring/routes.py:342"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-879a477078345cb8", "name": "FastAPI POST `resolve_error` without auth dependency \u2014 ospra_os/monitoring/routes.py:360", "shortDescription": {"text": "FastAPI POST `resolve_error` without auth dependency \u2014 ospra_os/monitoring/routes.py:360"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-dd949c205f5ee38d", "name": "FastAPI POST `acknowledge_alert` without auth dependency \u2014 ospra_os/monitoring/routes.py:420", "shortDescription": {"text": "FastAPI POST `acknowledge_alert` without auth dependency \u2014 ospra_os/monitoring/routes.py:420"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-47a75b4c9c2c444a", "name": "FastAPI POST `resolve_alert` without auth dependency \u2014 ospra_os/monitoring/routes.py:437", "shortDescription": {"text": "FastAPI POST `resolve_alert` without auth dependency \u2014 ospra_os/monitoring/routes.py:437"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-fab185cb9a522367", "name": "FastAPI POST `create_test` without auth dependency \u2014 ospra_os/testing/routes.py:154", "shortDescription": {"text": "FastAPI POST `create_test` without auth dependency \u2014 ospra_os/testing/routes.py:154"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4bf6de8d7132c622", "name": "FastAPI POST `start_test` without auth dependency \u2014 ospra_os/testing/routes.py:269", "shortDescription": {"text": "FastAPI POST `start_test` without auth dependency \u2014 ospra_os/testing/routes.py:269"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-dad493050db586e7", "name": "FastAPI POST `pause_test` without auth dependency \u2014 ospra_os/testing/routes.py:292", "shortDescription": {"text": "FastAPI POST `pause_test` without auth dependency \u2014 ospra_os/testing/routes.py:292"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9caf926721d7d965", "name": "FastAPI POST `resume_test` without auth dependency \u2014 ospra_os/testing/routes.py:314", "shortDescription": {"text": "FastAPI POST `resume_test` without auth dependency \u2014 ospra_os/testing/routes.py:314"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-cc93e4c4d14a8d38", "name": "FastAPI POST `end_test` without auth dependency \u2014 ospra_os/testing/routes.py:336", "shortDescription": {"text": "FastAPI POST `end_test` without auth dependency \u2014 ospra_os/testing/routes.py:336"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2b87228b5544c60b", "name": "FastAPI POST `create_price_test` without auth dependency \u2014 ospra_os/testing/routes.py:424", "shortDescription": {"text": "FastAPI POST `create_price_test` without auth dependency \u2014 ospra_os/testing/routes.py:424"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8887c76f9a6cd88e", "name": "FastAPI POST `create_title_test` without auth dependency \u2014 ospra_os/testing/routes.py:458", "shortDescription": {"text": "FastAPI POST `create_title_test` without auth dependency \u2014 ospra_os/testing/routes.py:458"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f2da7e2097756250", "name": "FastAPI POST `create_description_test` without auth dependency \u2014 ospra_os/testing/routes.py:486", "shortDescription": {"text": "FastAPI POST `create_description_test` without auth dependency \u2014 ospra_os/testing/routes.py:486"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-33a7b915aa5f4394", "name": "FastAPI POST `create_image_test` without auth dependency \u2014 ospra_os/testing/routes.py:514", "shortDescription": {"text": "FastAPI POST `create_image_test` without auth dependency \u2014 ospra_os/testing/routes.py:514"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-812ce9a46bdce0dc", "name": "FastAPI POST `get_variant_for_visitor` without auth dependency \u2014 ospra_os/testing/routes.py:546", "shortDescription": {"text": "FastAPI POST `get_variant_for_visitor` without auth dependency \u2014 ospra_os/testing/routes.py:546"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1d8fa346666db314", "name": "FastAPI POST `record_impression` without auth dependency \u2014 ospra_os/testing/routes.py:581", "shortDescription": {"text": "FastAPI POST `record_impression` without auth dependency \u2014 ospra_os/testing/routes.py:581"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ad0658bbae6477f8", "name": "FastAPI POST `record_conversion` without auth dependency \u2014 ospra_os/testing/routes.py:608", "shortDescription": {"text": "FastAPI POST `record_conversion` without auth dependency \u2014 ospra_os/testing/routes.py:608"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1b81a389cef06040", "name": "FastAPI POST `refresh_tokens` without auth dependency \u2014 ospra_os/auth/routes.py:322", "shortDescription": {"text": "FastAPI POST `refresh_tokens` without auth dependency \u2014 ospra_os/auth/routes.py:322"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c1a672fada56de0f", "name": "FastAPI POST `forgot_password` without auth dependency \u2014 ospra_os/auth/routes.py:461", "shortDescription": {"text": "FastAPI POST `forgot_password` without auth dependency \u2014 ospra_os/auth/routes.py:461"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-56bf583c86256f4e", "name": "FastAPI POST `reset_password` without auth dependency \u2014 ospra_os/auth/routes.py:525", "shortDescription": {"text": "FastAPI POST `reset_password` without auth dependency \u2014 ospra_os/auth/routes.py:525"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-cdcbb3e255f6019b", "name": "FastAPI POST `test_tiktok_search` without auth dependency \u2014 ospra_os/auth/tiktok_oauth.py:167", "shortDescription": {"text": "FastAPI POST `test_tiktok_search` without auth dependency \u2014 ospra_os/auth/tiktok_oauth.py:167"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6b8840e60048c8e5", "name": "FastAPI POST `sync_from_shopify` without auth dependency \u2014 ospra_os/analytics/customer_routes.py:438", "shortDescription": {"text": "FastAPI POST `sync_from_shopify` without auth dependency \u2014 ospra_os/analytics/customer_routes.py:438"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e746d4ebdf3b1622", "name": "FastAPI POST `sync_single_customer` without auth dependency \u2014 ospra_os/analytics/customer_routes.py:477", "shortDescription": {"text": "FastAPI POST `sync_single_customer` without auth dependency \u2014 ospra_os/analytics/customer_routes.py:477"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-26d502feff638a5d", "name": "FastAPI POST `gmail_pubsub_webhook` without auth dependency \u2014 ospra_os/api/email_automation_routes.py:100", "shortDescription": {"text": "FastAPI POST `gmail_pubsub_webhook` without auth dependency \u2014 ospra_os/api/email_automation_routes.py:100"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4992ca9deaeecd98", "name": "FastAPI POST `create_store` without auth dependency \u2014 ospra_os/api/store_routes.py:198", "shortDescription": {"text": "FastAPI POST `create_store` without auth dependency \u2014 ospra_os/api/store_routes.py:198"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c2b54c92c51d0871", "name": "FastAPI PATCH `update_store_status` without auth dependency \u2014 ospra_os/api/store_routes.py:254", "shortDescription": {"text": "FastAPI PATCH `update_store_status` without auth dependency \u2014 ospra_os/api/store_routes.py:254"}, "fullDescription": {"text": "`@router.patch` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-23f1999cc7e5cb87", "name": "FastAPI POST `generate_cross_store_learnings` without auth dependency \u2014 ospra_os/api/store_routes.py:304", "shortDescription": {"text": "FastAPI POST `generate_cross_store_learnings` without auth dependency \u2014 ospra_os/api/store_routes.py:304"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a7b9be8eaeb5bed4", "name": "FastAPI POST `apply_cross_store_learning` without auth dependency \u2014 ospra_os/api/store_routes.py:362", "shortDescription": {"text": "FastAPI POST `apply_cross_store_learning` without auth dependency \u2014 ospra_os/api/store_routes.py:362"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-76c5434edc66cea2", "name": "FastAPI POST `dismiss_cross_store_learning` without auth dependency \u2014 ospra_os/api/store_routes.py:402", "shortDescription": {"text": "FastAPI POST `dismiss_cross_store_learning` without auth dependency \u2014 ospra_os/api/store_routes.py:402"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3e0b58f71dda6b6c", "name": "FastAPI POST `forgot_password` without auth dependency \u2014 ospra_os/api/password_reset_routes.py:168", "shortDescription": {"text": "FastAPI POST `forgot_password` without auth dependency \u2014 ospra_os/api/password_reset_routes.py:168"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-158ff5f672849d4a", "name": "FastAPI POST `verify_reset_token_endpoint` without auth dependency \u2014 ospra_os/api/password_reset_routes.py:235", "shortDescription": {"text": "FastAPI POST `verify_reset_token_endpoint` without auth dependency \u2014 ospra_os/api/password_reset_routes.py:235"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-bcdedf7047a06313", "name": "FastAPI POST `reset_password` without auth dependency \u2014 ospra_os/api/password_reset_routes.py:264", "shortDescription": {"text": "FastAPI POST `reset_password` without auth dependency \u2014 ospra_os/api/password_reset_routes.py:264"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1144af621195d9ae", "name": "FastAPI POST `generate_marketing_angle` without auth dependency \u2014 ospra_os/api/marketing_routes.py:48", "shortDescription": {"text": "FastAPI POST `generate_marketing_angle` without auth dependency \u2014 ospra_os/api/marketing_routes.py:48"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-170312a256bcf827", "name": "FastAPI POST `generate_multiple_angles` without auth dependency \u2014 ospra_os/api/marketing_routes.py:87", "shortDescription": {"text": "FastAPI POST `generate_multiple_angles` without auth dependency \u2014 ospra_os/api/marketing_routes.py:87"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-67f8b0efd8045947", "name": "FastAPI POST `preview_deployment` without auth dependency \u2014 ospra_os/api/deployment_routes.py:593", "shortDescription": {"text": "FastAPI POST `preview_deployment` without auth dependency \u2014 ospra_os/api/deployment_routes.py:593"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0112516a5f81ea53", "name": "FastAPI POST `refresh_token` without auth dependency \u2014 ospra_os/api/auth_routes.py:206", "shortDescription": {"text": "FastAPI POST `refresh_token` without auth dependency \u2014 ospra_os/api/auth_routes.py:206"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6740502532fd0e48", "name": "FastAPI POST `legacy_compare` without auth dependency \u2014 ospra_os/api/image_generation_routes.py:828", "shortDescription": {"text": "FastAPI POST `legacy_compare` without auth dependency \u2014 ospra_os/api/image_generation_routes.py:828"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-10994f9320b97200", "name": "FastAPI POST `enhance_images` without auth dependency \u2014 ospra_os/intelligence/unified_discovery_routes.py:774", "shortDescription": {"text": "FastAPI POST `enhance_images` without auth dependency \u2014 ospra_os/intelligence/unified_discovery_routes.py:774"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8b0d22927c6e15c7", "name": "FastAPI POST `refresh_cj_categories` without auth dependency \u2014 ospra_os/intelligence/unified_discovery_routes.py:1564", "shortDescription": {"text": "FastAPI POST `refresh_cj_categories` without auth dependency \u2014 ospra_os/intelligence/unified_discovery_routes.py:1564"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1ec4d738ceb5eca9", "name": "FastAPI POST `warm_cache` without auth dependency \u2014 ospra_os/intelligence/unified_discovery_routes.py:1630", "shortDescription": {"text": "FastAPI POST `warm_cache` without auth dependency \u2014 ospra_os/intelligence/unified_discovery_routes.py:1630"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5cfee5f5e3b8fe26", "name": "FastAPI DELETE `clear_cache` without auth dependency \u2014 ospra_os/intelligence/unified_discovery_routes.py:1697", "shortDescription": {"text": "FastAPI DELETE `clear_cache` without auth dependency \u2014 ospra_os/intelligence/unified_discovery_routes.py:1697"}, "fullDescription": {"text": "`@router.delete` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2873b25d65302092", "name": "FastAPI POST `trigger_niche_analysis` without auth dependency \u2014 ospra_os/intelligence/niche_routes.py:104", "shortDescription": {"text": "FastAPI POST `trigger_niche_analysis` without auth dependency \u2014 ospra_os/intelligence/niche_routes.py:104"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-85f7dc10d910cdf1", "name": "FastAPI POST `compare_niches` without auth dependency \u2014 ospra_os/intelligence/niche_routes.py:259", "shortDescription": {"text": "FastAPI POST `compare_niches` without auth dependency \u2014 ospra_os/intelligence/niche_routes.py:259"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-36ebfdfa53fb04cf", "name": "FastAPI POST `grade_products_bulk` without auth dependency \u2014 ospra_os/intelligence/intelligence_core_routes.py:179", "shortDescription": {"text": "FastAPI POST `grade_products_bulk` without auth dependency \u2014 ospra_os/intelligence/intelligence_core_routes.py:179"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-eadf6ecf71104f22", "name": "FastAPI POST `advance_product_stage` without auth dependency \u2014 ospra_os/intelligence/intelligence_core_routes.py:202", "shortDescription": {"text": "FastAPI POST `advance_product_stage` without auth dependency \u2014 ospra_os/intelligence/intelligence_core_routes.py:202"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f774c6e1b0cce457", "name": "FastAPI POST `upgrade_tier` without auth dependency \u2014 ospra_os/intelligence/intelligence_core_routes.py:267", "shortDescription": {"text": "FastAPI POST `upgrade_tier` without auth dependency \u2014 ospra_os/intelligence/intelligence_core_routes.py:267"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-26d50b11194ab88c", "name": "FastAPI POST `preview_action` without auth dependency \u2014 ospra_os/intelligence/intelligence_core_routes.py:282", "shortDescription": {"text": "FastAPI POST `preview_action` without auth dependency \u2014 ospra_os/intelligence/intelligence_core_routes.py:282"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e32a6a2e0fbf2c15", "name": "FastAPI POST `execute_action` without auth dependency \u2014 ospra_os/intelligence/intelligence_core_routes.py:289", "shortDescription": {"text": "FastAPI POST `execute_action` without auth dependency \u2014 ospra_os/intelligence/intelligence_core_routes.py:289"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-068f761162413e0f", "name": "FastAPI POST `undo_action` without auth dependency \u2014 ospra_os/intelligence/intelligence_core_routes.py:296", "shortDescription": {"text": "FastAPI POST `undo_action` without auth dependency \u2014 ospra_os/intelligence/intelligence_core_routes.py:296"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-98b39b120c932d91", "name": "FastAPI POST `contribute_to_global` without auth dependency \u2014 ospra_os/learning/learning_routes.py:75", "shortDescription": {"text": "FastAPI POST `contribute_to_global` without auth dependency \u2014 ospra_os/learning/learning_routes.py:75"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1a70e8e393178f6b", "name": "FastAPI POST `learn_personal` without auth dependency \u2014 ospra_os/learning/learning_routes.py:120", "shortDescription": {"text": "FastAPI POST `learn_personal` without auth dependency \u2014 ospra_os/learning/learning_routes.py:120"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c1eadec12192d035", "name": "FastAPI POST `record_feedback` without auth dependency \u2014 ospra_os/learning/learning_routes.py:142", "shortDescription": {"text": "FastAPI POST `record_feedback` without auth dependency \u2014 ospra_os/learning/learning_routes.py:142"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-fe7e2407a521e1f5", "name": "FastAPI POST `get_adjusted_score` without auth dependency \u2014 ospra_os/learning/learning_routes.py:308", "shortDescription": {"text": "FastAPI POST `get_adjusted_score` without auth dependency \u2014 ospra_os/learning/learning_routes.py:308"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-dd7d344229b9d7d1", "name": "FastAPI POST `set_custom_weights` without auth dependency \u2014 ospra_os/learning/learning_routes.py:335", "shortDescription": {"text": "FastAPI POST `set_custom_weights` without auth dependency \u2014 ospra_os/learning/learning_routes.py:335"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-759f79d4bf86a1df", "name": "FastAPI POST `record_ad_performance` without auth dependency \u2014 ospra_os/learning/learning_routes.py:370", "shortDescription": {"text": "FastAPI POST `record_ad_performance` without auth dependency \u2014 ospra_os/learning/learning_routes.py:370"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4970828c60b9a560", "name": "FastAPI POST `trigger_global_analysis` without auth dependency \u2014 ospra_os/learning/learning_routes.py:514", "shortDescription": {"text": "FastAPI POST `trigger_global_analysis` without auth dependency \u2014 ospra_os/learning/learning_routes.py:514"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3534e52d3ef33fc7", "name": "FastAPI POST `trigger_personal_analysis` without auth dependency \u2014 ospra_os/learning/learning_routes.py:548", "shortDescription": {"text": "FastAPI POST `trigger_personal_analysis` without auth dependency \u2014 ospra_os/learning/learning_routes.py:548"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d4a55673e9e13942", "name": "FastAPI POST `trigger_all_users_analysis` without auth dependency \u2014 ospra_os/learning/learning_routes.py:580", "shortDescription": {"text": "FastAPI POST `trigger_all_users_analysis` without auth dependency \u2014 ospra_os/learning/learning_routes.py:580"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1d277617f9933c36", "name": "FastAPI POST `trigger_learning_now` without auth dependency \u2014 ospra_os/learning/learning_routes.py:668", "shortDescription": {"text": "FastAPI POST `trigger_learning_now` without auth dependency \u2014 ospra_os/learning/learning_routes.py:668"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-bdb5cf02cbf67847", "name": "FastAPI POST `simulate_sale` without auth dependency \u2014 ospra_os/learning/learning_routes.py:740", "shortDescription": {"text": "FastAPI POST `simulate_sale` without auth dependency \u2014 ospra_os/learning/learning_routes.py:740"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ac5b24839e19db59", "name": "FastAPI PUT `update_partner_branding` without auth dependency \u2014 ospra_os/whitelabel/routes.py:321", "shortDescription": {"text": "FastAPI PUT `update_partner_branding` without auth dependency \u2014 ospra_os/whitelabel/routes.py:321"}, "fullDescription": {"text": "`@router.put` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-77b8065cc3affaae", "name": "FastAPI POST `configure_partner_domain` without auth dependency \u2014 ospra_os/whitelabel/routes.py:358", "shortDescription": {"text": "FastAPI POST `configure_partner_domain` without auth dependency \u2014 ospra_os/whitelabel/routes.py:358"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b56ee990a4a13f44", "name": "FastAPI POST `verify_partner_domain` without auth dependency \u2014 ospra_os/whitelabel/routes.py:396", "shortDescription": {"text": "FastAPI POST `verify_partner_domain` without auth dependency \u2014 ospra_os/whitelabel/routes.py:396"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-30560f524e595f91", "name": "FastAPI POST `add_partner_client` without auth dependency \u2014 ospra_os/whitelabel/routes.py:443", "shortDescription": {"text": "FastAPI POST `add_partner_client` without auth dependency \u2014 ospra_os/whitelabel/routes.py:443"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3b684c7d64dae5cc", "name": "FastAPI DELETE `remove_partner_client` without auth dependency \u2014 ospra_os/whitelabel/routes.py:475", "shortDescription": {"text": "FastAPI DELETE `remove_partner_client` without auth dependency \u2014 ospra_os/whitelabel/routes.py:475"}, "fullDescription": {"text": "`@router.delete` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-56f65b54f84f1964", "name": "FastAPI POST `find_products` without auth dependency \u2014 ospra_os/product_research/routes.py:41", "shortDescription": {"text": "FastAPI POST `find_products` without auth dependency \u2014 ospra_os/product_research/routes.py:41"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3c0065f06e31e5b4", "name": "FastAPI POST `discover_products` without auth dependency \u2014 ospra_os/product_research/routes.py:329", "shortDescription": {"text": "FastAPI POST `discover_products` without auth dependency \u2014 ospra_os/product_research/routes.py:329"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4e3171f651ca707c", "name": "FastAPI POST `validate_product` without auth dependency \u2014 ospra_os/product_research/routes.py:375", "shortDescription": {"text": "FastAPI POST `validate_product` without auth dependency \u2014 ospra_os/product_research/routes.py:375"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5805083865f34b90", "name": "FastAPI POST `discover_twitter_viral` without auth dependency \u2014 ospra_os/product_research/routes.py:450", "shortDescription": {"text": "FastAPI POST `discover_twitter_viral` without auth dependency \u2014 ospra_os/product_research/routes.py:450"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-424d41a821f510c4", "name": "FastAPI POST `join_stratosphere_waitlist` without auth dependency \u2014 ospra_os/waitlist/routes.py:53", "shortDescription": {"text": "FastAPI POST `join_stratosphere_waitlist` without auth dependency \u2014 ospra_os/waitlist/routes.py:53"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-01c6677bf489072f", "name": "FastAPI POST `check_waitlist_status` without auth dependency \u2014 ospra_os/waitlist/routes.py:81", "shortDescription": {"text": "FastAPI POST `check_waitlist_status` without auth dependency \u2014 ospra_os/waitlist/routes.py:81"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-60e7b916a97f101c", "name": "FastAPI POST `submit_onboarding_form` without auth dependency \u2014 ospra_os/onboarding/routes.py:61", "shortDescription": {"text": "FastAPI POST `submit_onboarding_form` without auth dependency \u2014 ospra_os/onboarding/routes.py:61"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a2b9f530a86d640e", "name": "FastAPI POST `update_checklist_item` without auth dependency \u2014 ospra_os/onboarding/routes.py:113", "shortDescription": {"text": "FastAPI POST `update_checklist_item` without auth dependency \u2014 ospra_os/onboarding/routes.py:113"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f72b5332e6758e51", "name": "FastAPI POST `handle_calendly_webhook` without auth dependency \u2014 ospra_os/onboarding/routes.py:127", "shortDescription": {"text": "FastAPI POST `handle_calendly_webhook` without auth dependency \u2014 ospra_os/onboarding/routes.py:127"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-bd84853402dda377", "name": "FastAPI POST `create_checkout` without auth dependency \u2014 ospra_os/payments/routes.py:43", "shortDescription": {"text": "FastAPI POST `create_checkout` without auth dependency \u2014 ospra_os/payments/routes.py:43"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-385484c723e61db9", "name": "FastAPI POST `cancel_subscription` without auth dependency \u2014 ospra_os/payments/routes.py:153", "shortDescription": {"text": "FastAPI POST `cancel_subscription` without auth dependency \u2014 ospra_os/payments/routes.py:153"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-508a3c6d43dc2631", "name": "FastAPI POST `resume_subscription` without auth dependency \u2014 ospra_os/payments/routes.py:179", "shortDescription": {"text": "FastAPI POST `resume_subscription` without auth dependency \u2014 ospra_os/payments/routes.py:179"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ba0110a55e5cbcda", "name": "FastAPI POST `change_subscription_tier` without auth dependency \u2014 ospra_os/payments/routes.py:205", "shortDescription": {"text": "FastAPI POST `change_subscription_tier` without auth dependency \u2014 ospra_os/payments/routes.py:205"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4be37605da2e36b9", "name": "FastAPI POST `lemonsqueezy_webhook` without auth dependency \u2014 ospra_os/payments/routes.py:270", "shortDescription": {"text": "FastAPI POST `lemonsqueezy_webhook` without auth dependency \u2014 ospra_os/payments/routes.py:270"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-dc56995f885eb4c9", "name": "FastAPI POST `send_custom_notification` without auth dependency \u2014 ospra_os/services/notification_routes.py:115", "shortDescription": {"text": "FastAPI POST `send_custom_notification` without auth dependency \u2014 ospra_os/services/notification_routes.py:115"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6cee5525a2f4463f", "name": "FastAPI POST `generate_report` without auth dependency \u2014 ospra_os/reports/routes.py:93", "shortDescription": {"text": "FastAPI POST `generate_report` without auth dependency \u2014 ospra_os/reports/routes.py:93"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1eb1ff7437632344", "name": "FastAPI DELETE `delete_report` without auth dependency \u2014 ospra_os/reports/routes.py:302", "shortDescription": {"text": "FastAPI DELETE `delete_report` without auth dependency \u2014 ospra_os/reports/routes.py:302"}, "fullDescription": {"text": "`@router.delete` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7541734e158c34b2", "name": "FastAPI POST `create_schedule` without auth dependency \u2014 ospra_os/reports/routes.py:315", "shortDescription": {"text": "FastAPI POST `create_schedule` without auth dependency \u2014 ospra_os/reports/routes.py:315"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b043d4c5bb40aaf8", "name": "FastAPI PUT `update_schedule` without auth dependency \u2014 ospra_os/reports/routes.py:378", "shortDescription": {"text": "FastAPI PUT `update_schedule` without auth dependency \u2014 ospra_os/reports/routes.py:378"}, "fullDescription": {"text": "`@router.put` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d46e37961715f262", "name": "FastAPI DELETE `delete_schedule` without auth dependency \u2014 ospra_os/reports/routes.py:389", "shortDescription": {"text": "FastAPI DELETE `delete_schedule` without auth dependency \u2014 ospra_os/reports/routes.py:389"}, "fullDescription": {"text": "`@router.delete` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0390521c4666925f", "name": "FastAPI POST `run_schedule` without auth dependency \u2014 ospra_os/reports/routes.py:400", "shortDescription": {"text": "FastAPI POST `run_schedule` without auth dependency \u2014 ospra_os/reports/routes.py:400"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9e50c65ac5eafa3d", "name": "FastAPI POST `upload_video` without auth dependency \u2014 ospra_os/tiktok/routes.py:244", "shortDescription": {"text": "FastAPI POST `upload_video` without auth dependency \u2014 ospra_os/tiktok/routes.py:244"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3f002d90cfac84d5", "name": "FastAPI POST `start_scheduler` without auth dependency \u2014 ospra_os/jobs/routes.py:42", "shortDescription": {"text": "FastAPI POST `start_scheduler` without auth dependency \u2014 ospra_os/jobs/routes.py:42"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1d4656ec95e895e3", "name": "FastAPI POST `stop_scheduler` without auth dependency \u2014 ospra_os/jobs/routes.py:55", "shortDescription": {"text": "FastAPI POST `stop_scheduler` without auth dependency \u2014 ospra_os/jobs/routes.py:55"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0b0c2443df07b693", "name": "FastAPI POST `run_job_now` without auth dependency \u2014 ospra_os/jobs/routes.py:68", "shortDescription": {"text": "FastAPI POST `run_job_now` without auth dependency \u2014 ospra_os/jobs/routes.py:68"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d2e2576e8dac5ed6", "name": "Unused endpoint: GET /debug/intelligence", "shortDescription": {"text": "Unused endpoint: GET /debug/intelligence"}, "fullDescription": {"text": "`archive/legacy_mailbot/main.py` declares `GET /debug/intelligence` 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-d504b80adc9409ec", "name": "Unused endpoint: GET /dashboard", "shortDescription": {"text": "Unused endpoint: GET /dashboard"}, "fullDescription": {"text": "`archive/legacy_mailbot/main.py` declares `GET /dashboard` 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-16eec853d4ffbd82", "name": "Unused endpoint: GET /analytics/daily", "shortDescription": {"text": "Unused endpoint: GET /analytics/daily"}, "fullDescription": {"text": "`archive/legacy_mailbot/main.py` declares `GET /analytics/daily` 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-f378d4ceef532bab", "name": "Unused endpoint: GET /analytics/weekly", "shortDescription": {"text": "Unused endpoint: GET /analytics/weekly"}, "fullDescription": {"text": "`archive/legacy_mailbot/main.py` declares `GET /analytics/weekly` 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-3929eaa5b5e9e030", "name": "Unused endpoint: GET /analytics/costs", "shortDescription": {"text": "Unused endpoint: GET /analytics/costs"}, "fullDescription": {"text": "`archive/legacy_mailbot/main.py` declares `GET /analytics/costs` 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-78e46b1077ada169", "name": "Unused endpoint: GET /analytics/labels", "shortDescription": {"text": "Unused endpoint: GET /analytics/labels"}, "fullDescription": {"text": "`archive/legacy_mailbot/main.py` declares `GET /analytics/labels` 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-82248069701a8208", "name": "Unused endpoint: GET /analytics/cache-stats", "shortDescription": {"text": "Unused endpoint: GET /analytics/cache-stats"}, "fullDescription": {"text": "`archive/legacy_mailbot/main.py` declares `GET /analytics/cache-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-cdd463fb35f3cd1d", "name": "Unused endpoint: GET /auth/url", "shortDescription": {"text": "Unused endpoint: GET /auth/url"}, "fullDescription": {"text": "`archive/legacy_mailbot/main.py` declares `GET /auth/url` 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-0d9d34c62f12b3b1", "name": "Unused endpoint: GET /oauth2callback", "shortDescription": {"text": "Unused endpoint: GET /oauth2callback"}, "fullDescription": {"text": "`archive/legacy_mailbot/main.py` declares `GET /oauth2callback` 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-b2179998bc6df0f0", "name": "Unused endpoint: POST /gmail/ingest", "shortDescription": {"text": "Unused endpoint: POST /gmail/ingest"}, "fullDescription": {"text": "`archive/legacy_mailbot/main.py` declares `POST /gmail/ingest` 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-5c93600e7c176e3e", "name": "Unused endpoint: POST /gmail/send-demo", "shortDescription": {"text": "Unused endpoint: POST /gmail/send-demo"}, "fullDescription": {"text": "`archive/legacy_mailbot/main.py` declares `POST /gmail/send-demo` 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-b821b9bbbef1dfa4", "name": "Unused endpoint: POST /templates/upsert", "shortDescription": {"text": "Unused endpoint: POST /templates/upsert"}, "fullDescription": {"text": "`archive/legacy_mailbot/main.py` declares `POST /templates/upsert` 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-79012c5b374697e7", "name": "Unused endpoint: GET /templates/list", "shortDescription": {"text": "Unused endpoint: GET /templates/list"}, "fullDescription": {"text": "`archive/legacy_mailbot/main.py` declares `GET /templates/list` 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-e5c89f6cd3a64b87", "name": "Unused endpoint: POST /rules/set", "shortDescription": {"text": "Unused endpoint: POST /rules/set"}, "fullDescription": {"text": "`archive/legacy_mailbot/main.py` declares `POST /rules/set` 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-77b217061e906deb", "name": "Unused endpoint: GET /rules/preview", "shortDescription": {"text": "Unused endpoint: GET /rules/preview"}, "fullDescription": {"text": "`archive/legacy_mailbot/main.py` declares `GET /rules/preview` 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-21516d7384e255cf", "name": "Unused endpoint: POST /gmail/ensure-labels", "shortDescription": {"text": "Unused endpoint: POST /gmail/ensure-labels"}, "fullDescription": {"text": "`archive/legacy_mailbot/main.py` declares `POST /gmail/ensure-labels` 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-88e7d4b3a2b1defd", "name": "Unused endpoint: POST /gmail/process-inbox2", "shortDescription": {"text": "Unused endpoint: POST /gmail/process-inbox2"}, "fullDescription": {"text": "`archive/legacy_mailbot/main.py` declares `POST /gmail/process-inbox2` 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-fdb14e434178928d", "name": "Unused endpoint: GET /debug/peek", "shortDescription": {"text": "Unused endpoint: GET /debug/peek"}, "fullDescription": {"text": "`archive/legacy_mailbot/main.py` declares `GET /debug/peek` 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-09bc08a7dce509c4", "name": "Unused endpoint: POST /gmail/process-inbox", "shortDescription": {"text": "Unused endpoint: POST /gmail/process-inbox"}, "fullDescription": {"text": "`archive/legacy_mailbot/main.py` declares `POST /gmail/process-inbox` 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-c43ca824dcf51f74", "name": "Unused endpoint: POST /ai/reply-draft", "shortDescription": {"text": "Unused endpoint: POST /ai/reply-draft"}, "fullDescription": {"text": "`archive/legacy_mailbot/main.py` declares `POST /ai/reply-draft` 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-dbbcfebf364c5a82", "name": "Unused endpoint: POST /gmail/smart-process", "shortDescription": {"text": "Unused endpoint: POST /gmail/smart-process"}, "fullDescription": {"text": "`archive/legacy_mailbot/main.py` declares `POST /gmail/smart-process` 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-dadde88ae01e4077", "name": "Unused endpoint: POST /gmail/pubsub/webhook", "shortDescription": {"text": "Unused endpoint: POST /gmail/pubsub/webhook"}, "fullDescription": {"text": "`archive/legacy_mailbot/main.py` declares `POST /gmail/pubsub/webhook` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-963c797a9352e584", "name": "Unused endpoint: POST /gmail/watch/start", "shortDescription": {"text": "Unused endpoint: POST /gmail/watch/start"}, "fullDescription": {"text": "`archive/legacy_mailbot/main.py` declares `POST /gmail/watch/start` 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-b236657d102d073a", "name": "Unused endpoint: POST /gmail/watch/stop", "shortDescription": {"text": "Unused endpoint: POST /gmail/watch/stop"}, "fullDescription": {"text": "`archive/legacy_mailbot/main.py` declares `POST /gmail/watch/stop` 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-91427b7d02ffb2dc", "name": "Unused endpoint: GET /gmail/watch/status", "shortDescription": {"text": "Unused endpoint: GET /gmail/watch/status"}, "fullDescription": {"text": "`archive/legacy_mailbot/main.py` declares `GET /gmail/watch/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-d0131fa36032448a", "name": "Unused endpoint: GET /api/claude/daily-briefing", "shortDescription": {"text": "Unused endpoint: GET /api/claude/daily-briefing"}, "fullDescription": {"text": "`archive/legacy_mailbot/main.py` declares `GET /api/claude/daily-briefing` 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-0d2c1bc8cd52aefc", "name": "Unused endpoint: GET /api/claude/weekly-report", "shortDescription": {"text": "Unused endpoint: GET /api/claude/weekly-report"}, "fullDescription": {"text": "`archive/legacy_mailbot/main.py` declares `GET /api/claude/weekly-report` 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-fb85b9955ee6df07", "name": "Unused endpoint: POST /api/claude/chat", "shortDescription": {"text": "Unused endpoint: POST /api/claude/chat"}, "fullDescription": {"text": "`archive/legacy_mailbot/main.py` declares `POST /api/claude/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-4cd731bf871d81e8", "name": "Unused endpoint: POST /api/claude/chat/reset", "shortDescription": {"text": "Unused endpoint: POST /api/claude/chat/reset"}, "fullDescription": {"text": "`archive/legacy_mailbot/main.py` declares `POST /api/claude/chat/reset` 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-953eab4b09345a62", "name": "Unused endpoint: POST /api/intelligence/discover", "shortDescription": {"text": "Unused endpoint: POST /api/intelligence/discover"}, "fullDescription": {"text": "`archive/legacy_mailbot/main.py` declares `POST /api/intelligence/discover` 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-f0264347d61c569d", "name": "Unused endpoint: GET /api/intelligence/stats", "shortDescription": {"text": "Unused endpoint: GET /api/intelligence/stats"}, "fullDescription": {"text": "`archive/legacy_mailbot/main.py` declares `GET /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-38e10c9260a97912", "name": "Unused endpoint: GET /api/apify/status", "shortDescription": {"text": "Unused endpoint: GET /api/apify/status"}, "fullDescription": {"text": "`archive/legacy_mailbot/main.py` declares `GET /api/apify/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-1b8edf34a912e17b", "name": "Unused endpoint: POST /api/v2/discover", "shortDescription": {"text": "Unused endpoint: POST /api/v2/discover"}, "fullDescription": {"text": "`archive/legacy_mailbot/main.py` declares `POST /api/v2/discover` 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-af7d6198f96b0a20", "name": "Unused endpoint: GET /api/v2/trending", "shortDescription": {"text": "Unused endpoint: GET /api/v2/trending"}, "fullDescription": {"text": "`archive/legacy_mailbot/main.py` declares `GET /api/v2/trending` 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-36f90e9f27736d47", "name": "Unused endpoint: GET /api/v2/niches", "shortDescription": {"text": "Unused endpoint: GET /api/v2/niches"}, "fullDescription": {"text": "`archive/legacy_mailbot/main.py` declares `GET /api/v2/niches` 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-69d395f3747c4003", "name": "Unused endpoint: GET /api/trends/ecommerce", "shortDescription": {"text": "Unused endpoint: GET /api/trends/ecommerce"}, "fullDescription": {"text": "`archive/legacy_mailbot/main.py` declares `GET /api/trends/ecommerce` 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-f699c6eea9c4f6eb", "name": "Unused endpoint: POST /api/ai/chat", "shortDescription": {"text": "Unused endpoint: POST /api/ai/chat"}, "fullDescription": {"text": "`archive/legacy_mailbot/main.py` declares `POST /api/ai/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-696f567fe6855cee", "name": "Unused endpoint: POST /api/email/sync", "shortDescription": {"text": "Unused endpoint: POST /api/email/sync"}, "fullDescription": {"text": "`archive/legacy_mailbot/main.py` declares `POST /api/email/sync` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3d323ee696489a6e", "name": "Unused endpoint: GET /api/health/detailed", "shortDescription": {"text": "Unused endpoint: GET /api/health/detailed"}, "fullDescription": {"text": "`ospra_os/main.py` declares `GET /api/health/detailed` 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-b5f1b78716fae3fb", "name": "Unused endpoint: POST /api/admin/run-discovery-now", "shortDescription": {"text": "Unused endpoint: POST /api/admin/run-discovery-now"}, "fullDescription": {"text": "`ospra_os/main.py` declares `POST /api/admin/run-discovery-now` 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-df619f2cd9d0cb17", "name": "Unused endpoint: GET /api/platforms", "shortDescription": {"text": "Unused endpoint: GET /api/platforms"}, "fullDescription": {"text": "`ospra_os/main.py` declares `GET /api/platforms` 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-82f20f787b8c8a68", "name": "Unused endpoint: POST /api/platforms/{platform}/test", "shortDescription": {"text": "Unused endpoint: POST /api/platforms/{platform}/test"}, "fullDescription": {"text": "`ospra_os/main.py` declares `POST /api/platforms/{platform}/test` 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-ec24b474cd77d675", "name": "Unused endpoint: POST /api/discover", "shortDescription": {"text": "Unused endpoint: POST /api/discover"}, "fullDescription": {"text": "`ospra_os/main.py` declares `POST /api/discover` 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-bcd0feca69dc0231", "name": "Unused endpoint: POST /api/validate-product", "shortDescription": {"text": "Unused endpoint: POST /api/validate-product"}, "fullDescription": {"text": "`ospra_os/main.py` declares `POST /api/validate-product` 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-595e0fd8fef02112", "name": "Unused endpoint: POST /api/discover-multi", "shortDescription": {"text": "Unused endpoint: POST /api/discover-multi"}, "fullDescription": {"text": "`ospra_os/main.py` declares `POST /api/discover-multi` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ee0dd41675c528e7", "name": "Unused endpoint: POST /api/deploy-to-shopify", "shortDescription": {"text": "Unused endpoint: POST /api/deploy-to-shopify"}, "fullDescription": {"text": "`ospra_os/main.py` declares `POST /api/deploy-to-shopify` 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-9915456171a9c467", "name": "Unused endpoint: POST /api/generate-content", "shortDescription": {"text": "Unused endpoint: POST /api/generate-content"}, "fullDescription": {"text": "`ospra_os/main.py` declares `POST /api/generate-content` 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-d448e546e8139423", "name": "Unused endpoint: POST /api/scrape-aliexpress-product", "shortDescription": {"text": "Unused endpoint: POST /api/scrape-aliexpress-product"}, "fullDescription": {"text": "`ospra_os/main.py` declares `POST /api/scrape-aliexpress-product` 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-80bc1eb9e5544b27", "name": "Unused endpoint: POST /api/optimize-price", "shortDescription": {"text": "Unused endpoint: POST /api/optimize-price"}, "fullDescription": {"text": "`ospra_os/main.py` declares `POST /api/optimize-price` 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-a9993f20fe1cb322", "name": "Unused endpoint: POST /api/marketing/generate-angle", "shortDescription": {"text": "Unused endpoint: POST /api/marketing/generate-angle"}, "fullDescription": {"text": "`ospra_os/main.py` declares `POST /api/marketing/generate-angle` 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/20316"}, "properties": {"repository": "StephPonce/oubon_mailbot", "repoUrl": "https://github.com/StephPonce/oubon_mailbot", "branch": "main"}, "results": [{"ruleId": "foundry_unresolved_feedback", "level": "warning", "message": {"text": "Foundry mined unresolved feedback: StephPonce/oubon_mailbot"}, "properties": {"repobilityId": 462947, "scanner": "foundry_dataset", "fingerprint": "5d6dc690770fbb78ff62b1ec961aa03f4a6b7d0222d5cdd7dd904657c260e667", "category": "practices", "severity": "medium", "confidence": 0.7, "triageState": "open", "verdict": "needs_review", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "graph_query_record", "title": "Human feedback without linked fix evidence", "intent": "Negative/unresolved examples that should not be hallucinated into fixes.", "labels": {"docs_or_claims": 3, "human_feedback_general": 1, "unlinked_human_feedback": 1, "thread_needs_classification": 2, "issue_or_pull_request_thread": 1, "ambiguous_needs_more_evidence": 3}, "source": "graph_query_export", "motif_id": "unlinked_feedback_needs_evidence", "outcomes": {"ambiguous_needs_more_evidence": 6}, "polarity": "bad", "query_id": "unresolved_feedback", "severity": "medium", "ci_labels": {}, "synthetic": false, "edge_count": 20, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 1, "thread_has_comment": 1, "thread_touches_file": 3, "chain_has_link_quality": 3, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 3, "thread_has_comment_chain": 1, "comment_chain_touches_file": 3, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 1}, "node_count": 12, "node_types": {"repo": 1, "thread": 1, "comment": 1, "pr_file": 3, "fix_outcome": 1, "issue_chain": 1, "link_quality": 3, "comment_chain": 1}, "query_type": "motif_query", "thread_key": "StephPonce/oubon_mailbot#2", "issue_number": "2", "quality_tiers": {"unresolved": 3}, "repo_full_name": "StephPonce/oubon_mailbot", "training_usage": "negative_or_unresolved", "source_motif_id": "graph-pattern-motif-thread-bb581e4af6860a77", "graph_gold_label": "needs_more_evidence", "changed_file_labels": {"docs_or_claims": 12}}, "text": "Graph query export: Human feedback without linked fix evidence\nQuery id: unresolved_feedback\nQuery type: motif_query\nIntent: Negative/unresolved examples that should not be hallucinated into fixes.\nMotif: unlinked_feedback_needs_evidence\nTraining usage: negative_or_unresolved\nGraph gold label: needs_more_evidence\nRepo: StephPonce/oubon_mailbot\nThread: StephPonce/oubon_mailbot#2\nEvidence:\nGraph motif: Human feedback exists without a linked fix\nMotif id: unlinked_feedback_needs_evidence\nPolarity: bad\nTraining usage: negative_or_unresolved\nSeverity: medium\nRepo: StephPonce/oubon_mailbot\nThread: StephPonce/oubon_mailbot#2\nGraph gold label: needs_more_evidence\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: StephPonce/oubon_mailbot#2\nRepo: StephPonce/oubon_mailbot\nIssue/PR number: 2\nGraph consistency label: needs_more_evidence\nNodes: 12\nEdges: 20\nNode types: {'pr_file': 3, 'link_quality': 3, 'thread': 1, 'repo': 1, 'comment': 1, 'comment_chain': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'thread_touches_file': 3, 'comment_chain_touches_file': 3, 'chain_has_link_quality': 3, 'issue_chain_touches_file': 3, 'repo_has_thread': 1, 'thread_has_comment': 1, 'thread_has_comment_chain': 1, 'comment_has_chain': 1, 'thread_has_issue_chain': 1, 'issue_chain_has_comment_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'docs_or_claims': 3, 'ambiguous_needs_more_evidence': 3, 'thread_needs_classification': 2, 'issue_or_pull_request_thread': 1, 'human_feedback_general': 1, 'unlinked_human_feedback': 1}\nOutcomes: {'ambiguous_needs_more_evidence': 6}\nQuality tiers: {'unresolved': 3}\nCI labels: {}\nCurriculum targets:\n- Teach models to preserve unresolved human feedback instead of hallucinating fixes.\n- Build issue-to-regression examples where no accepted fix exists yet.\nAssumption checks:\n- Can a commit be linked by issue number, SHA, changed path, or time window?\n- If no link exists, is this explicitly labelled unresolved?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/StephPonce/oubon_mailbot", "source_id": "graph-query-motif_query-052e35cf84f4204d", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/unresolved_feedback/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "StephPonce/oubon_mailbot", "source_dataset": "graph_queries/unresolved_feedback", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_assumption_check", "level": "warning", "message": {"text": "Foundry mined assumption checks: StephPonce/oubon_mailbot"}, "properties": {"repobilityId": 434340, "scanner": "foundry_dataset", "fingerprint": "b63d16f944b7d75414063193f320f2e80282ab631b0ab8850358624f9239229a", "category": "practices", "severity": "medium", "confidence": 0.62, "triageState": "open", "verdict": "needs_review", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "comment_chain_pattern_product", "source": "comment_chain_pattern_miner", "product": "assumption_checks", "synthetic": false, "thread_key": "StephPonce/oubon_mailbot#2", "human_labels": ["docs_or_claims", "human_feedback_general"], "issue_number": "2", "thread_label": "thread_needs_classification", "outcome_label": "ambiguous_needs_more_evidence", "source_backed": true, "max_confidence": 0.0, "repo_full_name": "StephPonce/oubon_mailbot", "training_usage": "negative_or_unresolved", "confidence_tier": "unresolved", "source_chain_id": "evidence-chain-issue_chain-8986aa25467baa01", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"ci": 3, "docs": 3, "schemas": 2}, "source_chain_kind": "issue_chain", "changed_file_count": 3, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {"docs_or_claims": 3}, "linked_commit_count": 0, "helicopter_view_count": 4, "source_artifact_count": 8, "classification_reasons": ["source_graph_has_real_artifacts", "source_graph_has_verification_artifacts", "repo_has_isolated_helicopter_views", "link_quality_unresolved"], "linked_ci_commit_count": 0, "verification_artifact_count": 5, "design_schema_api_artifact_count": 2}, "text": "Comment chain pattern product: assumption_checks\nRepo: StephPonce/oubon_mailbot\nThread: StephPonce/oubon_mailbot#2\nOutcome: ambiguous_needs_more_evidence\nThread label: thread_needs_classification\nSource graph label: source_backed_multi_signal_graph\nReasons: source_graph_has_real_artifacts, source_graph_has_verification_artifacts, repo_has_isolated_helicopter_views, link_quality_unresolved\nChain evidence:\nIssue/PR evidence chain: StephPonce/oubon_mailbot#2\nRepo: StephPonce/oubon_mailbot\nThread label: thread_needs_classification\nOutcome: ambiguous_needs_more_evidence\nComment count: 1\nLinked commit count: 0\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 3\nLabels: {'human_feedback_general': 1}\nPolarities: {'neutral': 1}\nChanged file labels: {'docs_or_claims': 3}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-fe2a6e3d132c19f3\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"human_feedback_general\",\n    \"polarity\": \"neutral\",\n    \"url\": \"https://github.com/StephPonce/oubon_mailbot/pull/2\",\n    \"text\": \"GitHub feedback: human_feedback_general\\nPolarity: neutral\\nKind: pull_request_body\\nRepo: StephPonce/oubon_mailbot\\nAuthor: StephPonce (User)\\nURL: https://github.com/StephPonce/oubon_mailbot/pull/2\\nTitle: Add minimal Privacy Policy & Terms for GitHub Pages\\nBody:\\n\"\n  }\n]\nChanged files:\n[\n  {\n    \"id\": \"github-pr-file-file-784e6c3db4248733\",\n    \"filename\": \"docs/index.html\",\n    \"label\": \"docs_or_claims\",\n    \"status\": \"added\",\n    \"additions\": 9,\n    \"deletions\": 0,\n    \"changes\": 9,\n    \"blob_url\": \"https://github.com/StephPonce/oubon_mailbot/blob/42b21821c06be1032f3f3370e3e8cb8e888857e8/docs%2Findex.html\"\n  },\n  {\n    \"id\": \"github-pr-file-file-013fe4860e2b8586\",\n    \"filename\": \"docs/privacy.html\",\n    \"label\": \"docs_or_claims\",\n    \"status\": \"added\",\n    \"additions\": 13,\n    \"deletions\": 0,\n    \"changes\": 13,\n    \"blob_url\": \"https://github.com/StephPonce/oubon_mailbot/blob/42b21821c06be1032f3f3370e3e8cb8e888857e8/docs%2Fprivacy.html\"\n  },\n  {\n    \"id\": \"github-pr-file-file-e292243195bac5da\",\n    \"filename\": \"docs/terms.html\",\n    \"label\": \"docs_or_claims\",\n    \"status\": \"added\",\n    \"additions\": 9,\n    \"deletions\": 0,\n    \"changes\": 9,\n    \"blob_url\": \"https://github.com/StephPonce/oubon_mailbot/blob/42b21821c06be1032f3f3370e3e8cb8e888857e8/docs%2Fterms.html\"\n  }\n]\nLinked chain ids:\n[\"evidence-chain-comment_to_commit-48ae1d2d48972d1e\"]\nSource graph evidence:\nSource evidence repo graph summary\nRepo: StephPonce/oubon_mailbot\nGraph label: source_backed_multi_signal_graph\nNodes: 16\nEdges: 24\nNode types: {\"cooccurrence_profile\": 1, \"github_repo_summary\": 1, \"helicopter_repo_view\": 4, \"repo\": 1, \"source_artifact\": 8, \"source_bundle\": 1}\nEdge types: {\"artifact_needs_claim_verification\": 3, \"artifact_supports_verification\": 5, \"repo_has_cooccurrence_profile\": 1, \"repo_has_github_evidence_summary\": 1, \"repo_has_graphs_helicopter_view\": 2, \"repo_has_schemas_helicopter_view\": 2, \"repo_has_source_arti\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/StephPonce/oubon_mailbot", "source_id": "comment-chain-pattern-assumption_checks-b85f663c000f6bf9", "synthetic": false, "gold_label": "", "graph_label": "source_backed_multi_signal_graph", "source_path": "/data/distillate/foundry_data/comment_chain_patterns/assumption_checks/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "StephPonce/oubon_mailbot", "source_dataset": "comment_chain_patterns/assumption_checks", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_assumption_check", "level": "warning", "message": {"text": "Foundry mined assumption checks: StephPonce/oubon_mailbot"}, "properties": {"repobilityId": 434339, "scanner": "foundry_dataset", "fingerprint": "e3017febd812ab5ec48454e4a97f6004d90272dd40a561dd1acc03cd014a1445", "category": "practices", "severity": "medium", "confidence": 0.62, "triageState": "open", "verdict": "needs_review", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "comment_chain_pattern_product", "source": "comment_chain_pattern_miner", "product": "assumption_checks", "synthetic": false, "thread_key": "StephPonce/oubon_mailbot#1", "human_labels": ["api_or_backend", "dependency_or_build", "docs_or_claims", "human_feedback_general", "schema_or_data", "security_or_auth", "source_or_other", "test_or_ci", "ui_or_frontend"], "issue_number": "1", "thread_label": "thread_needs_classification", "outcome_label": "ambiguous_needs_more_evidence", "source_backed": true, "max_confidence": 0.664, "repo_full_name": "StephPonce/oubon_mailbot", "training_usage": "weak_supervision", "confidence_tier": "weak_supervision", "source_chain_id": "evidence-chain-issue_chain-555a2409f19f097a", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"ci": 3, "docs": 3, "schemas": 2}, "source_chain_kind": "issue_chain", "changed_file_count": 100, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {"test_or_ci": 2, "api_or_backend": 7, "docs_or_claims": 2, "schema_or_data": 1, "ui_or_frontend": 27, "source_or_other": 58, "security_or_auth": 2, "dependency_or_build": 1}, "linked_commit_count": 1, "helicopter_view_count": 4, "source_artifact_count": 8, "classification_reasons": ["source_graph_has_real_artifacts", "source_graph_has_verification_artifacts", "repo_has_isolated_helicopter_views", "link_quality_weak_supervision"], "linked_ci_commit_count": 1, "verification_artifact_count": 5, "design_schema_api_artifact_count": 2}, "text": "Comment chain pattern product: assumption_checks\nRepo: StephPonce/oubon_mailbot\nThread: StephPonce/oubon_mailbot#1\nOutcome: ambiguous_needs_more_evidence\nThread label: thread_needs_classification\nSource graph label: source_backed_multi_signal_graph\nReasons: source_graph_has_real_artifacts, source_graph_has_verification_artifacts, repo_has_isolated_helicopter_views, link_quality_weak_supervision\nChain evidence:\nIssue/PR evidence chain: StephPonce/oubon_mailbot#1\nRepo: StephPonce/oubon_mailbot\nThread label: thread_needs_classification\nOutcome: ambiguous_needs_more_evidence\nComment count: 1\nLinked commit count: 1\nLinked CI commit count: 1\nLinked CI labels: {'ci_failure_signal': 1}\nChanged file count: 100\nLabels: {'human_feedback_general': 1}\nPolarities: {'neutral': 1}\nChanged file labels: {'source_or_other': 58, 'security_or_auth': 2, 'ui_or_frontend': 27, 'schema_or_data': 1, 'api_or_backend': 7, 'docs_or_claims': 2, 'dependency_or_build': 1, 'test_or_ci': 2}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-5dd84f89d867c1a7\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"human_feedback_general\",\n    \"polarity\": \"neutral\",\n    \"url\": \"https://github.com/StephPonce/oubon_mailbot/pull/1\",\n    \"text\": \"GitHub feedback: human_feedback_general\\nPolarity: neutral\\nKind: pull_request_body\\nRepo: StephPonce/oubon_mailbot\\nAuthor: StephPonce (User)\\nURL: https://github.com/StephPonce/oubon_mailbot/pull/1\\nTitle: Chore/rewrite oubon to ospra\\nBody:\\n\"\n  }\n]\nChanged files:\n[\n  {\n    \"id\": \"github-pr-file-file-5279498113d4dd67\",\n    \"filename\": \".DS_Store\",\n    \"label\": \"source_or_other\",\n    \"status\": \"removed\",\n    \"additions\": 0,\n    \"deletions\": 0,\n    \"changes\": 0,\n    \"blob_url\": \"https://github.com/StephPonce/oubon_mailbot/blob/7e83b652bac6c15a861c38bd11f8afec8871d1e3/.DS_Store\"\n  },\n  {\n    \"id\": \"github-pr-file-file-3dfb3a1270f42c3f\",\n    \"filename\": \".cursorrules/.cursorrules\",\n    \"label\": \"source_or_other\",\n    \"status\": \"added\",\n    \"additions\": 36,\n    \"deletions\": 0,\n    \"changes\": 36,\n    \"blob_url\": \"https://github.com/StephPonce/oubon_mailbot/blob/ad79be19cd5f51fee1d483ee1d16d72a4ac77951/.cursorrules%2F.cursorrules\"\n  },\n  {\n    \"id\": \"github-pr-file-file-5e70ba975734017f\",\n    \"filename\": \".dockerignore\",\n    \"label\": \"source_or_other\",\n    \"status\": \"added\",\n    \"additions\": 25,\n    \"deletions\": 0,\n    \"changes\": 25,\n    \"blob_url\": \"https://github.com/StephPonce/oubon_mailbot/blob/ad79be19cd5f51fee1d483ee1d16d72a4ac77951/.dockerignore\"\n  },\n  {\n    \"id\": \"github-pr-file-file-a6c3caa0ccf2362f\",\n    \"filename\": \".env\",\n    \"label\": \"source_or_other\",\n    \"status\": \"removed\",\n    \"additions\": 0,\n    \"deletions\": 28,\n    \"changes\": 28,\n    \"blob_url\": \"https://github.com/StephPonce/oubon_mailbot/blob/7e83b652bac6c15a861c38bd11f8afec8871d1e3/.env\"\n  },\n  {\n    \"id\": \"github-pr-file-file-79290d4f698791e1\",\n    \"filename\": \".env.example\",\n    \"label\": \"source_or_other\",\n    \"status\": \"modified\",\n    \"additions\":\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/StephPonce/oubon_mailbot", "source_id": "comment-chain-pattern-assumption_checks-0eb95207acbc30c1", "synthetic": false, "gold_label": "", "graph_label": "source_backed_multi_signal_graph", "source_path": "/data/distillate/foundry_data/comment_chain_patterns/assumption_checks/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "StephPonce/oubon_mailbot", "source_dataset": "comment_chain_patterns/assumption_checks", "training_usage": "weak_supervision"}}}, {"ruleId": "foundry_failing_ci_claim", "level": "error", "message": {"text": "Foundry mined claimed resolved with failing ci: StephPonce/oubon_mailbot"}, "properties": {"repobilityId": 450382, "scanner": "foundry_dataset", "fingerprint": "1c263f025cc3b4489ed7bda7a5a659cce75d0d68788f621c96c618bfa8ce205d", "category": "ci", "severity": "critical", "confidence": 0.86, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "graph_query_record", "title": "Claimed resolved with failing CI", "intent": "Hard negatives where CI/failure evidence contradicts a resolution claim.", "labels": {"bug_fix": 1, "test_or_ci": 2, "api_or_backend": 7, "docs_or_claims": 2, "schema_or_data": 1, "ui_or_frontend": 27, "source_or_other": 58, "security_or_auth": 2, "ci_failure_signal": 1, "dependency_or_build": 1, "human_feedback_general": 1, "thread_needs_classification": 2, "issue_or_pull_request_thread": 1, "ambiguous_needs_more_evidence": 3, "comment_has_related_commit_context": 1}, "source": "graph_query_export", "motif_id": "claimed_resolved_with_failing_ci", "outcomes": {"ambiguous_needs_more_evidence": 6}, "polarity": "bad", "query_id": "claimed_resolved_with_failing_ci", "severity": "critical", "ci_labels": {"ci_failure_signal": 2}, "synthetic": false, "edge_count": 137, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 1, "thread_has_comment": 1, "thread_touches_file": 100, "comment_chain_has_ci": 1, "chain_has_link_quality": 3, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 12, "thread_has_comment_chain": 1, "comment_chain_links_commit": 1, "comment_chain_touches_file": 12, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 1}, "node_count": 111, "node_types": {"repo": 1, "commit": 1, "thread": 1, "comment": 1, "pr_file": 100, "ci_summary": 1, "fix_outcome": 1, "issue_chain": 1, "link_quality": 3, "comment_chain": 1}, "query_type": "motif_query", "thread_key": "StephPonce/oubon_mailbot#1", "issue_number": "1", "quality_tiers": {"weak_supervision": 3}, "repo_full_name": "StephPonce/oubon_mailbot", "training_usage": "hard_negative", "source_motif_id": "graph-pattern-motif-thread-8343ab7d97303fb2", "graph_gold_label": "contradicted_by_ci_or_failure_signal", "changed_file_labels": {"test_or_ci": 8, "api_or_backend": 28, "docs_or_claims": 8, "schema_or_data": 4, "ui_or_frontend": 108, "source_or_other": 232, "security_or_auth": 8, "dependency_or_build": 4}}, "text": "Graph query export: Claimed resolved with failing CI\nQuery id: claimed_resolved_with_failing_ci\nQuery type: motif_query\nIntent: Hard negatives where CI/failure evidence contradicts a resolution claim.\nMotif: claimed_resolved_with_failing_ci\nTraining usage: hard_negative\nGraph gold label: contradicted_by_ci_or_failure_signal\nRepo: StephPonce/oubon_mailbot\nThread: StephPonce/oubon_mailbot#1\nEvidence:\nGraph motif: Claimed resolved while CI or failure evidence contradicts it\nMotif id: claimed_resolved_with_failing_ci\nPolarity: bad\nTraining usage: hard_negative\nSeverity: critical\nRepo: StephPonce/oubon_mailbot\nThread: StephPonce/oubon_mailbot#1\nGraph gold label: contradicted_by_ci_or_failure_signal\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: StephPonce/oubon_mailbot#1\nRepo: StephPonce/oubon_mailbot\nIssue/PR number: 1\nGraph consistency label: contradicted_by_ci_or_failure_signal\nNodes: 111\nEdges: 137\nNode types: {'pr_file': 100, 'link_quality': 3, 'thread': 1, 'repo': 1, 'comment': 1, 'comment_chain': 1, 'commit': 1, 'ci_summary': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'thread_touches_file': 100, 'comment_chain_touches_file': 12, 'issue_chain_touches_file': 12, 'chain_has_link_quality': 3, 'repo_has_thread': 1, 'thread_has_comment': 1, 'thread_has_comment_chain': 1, 'comment_has_chain': 1, 'comment_chain_links_commit': 1, 'comment_chain_has_ci': 1, 'thread_has_issue_chain': 1, 'issue_chain_has_comment_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'source_or_other': 58, 'ui_or_frontend': 27, 'api_or_backend': 7, 'ambiguous_needs_more_evidence': 3, 'security_or_auth': 2, 'docs_or_claims': 2, 'test_or_ci': 2, 'thread_needs_classification': 2, 'issue_or_pull_request_thread': 1, 'human_feedback_general': 1, 'schema_or_data': 1, 'dependency_or_build': 1, 'comment_has_related_commit_context': 1, 'bug_fix': 1, 'ci_failure_signal': 1}\nOutcomes: {'ambiguous_needs_more_evidence': 6}\nQuality tiers: {'weak_supervision': 3}\nCI labels: {'ci_failure_signal': 2}\nCurriculum targets:\n- Reject confident fix summaries when CI or checks fail.\n- Teach judge models to prefer external verification over generated narrative.\nAssumption checks:\n- Did checks fail on the linked commit?\n- Does the thread claim resolution despite failing or incomplete verification?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/StephPonce/oubon_mailbot", "source_id": "graph-query-motif_query-675a6aefdf99a85d", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/claimed_resolved_with_failing_ci/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "StephPonce/oubon_mailbot", "source_dataset": "graph_queries/claimed_resolved_with_failing_ci", "training_usage": "hard_negative"}}}, {"ruleId": "scanner-5bdf52cc26771c6a", "level": "note", "message": {"text": "Possibly dead Python function: process_emails_background"}, "properties": {"repobilityId": "d30bbfe0e14487b2", "scanner": "scanner-primary", "fingerprint": "5bdf52cc26771c6a", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "archive/legacy_mailbot/main.py:785"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-552f0b17f2632001", "level": "note", "message": {"text": "Possibly dead Python function: clear_expired_cache"}, "properties": {"repobilityId": "43b00762ec9e76aa", "scanner": "scanner-primary", "fingerprint": "552f0b17f2632001", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "archive/legacy_mailbot/app/response_cache.py:173"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-914c333ea987ed7b", "level": "note", "message": {"text": "Possibly dead Python function: smart_check_emails_job"}, "properties": {"repobilityId": "21206d0a057d6884", "scanner": "scanner-primary", "fingerprint": "914c333ea987ed7b", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "archive/legacy_mailbot/app/scheduler.py:125"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-cecc695269c932a9", "level": "note", "message": {"text": "Possibly dead Python function: is_quiet_hours"}, "properties": {"repobilityId": "c435e4ad8ad03265", "scanner": "scanner-primary", "fingerprint": "cecc695269c932a9", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "archive/legacy_mailbot/app/business_hours.py:42"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-0eea6e8628af19ac", "level": "note", "message": {"text": "Possibly dead Python function: monitoring_task"}, "properties": {"repobilityId": "dc7d9481877a5d33", "scanner": "scanner-primary", "fingerprint": "0eea6e8628af19ac", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/main.py:1476"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-ad3290ba788aef86", "level": "note", "message": {"text": "Possibly dead Python function: create_inbound_shipment_plan"}, "properties": {"repobilityId": "42609fc90d419a5a", "scanner": "scanner-primary", "fingerprint": "ad3290ba788aef86", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/integrations/amazon_client.py:676"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-0741027803f6c30c", "level": "note", "message": {"text": "Possibly dead Python function: create_report"}, "properties": {"repobilityId": "4b7a736da3bd9369", "scanner": "scanner-primary", "fingerprint": "0741027803f6c30c", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/integrations/amazon_client.py:852"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-fc48ffaddcb933c8", "level": "note", "message": {"text": "Possibly dead Python function: check_inventory"}, "properties": {"repobilityId": "7a9f78c27cce47f3", "scanner": "scanner-primary", "fingerprint": "fc48ffaddcb933c8", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/integrations/cj_dropshipping.py:257"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-81054b12b9cb0872", "level": "note", "message": {"text": "Possibly dead Python function: delete_campaign"}, "properties": {"repobilityId": "090194b2d8ab50e8", "scanner": "scanner-primary", "fingerprint": "81054b12b9cb0872", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/integrations/meta/client.py:417"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-9a5a8027f3e4240c", "level": "note", "message": {"text": "Possibly dead Python function: search_cj_products"}, "properties": {"repobilityId": "2f23b616a52f7e93", "scanner": "scanner-primary", "fingerprint": "9a5a8027f3e4240c", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/integrations/cj_dropshipping/client.py:828"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-84117a213f18248b", "level": "note", "message": {"text": "Possibly dead Python function: search_cj_by_niche"}, "properties": {"repobilityId": "9621cafddbb80cb2", "scanner": "scanner-primary", "fingerprint": "84117a213f18248b", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/integrations/cj_dropshipping/client.py:834"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-77461d5fed5832ec", "level": "note", "message": {"text": "Possibly dead Python function: bulk_fulfill"}, "properties": {"repobilityId": "217412d7f8a77054", "scanner": "scanner-primary", "fingerprint": "77461d5fed5832ec", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/integrations/aliexpress/fulfillment.py:161"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-a608431476508240", "level": "note", "message": {"text": "Possibly dead Python function: create_and_publish_product"}, "properties": {"repobilityId": "07625eafaf2d172e", "scanner": "scanner-primary", "fingerprint": "a608431476508240", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/integrations/shopify/client.py:444"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-8139ae984d3dc91d", "level": "note", "message": {"text": "Possibly dead Python function: log_login_failure"}, "properties": {"repobilityId": "ed3adcb61c46b212", "scanner": "scanner-primary", "fingerprint": "8139ae984d3dc91d", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/security/auth_logger.py:102"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-57fea84871f1ae30", "level": "note", "message": {"text": "Possibly dead Python function: log_token_refresh"}, "properties": {"repobilityId": "4c925f1780227900", "scanner": "scanner-primary", "fingerprint": "57fea84871f1ae30", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/security/auth_logger.py:110"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-8d2e856348abc933", "level": "note", "message": {"text": "Possibly dead Python function: log_logout"}, "properties": {"repobilityId": "76506d214f427040", "scanner": "scanner-primary", "fingerprint": "8d2e856348abc933", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/security/auth_logger.py:118"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-a01897d3eea77574", "level": "note", "message": {"text": "Possibly dead Python function: log_suspicious_activity"}, "properties": {"repobilityId": "7cfc1853dfcae533", "scanner": "scanner-primary", "fingerprint": "a01897d3eea77574", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/security/auth_logger.py:125"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-bfdf960d4a60650e", "level": "note", "message": {"text": "Possibly dead Python function: log_permission_denied"}, "properties": {"repobilityId": "c15b51a7d13913f8", "scanner": "scanner-primary", "fingerprint": "bfdf960d4a60650e", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/security/auth_logger.py:140"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-92eedcf889c44ca2", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/Settings.jsx:130"}, "properties": {"repobilityId": "275575a0f69132aa", "scanner": "scanner-primary", "fingerprint": "92eedcf889c44ca2", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-57a1087224c7abcf", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 frontend/src/components/OiChat.jsx:96"}, "properties": {"repobilityId": "17b5f952039805ab", "scanner": "scanner-primary", "fingerprint": "57a1087224c7abcf", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ec493f78430de307", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/ProductDiscovery.jsx:1149"}, "properties": {"repobilityId": "9117fa4ba11f0c43", "scanner": "scanner-primary", "fingerprint": "ec493f78430de307", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b63caa889a38de66", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 frontend/src/components/ProductDiscovery.jsx:1515"}, "properties": {"repobilityId": "2137b537538f5bc9", "scanner": "scanner-primary", "fingerprint": "b63caa889a38de66", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b7c37933a8a1fbe2", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/Dashboard.jsx:158"}, "properties": {"repobilityId": "17ac0e31d4360744", "scanner": "scanner-primary", "fingerprint": "b7c37933a8a1fbe2", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b7e651b9dc5befaa", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/Stores.jsx:236"}, "properties": {"repobilityId": "7e8380897eb11b71", "scanner": "scanner-primary", "fingerprint": "b7e651b9dc5befaa", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a4bcc0b59ff4b6a2", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/Layout.jsx:132"}, "properties": {"repobilityId": "98788dc57883c982", "scanner": "scanner-primary", "fingerprint": "a4bcc0b59ff4b6a2", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f058379b68f23ef8", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/Scoreboard.jsx:200"}, "properties": {"repobilityId": "51b9f99e79ed1c95", "scanner": "scanner-primary", "fingerprint": "f058379b68f23ef8", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-df5c7baef329bfbf", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 frontend/src/hooks/useDashboardContext.jsx:270"}, "properties": {"repobilityId": "e51d48eb5114e348", "scanner": "scanner-primary", "fingerprint": "df5c7baef329bfbf", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-e4526f1e303674e2", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 frontend/src/hooks/useDashboardContext.jsx:319"}, "properties": {"repobilityId": "8e3517e26b45cda9", "scanner": "scanner-primary", "fingerprint": "e4526f1e303674e2", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c0ffe0347503a801", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 frontend/src/services/auth.js:210"}, "properties": {"repobilityId": "61058bb0f970aac0", "scanner": "scanner-primary", "fingerprint": "c0ffe0347503a801", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-95ebf9d95f072efe", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 frontend/src/services/api.js:374"}, "properties": {"repobilityId": "695d98d98e8ce6f4", "scanner": "scanner-primary", "fingerprint": "95ebf9d95f072efe", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9d5b6bdb73f43e44", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 docs/archive/frontend_visual_audit_dec2025/visual_audit.ts:134"}, "properties": {"repobilityId": "99057f3dfaa9a9df", "scanner": "scanner-primary", "fingerprint": "9d5b6bdb73f43e44", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b89d0f7377681b22", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 docs/archive/frontend_visual_audit_dec2025/list_models.ts:17"}, "properties": {"repobilityId": "baeba4977479cb8f", "scanner": "scanner-primary", "fingerprint": "b89d0f7377681b22", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d9668382f1ef3fca", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/tiktok-demo/server.js:1152"}, "properties": {"repobilityId": "5900a9c84d7e7326", "scanner": "scanner-primary", "fingerprint": "d9668382f1ef3fca", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-fd55ee5239959ff1", "level": "warning", "message": {"text": "Privileged port 13 in use"}, "properties": {"repobilityId": "79d721e4d6f64798", "scanner": "scanner-primary", "fingerprint": "fd55ee5239959ff1", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "render.yaml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-d63da3583b14afc0", "level": "warning", "message": {"text": "Dockerfile runs as root: Dockerfile"}, "properties": {"repobilityId": "a2ed1bd120e507db", "scanner": "scanner-primary", "fingerprint": "d63da3583b14afc0", "layer": "hardware", "severity": "medium", "confidence": 1.0, "tags": ["security", "container"]}}, {"ruleId": "scanner-de3c1f217d72a063", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: python:3.12-slim"}, "properties": {"repobilityId": "b1b251b0576ba585", "scanner": "scanner-primary", "fingerprint": "de3c1f217d72a063", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "Dockerfile"}, "region": {"startLine": 2}}}]}, {"ruleId": "scanner-aa5acaa49eb8315b", "level": "note", "message": {"text": "Containers defined but no K8s/orchestration manifest found"}, "properties": {"repobilityId": "b230ea9b68736081", "scanner": "scanner-primary", "fingerprint": "aa5acaa49eb8315b", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["coverage", "deployment"]}}, {"ruleId": "scanner-7f81c9c17190c0bc", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in static/dashboard.html:592"}, "properties": {"repobilityId": "22c704fa0cf4db30", "scanner": "scanner-primary", "fingerprint": "7f81c9c17190c0bc", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "static/dashboard.html"}, "region": {"startLine": 592}}}]}, {"ruleId": "scanner-6b775fc689b1219a", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in static/tiktok_demo.html:992"}, "properties": {"repobilityId": "1ea95e7c34a0d0c8", "scanner": "scanner-primary", "fingerprint": "6b775fc689b1219a", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "static/tiktok_demo.html"}, "region": {"startLine": 992}}}]}, {"ruleId": "scanner-71e91776e969096c", "level": "warning", "message": {"text": "Insecure pattern 'local_storage_auth_token' in static/tiktok_demo.html:873"}, "properties": {"repobilityId": "7c7152693ee649fe", "scanner": "scanner-primary", "fingerprint": "71e91776e969096c", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "local_storage_auth_token"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "static/tiktok_demo.html"}, "region": {"startLine": 873}}}]}, {"ruleId": "scanner-2a88b4f401b57d06", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in static/tiktok_oauth_callback.html:206"}, "properties": {"repobilityId": "ff9cf55a9b16bdf2", "scanner": "scanner-primary", "fingerprint": "2a88b4f401b57d06", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "static/tiktok_oauth_callback.html"}, "region": {"startLine": 206}}}]}, {"ruleId": "scanner-9af47408cc17cc81", "level": "warning", "message": {"text": "Insecure pattern 'local_storage_auth_token' in static/tiktok_oauth_callback.html:197"}, "properties": {"repobilityId": "9af636bc06b7da9f", "scanner": "scanner-primary", "fingerprint": "9af47408cc17cc81", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "local_storage_auth_token"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "static/tiktok_oauth_callback.html"}, "region": {"startLine": 197}}}]}, {"ruleId": "scanner-e4a32c79a3966b0b", "level": "warning", "message": {"text": "Insecure pattern 'weak_hash' in ospra_os/api/aliexpress_oauth.py:203"}, "properties": {"repobilityId": "ea924b0cc528c47b", "scanner": "scanner-primary", "fingerprint": "e4a32c79a3966b0b", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "weak_hash"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/api/aliexpress_oauth.py"}, "region": {"startLine": 203}}}]}, {"ruleId": "scanner-0d327aa9894239f2", "level": "warning", "message": {"text": "Insecure pattern 'weak_hash' in ospra_os/api/aliexpress_affiliate_oauth.py:178"}, "properties": {"repobilityId": "7906ee4e0779844b", "scanner": "scanner-primary", "fingerprint": "0d327aa9894239f2", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "weak_hash"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/api/aliexpress_affiliate_oauth.py"}, "region": {"startLine": 178}}}]}, {"ruleId": "scanner-cd5f2a280fdaad8d", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in website/demo/index.html:992"}, "properties": {"repobilityId": "9943b0b79d5ca637", "scanner": "scanner-primary", "fingerprint": "cd5f2a280fdaad8d", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "website/demo/index.html"}, "region": {"startLine": 992}}}]}, {"ruleId": "scanner-ebe92298edb95c8a", "level": "warning", "message": {"text": "Insecure pattern 'local_storage_auth_token' in website/demo/index.html:873"}, "properties": {"repobilityId": "57648a253e60f63b", "scanner": "scanner-primary", "fingerprint": "ebe92298edb95c8a", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "local_storage_auth_token"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "website/demo/index.html"}, "region": {"startLine": 873}}}]}, {"ruleId": "scanner-eb4396ac9a3ce7ce", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in website/auth/tiktok/callback.html:206"}, "properties": {"repobilityId": "e33e21bde1282dbe", "scanner": "scanner-primary", "fingerprint": "eb4396ac9a3ce7ce", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "website/auth/tiktok/callback.html"}, "region": {"startLine": 206}}}]}, {"ruleId": "scanner-171cd94316399b01", "level": "warning", "message": {"text": "Insecure pattern 'local_storage_auth_token' in website/auth/tiktok/callback.html:197"}, "properties": {"repobilityId": "c4c878a2c8f9a6f6", "scanner": "scanner-primary", "fingerprint": "171cd94316399b01", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "local_storage_auth_token"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "website/auth/tiktok/callback.html"}, "region": {"startLine": 197}}}]}, {"ruleId": "scanner-8bb29cb6204b17f5", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "c46940167512794b", "scanner": "scanner-primary", "fingerprint": "8bb29cb6204b17f5", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/frontend-ci.yml"}, "region": {"startLine": 31}}}]}, {"ruleId": "scanner-8bb29cb6204b17f5", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "04ca81839408c359", "scanner": "scanner-primary", "fingerprint": "8bb29cb6204b17f5", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/frontend-ci.yml"}, "region": {"startLine": 34}}}]}, {"ruleId": "scanner-8bb29cb6204b17f5", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "0263655157168200", "scanner": "scanner-primary", "fingerprint": "8bb29cb6204b17f5", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/frontend-ci.yml"}, "region": {"startLine": 53}}}]}, {"ruleId": "scanner-ae85a7a6091a6ac4", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "86a04befd3b7ad05", "scanner": "scanner-primary", "fingerprint": "ae85a7a6091a6ac4", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/deploy-marketing.yml"}, "region": {"startLine": 28}}}]}, {"ruleId": "scanner-ae85a7a6091a6ac4", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "6a9c391c00ed6b62", "scanner": "scanner-primary", "fingerprint": "ae85a7a6091a6ac4", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/deploy-marketing.yml"}, "region": {"startLine": 31}}}]}, {"ruleId": "scanner-ae85a7a6091a6ac4", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "abeeb03561b9048d", "scanner": "scanner-primary", "fingerprint": "ae85a7a6091a6ac4", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/deploy-marketing.yml"}, "region": {"startLine": 34}}}]}, {"ruleId": "scanner-ae85a7a6091a6ac4", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "b9edb6d78d8547ac", "scanner": "scanner-primary", "fingerprint": "ae85a7a6091a6ac4", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/deploy-marketing.yml"}, "region": {"startLine": 40}}}]}, {"ruleId": "scanner-38634e196a8b1ccd", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "5a5f710db372bdc2", "scanner": "scanner-primary", "fingerprint": "38634e196a8b1ccd", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/deploy-marketing.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-975f27e3804c7491", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "5789c4b08567cd65", "scanner": "scanner-primary", "fingerprint": "975f27e3804c7491", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/backend-ci.yml"}, "region": {"startLine": 44}}}]}, {"ruleId": "scanner-975f27e3804c7491", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "2c2ad1deafe8bcd1", "scanner": "scanner-primary", "fingerprint": "975f27e3804c7491", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/backend-ci.yml"}, "region": {"startLine": 47}}}]}, {"ruleId": "scanner-56696c269185bd2e", "level": "note", "message": {"text": "Very large file: frontend/src/components/ProductDiscovery.jsx (3613 lines)"}, "properties": {"repobilityId": "8e0968c7c8f9db89", "scanner": "scanner-primary", "fingerprint": "56696c269185bd2e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-e0f2d4d477ba88d1", "level": "note", "message": {"text": "Very large file: archive/legacy_mailbot/main.py (1649 lines)"}, "properties": {"repobilityId": "3d2242d57e40ca33", "scanner": "scanner-primary", "fingerprint": "e0f2d4d477ba88d1", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-b9f7128c70151bdd", "level": "note", "message": {"text": "Very large file: ospra_os/main.py (4954 lines)"}, "properties": {"repobilityId": "4b2e75553a753b90", "scanner": "scanner-primary", "fingerprint": "b9f7128c70151bdd", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-102c1f8feedf1498", "level": "note", "message": {"text": "Very large file: ospra_os/api/aliexpress_product_routes.py (1353 lines)"}, "properties": {"repobilityId": "3047d7bca0d218fa", "scanner": "scanner-primary", "fingerprint": "102c1f8feedf1498", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-b10f5177d03fadc6", "level": "note", "message": {"text": "Very large file: ospra_os/intelligence/product_discovery.py (7053 lines)"}, "properties": {"repobilityId": "c404f62f5d4b9bb1", "scanner": "scanner-primary", "fingerprint": "b10f5177d03fadc6", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-112fd8ceef4fd106", "level": "note", "message": {"text": "Very large file: ospra_os/intelligence/unified_discovery_routes.py (1751 lines)"}, "properties": {"repobilityId": "d441d90cbd065254", "scanner": "scanner-primary", "fingerprint": "112fd8ceef4fd106", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-2990f438dab63365", "level": "note", "message": {"text": "Very large file: ospra_os/product_research/multi_source_discovery.py (1873 lines)"}, "properties": {"repobilityId": "daf4277bd835941c", "scanner": "scanner-primary", "fingerprint": "2990f438dab63365", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-d4e7359bcfc4c057", "level": "note", "message": {"text": "Very large file: ospra_os/product_research/connectors/social/xai_twitter.py (1441 lines)"}, "properties": {"repobilityId": "651cfb9bc3466c64", "scanner": "scanner-primary", "fingerprint": "d4e7359bcfc4c057", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-ea3b5e389d8c9c0f", "level": "note", "message": {"text": "Low test-to-source ratio"}, "properties": {"repobilityId": "ef7b2552cc00a375", "scanner": "scanner-primary", "fingerprint": "ea3b5e389d8c9c0f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["tests"]}}, {"ruleId": "scanner-c6cf08c4a9cc087c", "level": "note", "message": {"text": "181 TODO/FIXME markers"}, "properties": {"repobilityId": "4b38c118003e07d2", "scanner": "scanner-primary", "fingerprint": "c6cf08c4a9cc087c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["maintenance"]}}, {"ruleId": "scanner-141b30a41e03817b", "level": "note", "message": {"text": "No license file detected"}, "properties": {"repobilityId": "c2a243c8e300921a", "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": "3baa22a2fa7a5d3a", "scanner": "scanner-primary", "fingerprint": "3ab5d313dda8e5f9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["debug", "cleanup", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-72b2a6250083a784", "level": "warning", "message": {"text": "Placeholder or mock-heavy implementation detected"}, "properties": {"repobilityId": "5c6bc249f8518050", "scanner": "scanner-primary", "fingerprint": "72b2a6250083a784", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "incomplete", "generated-repo-pattern"]}}, {"ruleId": "scanner-9d79c4077342a7d0", "level": "warning", "message": {"text": "Runtime service client appears to use placeholder configuration"}, "properties": {"repobilityId": "eb2d4efbe961116d", "scanner": "scanner-primary", "fingerprint": "9d79c4077342a7d0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "runtime-config", "service-client", "generated-repo-pattern"]}}, {"ruleId": "scanner-2d0c7b7ab8f8aacf", "level": "warning", "message": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "properties": {"repobilityId": "43f0aee566a712b2", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-749d4bc1bd66df5f", "level": "warning", "message": {"text": "Agent instructions exist but release-hardening basics are missing"}, "properties": {"repobilityId": "cd8a527b4d6ba112", "scanner": "scanner-primary", "fingerprint": "749d4bc1bd66df5f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-ea8f3013f588db25", "level": "note", "message": {"text": "Shallow git history limits provenance confidence"}, "properties": {"repobilityId": "2127daf2c559657b", "scanner": "scanner-primary", "fingerprint": "ea8f3013f588db25", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-8424db9c75e04ba4", "level": "none", "message": {"text": "Very short observed git history"}, "properties": {"repobilityId": "2eebc354b3f7da31", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-b2b7b2761415ae64", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/projects/-Users-stephenponce-Documents-Ospra-OS-Bots-Ospra-OS/memory/discovery-open-diagnostics.md"}, "properties": {"repobilityId": "12babb74cafde5fa", "scanner": "scanner-primary", "fingerprint": "b2b7b2761415ae64", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/projects/-Users-stephenponce-Documents-Ospra-OS-Bots-Ospra-OS/memory/discovery-open-diagnostics.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3de186cb6942d523", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/vite.config.js:16"}, "properties": {"repobilityId": "9314c9310712de6e", "scanner": "scanner-primary", "fingerprint": "3de186cb6942d523", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e664517e531ae68b", "level": "none", "message": {"text": "Commented-code block (6 lines) in frontend/src/App.jsx:21"}, "properties": {"repobilityId": "fe90dc3d28f0f415", "scanner": "scanner-primary", "fingerprint": "e664517e531ae68b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6e6deb4fa0bf07a0", "level": "note", "message": {"text": "Legacy-named symbol `ad_copy` in frontend/src/components/ProductDiscovery.jsx:2561"}, "properties": {"repobilityId": "8e807f9c268bb267", "scanner": "scanner-primary", "fingerprint": "6e6deb4fa0bf07a0", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-3783121a0fae6cd7", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/components/ProductDiscovery.jsx:30"}, "properties": {"repobilityId": "22f9fa7c4a04e748", "scanner": "scanner-primary", "fingerprint": "3783121a0fae6cd7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-15a98b6399f69fc4", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/components/ProductDiscovery.jsx:3100"}, "properties": {"repobilityId": "f2989e1b60087f39", "scanner": "scanner-primary", "fingerprint": "15a98b6399f69fc4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c9dc26aa942792f2", "level": "note", "message": {"text": "Legacy-named symbol `ospra_products_v1` in frontend/src/components/OnboardingChecklist.jsx:8"}, "properties": {"repobilityId": "76ae7e3e7f304730", "scanner": "scanner-primary", "fingerprint": "c9dc26aa942792f2", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-85c2937d9cfdecf9", "level": "none", "message": {"text": "Commented-code block (13 lines) in frontend/src/components/auth/LoginForm.jsx:35"}, "properties": {"repobilityId": "ecb189fc012828bc", "scanner": "scanner-primary", "fingerprint": "85c2937d9cfdecf9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6d866e37b0e31456", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/services/auth.js:15"}, "properties": {"repobilityId": "df525d9807ad8e88", "scanner": "scanner-primary", "fingerprint": "6d866e37b0e31456", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-6197e3d56b6abdf4", "level": "none", "message": {"text": "Commented-code block (6 lines) in frontend/src/services/api.js:344"}, "properties": {"repobilityId": "ca83774c848184d6", "scanner": "scanner-primary", "fingerprint": "6197e3d56b6abdf4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6eef1b62b3e758ec", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/services/api.js:43"}, "properties": {"repobilityId": "5594459da360fec2", "scanner": "scanner-primary", "fingerprint": "6eef1b62b3e758ec", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-92a976de4a63ec86", "level": "note", "message": {"text": "Legacy-named symbol `product_intelligence_v2` in archive/legacy_mailbot/main.py:942"}, "properties": {"repobilityId": "a9e01c4bdc973aaa", "scanner": "scanner-primary", "fingerprint": "92a976de4a63ec86", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-c413960307c18c74", "level": "none", "message": {"text": "Commented-code block (6 lines) in archive/legacy_mailbot/main.py:760"}, "properties": {"repobilityId": "0e13377788412fa3", "scanner": "scanner-primary", "fingerprint": "c413960307c18c74", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-aaca68bec6564a49", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 archive/legacy_mailbot/main.py:440"}, "properties": {"repobilityId": "a6f47d447e922af2", "scanner": "scanner-primary", "fingerprint": "aaca68bec6564a49", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-db1718351f8891d7", "level": "none", "message": {"text": "Commented-code block (5 lines) in archive/legacy_mailbot/app/email_processor.py:168"}, "properties": {"repobilityId": "808991245e4aba81", "scanner": "scanner-primary", "fingerprint": "db1718351f8891d7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8ee2c4cf5b68904c", "level": "note", "message": {"text": "Legacy-named symbol `too_old` in tests/test_webhook_verification.py:156"}, "properties": {"repobilityId": "d803fb3f6693abf7", "scanner": "scanner-primary", "fingerprint": "8ee2c4cf5b68904c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-aff3e20f1ce28a88", "level": "none", "message": {"text": "Commented-code block (7 lines) in tests/conftest.py:61"}, "properties": {"repobilityId": "931ab447870877b1", "scanner": "scanner-primary", "fingerprint": "aff3e20f1ce28a88", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6cfbec1ddc524765", "level": "note", "message": {"text": "Legacy-named symbol `ad_copy` in tests/test_marketing_angles.py:245"}, "properties": {"repobilityId": "4a73fc578261398d", "scanner": "scanner-primary", "fingerprint": "6cfbec1ddc524765", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-ab769e9e207ba634", "level": "none", "message": {"text": "Commented-code block (7 lines) in tests/test_differentiation.py:52"}, "properties": {"repobilityId": "23910eb3fd32dd64", "scanner": "scanner-primary", "fingerprint": "ab769e9e207ba634", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-78f8a33974f6cf13", "level": "note", "message": {"text": "Legacy-named symbol `test_decrypt_with_wrong_key_falls_back_to_legacy` in tests/test_credential_encryption.py:223"}, "properties": {"repobilityId": "2b667bb4c5d5671b", "scanner": "scanner-primary", "fingerprint": "78f8a33974f6cf13", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-a5fe7f66e5c3b058", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/integration/test_tenant_isolation_scaffold.py:76"}, "properties": {"repobilityId": "d28c28aa89488fe4", "scanner": "scanner-primary", "fingerprint": "a5fe7f66e5c3b058", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d4fa730567b5d05c", "level": "none", "message": {"text": "Commented-code block (8 lines) in tests/unit/test_action_executor.py:164"}, "properties": {"repobilityId": "a9bd8f262a153532", "scanner": "scanner-primary", "fingerprint": "d4fa730567b5d05c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-98c1764abf9b9a69", "level": "note", "message": {"text": "Legacy-named symbol `dashboard_v2` in ospra_os/main.py:2029"}, "properties": {"repobilityId": "a605805b7bfc438c", "scanner": "scanner-primary", "fingerprint": "98c1764abf9b9a69", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-90690ee38a9cbf3d", "level": "none", "message": {"text": "Commented-code block (8 lines) in ospra_os/main.py:9"}, "properties": {"repobilityId": "d3c2434770ff267e", "scanner": "scanner-primary", "fingerprint": "90690ee38a9cbf3d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-16cc94f309edad00", "level": "error", "message": {"text": "Blocking `time.sleep(...)` inside `async def _run_startup_deferred` \u2014 ospra_os/main.py:1499"}, "properties": {"repobilityId": "c6b35039af2a7635", "scanner": "scanner-primary", "fingerprint": "16cc94f309edad00", "layer": "quality", "severity": "high", "confidence": 1.0, "tags": ["integrity", "sync-io-in-async", "performance"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/main.py"}, "region": {"startLine": 1499}}}]}, {"ruleId": "scanner-d8a110ec9e4e6215", "level": "none", "message": {"text": "Commented-code block (6 lines) in ospra_os/integrations/tiktok_client.py:15"}, "properties": {"repobilityId": "6d577f4280ba63a1", "scanner": "scanner-primary", "fingerprint": "d8a110ec9e4e6215", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6393c02922a4c592", "level": "note", "message": {"text": "Legacy-named symbol `generate_ad_copy` in ospra_os/integrations/meta/ad_generator.py:17"}, "properties": {"repobilityId": "ca028d6b186fa598", "scanner": "scanner-primary", "fingerprint": "6393c02922a4c592", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-fb63e36757b55480", "level": "note", "message": {"text": "Legacy-named symbol `generate_ad_copy` in ospra_os/integrations/meta/campaign_builder.py:48"}, "properties": {"repobilityId": "41b16c5ae877aeb1", "scanner": "scanner-primary", "fingerprint": "fb63e36757b55480", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-68fbba86b0913ea3", "level": "none", "message": {"text": "Commented-code block (8 lines) in ospra_os/integrations/cj_dropshipping/client.py:385"}, "properties": {"repobilityId": "a31c91ca8bbe2224", "scanner": "scanner-primary", "fingerprint": "68fbba86b0913ea3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-465329cca154d90d", "level": "none", "message": {"text": "Commented-code block (5 lines) in ospra_os/security/auth_logger.py:84"}, "properties": {"repobilityId": "9dcb8cb330a4f9a3", "scanner": "scanner-primary", "fingerprint": "465329cca154d90d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-35a982ccaabce6a4", "level": "none", "message": {"text": "Commented-code block (6 lines) in ospra_os/security/rate_limiting.py:145"}, "properties": {"repobilityId": "47efac0d8c3a6af5", "scanner": "scanner-primary", "fingerprint": "35a982ccaabce6a4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ba083bf63bde6259", "level": "none", "message": {"text": "Commented-code block (5 lines) in ospra_os/security/gdpr.py:279"}, "properties": {"repobilityId": "c48b039a1cab433e", "scanner": "scanner-primary", "fingerprint": "ba083bf63bde6259", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-68f8ab4d90d2c52f", "level": "none", "message": {"text": "Commented-code block (7 lines) in ospra_os/platforms/amazon.py:336"}, "properties": {"repobilityId": "30cb533467464b05", "scanner": "scanner-primary", "fingerprint": "68f8ab4d90d2c52f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ba12e2f3aa77ed2c", "level": "note", "message": {"text": "Legacy-named symbol `auto_fulfillment_v1` in ospra_os/fulfillment/routes.py:67"}, "properties": {"repobilityId": "a407190fea010a17", "scanner": "scanner-primary", "fingerprint": "ba12e2f3aa77ed2c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-44a74558858afe5c", "level": "note", "message": {"text": "Legacy-named symbol `ad_copy` in ospra_os/ai/model_router.py:192"}, "properties": {"repobilityId": "ed605607b828e05b", "scanner": "scanner-primary", "fingerprint": "44a74558858afe5c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-105a32f443992ca4", "level": "none", "message": {"text": "Commented-code block (7 lines) in ospra_os/ai/providers/groq_provider.py:29"}, "properties": {"repobilityId": "a1a42b74f20c0166", "scanner": "scanner-primary", "fingerprint": "105a32f443992ca4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e1eeb5b4ed91e65b", "level": "none", "message": {"text": "Commented-code block (7 lines) in ospra_os/ai/providers/gemini.py:18"}, "properties": {"repobilityId": "c0cc27b5cd20a8b6", "scanner": "scanner-primary", "fingerprint": "e1eeb5b4ed91e65b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6ed808766e0f74a1", "level": "none", "message": {"text": "Commented-code block (6 lines) in ospra_os/ai/providers/claude.py:318"}, "properties": {"repobilityId": "75540bae86cc7a97", "scanner": "scanner-primary", "fingerprint": "6ed808766e0f74a1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fa528ea84b4b1e35", "level": "note", "message": {"text": "Legacy-named symbol `ad_copy` in ospra_os/testing/routes.py:36"}, "properties": {"repobilityId": "241ea2dde3608dc0", "scanner": "scanner-primary", "fingerprint": "fa528ea84b4b1e35", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-18278b97369d1444", "level": "note", "message": {"text": "Legacy-named symbol `ad_copy` in ospra_os/testing/ab_test_engine.py:35"}, "properties": {"repobilityId": "ca1f8663c0232890", "scanner": "scanner-primary", "fingerprint": "18278b97369d1444", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-2f234a21d948f750", "level": "note", "message": {"text": "Legacy-named symbol `control_copy` in ospra_os/testing/ad_test_manager.py:123"}, "properties": {"repobilityId": "beb7986b2b3dd757", "scanner": "scanner-primary", "fingerprint": "2f234a21d948f750", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-48e3048a4e18a2b5", "level": "none", "message": {"text": "Commented-code block (5 lines) in ospra_os/auth/routes.py:593"}, "properties": {"repobilityId": "853c0b460ab9107a", "scanner": "scanner-primary", "fingerprint": "48e3048a4e18a2b5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6541fab0513c5f21", "level": "none", "message": {"text": "Commented-code block (6 lines) in ospra_os/auth/jwt_auth.py:60"}, "properties": {"repobilityId": "540de685f16df3b2", "scanner": "scanner-primary", "fingerprint": "6541fab0513c5f21", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-188151da1ecfbe44", "level": "none", "message": {"text": "Commented-code block (5 lines) in ospra_os/middleware/rate_limiter.py:33"}, "properties": {"repobilityId": "531716af46bbbfd4", "scanner": "scanner-primary", "fingerprint": "188151da1ecfbe44", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-21d04e53b0dbafcf", "level": "none", "message": {"text": "Commented-code block (9 lines) in ospra_os/middleware/timeout_middleware.py:44"}, "properties": {"repobilityId": "65e265c5c96d77a3", "scanner": "scanner-primary", "fingerprint": "21d04e53b0dbafcf", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5c617b2cba31b86a", "level": "error", "message": {"text": "Blocking `requests.get(...)` inside `async def _generate_mock` \u2014 ospra_os/media/ai_image_generator.py:398"}, "properties": {"repobilityId": "654efe58ed3c46d7", "scanner": "scanner-primary", "fingerprint": "5c617b2cba31b86a", "layer": "quality", "severity": "high", "confidence": 1.0, "tags": ["integrity", "sync-io-in-async", "performance"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/media/ai_image_generator.py"}, "region": {"startLine": 398}}}]}, {"ruleId": "scanner-9e527cc59a51f42c", "level": "error", "message": {"text": "Blocking `requests.get(...)` inside `async def _download_and_save` \u2014 ospra_os/media/ai_image_generator.py:412"}, "properties": {"repobilityId": "f22fc35bbe71f9e7", "scanner": "scanner-primary", "fingerprint": "9e527cc59a51f42c", "layer": "quality", "severity": "high", "confidence": 1.0, "tags": ["integrity", "sync-io-in-async", "performance"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/media/ai_image_generator.py"}, "region": {"startLine": 412}}}]}, {"ruleId": "scanner-ddb860178394daa6", "level": "none", "message": {"text": "Commented-code block (7 lines) in ospra_os/api/product_analysis_routes.py:58"}, "properties": {"repobilityId": "06b007245c6bb192", "scanner": "scanner-primary", "fingerprint": "ddb860178394daa6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-73f93ce8309b6370", "level": "none", "message": {"text": "Commented-code block (5 lines) in ospra_os/api/webhook_routes.py:57"}, "properties": {"repobilityId": "7b3b112f34743358", "scanner": "scanner-primary", "fingerprint": "73f93ce8309b6370", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b034e7959d3b5924", "level": "note", "message": {"text": "Legacy-named symbol `shopify_legacy` in ospra_os/api/shopify_routes.py:64"}, "properties": {"repobilityId": "bb1c2b2ae5657f5d", "scanner": "scanner-primary", "fingerprint": "b034e7959d3b5924", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-ed4d3980a6af7b60", "level": "none", "message": {"text": "Commented-code block (7 lines) in ospra_os/api/shopify_routes.py:39"}, "properties": {"repobilityId": "644e5147742a0ff4", "scanner": "scanner-primary", "fingerprint": "ed4d3980a6af7b60", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-866d40b187ddcf55", "level": "none", "message": {"text": "Commented-code block (5 lines) in ospra_os/api/shopify_oauth_routes.py:51"}, "properties": {"repobilityId": "bf1af3e2fac80ad9", "scanner": "scanner-primary", "fingerprint": "866d40b187ddcf55", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-90d66adc881bda55", "level": "none", "message": {"text": "Commented-code block (7 lines) in ospra_os/api/deployment_routes.py:82"}, "properties": {"repobilityId": "a8b88436ac6eead8", "scanner": "scanner-primary", "fingerprint": "90d66adc881bda55", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0b276b417260c448", "level": "note", "message": {"text": "Legacy-named symbol `generate_ad_copy` in ospra_os/api/ml_routes.py:276"}, "properties": {"repobilityId": "188bc5047db1e950", "scanner": "scanner-primary", "fingerprint": "0b276b417260c448", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-b5bf9be6e559d1e7", "level": "none", "message": {"text": "Commented-code block (6 lines) in ospra_os/api/ml_routes.py:172"}, "properties": {"repobilityId": "a6fa6b94216abcf9", "scanner": "scanner-primary", "fingerprint": "b5bf9be6e559d1e7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f7c2d5f6dd19d455", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 ospra_os/api/ml_routes.py:173"}, "properties": {"repobilityId": "534255817525a8c4", "scanner": "scanner-primary", "fingerprint": "f7c2d5f6dd19d455", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-cff917107a6d9309", "level": "none", "message": {"text": "Commented-code block (6 lines) in ospra_os/api/frontend_compat_routes.py:243"}, "properties": {"repobilityId": "f91a7e740166b858", "scanner": "scanner-primary", "fingerprint": "cff917107a6d9309", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-09e45f6f33c99a6d", "level": "none", "message": {"text": "Commented-code block (11 lines) in ospra_os/api/subscription_routes.py:407"}, "properties": {"repobilityId": "1292882f645fcfc1", "scanner": "scanner-primary", "fingerprint": "09e45f6f33c99a6d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ca9b566857a9b459", "level": "note", "message": {"text": "Legacy-named symbol `auto_fulfillment_v1` in ospra_os/api/fulfillment_routes.py:105"}, "properties": {"repobilityId": "07d7bbaaf202b8f8", "scanner": "scanner-primary", "fingerprint": "ca9b566857a9b459", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-d45d6e980f7ba7f3", "level": "none", "message": {"text": "Commented-code block (6 lines) in ospra_os/api/daily_brief_routes.py:98"}, "properties": {"repobilityId": "2efefa24048f65b8", "scanner": "scanner-primary", "fingerprint": "d45d6e980f7ba7f3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-87a7ec8824810f9f", "level": "note", "message": {"text": "Legacy-named symbol `days_old` in ospra_os/intelligence/saturation_tracker.py:462"}, "properties": {"repobilityId": "6dc80c96d99c6338", "scanner": "scanner-primary", "fingerprint": "87a7ec8824810f9f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-ae8d2191a7cef6d2", "level": "none", "message": {"text": "Commented-code block (9 lines) in ospra_os/intelligence/product_discovery.py:58"}, "properties": {"repobilityId": "70b3670fc35860e5", "scanner": "scanner-primary", "fingerprint": "ae8d2191a7cef6d2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6010e3aacdeda404", "level": "none", "message": {"text": "Commented-code block (7 lines) in ospra_os/intelligence/sentiment_qualitative.py:134"}, "properties": {"repobilityId": "e89650f5f06df482", "scanner": "scanner-primary", "fingerprint": "6010e3aacdeda404", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d5d000181b855a02", "level": "none", "message": {"text": "Commented-code block (5 lines) in ospra_os/intelligence/unified_discovery_routes.py:987"}, "properties": {"repobilityId": "fad4a3135528dfd8", "scanner": "scanner-primary", "fingerprint": "d5d000181b855a02", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b82ca88029830b60", "level": "note", "message": {"text": "Legacy-named symbol `ad_copy` in ospra_os/intelligence/smart_recommendations.py:206"}, "properties": {"repobilityId": "8acc226158ced16b", "scanner": "scanner-primary", "fingerprint": "b82ca88029830b60", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-4e01396bfd687abd", "level": "note", "message": {"text": "Legacy-named symbol `days_old` in ospra_os/intelligence/opportunity_scorer.py:582"}, "properties": {"repobilityId": "31b7357dbd04f2ef", "scanner": "scanner-primary", "fingerprint": "4e01396bfd687abd", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-0cc922a7977cc4a3", "level": "none", "message": {"text": "Commented-code block (5 lines) in ospra_os/intelligence/sentiment_composite.py:284"}, "properties": {"repobilityId": "60fb753cd67c0a16", "scanner": "scanner-primary", "fingerprint": "0cc922a7977cc4a3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4d221412cad3ace3", "level": "none", "message": {"text": "Commented-code block (6 lines) in ospra_os/intelligence/demand_authenticity.py:67"}, "properties": {"repobilityId": "4268819de2fea404", "scanner": "scanner-primary", "fingerprint": "4d221412cad3ace3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6a1bc5ef7ccf84dd", "level": "none", "message": {"text": "Commented-code block (6 lines) in ospra_os/intelligence/trend_analyzer.py:26"}, "properties": {"repobilityId": "4925a2710010e19b", "scanner": "scanner-primary", "fingerprint": "6a1bc5ef7ccf84dd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e2ea0937dd86fd20", "level": "none", "message": {"text": "Commented-code block (5 lines) in ospra_os/intelligence/saturation_scorer.py:198"}, "properties": {"repobilityId": "5647c0bd7130413f", "scanner": "scanner-primary", "fingerprint": "e2ea0937dd86fd20", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ab785f47fc3d8c04", "level": "none", "message": {"text": "Commented-code block (7 lines) in ospra_os/intelligence/trend_trajectory.py:55"}, "properties": {"repobilityId": "af3abfffa533008e", "scanner": "scanner-primary", "fingerprint": "ab785f47fc3d8c04", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f2e93ceb372dcfd7", "level": "note", "message": {"text": "Legacy-named symbol `ad_copy` in ospra_os/intelligence/marketing_angle_generator.py:180"}, "properties": {"repobilityId": "f67d9750977aad1a", "scanner": "scanner-primary", "fingerprint": "f2e93ceb372dcfd7", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-b151f4cb725f1d71", "level": "none", "message": {"text": "Commented-code block (6 lines) in ospra_os/intelligence/marketing_angle_generator.py:274"}, "properties": {"repobilityId": "48cc45dd31528dc8", "scanner": "scanner-primary", "fingerprint": "b151f4cb725f1d71", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-91b10a5d8d6c4e9b", "level": "none", "message": {"text": "Commented-code block (5 lines) in ospra_os/intelligence/unified_context.py:318"}, "properties": {"repobilityId": "065e261b12d63395", "scanner": "scanner-primary", "fingerprint": "91b10a5d8d6c4e9b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f94946f46a170746", "level": "none", "message": {"text": "Commented-code block (7 lines) in ospra_os/intelligence/ai_product_analyzer.py:518"}, "properties": {"repobilityId": "d0a6504870838cde", "scanner": "scanner-primary", "fingerprint": "f94946f46a170746", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-58b2a0637e322ccb", "level": "none", "message": {"text": "Commented-code block (6 lines) in ospra_os/learning/summary_models.py:33"}, "properties": {"repobilityId": "df7e45dd0c87f77c", "scanner": "scanner-primary", "fingerprint": "58b2a0637e322ccb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c328115906f3e2e5", "level": "none", "message": {"text": "Commented-code block (7 lines) in ospra_os/dashboard/routes.py:44"}, "properties": {"repobilityId": "400e5306d176de39", "scanner": "scanner-primary", "fingerprint": "c328115906f3e2e5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f4e9831b7d3f8ca2", "level": "none", "message": {"text": "Commented-code block (6 lines) in ospra_os/tenancy/brand.py:40"}, "properties": {"repobilityId": "d210f0c392b9b38d", "scanner": "scanner-primary", "fingerprint": "f4e9831b7d3f8ca2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2a0a8702d5b016a9", "level": "none", "message": {"text": "Commented-code block (5 lines) in ospra_os/tenancy/queries.py:85"}, "properties": {"repobilityId": "f5323d971088c6ca", "scanner": "scanner-primary", "fingerprint": "2a0a8702d5b016a9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-865d752d6b3dd251", "level": "note", "message": {"text": "Stub function `create_product` (body is just `pass`/`return`) \u2014 ospra_os/tenancy/audit.py:340"}, "properties": {"repobilityId": "7c48ec690c12ace8", "scanner": "scanner-primary", "fingerprint": "865d752d6b3dd251", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "empty-handler", "dead-code"]}}, {"ruleId": "scanner-7dcfcaa5d5204e42", "level": "none", "message": {"text": "Commented-code block (5 lines) in ospra_os/email_automation/email_processor.py:210"}, "properties": {"repobilityId": "2ed97fc511872750", "scanner": "scanner-primary", "fingerprint": "7dcfcaa5d5204e42", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0ee5fc366f0ed4eb", "level": "note", "message": {"text": "Stub function `set_tag` (body is just `pass`/`return`) \u2014 ospra_os/observability/error_tracking.py:336"}, "properties": {"repobilityId": "7f331cae0fff7191", "scanner": "scanner-primary", "fingerprint": "0ee5fc366f0ed4eb", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "empty-handler", "dead-code"]}}, {"ruleId": "scanner-80ff3ca012604744", "level": "none", "message": {"text": "Commented-code block (7 lines) in ospra_os/oi/oi_service.py:181"}, "properties": {"repobilityId": "e4451e6ce396beae", "scanner": "scanner-primary", "fingerprint": "80ff3ca012604744", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-43143ff6c9cc7059", "level": "note", "message": {"text": "Legacy-named symbol `ad_copy` in ospra_os/database/advertising_models.py:55"}, "properties": {"repobilityId": "451a88b031e2d566", "scanner": "scanner-primary", "fingerprint": "43143ff6c9cc7059", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-fa714a830c0d751b", "level": "none", "message": {"text": "Commented-code block (6 lines) in ospra_os/database/__init__.py:111"}, "properties": {"repobilityId": "02725e42a6c8cebb", "scanner": "scanner-primary", "fingerprint": "fa714a830c0d751b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cd5ddfab331a1ff2", "level": "none", "message": {"text": "Commented-code block (7 lines) in ospra_os/database/federated_models.py:43"}, "properties": {"repobilityId": "bd920be55ff00d7d", "scanner": "scanner-primary", "fingerprint": "cd5ddfab331a1ff2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-10871b06abf24896", "level": "note", "message": {"text": "Legacy-named symbol `ad_copy` in ospra_os/database/testing_models.py:28"}, "properties": {"repobilityId": "c8cedcf732bd08f7", "scanner": "scanner-primary", "fingerprint": "10871b06abf24896", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-6c5ca9004532025f", "level": "none", "message": {"text": "Commented-code block (10 lines) in ospra_os/database/template_models.py:73"}, "properties": {"repobilityId": "f15617cea039f3b1", "scanner": "scanner-primary", "fingerprint": "6c5ca9004532025f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-851544508f24a2d3", "level": "none", "message": {"text": "Commented-code block (5 lines) in ospra_os/database/connection.py:57"}, "properties": {"repobilityId": "58b3542998043e36", "scanner": "scanner-primary", "fingerprint": "851544508f24a2d3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6cfb983235f6a4e5", "level": "note", "message": {"text": "Stub function `endpoint` (body is just `pass`/`return`) \u2014 ospra_os/database/connection.py:14"}, "properties": {"repobilityId": "72dbf820aa6e16a5", "scanner": "scanner-primary", "fingerprint": "6cfb983235f6a4e5", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "empty-handler", "dead-code"]}}, {"ruleId": "scanner-83f69b6e9d94ae2d", "level": "none", "message": {"text": "Commented-code block (5 lines) in ospra_os/product_research/routes.py:79"}, "properties": {"repobilityId": "23779813f9f48974", "scanner": "scanner-primary", "fingerprint": "83f69b6e9d94ae2d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b5ae4f3249f37003", "level": "none", "message": {"text": "Commented-code block (5 lines) in ospra_os/product_research/multi_source_discovery.py:262"}, "properties": {"repobilityId": "544bc180b4d70334", "scanner": "scanner-primary", "fingerprint": "b5ae4f3249f37003", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-dd0bb16ecba74585", "level": "none", "message": {"text": "Commented-code block (10 lines) in ospra_os/product_research/connectors/base.py:46"}, "properties": {"repobilityId": "15895e957bb4662b", "scanner": "scanner-primary", "fingerprint": "dd0bb16ecba74585", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-687b7115ae536b0d", "level": "none", "message": {"text": "Commented-code block (5 lines) in ospra_os/product_research/connectors/apify/etsy_trending.py:55"}, "properties": {"repobilityId": "3e520c012a42e2eb", "scanner": "scanner-primary", "fingerprint": "687b7115ae536b0d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-96cd122e1a81f52e", "level": "none", "message": {"text": "Commented-code block (5 lines) in ospra_os/product_research/connectors/apify/meta_ads_library.py:56"}, "properties": {"repobilityId": "193ce98184b9e3c6", "scanner": "scanner-primary", "fingerprint": "96cd122e1a81f52e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5f8aa098f4c76958", "level": "none", "message": {"text": "Commented-code block (6 lines) in ospra_os/product_research/connectors/apify/google_trends_apify.py:240"}, "properties": {"repobilityId": "75e9d7850b09d0b9", "scanner": "scanner-primary", "fingerprint": "5f8aa098f4c76958", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-203ed5bd9e04cd15", "level": "none", "message": {"text": "Commented-code block (10 lines) in ospra_os/product_research/connectors/apify/aliexpress_reviews.py:35"}, "properties": {"repobilityId": "106958c97a481872", "scanner": "scanner-primary", "fingerprint": "203ed5bd9e04cd15", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bc9d9bf423e3c4a9", "level": "none", "message": {"text": "Commented-code block (7 lines) in ospra_os/product_research/connectors/apify/pinterest_trends.py:36"}, "properties": {"repobilityId": "29c89853189f76ae", "scanner": "scanner-primary", "fingerprint": "bc9d9bf423e3c4a9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4d62ba76c33ce023", "level": "none", "message": {"text": "Commented-code block (7 lines) in ospra_os/product_research/connectors/apify/base_apify.py:67"}, "properties": {"repobilityId": "e96a4da00e023f4e", "scanner": "scanner-primary", "fingerprint": "4d62ba76c33ce023", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bbddbbd576f72292", "level": "none", "message": {"text": "Commented-code block (6 lines) in ospra_os/product_research/connectors/apify/tiktok_shop.py:19"}, "properties": {"repobilityId": "64ffb181fd1581e1", "scanner": "scanner-primary", "fingerprint": "bbddbbd576f72292", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c88d971c7f3a81e7", "level": "none", "message": {"text": "Commented-code block (5 lines) in ospra_os/product_research/connectors/social/twitter.py:51"}, "properties": {"repobilityId": "4b4c8eb0d24cfc4f", "scanner": "scanner-primary", "fingerprint": "c88d971c7f3a81e7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3825a80747bdcaea", "level": "none", "message": {"text": "Commented-code block (5 lines) in ospra_os/product_research/connectors/social/xai_twitter.py:589"}, "properties": {"repobilityId": "90dd91c46c976b39", "scanner": "scanner-primary", "fingerprint": "3825a80747bdcaea", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-61a7199c0609a628", "level": "error", "message": {"text": "Blocking `requests.get(...)` inside `async def _search_affiliate` \u2014 ospra_os/product_research/connectors/suppliers/aliexpress.py:338"}, "properties": {"repobilityId": "2aa4ea58aa7eedaf", "scanner": "scanner-primary", "fingerprint": "61a7199c0609a628", "layer": "quality", "severity": "high", "confidence": 1.0, "tags": ["integrity", "sync-io-in-async", "performance"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/product_research/connectors/suppliers/aliexpress.py"}, "region": {"startLine": 338}}}]}, {"ruleId": "scanner-f6963839fe15362e", "level": "error", "message": {"text": "Blocking `requests.get(...)` inside `async def _get_feed_products` \u2014 ospra_os/product_research/connectors/suppliers/aliexpress.py:446"}, "properties": {"repobilityId": "8e7aa620cdb60437", "scanner": "scanner-primary", "fingerprint": "f6963839fe15362e", "layer": "quality", "severity": "high", "confidence": 1.0, "tags": ["integrity", "sync-io-in-async", "performance"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/product_research/connectors/suppliers/aliexpress.py"}, "region": {"startLine": 446}}}]}, {"ruleId": "scanner-e270770c43f9da16", "level": "error", "message": {"text": "Blocking `requests.get(...)` inside `async def search_by_category` \u2014 ospra_os/product_research/connectors/suppliers/aliexpress.py:557"}, "properties": {"repobilityId": "0b69eff7610e6fa9", "scanner": "scanner-primary", "fingerprint": "e270770c43f9da16", "layer": "quality", "severity": "high", "confidence": 1.0, "tags": ["integrity", "sync-io-in-async", "performance"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/product_research/connectors/suppliers/aliexpress.py"}, "region": {"startLine": 557}}}]}, {"ruleId": "scanner-c937c7f78af660ba", "level": "error", "message": {"text": "Blocking `requests.get(...)` inside `async def get_product_details` \u2014 ospra_os/product_research/connectors/suppliers/aliexpress.py:633"}, "properties": {"repobilityId": "72cebeed1c3d2db1", "scanner": "scanner-primary", "fingerprint": "c937c7f78af660ba", "layer": "quality", "severity": "high", "confidence": 1.0, "tags": ["integrity", "sync-io-in-async", "performance"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/product_research/connectors/suppliers/aliexpress.py"}, "region": {"startLine": 633}}}]}, {"ruleId": "scanner-b438cfac024f4e8e", "level": "none", "message": {"text": "Commented-code block (5 lines) in ospra_os/tasks/action_tasks.py:60"}, "properties": {"repobilityId": "0f4594408d4e7f6b", "scanner": "scanner-primary", "fingerprint": "b438cfac024f4e8e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d5b60d92d5efc69a", "level": "none", "message": {"text": "Commented-code block (9 lines) in ospra_os/tasks/sync_tasks.py:167"}, "properties": {"repobilityId": "cf004a31cfcd6a92", "scanner": "scanner-primary", "fingerprint": "d5b60d92d5efc69a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d69c3deb950af44a", "level": "none", "message": {"text": "Commented-code block (6 lines) in ospra_os/tasks/email_tasks.py:56"}, "properties": {"repobilityId": "3e351bf0b7be8f42", "scanner": "scanner-primary", "fingerprint": "d69c3deb950af44a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3c7ab960921a4a04", "level": "none", "message": {"text": "Commented-code block (5 lines) in ospra_os/tasks/learning_tasks.py:167"}, "properties": {"repobilityId": "720068892b72c3b3", "scanner": "scanner-primary", "fingerprint": "3c7ab960921a4a04", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f2bffba4351da061", "level": "none", "message": {"text": "Commented-code block (7 lines) in ospra_os/tasks/analytics_tasks.py:117"}, "properties": {"repobilityId": "964f9d9d4ef65227", "scanner": "scanner-primary", "fingerprint": "f2bffba4351da061", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-21a002df6d0d1ca0", "level": "none", "message": {"text": "Commented-code block (7 lines) in ospra_os/tasks/base.py:110"}, "properties": {"repobilityId": "89af0a7526ea52c8", "scanner": "scanner-primary", "fingerprint": "21a002df6d0d1ca0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cf98b2da972af16c", "level": "none", "message": {"text": "Commented-code block (5 lines) in ospra_os/tasks/feedback_tasks.py:306"}, "properties": {"repobilityId": "cfb301e30d41e312", "scanner": "scanner-primary", "fingerprint": "cf98b2da972af16c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-dbfcc41992943802", "level": "note", "message": {"text": "Legacy-named symbol `dashboard_v2` in ospra_os/admin/routes.py:143"}, "properties": {"repobilityId": "49023c12bc284061", "scanner": "scanner-primary", "fingerprint": "dbfcc41992943802", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-7c928222807489de", "level": "none", "message": {"text": "Commented-code block (6 lines) in ospra_os/deployment/unified_deployer.py:151"}, "properties": {"repobilityId": "9428eff772d20ca4", "scanner": "scanner-primary", "fingerprint": "7c928222807489de", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ad81afbc19ca529b", "level": "note", "message": {"text": "Legacy-named symbol `generate_ad_copy` in ospra_os/ml/ai_client.py:24"}, "properties": {"repobilityId": "525302ee03514ce5", "scanner": "scanner-primary", "fingerprint": "ad81afbc19ca529b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-e61a071542533d30", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 ospra_os/ml/ai_client.py:255"}, "properties": {"repobilityId": "1c6906973c370f55", "scanner": "scanner-primary", "fingerprint": "e61a071542533d30", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-fef971173690bf02", "level": "note", "message": {"text": "Legacy-named symbol `ad_copy` in ospra_os/ml/model_router.py:131"}, "properties": {"repobilityId": "42101e563bd2e743", "scanner": "scanner-primary", "fingerprint": "fef971173690bf02", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-24a16ef305df3b20", "level": "note", "message": {"text": "Legacy-named symbol `ad_copy` in ospra_os/ml/training_data.py:44"}, "properties": {"repobilityId": "9ec8fd23e2158ac2", "scanner": "scanner-primary", "fingerprint": "24a16ef305df3b20", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-45b93aa89023753f", "level": "none", "message": {"text": "Commented-code block (8 lines) in ospra_os/onboarding/stratosphere_onboarding.py:461"}, "properties": {"repobilityId": "a126feeeb05606d8", "scanner": "scanner-primary", "fingerprint": "45b93aa89023753f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ea089a50c325ffe8", "level": "none", "message": {"text": "Commented-code block (5 lines) in ospra_os/payments/shopify_billing.py:63"}, "properties": {"repobilityId": "9638d3f52b003153", "scanner": "scanner-primary", "fingerprint": "ea089a50c325ffe8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-391b199a3966b477", "level": "none", "message": {"text": "Commented-code block (5 lines) in ospra_os/services/shopify/oauth.py:34"}, "properties": {"repobilityId": "425eacc60b61055c", "scanner": "scanner-primary", "fingerprint": "391b199a3966b477", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d625d2afd38a9eee", "level": "note", "message": {"text": "Legacy-named symbol `ad_copy` in ospra_os/advertising/routes.py:170"}, "properties": {"repobilityId": "ec462b6f6a0ee87d", "scanner": "scanner-primary", "fingerprint": "d625d2afd38a9eee", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-77e557b46844ad75", "level": "note", "message": {"text": "Legacy-named symbol `generate_ad_copy` in ospra_os/advertising/scheduler.py:178"}, "properties": {"repobilityId": "24a444d6bd2dab71", "scanner": "scanner-primary", "fingerprint": "77e557b46844ad75", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-6c693cd499a94d20", "level": "note", "message": {"text": "Legacy-named symbol `generate_ad_copy` in ospra_os/advertising/creative_generator.py:28"}, "properties": {"repobilityId": "061f6d743eb851f1", "scanner": "scanner-primary", "fingerprint": "6c693cd499a94d20", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-09bebfe5b3e47945", "level": "note", "message": {"text": "Legacy-named symbol `ad_copy` in ospra_os/advertising/google/google_ads.py:25"}, "properties": {"repobilityId": "1f4c93f977baef4e", "scanner": "scanner-primary", "fingerprint": "09bebfe5b3e47945", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-40461fd1dc5047b9", "level": "note", "message": {"text": "Legacy-named symbol `ad_copy` in ospra_os/advertising/meta/meta_ads.py:40"}, "properties": {"repobilityId": "bd2df640db65c135", "scanner": "scanner-primary", "fingerprint": "40461fd1dc5047b9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-d30e90912a837b36", "level": "note", "message": {"text": "Legacy-named symbol `ai_listing_copy` in ospra_os/core/tiers.py:92"}, "properties": {"repobilityId": "6c929102cd150b6d", "scanner": "scanner-primary", "fingerprint": "d30e90912a837b36", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-0a0045c2b5f7edf8", "level": "none", "message": {"text": "Commented-code block (5 lines) in ospra_os/core/settings.py:111"}, "properties": {"repobilityId": "e74c7d49e6b4f4c3", "scanner": "scanner-primary", "fingerprint": "0a0045c2b5f7edf8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2924a9f4fdd29c78", "level": "none", "message": {"text": "Commented-code block (5 lines) in ospra_os/aliexpress/routes.py:46"}, "properties": {"repobilityId": "6883d2b77867fe9f", "scanner": "scanner-primary", "fingerprint": "2924a9f4fdd29c78", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d0142e9c4670309e", "level": "error", "message": {"text": "Blocking `requests.get(...)` inside `async def _scraper_api_request` \u2014 ospra_os/scraping/proxy_manager.py:69"}, "properties": {"repobilityId": "ea3d368a4e2ce114", "scanner": "scanner-primary", "fingerprint": "d0142e9c4670309e", "layer": "quality", "severity": "high", "confidence": 1.0, "tags": ["integrity", "sync-io-in-async", "performance"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/scraping/proxy_manager.py"}, "region": {"startLine": 69}}}]}, {"ruleId": "scanner-54e2d5b02b031067", "level": "error", "message": {"text": "Blocking `requests.get(...)` inside `async def _free_proxy_request` \u2014 ospra_os/scraping/proxy_manager.py:93"}, "properties": {"repobilityId": "2e0381d35c84a04c", "scanner": "scanner-primary", "fingerprint": "54e2d5b02b031067", "layer": "quality", "severity": "high", "confidence": 1.0, "tags": ["integrity", "sync-io-in-async", "performance"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/scraping/proxy_manager.py"}, "region": {"startLine": 93}}}]}, {"ruleId": "scanner-57eb8c46ebc19c81", "level": "error", "message": {"text": "Blocking `requests.get(...)` inside `async def _free_proxy_request` \u2014 ospra_os/scraping/proxy_manager.py:121"}, "properties": {"repobilityId": "fb6dc2ff644ae1de", "scanner": "scanner-primary", "fingerprint": "57eb8c46ebc19c81", "layer": "quality", "severity": "high", "confidence": 1.0, "tags": ["integrity", "sync-io-in-async", "performance"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/scraping/proxy_manager.py"}, "region": {"startLine": 121}}}]}, {"ruleId": "scanner-3a3e7a3c6379f604", "level": "error", "message": {"text": "Blocking `requests.get(...)` inside `async def _fetch_free_proxies` \u2014 ospra_os/scraping/proxy_manager.py:155"}, "properties": {"repobilityId": "1e42975f84f98aee", "scanner": "scanner-primary", "fingerprint": "3a3e7a3c6379f604", "layer": "quality", "severity": "high", "confidence": 1.0, "tags": ["integrity", "sync-io-in-async", "performance"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/scraping/proxy_manager.py"}, "region": {"startLine": 155}}}]}, {"ruleId": "scanner-887bf6f38fd2f717", "level": "none", "message": {"text": "Commented-code block (9 lines) in ospra_os/tiktok/routes.py:208"}, "properties": {"repobilityId": "0dd75bdc286d6c59", "scanner": "scanner-primary", "fingerprint": "887bf6f38fd2f717", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f25281f005fe76b5", "level": "none", "message": {"text": "Commented-code block (7 lines) in ospra_os/jobs/scheduler.py:78"}, "properties": {"repobilityId": "d61f049f3a4eee8c", "scanner": "scanner-primary", "fingerprint": "f25281f005fe76b5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fd0fe9ff4019d59b", "level": "none", "message": {"text": "Commented-code block (5 lines) in ospra_os/webhooks/shopify_webhooks.py:550"}, "properties": {"repobilityId": "c824b3d00e786441", "scanner": "scanner-primary", "fingerprint": "fd0fe9ff4019d59b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-53136b2d75abdd07", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 ospra_os/background_jobs/product_monitor.py:275"}, "properties": {"repobilityId": "39755f3ff749633b", "scanner": "scanner-primary", "fingerprint": "53136b2d75abdd07", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c3acfef288d06d86", "level": "none", "message": {"text": "Commented-code block (5 lines) in ospra_os/background_jobs/auto_discovery.py:210"}, "properties": {"repobilityId": "b91422abccb5ec1b", "scanner": "scanner-primary", "fingerprint": "c3acfef288d06d86", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-76518a04374f78de", "level": "none", "message": {"text": "Commented-code block (5 lines) in scripts/smoke_test_deployment.py:364"}, "properties": {"repobilityId": "a0aaa13fd4ce1909", "scanner": "scanner-primary", "fingerprint": "76518a04374f78de", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7090482bac485231", "level": "none", "message": {"text": "Commented-code block (6 lines) in scripts/test_score_variance.py:214"}, "properties": {"repobilityId": "1e9e87412baf8319", "scanner": "scanner-primary", "fingerprint": "7090482bac485231", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a4ec9d7bd525e9ba", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 scripts/smoke/multi_store_system.py:38"}, "properties": {"repobilityId": "b9a101b5453d3fd7", "scanner": "scanner-primary", "fingerprint": "a4ec9d7bd525e9ba", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-246bd8f7cd8bd542", "level": "none", "message": {"text": "Commented-code block (6 lines) in tools/tiktok-demo/server.js:114"}, "properties": {"repobilityId": "cc90ea87a2ddb2a4", "scanner": "scanner-primary", "fingerprint": "246bd8f7cd8bd542", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-89db609793a591ea", "level": "note", "message": {"text": "207 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "a4c3d3298f5a8eae", "scanner": "scanner-primary", "fingerprint": "89db609793a591ea", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "config-drift"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "2eb22ccbaf78450f", "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": "843c6c34ed75b48c", "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": "bd472cfcea296677", "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": "73943547b4e79c38", "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": "efb7655fecd56287", "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": "1c5727769656ac8f", "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": "67d512c8daa64a23", "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": "26405fc312ea02ec", "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": "8bf9359b5cac9397", "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": "2734bd974fa8694a", "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": "e4f2954b92dcacc8", "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": "de6fd61215c06ed3", "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": "800ae63261f00172", "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": "dd71cbd883d767d6", "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": "7f917d5a9ee1717f", "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": "8ef1cb1d049374e8", "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": "88a0dc85cc5440a7", "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": "fac1ab3b775f06bf", "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": "d0b49f631ff1d9ba", "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": "444ec07a1e852564", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-e864cf02de4f5409", "level": "warning", "message": {"text": "Frontend route `/reset-password` has no Link/navigate to it \u2014 frontend/src/App.jsx"}, "properties": {"repobilityId": "e1cae2d17f680088", "scanner": "scanner-primary", "fingerprint": "e864cf02de4f5409", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-4746e7aef17d703c", "level": "warning", "message": {"text": "Frontend route `/billing/success` has no Link/navigate to it \u2014 frontend/src/App.jsx"}, "properties": {"repobilityId": "7576564acd258e87", "scanner": "scanner-primary", "fingerprint": "4746e7aef17d703c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-458a5f221960f02f", "level": "warning", "message": {"text": "Frontend route `/bulk-deploy` has no Link/navigate to it \u2014 frontend/src/App.jsx"}, "properties": {"repobilityId": "2fa9943889af7eb6", "scanner": "scanner-primary", "fingerprint": "458a5f221960f02f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-ea448dd929be42ae", "level": "warning", "message": {"text": "Frontend route `/oi` has no Link/navigate to it \u2014 frontend/src/App.jsx"}, "properties": {"repobilityId": "dab00b3fa2b2e100", "scanner": "scanner-primary", "fingerprint": "ea448dd929be42ae", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-b759559a78ac34c1", "level": "error", "message": {"text": "FastAPI POST `gmail_ingest` without auth dependency \u2014 archive/legacy_mailbot/main.py:279"}, "properties": {"repobilityId": "9c6feb43b2979e68", "scanner": "scanner-primary", "fingerprint": "b759559a78ac34c1", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "archive/legacy_mailbot/main.py"}, "region": {"startLine": 279}}}]}, {"ruleId": "scanner-8b872c0c03cfe3df", "level": "error", "message": {"text": "FastAPI POST `gmail_send_demo` without auth dependency \u2014 archive/legacy_mailbot/main.py:290"}, "properties": {"repobilityId": "75f8089126042be4", "scanner": "scanner-primary", "fingerprint": "8b872c0c03cfe3df", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "archive/legacy_mailbot/main.py"}, "region": {"startLine": 290}}}]}, {"ruleId": "scanner-064f7534ad0b4fc5", "level": "error", "message": {"text": "FastAPI POST `templates_upsert` without auth dependency \u2014 archive/legacy_mailbot/main.py:367"}, "properties": {"repobilityId": "580debc115060c19", "scanner": "scanner-primary", "fingerprint": "064f7534ad0b4fc5", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "archive/legacy_mailbot/main.py"}, "region": {"startLine": 367}}}]}, {"ruleId": "scanner-d8ba26a08b7e140d", "level": "error", "message": {"text": "FastAPI POST `set_rules` without auth dependency \u2014 archive/legacy_mailbot/main.py:378"}, "properties": {"repobilityId": "e136bbde163fb877", "scanner": "scanner-primary", "fingerprint": "d8ba26a08b7e140d", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "archive/legacy_mailbot/main.py"}, "region": {"startLine": 378}}}]}, {"ruleId": "scanner-6d8142bb13bc08c2", "level": "error", "message": {"text": "FastAPI POST `ensure_labels` without auth dependency \u2014 archive/legacy_mailbot/main.py:394"}, "properties": {"repobilityId": "27438b55959bcefc", "scanner": "scanner-primary", "fingerprint": "6d8142bb13bc08c2", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "archive/legacy_mailbot/main.py"}, "region": {"startLine": 394}}}]}, {"ruleId": "scanner-d9ecd45a601339ca", "level": "error", "message": {"text": "FastAPI POST `process_inbox2` without auth dependency \u2014 archive/legacy_mailbot/main.py:476"}, "properties": {"repobilityId": "5e3444dbc677b425", "scanner": "scanner-primary", "fingerprint": "d9ecd45a601339ca", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "archive/legacy_mailbot/main.py"}, "region": {"startLine": 476}}}]}, {"ruleId": "scanner-025f07ea49184a68", "level": "error", "message": {"text": "FastAPI POST `process_inbox` without auth dependency \u2014 archive/legacy_mailbot/main.py:605"}, "properties": {"repobilityId": "d545938f36536f1f", "scanner": "scanner-primary", "fingerprint": "025f07ea49184a68", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "archive/legacy_mailbot/main.py"}, "region": {"startLine": 605}}}]}, {"ruleId": "scanner-aa2437638e34f99c", "level": "error", "message": {"text": "FastAPI POST `ai_reply_draft` without auth dependency \u2014 archive/legacy_mailbot/main.py:703"}, "properties": {"repobilityId": "6e12b5dc37c0a9ad", "scanner": "scanner-primary", "fingerprint": "aa2437638e34f99c", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "archive/legacy_mailbot/main.py"}, "region": {"startLine": 703}}}]}, {"ruleId": "scanner-ad9622ff18314389", "level": "error", "message": {"text": "FastAPI POST `smart_process_inbox` without auth dependency \u2014 archive/legacy_mailbot/main.py:711"}, "properties": {"repobilityId": "1fc5e69641f75bf7", "scanner": "scanner-primary", "fingerprint": "ad9622ff18314389", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "archive/legacy_mailbot/main.py"}, "region": {"startLine": 711}}}]}, {"ruleId": "scanner-b790ed98d3961df2", "level": "error", "message": {"text": "FastAPI POST `gmail_pubsub_webhook` without auth dependency \u2014 archive/legacy_mailbot/main.py:742"}, "properties": {"repobilityId": "c4224280c371280f", "scanner": "scanner-primary", "fingerprint": "b790ed98d3961df2", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "archive/legacy_mailbot/main.py"}, "region": {"startLine": 742}}}]}, {"ruleId": "scanner-982a63d021a30591", "level": "error", "message": {"text": "FastAPI POST `start_gmail_watch` without auth dependency \u2014 archive/legacy_mailbot/main.py:807"}, "properties": {"repobilityId": "4060fb3bcad2c79d", "scanner": "scanner-primary", "fingerprint": "982a63d021a30591", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "archive/legacy_mailbot/main.py"}, "region": {"startLine": 807}}}]}, {"ruleId": "scanner-e7c2e3a4b032cc06", "level": "error", "message": {"text": "FastAPI POST `stop_gmail_watch` without auth dependency \u2014 archive/legacy_mailbot/main.py:814"}, "properties": {"repobilityId": "6f8e6519ee11a1c9", "scanner": "scanner-primary", "fingerprint": "e7c2e3a4b032cc06", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "archive/legacy_mailbot/main.py"}, "region": {"startLine": 814}}}]}, {"ruleId": "scanner-d75ae178bde10fab", "level": "error", "message": {"text": "FastAPI POST `chat_with_claude` without auth dependency \u2014 archive/legacy_mailbot/main.py:880"}, "properties": {"repobilityId": "91f8a1d8e96b7e24", "scanner": "scanner-primary", "fingerprint": "d75ae178bde10fab", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "archive/legacy_mailbot/main.py"}, "region": {"startLine": 880}}}]}, {"ruleId": "scanner-c4aed4337e957bfd", "level": "error", "message": {"text": "FastAPI POST `reset_claude_chat` without auth dependency \u2014 archive/legacy_mailbot/main.py:900"}, "properties": {"repobilityId": "b8fd622fc8b9683f", "scanner": "scanner-primary", "fingerprint": "c4aed4337e957bfd", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "archive/legacy_mailbot/main.py"}, "region": {"startLine": 900}}}]}, {"ruleId": "scanner-ed82e9a4d3dd1d07", "level": "error", "message": {"text": "FastAPI POST `discover_winning_products` without auth dependency \u2014 archive/legacy_mailbot/main.py:929"}, "properties": {"repobilityId": "20264e39340b9c6f", "scanner": "scanner-primary", "fingerprint": "ed82e9a4d3dd1d07", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "archive/legacy_mailbot/main.py"}, "region": {"startLine": 929}}}]}, {"ruleId": "scanner-62a77dff4b9fdaa8", "level": "error", "message": {"text": "FastAPI POST `discover_products_v2` without auth dependency \u2014 archive/legacy_mailbot/main.py:1040"}, "properties": {"repobilityId": "2f09c010366fdf5a", "scanner": "scanner-primary", "fingerprint": "62a77dff4b9fdaa8", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "archive/legacy_mailbot/main.py"}, "region": {"startLine": 1040}}}]}, {"ruleId": "scanner-8ede22c19cc4ddb7", "level": "error", "message": {"text": "FastAPI POST `ai_chat` without auth dependency \u2014 archive/legacy_mailbot/main.py:1595"}, "properties": {"repobilityId": "0841d35c36a7e599", "scanner": "scanner-primary", "fingerprint": "8ede22c19cc4ddb7", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "archive/legacy_mailbot/main.py"}, "region": {"startLine": 1595}}}]}, {"ruleId": "scanner-c1e8749fab5c3464", "level": "error", "message": {"text": "FastAPI POST `sync_emails` without auth dependency \u2014 archive/legacy_mailbot/main.py:1612"}, "properties": {"repobilityId": "afbae038b36c877d", "scanner": "scanner-primary", "fingerprint": "c1e8749fab5c3464", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "archive/legacy_mailbot/main.py"}, "region": {"startLine": 1612}}}]}, {"ruleId": "scanner-ecf03fbb14f2d9c9", "level": "error", "message": {"text": "FastAPI POST `run_discovery_now` without auth dependency \u2014 ospra_os/main.py:2090"}, "properties": {"repobilityId": "3fb640da02e6d615", "scanner": "scanner-primary", "fingerprint": "ecf03fbb14f2d9c9", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/main.py"}, "region": {"startLine": 2090}}}]}, {"ruleId": "scanner-f9c049bdb7b8d769", "level": "error", "message": {"text": "FastAPI POST `test_platform_credentials` without auth dependency \u2014 ospra_os/main.py:2190"}, "properties": {"repobilityId": "a98b290af31f6079", "scanner": "scanner-primary", "fingerprint": "f9c049bdb7b8d769", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/main.py"}, "region": {"startLine": 2190}}}]}, {"ruleId": "scanner-0b4401e7598d5b19", "level": "error", "message": {"text": "FastAPI POST `discover_products_api` without auth dependency \u2014 ospra_os/main.py:2239"}, "properties": {"repobilityId": "2d167a069ec9aabc", "scanner": "scanner-primary", "fingerprint": "0b4401e7598d5b19", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/main.py"}, "region": {"startLine": 2239}}}]}, {"ruleId": "scanner-07416ac867742e72", "level": "error", "message": {"text": "FastAPI POST `validate_product_api` without auth dependency \u2014 ospra_os/main.py:2382"}, "properties": {"repobilityId": "97403ad932914c89", "scanner": "scanner-primary", "fingerprint": "07416ac867742e72", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/main.py"}, "region": {"startLine": 2382}}}]}, {"ruleId": "scanner-09c0eb21941fb7df", "level": "error", "message": {"text": "FastAPI POST `discover_multi_niche` without auth dependency \u2014 ospra_os/main.py:2438"}, "properties": {"repobilityId": "2ea6e31a4308e5c8", "scanner": "scanner-primary", "fingerprint": "09c0eb21941fb7df", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/main.py"}, "region": {"startLine": 2438}}}]}, {"ruleId": "scanner-8e5eacc41ea97989", "level": "error", "message": {"text": "FastAPI POST `deploy_to_shopify` without auth dependency \u2014 ospra_os/main.py:2575"}, "properties": {"repobilityId": "32fa730a8c016852", "scanner": "scanner-primary", "fingerprint": "8e5eacc41ea97989", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/main.py"}, "region": {"startLine": 2575}}}]}, {"ruleId": "scanner-18fcb37676f1da4e", "level": "error", "message": {"text": "FastAPI POST `generate_product_content` without auth dependency \u2014 ospra_os/main.py:2635"}, "properties": {"repobilityId": "1db010f21800000b", "scanner": "scanner-primary", "fingerprint": "18fcb37676f1da4e", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/main.py"}, "region": {"startLine": 2635}}}]}, {"ruleId": "scanner-9e59ee3ceff905ec", "level": "error", "message": {"text": "FastAPI POST `scrape_aliexpress_product` without auth dependency \u2014 ospra_os/main.py:2693"}, "properties": {"repobilityId": "05642e65fae367f8", "scanner": "scanner-primary", "fingerprint": "9e59ee3ceff905ec", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/main.py"}, "region": {"startLine": 2693}}}]}, {"ruleId": "scanner-c4f144789ad5222a", "level": "error", "message": {"text": "FastAPI POST `optimize_product_price` without auth dependency \u2014 ospra_os/main.py:2725"}, "properties": {"repobilityId": "8e0df0cab406faa1", "scanner": "scanner-primary", "fingerprint": "c4f144789ad5222a", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/main.py"}, "region": {"startLine": 2725}}}]}, {"ruleId": "scanner-443491fbb71ba46c", "level": "error", "message": {"text": "FastAPI POST `claude_chat` without auth dependency \u2014 ospra_os/main.py:2846"}, "properties": {"repobilityId": "80f768de7e4a5690", "scanner": "scanner-primary", "fingerprint": "443491fbb71ba46c", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/main.py"}, "region": {"startLine": 2846}}}]}, {"ruleId": "scanner-b180d0be564f32af", "level": "error", "message": {"text": "FastAPI POST `generate_marketing_angle` without auth dependency \u2014 ospra_os/main.py:3019"}, "properties": {"repobilityId": "05ca2434f53e6392", "scanner": "scanner-primary", "fingerprint": "b180d0be564f32af", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/main.py"}, "region": {"startLine": 3019}}}]}, {"ruleId": "scanner-7bd3eda01fd1a108", "level": "error", "message": {"text": "FastAPI POST `generate_multiple_angles` without auth dependency \u2014 ospra_os/main.py:3076"}, "properties": {"repobilityId": "04a6e6363719752b", "scanner": "scanner-primary", "fingerprint": "7bd3eda01fd1a108", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/main.py"}, "region": {"startLine": 3076}}}]}, {"ruleId": "scanner-782bba0b488f78ec", "level": "error", "message": {"text": "FastAPI POST `deploy_to_shopify` without auth dependency \u2014 ospra_os/main.py:3302"}, "properties": {"repobilityId": "f6e759e82ebb0e9b", "scanner": "scanner-primary", "fingerprint": "782bba0b488f78ec", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/main.py"}, "region": {"startLine": 3302}}}]}, {"ruleId": "scanner-cf4c0b8bed2f8dd3", "level": "error", "message": {"text": "FastAPI POST `bulk_deploy_to_shopify` without auth dependency \u2014 ospra_os/main.py:3360"}, "properties": {"repobilityId": "fc0d52ad170f039a", "scanner": "scanner-primary", "fingerprint": "cf4c0b8bed2f8dd3", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/main.py"}, "region": {"startLine": 3360}}}]}, {"ruleId": "scanner-e4779ce140d5db30", "level": "error", "message": {"text": "FastAPI DELETE `delete_shopify_product` without auth dependency \u2014 ospra_os/main.py:3462"}, "properties": {"repobilityId": "b72924f05d42cfc5", "scanner": "scanner-primary", "fingerprint": "e4779ce140d5db30", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/main.py"}, "region": {"startLine": 3462}}}]}, {"ruleId": "scanner-8f0edd195e40ada0", "level": "error", "message": {"text": "FastAPI POST `search_aliexpress` without auth dependency \u2014 ospra_os/main.py:3504"}, "properties": {"repobilityId": "f2f21dfdcfb2f008", "scanner": "scanner-primary", "fingerprint": "8f0edd195e40ada0", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/main.py"}, "region": {"startLine": 3504}}}]}, {"ruleId": "scanner-3b8f1f517596dd75", "level": "error", "message": {"text": "FastAPI POST `generate_affiliate_links` without auth dependency \u2014 ospra_os/main.py:3551"}, "properties": {"repobilityId": "09e36e388f17c025", "scanner": "scanner-primary", "fingerprint": "3b8f1f517596dd75", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/main.py"}, "region": {"startLine": 3551}}}]}, {"ruleId": "scanner-1bb3d50a4e7397d8", "level": "error", "message": {"text": "FastAPI POST `fulfill_order` without auth dependency \u2014 ospra_os/main.py:3595"}, "properties": {"repobilityId": "869dff2a07ae76fe", "scanner": "scanner-primary", "fingerprint": "1bb3d50a4e7397d8", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/main.py"}, "region": {"startLine": 3595}}}]}, {"ruleId": "scanner-9b971331d59aa7d6", "level": "error", "message": {"text": "FastAPI POST `sync_inventory` without auth dependency \u2014 ospra_os/main.py:3640"}, "properties": {"repobilityId": "91b38b11f5da08d1", "scanner": "scanner-primary", "fingerprint": "9b971331d59aa7d6", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/main.py"}, "region": {"startLine": 3640}}}]}, {"ruleId": "scanner-b276b558cdf2efaf", "level": "error", "message": {"text": "FastAPI POST `monitor_prices` without auth dependency \u2014 ospra_os/main.py:3686"}, "properties": {"repobilityId": "35b5ab3dd74a9230", "scanner": "scanner-primary", "fingerprint": "b276b558cdf2efaf", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/main.py"}, "region": {"startLine": 3686}}}]}, {"ruleId": "scanner-73701bc619f701f9", "level": "error", "message": {"text": "FastAPI POST `create_meta_campaign` without auth dependency \u2014 ospra_os/main.py:3739"}, "properties": {"repobilityId": "7b10b25a84ff7413", "scanner": "scanner-primary", "fingerprint": "73701bc619f701f9", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/main.py"}, "region": {"startLine": 3739}}}]}, {"ruleId": "scanner-1c7d15d48a3ce1f5", "level": "error", "message": {"text": "FastAPI POST `create_bulk_campaigns` without auth dependency \u2014 ospra_os/main.py:3780"}, "properties": {"repobilityId": "b435274829b0b8a7", "scanner": "scanner-primary", "fingerprint": "1c7d15d48a3ce1f5", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/main.py"}, "region": {"startLine": 3780}}}]}, {"ruleId": "scanner-c2c1ba9fa2f2bc5d", "level": "error", "message": {"text": "FastAPI POST `update_campaign_status` without auth dependency \u2014 ospra_os/main.py:3850"}, "properties": {"repobilityId": "2ecc52e7dc3e5c1e", "scanner": "scanner-primary", "fingerprint": "c2c1ba9fa2f2bc5d", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/main.py"}, "region": {"startLine": 3850}}}]}, {"ruleId": "scanner-dcedf2085c7571f4", "level": "error", "message": {"text": "FastAPI POST `update_ad_set_budget` without auth dependency \u2014 ospra_os/main.py:3885"}, "properties": {"repobilityId": "1edd37f6ff0fa2e8", "scanner": "scanner-primary", "fingerprint": "dcedf2085c7571f4", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/main.py"}, "region": {"startLine": 3885}}}]}, {"ruleId": "scanner-acb3e208e863a553", "level": "error", "message": {"text": "FastAPI POST `create_ad_schedule` without auth dependency \u2014 ospra_os/main.py:3926"}, "properties": {"repobilityId": "ebc92c4eff083262", "scanner": "scanner-primary", "fingerprint": "acb3e208e863a553", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/main.py"}, "region": {"startLine": 3926}}}]}, {"ruleId": "scanner-ce3fb1a1a7274e2e", "level": "error", "message": {"text": "FastAPI DELETE `cancel_schedule` without auth dependency \u2014 ospra_os/main.py:4044"}, "properties": {"repobilityId": "db928ccc0c44f478", "scanner": "scanner-primary", "fingerprint": "ce3fb1a1a7274e2e", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/main.py"}, "region": {"startLine": 4044}}}]}, {"ruleId": "scanner-5629a9e3cac2f0e9", "level": "error", "message": {"text": "FastAPI POST `manually_process_schedules` without auth dependency \u2014 ospra_os/main.py:4068"}, "properties": {"repobilityId": "ff918dbb96e2c46d", "scanner": "scanner-primary", "fingerprint": "5629a9e3cac2f0e9", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/main.py"}, "region": {"startLine": 4068}}}]}, {"ruleId": "scanner-3da004bac7403af8", "level": "error", "message": {"text": "FastAPI POST `pause_campaign` without auth dependency \u2014 ospra_os/integrations/meta/routes.py:105"}, "properties": {"repobilityId": "af47ed244e42767b", "scanner": "scanner-primary", "fingerprint": "3da004bac7403af8", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/integrations/meta/routes.py"}, "region": {"startLine": 105}}}]}, {"ruleId": "scanner-03bdbc023679772f", "level": "error", "message": {"text": "FastAPI POST `resume_campaign` without auth dependency \u2014 ospra_os/integrations/meta/routes.py:132"}, "properties": {"repobilityId": "e66d8c9a93408178", "scanner": "scanner-primary", "fingerprint": "03bdbc023679772f", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/integrations/meta/routes.py"}, "region": {"startLine": 132}}}]}, {"ruleId": "scanner-fcf8d40e4999969f", "level": "error", "message": {"text": "FastAPI POST `deploy_product` without auth dependency \u2014 ospra_os/integrations/shopify/routes.py:255"}, "properties": {"repobilityId": "730981327372566c", "scanner": "scanner-primary", "fingerprint": "fcf8d40e4999969f", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/integrations/shopify/routes.py"}, "region": {"startLine": 255}}}]}, {"ruleId": "scanner-b0c26152547e7cd2", "level": "error", "message": {"text": "FastAPI POST `preview_deployment` without auth dependency \u2014 ospra_os/integrations/shopify/routes.py:349"}, "properties": {"repobilityId": "858a26c2ec6ecc05", "scanner": "scanner-primary", "fingerprint": "b0c26152547e7cd2", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/integrations/shopify/routes.py"}, "region": {"startLine": 349}}}]}, {"ruleId": "scanner-9cb88274c24c3232", "level": "error", "message": {"text": "FastAPI POST `bulk_deploy_products` without auth dependency \u2014 ospra_os/integrations/shopify/routes.py:408"}, "properties": {"repobilityId": "ad91c23405592ed5", "scanner": "scanner-primary", "fingerprint": "9cb88274c24c3232", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/integrations/shopify/routes.py"}, "region": {"startLine": 408}}}]}, {"ruleId": "scanner-de424c93b9b4dc11", "level": "error", "message": {"text": "FastAPI DELETE `delete_product` without auth dependency \u2014 ospra_os/integrations/shopify/routes.py:457"}, "properties": {"repobilityId": "414f9475be3111a1", "scanner": "scanner-primary", "fingerprint": "de424c93b9b4dc11", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/integrations/shopify/routes.py"}, "region": {"startLine": 457}}}]}, {"ruleId": "scanner-3acc91af5f8ca271", "level": "error", "message": {"text": "FastAPI PATCH `update_inventory` without auth dependency \u2014 ospra_os/integrations/shopify/routes.py:474"}, "properties": {"repobilityId": "eda2563cf5230967", "scanner": "scanner-primary", "fingerprint": "3acc91af5f8ca271", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/integrations/shopify/routes.py"}, "region": {"startLine": 474}}}]}, {"ruleId": "scanner-7d0b2769747001c1", "level": "error", "message": {"text": "FastAPI POST `test_integration` without auth dependency \u2014 ospra_os/monitoring/routes.py:125"}, "properties": {"repobilityId": "cb5298c3142c3746", "scanner": "scanner-primary", "fingerprint": "7d0b2769747001c1", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/monitoring/routes.py"}, "region": {"startLine": 125}}}]}, {"ruleId": "scanner-ac28c9f02042b6b1", "level": "error", "message": {"text": "FastAPI POST `trigger_job` without auth dependency \u2014 ospra_os/monitoring/routes.py:207"}, "properties": {"repobilityId": "20ca797231f0b670", "scanner": "scanner-primary", "fingerprint": "ac28c9f02042b6b1", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/monitoring/routes.py"}, "region": {"startLine": 207}}}]}, {"ruleId": "scanner-168bf2807c1720b8", "level": "error", "message": {"text": "FastAPI POST `disable_job` without auth dependency \u2014 ospra_os/monitoring/routes.py:219"}, "properties": {"repobilityId": "80080bcc9db7bb89", "scanner": "scanner-primary", "fingerprint": "168bf2807c1720b8", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/monitoring/routes.py"}, "region": {"startLine": 219}}}]}, {"ruleId": "scanner-9fdacbe520648fa1", "level": "error", "message": {"text": "FastAPI POST `enable_job` without auth dependency \u2014 ospra_os/monitoring/routes.py:232"}, "properties": {"repobilityId": "576ec4d82d709c2b", "scanner": "scanner-primary", "fingerprint": "9fdacbe520648fa1", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/monitoring/routes.py"}, "region": {"startLine": 232}}}]}, {"ruleId": "scanner-6c566dae2b363e1c", "level": "error", "message": {"text": "FastAPI POST `acknowledge_error` without auth dependency \u2014 ospra_os/monitoring/routes.py:342"}, "properties": {"repobilityId": "f62ae69a540ab159", "scanner": "scanner-primary", "fingerprint": "6c566dae2b363e1c", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/monitoring/routes.py"}, "region": {"startLine": 342}}}]}, {"ruleId": "scanner-879a477078345cb8", "level": "error", "message": {"text": "FastAPI POST `resolve_error` without auth dependency \u2014 ospra_os/monitoring/routes.py:360"}, "properties": {"repobilityId": "2a683506339f2ed8", "scanner": "scanner-primary", "fingerprint": "879a477078345cb8", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/monitoring/routes.py"}, "region": {"startLine": 360}}}]}, {"ruleId": "scanner-dd949c205f5ee38d", "level": "error", "message": {"text": "FastAPI POST `acknowledge_alert` without auth dependency \u2014 ospra_os/monitoring/routes.py:420"}, "properties": {"repobilityId": "d8565325a1fc4985", "scanner": "scanner-primary", "fingerprint": "dd949c205f5ee38d", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/monitoring/routes.py"}, "region": {"startLine": 420}}}]}, {"ruleId": "scanner-47a75b4c9c2c444a", "level": "error", "message": {"text": "FastAPI POST `resolve_alert` without auth dependency \u2014 ospra_os/monitoring/routes.py:437"}, "properties": {"repobilityId": "79bf2f403632c547", "scanner": "scanner-primary", "fingerprint": "47a75b4c9c2c444a", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/monitoring/routes.py"}, "region": {"startLine": 437}}}]}, {"ruleId": "scanner-fab185cb9a522367", "level": "error", "message": {"text": "FastAPI POST `create_test` without auth dependency \u2014 ospra_os/testing/routes.py:154"}, "properties": {"repobilityId": "f694aa7e1e5c5b65", "scanner": "scanner-primary", "fingerprint": "fab185cb9a522367", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/testing/routes.py"}, "region": {"startLine": 154}}}]}, {"ruleId": "scanner-4bf6de8d7132c622", "level": "error", "message": {"text": "FastAPI POST `start_test` without auth dependency \u2014 ospra_os/testing/routes.py:269"}, "properties": {"repobilityId": "d2d0c57d5181c1c6", "scanner": "scanner-primary", "fingerprint": "4bf6de8d7132c622", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/testing/routes.py"}, "region": {"startLine": 269}}}]}, {"ruleId": "scanner-dad493050db586e7", "level": "error", "message": {"text": "FastAPI POST `pause_test` without auth dependency \u2014 ospra_os/testing/routes.py:292"}, "properties": {"repobilityId": "71c81dd61935140d", "scanner": "scanner-primary", "fingerprint": "dad493050db586e7", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/testing/routes.py"}, "region": {"startLine": 292}}}]}, {"ruleId": "scanner-9caf926721d7d965", "level": "error", "message": {"text": "FastAPI POST `resume_test` without auth dependency \u2014 ospra_os/testing/routes.py:314"}, "properties": {"repobilityId": "e81931a6443a3ea6", "scanner": "scanner-primary", "fingerprint": "9caf926721d7d965", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/testing/routes.py"}, "region": {"startLine": 314}}}]}, {"ruleId": "scanner-cc93e4c4d14a8d38", "level": "error", "message": {"text": "FastAPI POST `end_test` without auth dependency \u2014 ospra_os/testing/routes.py:336"}, "properties": {"repobilityId": "26f983c6a8bad93d", "scanner": "scanner-primary", "fingerprint": "cc93e4c4d14a8d38", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/testing/routes.py"}, "region": {"startLine": 336}}}]}, {"ruleId": "scanner-2b87228b5544c60b", "level": "error", "message": {"text": "FastAPI POST `create_price_test` without auth dependency \u2014 ospra_os/testing/routes.py:424"}, "properties": {"repobilityId": "137144c165c7b45e", "scanner": "scanner-primary", "fingerprint": "2b87228b5544c60b", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/testing/routes.py"}, "region": {"startLine": 424}}}]}, {"ruleId": "scanner-8887c76f9a6cd88e", "level": "error", "message": {"text": "FastAPI POST `create_title_test` without auth dependency \u2014 ospra_os/testing/routes.py:458"}, "properties": {"repobilityId": "c7d1a6bc09ee408e", "scanner": "scanner-primary", "fingerprint": "8887c76f9a6cd88e", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/testing/routes.py"}, "region": {"startLine": 458}}}]}, {"ruleId": "scanner-f2da7e2097756250", "level": "error", "message": {"text": "FastAPI POST `create_description_test` without auth dependency \u2014 ospra_os/testing/routes.py:486"}, "properties": {"repobilityId": "bff0ad6d259f82b5", "scanner": "scanner-primary", "fingerprint": "f2da7e2097756250", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/testing/routes.py"}, "region": {"startLine": 486}}}]}, {"ruleId": "scanner-33a7b915aa5f4394", "level": "error", "message": {"text": "FastAPI POST `create_image_test` without auth dependency \u2014 ospra_os/testing/routes.py:514"}, "properties": {"repobilityId": "fa0e1424034a0410", "scanner": "scanner-primary", "fingerprint": "33a7b915aa5f4394", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/testing/routes.py"}, "region": {"startLine": 514}}}]}, {"ruleId": "scanner-812ce9a46bdce0dc", "level": "error", "message": {"text": "FastAPI POST `get_variant_for_visitor` without auth dependency \u2014 ospra_os/testing/routes.py:546"}, "properties": {"repobilityId": "ae131e58e7c1dfb8", "scanner": "scanner-primary", "fingerprint": "812ce9a46bdce0dc", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/testing/routes.py"}, "region": {"startLine": 546}}}]}, {"ruleId": "scanner-1d8fa346666db314", "level": "error", "message": {"text": "FastAPI POST `record_impression` without auth dependency \u2014 ospra_os/testing/routes.py:581"}, "properties": {"repobilityId": "e8676591d169d6a5", "scanner": "scanner-primary", "fingerprint": "1d8fa346666db314", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/testing/routes.py"}, "region": {"startLine": 581}}}]}, {"ruleId": "scanner-ad0658bbae6477f8", "level": "error", "message": {"text": "FastAPI POST `record_conversion` without auth dependency \u2014 ospra_os/testing/routes.py:608"}, "properties": {"repobilityId": "3e23e04e86a80beb", "scanner": "scanner-primary", "fingerprint": "ad0658bbae6477f8", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/testing/routes.py"}, "region": {"startLine": 608}}}]}, {"ruleId": "scanner-1b81a389cef06040", "level": "error", "message": {"text": "FastAPI POST `refresh_tokens` without auth dependency \u2014 ospra_os/auth/routes.py:322"}, "properties": {"repobilityId": "d007e9bdf1546447", "scanner": "scanner-primary", "fingerprint": "1b81a389cef06040", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/auth/routes.py"}, "region": {"startLine": 322}}}]}, {"ruleId": "scanner-c1a672fada56de0f", "level": "error", "message": {"text": "FastAPI POST `forgot_password` without auth dependency \u2014 ospra_os/auth/routes.py:461"}, "properties": {"repobilityId": "91e69bddd4083a0b", "scanner": "scanner-primary", "fingerprint": "c1a672fada56de0f", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/auth/routes.py"}, "region": {"startLine": 461}}}]}, {"ruleId": "scanner-56bf583c86256f4e", "level": "error", "message": {"text": "FastAPI POST `reset_password` without auth dependency \u2014 ospra_os/auth/routes.py:525"}, "properties": {"repobilityId": "e104708c7f6db4ae", "scanner": "scanner-primary", "fingerprint": "56bf583c86256f4e", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/auth/routes.py"}, "region": {"startLine": 525}}}]}, {"ruleId": "scanner-cdcbb3e255f6019b", "level": "error", "message": {"text": "FastAPI POST `test_tiktok_search` without auth dependency \u2014 ospra_os/auth/tiktok_oauth.py:167"}, "properties": {"repobilityId": "c57ac45db732818b", "scanner": "scanner-primary", "fingerprint": "cdcbb3e255f6019b", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/auth/tiktok_oauth.py"}, "region": {"startLine": 167}}}]}, {"ruleId": "scanner-6b8840e60048c8e5", "level": "error", "message": {"text": "FastAPI POST `sync_from_shopify` without auth dependency \u2014 ospra_os/analytics/customer_routes.py:438"}, "properties": {"repobilityId": "ed1c4c99947460a3", "scanner": "scanner-primary", "fingerprint": "6b8840e60048c8e5", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/analytics/customer_routes.py"}, "region": {"startLine": 438}}}]}, {"ruleId": "scanner-e746d4ebdf3b1622", "level": "error", "message": {"text": "FastAPI POST `sync_single_customer` without auth dependency \u2014 ospra_os/analytics/customer_routes.py:477"}, "properties": {"repobilityId": "f5749fa0a049c804", "scanner": "scanner-primary", "fingerprint": "e746d4ebdf3b1622", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/analytics/customer_routes.py"}, "region": {"startLine": 477}}}]}, {"ruleId": "scanner-26d502feff638a5d", "level": "error", "message": {"text": "FastAPI POST `gmail_pubsub_webhook` without auth dependency \u2014 ospra_os/api/email_automation_routes.py:100"}, "properties": {"repobilityId": "be4003c8c3af6841", "scanner": "scanner-primary", "fingerprint": "26d502feff638a5d", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/api/email_automation_routes.py"}, "region": {"startLine": 100}}}]}, {"ruleId": "scanner-4992ca9deaeecd98", "level": "error", "message": {"text": "FastAPI POST `create_store` without auth dependency \u2014 ospra_os/api/store_routes.py:198"}, "properties": {"repobilityId": "a6d30387f9fcceea", "scanner": "scanner-primary", "fingerprint": "4992ca9deaeecd98", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/api/store_routes.py"}, "region": {"startLine": 198}}}]}, {"ruleId": "scanner-c2b54c92c51d0871", "level": "error", "message": {"text": "FastAPI PATCH `update_store_status` without auth dependency \u2014 ospra_os/api/store_routes.py:254"}, "properties": {"repobilityId": "dbf2230c17295088", "scanner": "scanner-primary", "fingerprint": "c2b54c92c51d0871", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/api/store_routes.py"}, "region": {"startLine": 254}}}]}, {"ruleId": "scanner-23f1999cc7e5cb87", "level": "error", "message": {"text": "FastAPI POST `generate_cross_store_learnings` without auth dependency \u2014 ospra_os/api/store_routes.py:304"}, "properties": {"repobilityId": "3af473b0f6059835", "scanner": "scanner-primary", "fingerprint": "23f1999cc7e5cb87", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/api/store_routes.py"}, "region": {"startLine": 304}}}]}, {"ruleId": "scanner-a7b9be8eaeb5bed4", "level": "error", "message": {"text": "FastAPI POST `apply_cross_store_learning` without auth dependency \u2014 ospra_os/api/store_routes.py:362"}, "properties": {"repobilityId": "de3ce49587f1e9e5", "scanner": "scanner-primary", "fingerprint": "a7b9be8eaeb5bed4", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/api/store_routes.py"}, "region": {"startLine": 362}}}]}, {"ruleId": "scanner-76c5434edc66cea2", "level": "error", "message": {"text": "FastAPI POST `dismiss_cross_store_learning` without auth dependency \u2014 ospra_os/api/store_routes.py:402"}, "properties": {"repobilityId": "9bfc971eb782850b", "scanner": "scanner-primary", "fingerprint": "76c5434edc66cea2", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/api/store_routes.py"}, "region": {"startLine": 402}}}]}, {"ruleId": "scanner-3e0b58f71dda6b6c", "level": "error", "message": {"text": "FastAPI POST `forgot_password` without auth dependency \u2014 ospra_os/api/password_reset_routes.py:168"}, "properties": {"repobilityId": "e97de0a6cfc0bc0a", "scanner": "scanner-primary", "fingerprint": "3e0b58f71dda6b6c", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/api/password_reset_routes.py"}, "region": {"startLine": 168}}}]}, {"ruleId": "scanner-158ff5f672849d4a", "level": "error", "message": {"text": "FastAPI POST `verify_reset_token_endpoint` without auth dependency \u2014 ospra_os/api/password_reset_routes.py:235"}, "properties": {"repobilityId": "a32ceca897dac794", "scanner": "scanner-primary", "fingerprint": "158ff5f672849d4a", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/api/password_reset_routes.py"}, "region": {"startLine": 235}}}]}, {"ruleId": "scanner-bcdedf7047a06313", "level": "error", "message": {"text": "FastAPI POST `reset_password` without auth dependency \u2014 ospra_os/api/password_reset_routes.py:264"}, "properties": {"repobilityId": "a3bcf9d083fadb4f", "scanner": "scanner-primary", "fingerprint": "bcdedf7047a06313", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/api/password_reset_routes.py"}, "region": {"startLine": 264}}}]}, {"ruleId": "scanner-1144af621195d9ae", "level": "error", "message": {"text": "FastAPI POST `generate_marketing_angle` without auth dependency \u2014 ospra_os/api/marketing_routes.py:48"}, "properties": {"repobilityId": "c0e6298d08a0dc37", "scanner": "scanner-primary", "fingerprint": "1144af621195d9ae", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/api/marketing_routes.py"}, "region": {"startLine": 48}}}]}, {"ruleId": "scanner-170312a256bcf827", "level": "error", "message": {"text": "FastAPI POST `generate_multiple_angles` without auth dependency \u2014 ospra_os/api/marketing_routes.py:87"}, "properties": {"repobilityId": "b606bc4db52f175e", "scanner": "scanner-primary", "fingerprint": "170312a256bcf827", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/api/marketing_routes.py"}, "region": {"startLine": 87}}}]}, {"ruleId": "scanner-67f8b0efd8045947", "level": "error", "message": {"text": "FastAPI POST `preview_deployment` without auth dependency \u2014 ospra_os/api/deployment_routes.py:593"}, "properties": {"repobilityId": "f561ba54ec7378a7", "scanner": "scanner-primary", "fingerprint": "67f8b0efd8045947", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/api/deployment_routes.py"}, "region": {"startLine": 593}}}]}, {"ruleId": "scanner-0112516a5f81ea53", "level": "error", "message": {"text": "FastAPI POST `refresh_token` without auth dependency \u2014 ospra_os/api/auth_routes.py:206"}, "properties": {"repobilityId": "24c8596016deb2ad", "scanner": "scanner-primary", "fingerprint": "0112516a5f81ea53", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/api/auth_routes.py"}, "region": {"startLine": 206}}}]}, {"ruleId": "scanner-6740502532fd0e48", "level": "error", "message": {"text": "FastAPI POST `legacy_compare` without auth dependency \u2014 ospra_os/api/image_generation_routes.py:828"}, "properties": {"repobilityId": "d81b85a48228ab1e", "scanner": "scanner-primary", "fingerprint": "6740502532fd0e48", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/api/image_generation_routes.py"}, "region": {"startLine": 828}}}]}, {"ruleId": "scanner-10994f9320b97200", "level": "error", "message": {"text": "FastAPI POST `enhance_images` without auth dependency \u2014 ospra_os/intelligence/unified_discovery_routes.py:774"}, "properties": {"repobilityId": "378344a83a2880f2", "scanner": "scanner-primary", "fingerprint": "10994f9320b97200", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/intelligence/unified_discovery_routes.py"}, "region": {"startLine": 774}}}]}, {"ruleId": "scanner-8b0d22927c6e15c7", "level": "error", "message": {"text": "FastAPI POST `refresh_cj_categories` without auth dependency \u2014 ospra_os/intelligence/unified_discovery_routes.py:1564"}, "properties": {"repobilityId": "b6fa3fee339217b4", "scanner": "scanner-primary", "fingerprint": "8b0d22927c6e15c7", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/intelligence/unified_discovery_routes.py"}, "region": {"startLine": 1564}}}]}, {"ruleId": "scanner-1ec4d738ceb5eca9", "level": "error", "message": {"text": "FastAPI POST `warm_cache` without auth dependency \u2014 ospra_os/intelligence/unified_discovery_routes.py:1630"}, "properties": {"repobilityId": "fe6a764c0462e552", "scanner": "scanner-primary", "fingerprint": "1ec4d738ceb5eca9", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/intelligence/unified_discovery_routes.py"}, "region": {"startLine": 1630}}}]}, {"ruleId": "scanner-5cfee5f5e3b8fe26", "level": "error", "message": {"text": "FastAPI DELETE `clear_cache` without auth dependency \u2014 ospra_os/intelligence/unified_discovery_routes.py:1697"}, "properties": {"repobilityId": "b6a11573943df69f", "scanner": "scanner-primary", "fingerprint": "5cfee5f5e3b8fe26", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/intelligence/unified_discovery_routes.py"}, "region": {"startLine": 1697}}}]}, {"ruleId": "scanner-2873b25d65302092", "level": "error", "message": {"text": "FastAPI POST `trigger_niche_analysis` without auth dependency \u2014 ospra_os/intelligence/niche_routes.py:104"}, "properties": {"repobilityId": "d2b654313b0c4042", "scanner": "scanner-primary", "fingerprint": "2873b25d65302092", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/intelligence/niche_routes.py"}, "region": {"startLine": 104}}}]}, {"ruleId": "scanner-85f7dc10d910cdf1", "level": "error", "message": {"text": "FastAPI POST `compare_niches` without auth dependency \u2014 ospra_os/intelligence/niche_routes.py:259"}, "properties": {"repobilityId": "2a30399c64096e0f", "scanner": "scanner-primary", "fingerprint": "85f7dc10d910cdf1", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/intelligence/niche_routes.py"}, "region": {"startLine": 259}}}]}, {"ruleId": "scanner-36ebfdfa53fb04cf", "level": "error", "message": {"text": "FastAPI POST `grade_products_bulk` without auth dependency \u2014 ospra_os/intelligence/intelligence_core_routes.py:179"}, "properties": {"repobilityId": "c4f69a3bc93941e5", "scanner": "scanner-primary", "fingerprint": "36ebfdfa53fb04cf", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/intelligence/intelligence_core_routes.py"}, "region": {"startLine": 179}}}]}, {"ruleId": "scanner-eadf6ecf71104f22", "level": "error", "message": {"text": "FastAPI POST `advance_product_stage` without auth dependency \u2014 ospra_os/intelligence/intelligence_core_routes.py:202"}, "properties": {"repobilityId": "cd2632c605ae6700", "scanner": "scanner-primary", "fingerprint": "eadf6ecf71104f22", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/intelligence/intelligence_core_routes.py"}, "region": {"startLine": 202}}}]}, {"ruleId": "scanner-f774c6e1b0cce457", "level": "error", "message": {"text": "FastAPI POST `upgrade_tier` without auth dependency \u2014 ospra_os/intelligence/intelligence_core_routes.py:267"}, "properties": {"repobilityId": "5610906475e24d03", "scanner": "scanner-primary", "fingerprint": "f774c6e1b0cce457", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/intelligence/intelligence_core_routes.py"}, "region": {"startLine": 267}}}]}, {"ruleId": "scanner-26d50b11194ab88c", "level": "error", "message": {"text": "FastAPI POST `preview_action` without auth dependency \u2014 ospra_os/intelligence/intelligence_core_routes.py:282"}, "properties": {"repobilityId": "5e119e7207aca8fb", "scanner": "scanner-primary", "fingerprint": "26d50b11194ab88c", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/intelligence/intelligence_core_routes.py"}, "region": {"startLine": 282}}}]}, {"ruleId": "scanner-e32a6a2e0fbf2c15", "level": "error", "message": {"text": "FastAPI POST `execute_action` without auth dependency \u2014 ospra_os/intelligence/intelligence_core_routes.py:289"}, "properties": {"repobilityId": "46439f50d7b5d21e", "scanner": "scanner-primary", "fingerprint": "e32a6a2e0fbf2c15", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/intelligence/intelligence_core_routes.py"}, "region": {"startLine": 289}}}]}, {"ruleId": "scanner-068f761162413e0f", "level": "error", "message": {"text": "FastAPI POST `undo_action` without auth dependency \u2014 ospra_os/intelligence/intelligence_core_routes.py:296"}, "properties": {"repobilityId": "fe4e165d853bcd9c", "scanner": "scanner-primary", "fingerprint": "068f761162413e0f", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/intelligence/intelligence_core_routes.py"}, "region": {"startLine": 296}}}]}, {"ruleId": "scanner-98b39b120c932d91", "level": "error", "message": {"text": "FastAPI POST `contribute_to_global` without auth dependency \u2014 ospra_os/learning/learning_routes.py:75"}, "properties": {"repobilityId": "c3400f07c7b7c253", "scanner": "scanner-primary", "fingerprint": "98b39b120c932d91", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/learning/learning_routes.py"}, "region": {"startLine": 75}}}]}, {"ruleId": "scanner-1a70e8e393178f6b", "level": "error", "message": {"text": "FastAPI POST `learn_personal` without auth dependency \u2014 ospra_os/learning/learning_routes.py:120"}, "properties": {"repobilityId": "2214b31a20c06474", "scanner": "scanner-primary", "fingerprint": "1a70e8e393178f6b", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/learning/learning_routes.py"}, "region": {"startLine": 120}}}]}, {"ruleId": "scanner-c1eadec12192d035", "level": "error", "message": {"text": "FastAPI POST `record_feedback` without auth dependency \u2014 ospra_os/learning/learning_routes.py:142"}, "properties": {"repobilityId": "2967cc41bfcc73a1", "scanner": "scanner-primary", "fingerprint": "c1eadec12192d035", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/learning/learning_routes.py"}, "region": {"startLine": 142}}}]}, {"ruleId": "scanner-fe7e2407a521e1f5", "level": "error", "message": {"text": "FastAPI POST `get_adjusted_score` without auth dependency \u2014 ospra_os/learning/learning_routes.py:308"}, "properties": {"repobilityId": "ca8ffcf857c3a4fe", "scanner": "scanner-primary", "fingerprint": "fe7e2407a521e1f5", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/learning/learning_routes.py"}, "region": {"startLine": 308}}}]}, {"ruleId": "scanner-dd7d344229b9d7d1", "level": "error", "message": {"text": "FastAPI POST `set_custom_weights` without auth dependency \u2014 ospra_os/learning/learning_routes.py:335"}, "properties": {"repobilityId": "ffec2dbe2cebee38", "scanner": "scanner-primary", "fingerprint": "dd7d344229b9d7d1", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/learning/learning_routes.py"}, "region": {"startLine": 335}}}]}, {"ruleId": "scanner-759f79d4bf86a1df", "level": "error", "message": {"text": "FastAPI POST `record_ad_performance` without auth dependency \u2014 ospra_os/learning/learning_routes.py:370"}, "properties": {"repobilityId": "014ec36edab5bd2b", "scanner": "scanner-primary", "fingerprint": "759f79d4bf86a1df", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/learning/learning_routes.py"}, "region": {"startLine": 370}}}]}, {"ruleId": "scanner-4970828c60b9a560", "level": "error", "message": {"text": "FastAPI POST `trigger_global_analysis` without auth dependency \u2014 ospra_os/learning/learning_routes.py:514"}, "properties": {"repobilityId": "960dac0d807932c5", "scanner": "scanner-primary", "fingerprint": "4970828c60b9a560", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/learning/learning_routes.py"}, "region": {"startLine": 514}}}]}, {"ruleId": "scanner-3534e52d3ef33fc7", "level": "error", "message": {"text": "FastAPI POST `trigger_personal_analysis` without auth dependency \u2014 ospra_os/learning/learning_routes.py:548"}, "properties": {"repobilityId": "de6417ac81ba110c", "scanner": "scanner-primary", "fingerprint": "3534e52d3ef33fc7", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/learning/learning_routes.py"}, "region": {"startLine": 548}}}]}, {"ruleId": "scanner-d4a55673e9e13942", "level": "error", "message": {"text": "FastAPI POST `trigger_all_users_analysis` without auth dependency \u2014 ospra_os/learning/learning_routes.py:580"}, "properties": {"repobilityId": "9b5ccd3a81e65c30", "scanner": "scanner-primary", "fingerprint": "d4a55673e9e13942", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/learning/learning_routes.py"}, "region": {"startLine": 580}}}]}, {"ruleId": "scanner-1d277617f9933c36", "level": "error", "message": {"text": "FastAPI POST `trigger_learning_now` without auth dependency \u2014 ospra_os/learning/learning_routes.py:668"}, "properties": {"repobilityId": "11c8c7e4d46fdeb3", "scanner": "scanner-primary", "fingerprint": "1d277617f9933c36", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/learning/learning_routes.py"}, "region": {"startLine": 668}}}]}, {"ruleId": "scanner-bdb5cf02cbf67847", "level": "error", "message": {"text": "FastAPI POST `simulate_sale` without auth dependency \u2014 ospra_os/learning/learning_routes.py:740"}, "properties": {"repobilityId": "04e8bd41f126c5b5", "scanner": "scanner-primary", "fingerprint": "bdb5cf02cbf67847", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/learning/learning_routes.py"}, "region": {"startLine": 740}}}]}, {"ruleId": "scanner-ac5b24839e19db59", "level": "error", "message": {"text": "FastAPI PUT `update_partner_branding` without auth dependency \u2014 ospra_os/whitelabel/routes.py:321"}, "properties": {"repobilityId": "de201cecc0e8a18e", "scanner": "scanner-primary", "fingerprint": "ac5b24839e19db59", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/whitelabel/routes.py"}, "region": {"startLine": 321}}}]}, {"ruleId": "scanner-77b8065cc3affaae", "level": "error", "message": {"text": "FastAPI POST `configure_partner_domain` without auth dependency \u2014 ospra_os/whitelabel/routes.py:358"}, "properties": {"repobilityId": "0b826c20ebf51469", "scanner": "scanner-primary", "fingerprint": "77b8065cc3affaae", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/whitelabel/routes.py"}, "region": {"startLine": 358}}}]}, {"ruleId": "scanner-b56ee990a4a13f44", "level": "error", "message": {"text": "FastAPI POST `verify_partner_domain` without auth dependency \u2014 ospra_os/whitelabel/routes.py:396"}, "properties": {"repobilityId": "c76468ebc1452d02", "scanner": "scanner-primary", "fingerprint": "b56ee990a4a13f44", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/whitelabel/routes.py"}, "region": {"startLine": 396}}}]}, {"ruleId": "scanner-30560f524e595f91", "level": "error", "message": {"text": "FastAPI POST `add_partner_client` without auth dependency \u2014 ospra_os/whitelabel/routes.py:443"}, "properties": {"repobilityId": "34d3ac39c067a59b", "scanner": "scanner-primary", "fingerprint": "30560f524e595f91", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/whitelabel/routes.py"}, "region": {"startLine": 443}}}]}, {"ruleId": "scanner-3b684c7d64dae5cc", "level": "error", "message": {"text": "FastAPI DELETE `remove_partner_client` without auth dependency \u2014 ospra_os/whitelabel/routes.py:475"}, "properties": {"repobilityId": "825bc1b560a35596", "scanner": "scanner-primary", "fingerprint": "3b684c7d64dae5cc", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/whitelabel/routes.py"}, "region": {"startLine": 475}}}]}, {"ruleId": "scanner-56f65b54f84f1964", "level": "error", "message": {"text": "FastAPI POST `find_products` without auth dependency \u2014 ospra_os/product_research/routes.py:41"}, "properties": {"repobilityId": "4841eabe704e804f", "scanner": "scanner-primary", "fingerprint": "56f65b54f84f1964", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/product_research/routes.py"}, "region": {"startLine": 41}}}]}, {"ruleId": "scanner-3c0065f06e31e5b4", "level": "error", "message": {"text": "FastAPI POST `discover_products` without auth dependency \u2014 ospra_os/product_research/routes.py:329"}, "properties": {"repobilityId": "6f914a557b4e41c1", "scanner": "scanner-primary", "fingerprint": "3c0065f06e31e5b4", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/product_research/routes.py"}, "region": {"startLine": 329}}}]}, {"ruleId": "scanner-4e3171f651ca707c", "level": "error", "message": {"text": "FastAPI POST `validate_product` without auth dependency \u2014 ospra_os/product_research/routes.py:375"}, "properties": {"repobilityId": "3f0d92461166d4e5", "scanner": "scanner-primary", "fingerprint": "4e3171f651ca707c", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/product_research/routes.py"}, "region": {"startLine": 375}}}]}, {"ruleId": "scanner-5805083865f34b90", "level": "error", "message": {"text": "FastAPI POST `discover_twitter_viral` without auth dependency \u2014 ospra_os/product_research/routes.py:450"}, "properties": {"repobilityId": "67f255173f42413b", "scanner": "scanner-primary", "fingerprint": "5805083865f34b90", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/product_research/routes.py"}, "region": {"startLine": 450}}}]}, {"ruleId": "scanner-424d41a821f510c4", "level": "error", "message": {"text": "FastAPI POST `join_stratosphere_waitlist` without auth dependency \u2014 ospra_os/waitlist/routes.py:53"}, "properties": {"repobilityId": "f1557d0af9370f9d", "scanner": "scanner-primary", "fingerprint": "424d41a821f510c4", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/waitlist/routes.py"}, "region": {"startLine": 53}}}]}, {"ruleId": "scanner-01c6677bf489072f", "level": "error", "message": {"text": "FastAPI POST `check_waitlist_status` without auth dependency \u2014 ospra_os/waitlist/routes.py:81"}, "properties": {"repobilityId": "3b547727450ad908", "scanner": "scanner-primary", "fingerprint": "01c6677bf489072f", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/waitlist/routes.py"}, "region": {"startLine": 81}}}]}, {"ruleId": "scanner-60e7b916a97f101c", "level": "error", "message": {"text": "FastAPI POST `submit_onboarding_form` without auth dependency \u2014 ospra_os/onboarding/routes.py:61"}, "properties": {"repobilityId": "6a33ab193c771b28", "scanner": "scanner-primary", "fingerprint": "60e7b916a97f101c", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/onboarding/routes.py"}, "region": {"startLine": 61}}}]}, {"ruleId": "scanner-a2b9f530a86d640e", "level": "error", "message": {"text": "FastAPI POST `update_checklist_item` without auth dependency \u2014 ospra_os/onboarding/routes.py:113"}, "properties": {"repobilityId": "169505527ed82001", "scanner": "scanner-primary", "fingerprint": "a2b9f530a86d640e", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/onboarding/routes.py"}, "region": {"startLine": 113}}}]}, {"ruleId": "scanner-f72b5332e6758e51", "level": "error", "message": {"text": "FastAPI POST `handle_calendly_webhook` without auth dependency \u2014 ospra_os/onboarding/routes.py:127"}, "properties": {"repobilityId": "116e53642cc000e5", "scanner": "scanner-primary", "fingerprint": "f72b5332e6758e51", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/onboarding/routes.py"}, "region": {"startLine": 127}}}]}, {"ruleId": "scanner-bd84853402dda377", "level": "error", "message": {"text": "FastAPI POST `create_checkout` without auth dependency \u2014 ospra_os/payments/routes.py:43"}, "properties": {"repobilityId": "0fe762cac2f51a63", "scanner": "scanner-primary", "fingerprint": "bd84853402dda377", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/payments/routes.py"}, "region": {"startLine": 43}}}]}, {"ruleId": "scanner-385484c723e61db9", "level": "error", "message": {"text": "FastAPI POST `cancel_subscription` without auth dependency \u2014 ospra_os/payments/routes.py:153"}, "properties": {"repobilityId": "78e1312190e67375", "scanner": "scanner-primary", "fingerprint": "385484c723e61db9", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/payments/routes.py"}, "region": {"startLine": 153}}}]}, {"ruleId": "scanner-508a3c6d43dc2631", "level": "error", "message": {"text": "FastAPI POST `resume_subscription` without auth dependency \u2014 ospra_os/payments/routes.py:179"}, "properties": {"repobilityId": "116c58e4c525c216", "scanner": "scanner-primary", "fingerprint": "508a3c6d43dc2631", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/payments/routes.py"}, "region": {"startLine": 179}}}]}, {"ruleId": "scanner-ba0110a55e5cbcda", "level": "error", "message": {"text": "FastAPI POST `change_subscription_tier` without auth dependency \u2014 ospra_os/payments/routes.py:205"}, "properties": {"repobilityId": "feda3a2a855350c4", "scanner": "scanner-primary", "fingerprint": "ba0110a55e5cbcda", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/payments/routes.py"}, "region": {"startLine": 205}}}]}, {"ruleId": "scanner-4be37605da2e36b9", "level": "error", "message": {"text": "FastAPI POST `lemonsqueezy_webhook` without auth dependency \u2014 ospra_os/payments/routes.py:270"}, "properties": {"repobilityId": "686e099514cc88e1", "scanner": "scanner-primary", "fingerprint": "4be37605da2e36b9", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/payments/routes.py"}, "region": {"startLine": 270}}}]}, {"ruleId": "scanner-dc56995f885eb4c9", "level": "error", "message": {"text": "FastAPI POST `send_custom_notification` without auth dependency \u2014 ospra_os/services/notification_routes.py:115"}, "properties": {"repobilityId": "3f09dc5c85a1537f", "scanner": "scanner-primary", "fingerprint": "dc56995f885eb4c9", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/services/notification_routes.py"}, "region": {"startLine": 115}}}]}, {"ruleId": "scanner-6cee5525a2f4463f", "level": "error", "message": {"text": "FastAPI POST `generate_report` without auth dependency \u2014 ospra_os/reports/routes.py:93"}, "properties": {"repobilityId": "49b3b9d404115939", "scanner": "scanner-primary", "fingerprint": "6cee5525a2f4463f", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/reports/routes.py"}, "region": {"startLine": 93}}}]}, {"ruleId": "scanner-1eb1ff7437632344", "level": "error", "message": {"text": "FastAPI DELETE `delete_report` without auth dependency \u2014 ospra_os/reports/routes.py:302"}, "properties": {"repobilityId": "29494a8f495ae131", "scanner": "scanner-primary", "fingerprint": "1eb1ff7437632344", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/reports/routes.py"}, "region": {"startLine": 302}}}]}, {"ruleId": "scanner-7541734e158c34b2", "level": "error", "message": {"text": "FastAPI POST `create_schedule` without auth dependency \u2014 ospra_os/reports/routes.py:315"}, "properties": {"repobilityId": "94f95c530838d82e", "scanner": "scanner-primary", "fingerprint": "7541734e158c34b2", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/reports/routes.py"}, "region": {"startLine": 315}}}]}, {"ruleId": "scanner-b043d4c5bb40aaf8", "level": "error", "message": {"text": "FastAPI PUT `update_schedule` without auth dependency \u2014 ospra_os/reports/routes.py:378"}, "properties": {"repobilityId": "253ddd952cc06cd3", "scanner": "scanner-primary", "fingerprint": "b043d4c5bb40aaf8", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/reports/routes.py"}, "region": {"startLine": 378}}}]}, {"ruleId": "scanner-d46e37961715f262", "level": "error", "message": {"text": "FastAPI DELETE `delete_schedule` without auth dependency \u2014 ospra_os/reports/routes.py:389"}, "properties": {"repobilityId": "59c6bd8e511777e6", "scanner": "scanner-primary", "fingerprint": "d46e37961715f262", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/reports/routes.py"}, "region": {"startLine": 389}}}]}, {"ruleId": "scanner-0390521c4666925f", "level": "error", "message": {"text": "FastAPI POST `run_schedule` without auth dependency \u2014 ospra_os/reports/routes.py:400"}, "properties": {"repobilityId": "7fd765b635d5dccf", "scanner": "scanner-primary", "fingerprint": "0390521c4666925f", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/reports/routes.py"}, "region": {"startLine": 400}}}]}, {"ruleId": "scanner-9e50c65ac5eafa3d", "level": "error", "message": {"text": "FastAPI POST `upload_video` without auth dependency \u2014 ospra_os/tiktok/routes.py:244"}, "properties": {"repobilityId": "ec3523375a74b215", "scanner": "scanner-primary", "fingerprint": "9e50c65ac5eafa3d", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/tiktok/routes.py"}, "region": {"startLine": 244}}}]}, {"ruleId": "scanner-3f002d90cfac84d5", "level": "error", "message": {"text": "FastAPI POST `start_scheduler` without auth dependency \u2014 ospra_os/jobs/routes.py:42"}, "properties": {"repobilityId": "f60de84a98e680f2", "scanner": "scanner-primary", "fingerprint": "3f002d90cfac84d5", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/jobs/routes.py"}, "region": {"startLine": 42}}}]}, {"ruleId": "scanner-1d4656ec95e895e3", "level": "error", "message": {"text": "FastAPI POST `stop_scheduler` without auth dependency \u2014 ospra_os/jobs/routes.py:55"}, "properties": {"repobilityId": "34d9885b74fd9169", "scanner": "scanner-primary", "fingerprint": "1d4656ec95e895e3", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/jobs/routes.py"}, "region": {"startLine": 55}}}]}, {"ruleId": "scanner-0b0c2443df07b693", "level": "error", "message": {"text": "FastAPI POST `run_job_now` without auth dependency \u2014 ospra_os/jobs/routes.py:68"}, "properties": {"repobilityId": "6acc17cdeb2a8662", "scanner": "scanner-primary", "fingerprint": "0b0c2443df07b693", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ospra_os/jobs/routes.py"}, "region": {"startLine": 68}}}]}, {"ruleId": "scanner-d2e2576e8dac5ed6", "level": "note", "message": {"text": "Unused endpoint: GET /debug/intelligence"}, "properties": {"repobilityId": "053b61087f98cfc8", "scanner": "scanner-primary", "fingerprint": "d2e2576e8dac5ed6", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d504b80adc9409ec", "level": "note", "message": {"text": "Unused endpoint: GET /dashboard"}, "properties": {"repobilityId": "3e2dc1fbc572d2f4", "scanner": "scanner-primary", "fingerprint": "d504b80adc9409ec", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-16eec853d4ffbd82", "level": "note", "message": {"text": "Unused endpoint: GET /analytics/daily"}, "properties": {"repobilityId": "17c99aa164a57e53", "scanner": "scanner-primary", "fingerprint": "16eec853d4ffbd82", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f378d4ceef532bab", "level": "note", "message": {"text": "Unused endpoint: GET /analytics/weekly"}, "properties": {"repobilityId": "6da0ea7a31d25c55", "scanner": "scanner-primary", "fingerprint": "f378d4ceef532bab", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3929eaa5b5e9e030", "level": "note", "message": {"text": "Unused endpoint: GET /analytics/costs"}, "properties": {"repobilityId": "cc7172a6528b1070", "scanner": "scanner-primary", "fingerprint": "3929eaa5b5e9e030", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-78e46b1077ada169", "level": "note", "message": {"text": "Unused endpoint: GET /analytics/labels"}, "properties": {"repobilityId": "ab92121d6f30a42b", "scanner": "scanner-primary", "fingerprint": "78e46b1077ada169", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-82248069701a8208", "level": "note", "message": {"text": "Unused endpoint: GET /analytics/cache-stats"}, "properties": {"repobilityId": "bbf0ab8afcaa89b7", "scanner": "scanner-primary", "fingerprint": "82248069701a8208", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-cdd463fb35f3cd1d", "level": "note", "message": {"text": "Unused endpoint: GET /auth/url"}, "properties": {"repobilityId": "79fc89c246b0b550", "scanner": "scanner-primary", "fingerprint": "cdd463fb35f3cd1d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-0d9d34c62f12b3b1", "level": "note", "message": {"text": "Unused endpoint: GET /oauth2callback"}, "properties": {"repobilityId": "c7348b61d55347af", "scanner": "scanner-primary", "fingerprint": "0d9d34c62f12b3b1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b2179998bc6df0f0", "level": "note", "message": {"text": "Unused endpoint: POST /gmail/ingest"}, "properties": {"repobilityId": "f3764ef0c12521f7", "scanner": "scanner-primary", "fingerprint": "b2179998bc6df0f0", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5c93600e7c176e3e", "level": "note", "message": {"text": "Unused endpoint: POST /gmail/send-demo"}, "properties": {"repobilityId": "cd21bce14d1fea9b", "scanner": "scanner-primary", "fingerprint": "5c93600e7c176e3e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b821b9bbbef1dfa4", "level": "note", "message": {"text": "Unused endpoint: POST /templates/upsert"}, "properties": {"repobilityId": "aeddb63730aaf3c0", "scanner": "scanner-primary", "fingerprint": "b821b9bbbef1dfa4", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-79012c5b374697e7", "level": "note", "message": {"text": "Unused endpoint: GET /templates/list"}, "properties": {"repobilityId": "86a42d4af41d8f64", "scanner": "scanner-primary", "fingerprint": "79012c5b374697e7", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e5c89f6cd3a64b87", "level": "note", "message": {"text": "Unused endpoint: POST /rules/set"}, "properties": {"repobilityId": "72949b7182c0d143", "scanner": "scanner-primary", "fingerprint": "e5c89f6cd3a64b87", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-77b217061e906deb", "level": "note", "message": {"text": "Unused endpoint: GET /rules/preview"}, "properties": {"repobilityId": "bd36a8e4ed116e99", "scanner": "scanner-primary", "fingerprint": "77b217061e906deb", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-21516d7384e255cf", "level": "note", "message": {"text": "Unused endpoint: POST /gmail/ensure-labels"}, "properties": {"repobilityId": "40b4bf1c3bfbf302", "scanner": "scanner-primary", "fingerprint": "21516d7384e255cf", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-88e7d4b3a2b1defd", "level": "note", "message": {"text": "Unused endpoint: POST /gmail/process-inbox2"}, "properties": {"repobilityId": "6d941629380960ca", "scanner": "scanner-primary", "fingerprint": "88e7d4b3a2b1defd", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-fdb14e434178928d", "level": "note", "message": {"text": "Unused endpoint: GET /debug/peek"}, "properties": {"repobilityId": "defcde84afc4f439", "scanner": "scanner-primary", "fingerprint": "fdb14e434178928d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-09bc08a7dce509c4", "level": "note", "message": {"text": "Unused endpoint: POST /gmail/process-inbox"}, "properties": {"repobilityId": "ed5a49fbf038a676", "scanner": "scanner-primary", "fingerprint": "09bc08a7dce509c4", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c43ca824dcf51f74", "level": "note", "message": {"text": "Unused endpoint: POST /ai/reply-draft"}, "properties": {"repobilityId": "6cc6a151c5d42898", "scanner": "scanner-primary", "fingerprint": "c43ca824dcf51f74", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-dbbcfebf364c5a82", "level": "note", "message": {"text": "Unused endpoint: POST /gmail/smart-process"}, "properties": {"repobilityId": "1e6e93762a0448fd", "scanner": "scanner-primary", "fingerprint": "dbbcfebf364c5a82", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-dadde88ae01e4077", "level": "note", "message": {"text": "Unused endpoint: POST /gmail/pubsub/webhook"}, "properties": {"repobilityId": "950d4e85ff1c6e66", "scanner": "scanner-primary", "fingerprint": "dadde88ae01e4077", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-963c797a9352e584", "level": "note", "message": {"text": "Unused endpoint: POST /gmail/watch/start"}, "properties": {"repobilityId": "43f95af925ecbf8e", "scanner": "scanner-primary", "fingerprint": "963c797a9352e584", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b236657d102d073a", "level": "note", "message": {"text": "Unused endpoint: POST /gmail/watch/stop"}, "properties": {"repobilityId": "048c170ab4b6a5f5", "scanner": "scanner-primary", "fingerprint": "b236657d102d073a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-91427b7d02ffb2dc", "level": "note", "message": {"text": "Unused endpoint: GET /gmail/watch/status"}, "properties": {"repobilityId": "c893fac9ea7231cf", "scanner": "scanner-primary", "fingerprint": "91427b7d02ffb2dc", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d0131fa36032448a", "level": "note", "message": {"text": "Unused endpoint: GET /api/claude/daily-briefing"}, "properties": {"repobilityId": "31d9e46934d476db", "scanner": "scanner-primary", "fingerprint": "d0131fa36032448a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-0d2c1bc8cd52aefc", "level": "note", "message": {"text": "Unused endpoint: GET /api/claude/weekly-report"}, "properties": {"repobilityId": "a1c8056ecc4db6df", "scanner": "scanner-primary", "fingerprint": "0d2c1bc8cd52aefc", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-fb85b9955ee6df07", "level": "note", "message": {"text": "Unused endpoint: POST /api/claude/chat"}, "properties": {"repobilityId": "809a6ba9980d71b4", "scanner": "scanner-primary", "fingerprint": "fb85b9955ee6df07", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-4cd731bf871d81e8", "level": "note", "message": {"text": "Unused endpoint: POST /api/claude/chat/reset"}, "properties": {"repobilityId": "93d84ea7a3561dc4", "scanner": "scanner-primary", "fingerprint": "4cd731bf871d81e8", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-953eab4b09345a62", "level": "note", "message": {"text": "Unused endpoint: POST /api/intelligence/discover"}, "properties": {"repobilityId": "c67cc13797431295", "scanner": "scanner-primary", "fingerprint": "953eab4b09345a62", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f0264347d61c569d", "level": "note", "message": {"text": "Unused endpoint: GET /api/intelligence/stats"}, "properties": {"repobilityId": "c325c161f74f6398", "scanner": "scanner-primary", "fingerprint": "f0264347d61c569d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-38e10c9260a97912", "level": "note", "message": {"text": "Unused endpoint: GET /api/apify/status"}, "properties": {"repobilityId": "76413583743f8470", "scanner": "scanner-primary", "fingerprint": "38e10c9260a97912", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1b8edf34a912e17b", "level": "note", "message": {"text": "Unused endpoint: POST /api/v2/discover"}, "properties": {"repobilityId": "9b1cdeec71193cf7", "scanner": "scanner-primary", "fingerprint": "1b8edf34a912e17b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-af7d6198f96b0a20", "level": "note", "message": {"text": "Unused endpoint: GET /api/v2/trending"}, "properties": {"repobilityId": "d1f7c0fb4eca01b9", "scanner": "scanner-primary", "fingerprint": "af7d6198f96b0a20", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-36f90e9f27736d47", "level": "note", "message": {"text": "Unused endpoint: GET /api/v2/niches"}, "properties": {"repobilityId": "c5d05965b45f5ee8", "scanner": "scanner-primary", "fingerprint": "36f90e9f27736d47", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-69d395f3747c4003", "level": "note", "message": {"text": "Unused endpoint: GET /api/trends/ecommerce"}, "properties": {"repobilityId": "e69704d19997f071", "scanner": "scanner-primary", "fingerprint": "69d395f3747c4003", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f699c6eea9c4f6eb", "level": "note", "message": {"text": "Unused endpoint: POST /api/ai/chat"}, "properties": {"repobilityId": "7e509809994ff1a0", "scanner": "scanner-primary", "fingerprint": "f699c6eea9c4f6eb", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-696f567fe6855cee", "level": "note", "message": {"text": "Unused endpoint: POST /api/email/sync"}, "properties": {"repobilityId": "631ba1104bd2570f", "scanner": "scanner-primary", "fingerprint": "696f567fe6855cee", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3d323ee696489a6e", "level": "note", "message": {"text": "Unused endpoint: GET /api/health/detailed"}, "properties": {"repobilityId": "7ef3352c4a058846", "scanner": "scanner-primary", "fingerprint": "3d323ee696489a6e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b5f1b78716fae3fb", "level": "note", "message": {"text": "Unused endpoint: POST /api/admin/run-discovery-now"}, "properties": {"repobilityId": "f4dbf71cd88d884c", "scanner": "scanner-primary", "fingerprint": "b5f1b78716fae3fb", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-df619f2cd9d0cb17", "level": "note", "message": {"text": "Unused endpoint: GET /api/platforms"}, "properties": {"repobilityId": "6cb6e207575ff961", "scanner": "scanner-primary", "fingerprint": "df619f2cd9d0cb17", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-82f20f787b8c8a68", "level": "note", "message": {"text": "Unused endpoint: POST /api/platforms/{platform}/test"}, "properties": {"repobilityId": "71adc26a66b02ad0", "scanner": "scanner-primary", "fingerprint": "82f20f787b8c8a68", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ec24b474cd77d675", "level": "note", "message": {"text": "Unused endpoint: POST /api/discover"}, "properties": {"repobilityId": "739a42841c0ad2e3", "scanner": "scanner-primary", "fingerprint": "ec24b474cd77d675", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-bcd0feca69dc0231", "level": "note", "message": {"text": "Unused endpoint: POST /api/validate-product"}, "properties": {"repobilityId": "373bfc21110254bc", "scanner": "scanner-primary", "fingerprint": "bcd0feca69dc0231", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-595e0fd8fef02112", "level": "note", "message": {"text": "Unused endpoint: POST /api/discover-multi"}, "properties": {"repobilityId": "7c7ee5bf9a45a09f", "scanner": "scanner-primary", "fingerprint": "595e0fd8fef02112", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ee0dd41675c528e7", "level": "note", "message": {"text": "Unused endpoint: POST /api/deploy-to-shopify"}, "properties": {"repobilityId": "f4d26937c3ce1655", "scanner": "scanner-primary", "fingerprint": "ee0dd41675c528e7", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-9915456171a9c467", "level": "note", "message": {"text": "Unused endpoint: POST /api/generate-content"}, "properties": {"repobilityId": "71c0b7189e5df361", "scanner": "scanner-primary", "fingerprint": "9915456171a9c467", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d448e546e8139423", "level": "note", "message": {"text": "Unused endpoint: POST /api/scrape-aliexpress-product"}, "properties": {"repobilityId": "dc9542220a2d917d", "scanner": "scanner-primary", "fingerprint": "d448e546e8139423", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-80bc1eb9e5544b27", "level": "note", "message": {"text": "Unused endpoint: POST /api/optimize-price"}, "properties": {"repobilityId": "04c13438176bd769", "scanner": "scanner-primary", "fingerprint": "80bc1eb9e5544b27", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a9993f20fe1cb322", "level": "note", "message": {"text": "Unused endpoint: POST /api/marketing/generate-angle"}, "properties": {"repobilityId": "20cc04885453935e", "scanner": "scanner-primary", "fingerprint": "a9993f20fe1cb322", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}