{"version": "2.1.0", "$schema": "https://json.schemastore.org/sarif-2.1.0.json", "runs": [{"tool": {"driver": {"name": "Repobility", "informationUri": "https://repobility.com", "rules": [{"id": "scanner-0f285a712f34a563", "name": "Possibly dead Python function: fetch_arxiv", "shortDescription": {"text": "Possibly dead Python function: fetch_arxiv"}, "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-cbe2892aacbaa300", "name": "Possibly dead Python function: fetch_full_text", "shortDescription": {"text": "Possibly dead Python function: fetch_full_text"}, "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-ad04c49e91e0db87", "name": "Possibly dead Python function: verify_claim", "shortDescription": {"text": "Possibly dead Python function: verify_claim"}, "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-627ed706df1a871a", "name": "Possibly dead Python function: log_search_cost", "shortDescription": {"text": "Possibly dead Python function: log_search_cost"}, "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-0618ecf20d5f38df", "name": "Possibly dead Python function: cost_dashboard", "shortDescription": {"text": "Possibly dead Python function: cost_dashboard"}, "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-661c4f8a27911cd8", "name": "Possibly dead Python function: has_doc", "shortDescription": {"text": "Possibly dead Python function: has_doc"}, "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-64643381798c54e3", "name": "Possibly dead Python function: reembed_all", "shortDescription": {"text": "Possibly dead Python function: reembed_all"}, "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-bdd9f7c955535edb", "name": "Possibly dead Python function: score", "shortDescription": {"text": "Possibly dead Python function: score"}, "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-5186be5169349ee7", "name": "Possibly dead Python function: sort_key", "shortDescription": {"text": "Possibly dead Python function: sort_key"}, "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-46c3c6419dc1a94c", "name": "Possibly dead Python function: validate_query", "shortDescription": {"text": "Possibly dead Python function: validate_query"}, "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-e7f3bfc20f4ca6d5", "name": "Possibly dead Python function: store_cache", "shortDescription": {"text": "Possibly dead Python function: store_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-231d676d774f1569", "name": "Possibly dead Python function: purge_user_data", "shortDescription": {"text": "Possibly dead Python function: purge_user_data"}, "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-9792c98d59e9263b", "name": "Possibly dead Python function: list_documents", "shortDescription": {"text": "Possibly dead Python function: list_documents"}, "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-d6f0f74d245655a6", "name": "Possibly dead Python function: delete_document", "shortDescription": {"text": "Possibly dead Python function: delete_document"}, "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-4b7c7acae00240ac", "name": "Possibly dead Python function: delete_all_documents", "shortDescription": {"text": "Possibly dead Python function: delete_all_documents"}, "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-ef91f5b292401b33", "name": "Possibly dead Python function: add_document", "shortDescription": {"text": "Possibly dead Python function: add_document"}, "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-4d2db40daa078a47", "name": "Possibly dead Python function: search_library", "shortDescription": {"text": "Possibly dead Python function: search_library"}, "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-5aefa376f58d705f", "name": "Possibly dead Python function: score", "shortDescription": {"text": "Possibly dead Python function: score"}, "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-9ed5e6db64bda8b9", "name": "Possibly dead Python function: verify_jwt", "shortDescription": {"text": "Possibly dead Python function: verify_jwt"}, "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-f0837720a135de5e", "name": "Possibly dead Python function: record_search", "shortDescription": {"text": "Possibly dead Python function: record_search"}, "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-e9ad145f101f4dae", "name": "Possibly dead Python function: check_user", "shortDescription": {"text": "Possibly dead Python function: check_user"}, "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-76291e3934740de8", "name": "Possibly dead Python function: check_matrix", "shortDescription": {"text": "Possibly dead Python function: check_matrix"}, "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-b85683c2eceed744", "name": "Possibly dead Python function: check_verify", "shortDescription": {"text": "Possibly dead Python function: check_verify"}, "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-b634331b22cbd05d", "name": "Possibly dead Python function: usage_summary", "shortDescription": {"text": "Possibly dead Python function: usage_summary"}, "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-f0a8f4137b6b3b0a", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 frontend/app/layout.tsx:65", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 frontend/app/layout.tsx:65"}, "fullDescription": {"text": "Open XSS surface unless the input is provably trusted. Replace with explicit JSX or sanitize via a vetted library.\n\nWhy: OWASP basics. Already partially flagged by the security analyzer.\nRule id: fq.dangerous-html"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c58ef36193424b50", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/components/search-results.tsx:426", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/components/search-results.tsx:426"}, "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-c557bd4a86329fc3", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/components/app/library-manager.tsx:168", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/components/app/library-manager.tsx:168"}, "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-b2cea44d88b5f042", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/components/app/command-palette.tsx:449", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/components/app/command-palette.tsx:449"}, "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-b3119ea147a6c9da", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/components/app/search-history-sidebar.tsx:138", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/components/app/search-history-sidebar.tsx:138"}, "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-ba81ae74ec2ec6b8", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/components/landing/observatory-landing.tsx:219", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/components/landing/observatory-landing.tsx:219"}, "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-87fb9a09da0e60c2", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/components/landing/desk-landing.tsx:321", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/components/landing/desk-landing.tsx:321"}, "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-29fa1b31e8535b74", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 frontend/components/ui/chart.tsx:83", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 frontend/components/ui/chart.tsx:83"}, "fullDescription": {"text": "Open XSS surface unless the input is provably trusted. Replace with explicit JSX or sanitize via a vetted library.\n\nWhy: OWASP basics. Already partially flagged by the security analyzer.\nRule id: fq.dangerous-html"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-12a0bfaff6310ad6", "name": "Insecure pattern 'dangerous_innerhtml' in frontend/app/layout.tsx:65", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in frontend/app/layout.tsx:65"}, "fullDescription": {"text": "Found a known-risky pattern (dangerous_innerhtml). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-354f493867bd7825", "name": "Insecure pattern 'exec_used' in frontend/components/app/command-palette.tsx:353", "shortDescription": {"text": "Insecure pattern 'exec_used' in frontend/components/app/command-palette.tsx:353"}, "fullDescription": {"text": "Found a known-risky pattern (exec_used). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-84b51ed3680d06a3", "name": "Insecure pattern 'dangerous_innerhtml' in frontend/components/ui/chart.tsx:83", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in frontend/components/ui/chart.tsx:83"}, "fullDescription": {"text": "Found a known-risky pattern (dangerous_innerhtml). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6893a6c8b0861585", "name": "Very low test-to-source ratio", "shortDescription": {"text": "Very low test-to-source ratio"}, "fullDescription": {"text": "1 test file(s) for 133 source file(s) (ratio 0.01). Consider adding integration or unit tests for critical paths."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-141b30a41e03817b", "name": "No license file detected", "shortDescription": {"text": "No license file detected"}, "fullDescription": {"text": "No LICENSE/COPYING/NOTICE file was found. Generated repositories often omit licensing, which blocks reuse and automated intake."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3ab5d313dda8e5f9", "name": "Debug logging residue appears in source files", "shortDescription": {"text": "Debug logging residue appears in source files"}, "fullDescription": {"text": "Found 51 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 23 placeholder/mock markers across 12 source files. This often means the repo looks complete while core flows still use generated scaffolding or fake data."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2d0c7b7ab8f8aacf", "name": "Critical user flow still appears backed by mock or placeholder data", "shortDescription": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "fullDescription": {"text": "A payment/auth/admin/order/billing-style flow contains mock, fake, TODO, dummy, or placeholder markers in runtime source. In the Fable corpus this is a high-leverage completeness smell: the app can look finished while the money, identity, or tenant flow is still scaffolded."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b9088664ace7f748", "name": "Composite production-readiness gap", "shortDescription": {"text": "Composite production-readiness gap"}, "fullDescription": {"text": "Multiple low-cost hardening controls are missing together: license, ci. Opus verification showed these co-occurring gaps are a better readiness signal than reading each flag in isolation."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-749d4bc1bd66df5f", "name": "Agent instructions exist but release-hardening basics are missing", "shortDescription": {"text": "Agent instructions exist but release-hardening basics are missing"}, "fullDescription": {"text": "AI-coder instruction files were found, but the repo is missing license, ci. 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-acb3389c06d51bd7", "name": "Commented-code block (6 lines) in backend/fetcher.py:109", "shortDescription": {"text": "Commented-code block (6 lines) in backend/fetcher.py:109"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d761295a30a78321", "name": "Commented-code block (5 lines) in backend/ranker.py:17", "shortDescription": {"text": "Commented-code block (5 lines) in backend/ranker.py:17"}, "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-5b8f4b7a209c0bc2", "name": "Commented-code block (6 lines) in backend/main.py:80", "shortDescription": {"text": "Commented-code block (6 lines) in backend/main.py:80"}, "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-865a8c4caa7cad54", "name": "Commented-code block (5 lines) in backend/embeddings.py:38", "shortDescription": {"text": "Commented-code block (5 lines) in backend/embeddings.py:38"}, "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-f4949662563d41a1", "name": "Commented-code block (5 lines) in backend/usage.py:13", "shortDescription": {"text": "Commented-code block (5 lines) in backend/usage.py:13"}, "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-76f2042d44f3ca8e", "name": "Commented-code block (7 lines) in frontend/app/layout.tsx:6", "shortDescription": {"text": "Commented-code block (7 lines) in frontend/app/layout.tsx:6"}, "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-57daee74f1ccf0a1", "name": "Commented-code block (5 lines) in frontend/app/page.tsx:5", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/app/page.tsx:5"}, "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-1e19f61104427d3f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/components/app/library-manager.tsx:78", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/components/app/library-manager.tsx:78"}, "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-48173fbd82a3976f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/components/app/usage-panel.tsx:67", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/components/app/usage-panel.tsx:67"}, "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-6197fb2767a8b532", "name": "Commented-code block (6 lines) in frontend/components/landing/galaxy-landing.tsx:5", "shortDescription": {"text": "Commented-code block (6 lines) in frontend/components/landing/galaxy-landing.tsx:5"}, "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-5c927a4316085eca", "name": "Commented-code block (5 lines) in frontend/components/landing/manuscript-landing.tsx:34", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/components/landing/manuscript-landing.tsx: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-791cb15199e62adb", "name": "Commented-code block (5 lines) in frontend/components/landing/desk-landing.tsx:417", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/components/landing/desk-landing.tsx:417"}, "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-76f4bb81505fe187", "name": "Commented-code block (5 lines) in frontend/components/admin/admin-costs.tsx:7", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/components/admin/admin-costs.tsx:7"}, "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-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:\nbackend/synthesizer.py:synthesize_stream, backend/synthesizer.py:synthesize\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-f92726107bf94b5d", "name": "FastAPI POST `search` without auth dependency \u2014 backend/main.py:249", "shortDescription": {"text": "FastAPI POST `search` without auth dependency \u2014 backend/main.py:249"}, "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-68d3d9fc4978b6a6", "name": "FastAPI POST `verify` without auth dependency \u2014 backend/main.py:518", "shortDescription": {"text": "FastAPI POST `verify` without auth dependency \u2014 backend/main.py:518"}, "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-a639d4d2554a80b3", "name": "FastAPI POST `library_upload` without auth dependency \u2014 backend/main.py:603", "shortDescription": {"text": "FastAPI POST `library_upload` without auth dependency \u2014 backend/main.py:603"}, "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-69c0c03e669fa212", "name": "FastAPI DELETE `library_delete` without auth dependency \u2014 backend/main.py:641", "shortDescription": {"text": "FastAPI DELETE `library_delete` without auth dependency \u2014 backend/main.py:641"}, "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-4dfe5196b1e368ee", "name": "FastAPI DELETE `library_delete_all` without auth dependency \u2014 backend/main.py:651", "shortDescription": {"text": "FastAPI DELETE `library_delete_all` without auth dependency \u2014 backend/main.py:651"}, "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-dbc7021173a41a15", "name": "FastAPI DELETE `account_delete` without auth dependency \u2014 backend/main.py:661", "shortDescription": {"text": "FastAPI DELETE `account_delete` without auth dependency \u2014 backend/main.py:661"}, "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-4eb6d5538d4eff67", "name": "FastAPI POST `admin_reembed` without auth dependency \u2014 backend/main.py:789", "shortDescription": {"text": "FastAPI POST `admin_reembed` without auth dependency \u2014 backend/main.py:789"}, "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-6f0efe07f187a3e5", "name": "FastAPI POST `waitlist` without auth dependency \u2014 backend/main.py:835", "shortDescription": {"text": "FastAPI POST `waitlist` without auth dependency \u2014 backend/main.py:835"}, "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-59fcbab3a49b309f", "name": "FastAPI POST `create_share` without auth dependency \u2014 backend/main.py:880", "shortDescription": {"text": "FastAPI POST `create_share` without auth dependency \u2014 backend/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}}]}}, "automationDetails": {"id": "repobility/24282"}, "properties": {"repository": "Araadh3111/research-copilot", "repoUrl": "https://github.com/Araadh3111/research-copilot", "branch": "main"}, "results": [{"ruleId": "scanner-0f285a712f34a563", "level": "note", "message": {"text": "Possibly dead Python function: fetch_arxiv"}, "properties": {"repobilityId": "edf9486ad0996986", "scanner": "scanner-primary", "fingerprint": "0f285a712f34a563", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/arxiv_fetcher.py:69"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-cbe2892aacbaa300", "level": "note", "message": {"text": "Possibly dead Python function: fetch_full_text"}, "properties": {"repobilityId": "427d0f74573d1f9a", "scanner": "scanner-primary", "fingerprint": "cbe2892aacbaa300", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/sources.py:110"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-ad04c49e91e0db87", "level": "note", "message": {"text": "Possibly dead Python function: verify_claim"}, "properties": {"repobilityId": "dee25961a27aa72c", "scanner": "scanner-primary", "fingerprint": "ad04c49e91e0db87", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/synthesizer.py:255"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-627ed706df1a871a", "level": "note", "message": {"text": "Possibly dead Python function: log_search_cost"}, "properties": {"repobilityId": "aded478f2d90079d", "scanner": "scanner-primary", "fingerprint": "627ed706df1a871a", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/costs.py:22"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-0618ecf20d5f38df", "level": "note", "message": {"text": "Possibly dead Python function: cost_dashboard"}, "properties": {"repobilityId": "4669d169aeabd43d", "scanner": "scanner-primary", "fingerprint": "0618ecf20d5f38df", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/costs.py:75"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-661c4f8a27911cd8", "level": "note", "message": {"text": "Possibly dead Python function: has_doc"}, "properties": {"repobilityId": "54d18838a74929f4", "scanner": "scanner-primary", "fingerprint": "661c4f8a27911cd8", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/vector_store.py:26"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-64643381798c54e3", "level": "note", "message": {"text": "Possibly dead Python function: reembed_all"}, "properties": {"repobilityId": "54eeb033fc83ff71", "scanner": "scanner-primary", "fingerprint": "64643381798c54e3", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/vector_store.py:79"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-bdd9f7c955535edb", "level": "note", "message": {"text": "Possibly dead Python function: score"}, "properties": {"repobilityId": "379227b163d3203e", "scanner": "scanner-primary", "fingerprint": "bdd9f7c955535edb", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/ranker.py:73"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-5186be5169349ee7", "level": "note", "message": {"text": "Possibly dead Python function: sort_key"}, "properties": {"repobilityId": "ac2a4181eae38738", "scanner": "scanner-primary", "fingerprint": "5186be5169349ee7", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/ranker.py:170"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-46c3c6419dc1a94c", "level": "note", "message": {"text": "Possibly dead Python function: validate_query"}, "properties": {"repobilityId": "ab7b5f162bb84ccf", "scanner": "scanner-primary", "fingerprint": "46c3c6419dc1a94c", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/query_processor.py:61"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-e7f3bfc20f4ca6d5", "level": "note", "message": {"text": "Possibly dead Python function: store_cache"}, "properties": {"repobilityId": "514851eb9df23ef6", "scanner": "scanner-primary", "fingerprint": "e7f3bfc20f4ca6d5", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/cache.py:34"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-231d676d774f1569", "level": "note", "message": {"text": "Possibly dead Python function: purge_user_data"}, "properties": {"repobilityId": "5990bc3d38170f6f", "scanner": "scanner-primary", "fingerprint": "231d676d774f1569", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/account.py:28"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-9792c98d59e9263b", "level": "note", "message": {"text": "Possibly dead Python function: list_documents"}, "properties": {"repobilityId": "32ef8ea162ce009e", "scanner": "scanner-primary", "fingerprint": "9792c98d59e9263b", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/library.py:63"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-d6f0f74d245655a6", "level": "note", "message": {"text": "Possibly dead Python function: delete_document"}, "properties": {"repobilityId": "9ad8ca028b6072f5", "scanner": "scanner-primary", "fingerprint": "d6f0f74d245655a6", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/library.py:78"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-4b7c7acae00240ac", "level": "note", "message": {"text": "Possibly dead Python function: delete_all_documents"}, "properties": {"repobilityId": "972578c652560ee0", "scanner": "scanner-primary", "fingerprint": "4b7c7acae00240ac", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/library.py:94"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-ef91f5b292401b33", "level": "note", "message": {"text": "Possibly dead Python function: add_document"}, "properties": {"repobilityId": "22518d3a0c49e6c3", "scanner": "scanner-primary", "fingerprint": "ef91f5b292401b33", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/library.py:108"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-4d2db40daa078a47", "level": "note", "message": {"text": "Possibly dead Python function: search_library"}, "properties": {"repobilityId": "fa13647ae169bbb0", "scanner": "scanner-primary", "fingerprint": "4d2db40daa078a47", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/library.py:166"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-5aefa376f58d705f", "level": "note", "message": {"text": "Possibly dead Python function: score"}, "properties": {"repobilityId": "379227b163d3203e", "scanner": "scanner-primary", "fingerprint": "5aefa376f58d705f", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/paper_cache.py:106"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-9ed5e6db64bda8b9", "level": "note", "message": {"text": "Possibly dead Python function: verify_jwt"}, "properties": {"repobilityId": "dc67d735a11806e6", "scanner": "scanner-primary", "fingerprint": "9ed5e6db64bda8b9", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/usage.py:145"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-f0837720a135de5e", "level": "note", "message": {"text": "Possibly dead Python function: record_search"}, "properties": {"repobilityId": "3daff189d2121683", "scanner": "scanner-primary", "fingerprint": "f0837720a135de5e", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/usage.py:202"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-e9ad145f101f4dae", "level": "note", "message": {"text": "Possibly dead Python function: check_user"}, "properties": {"repobilityId": "fa610b38e8b6effd", "scanner": "scanner-primary", "fingerprint": "e9ad145f101f4dae", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/usage.py:286"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-76291e3934740de8", "level": "note", "message": {"text": "Possibly dead Python function: check_matrix"}, "properties": {"repobilityId": "268613b63f833b87", "scanner": "scanner-primary", "fingerprint": "76291e3934740de8", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/usage.py:523"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-b85683c2eceed744", "level": "note", "message": {"text": "Possibly dead Python function: check_verify"}, "properties": {"repobilityId": "4cb3c180d0139025", "scanner": "scanner-primary", "fingerprint": "b85683c2eceed744", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/usage.py:530"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-b634331b22cbd05d", "level": "note", "message": {"text": "Possibly dead Python function: usage_summary"}, "properties": {"repobilityId": "7e409e5908be4bfe", "scanner": "scanner-primary", "fingerprint": "b634331b22cbd05d", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/usage.py:537"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-f0a8f4137b6b3b0a", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 frontend/app/layout.tsx:65"}, "properties": {"repobilityId": "c3711f4722a30929", "scanner": "scanner-primary", "fingerprint": "f0a8f4137b6b3b0a", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-c58ef36193424b50", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/components/search-results.tsx:426"}, "properties": {"repobilityId": "5caac8d59590ee61", "scanner": "scanner-primary", "fingerprint": "c58ef36193424b50", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c557bd4a86329fc3", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/components/app/library-manager.tsx:168"}, "properties": {"repobilityId": "bc5452b3c0d655a0", "scanner": "scanner-primary", "fingerprint": "c557bd4a86329fc3", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b2cea44d88b5f042", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/components/app/command-palette.tsx:449"}, "properties": {"repobilityId": "09b6e96f3e809a26", "scanner": "scanner-primary", "fingerprint": "b2cea44d88b5f042", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b3119ea147a6c9da", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/components/app/search-history-sidebar.tsx:138"}, "properties": {"repobilityId": "8b545d2d504440c4", "scanner": "scanner-primary", "fingerprint": "b3119ea147a6c9da", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ba81ae74ec2ec6b8", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/components/landing/observatory-landing.tsx:219"}, "properties": {"repobilityId": "e01ad1ad61eb4038", "scanner": "scanner-primary", "fingerprint": "ba81ae74ec2ec6b8", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-87fb9a09da0e60c2", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/components/landing/desk-landing.tsx:321"}, "properties": {"repobilityId": "18e7c6546848327e", "scanner": "scanner-primary", "fingerprint": "87fb9a09da0e60c2", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-29fa1b31e8535b74", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 frontend/components/ui/chart.tsx:83"}, "properties": {"repobilityId": "8d5db29e2f34f519", "scanner": "scanner-primary", "fingerprint": "29fa1b31e8535b74", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-12a0bfaff6310ad6", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in frontend/app/layout.tsx:65"}, "properties": {"repobilityId": "352266f153f8b038", "scanner": "scanner-primary", "fingerprint": "12a0bfaff6310ad6", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "frontend/app/layout.tsx"}, "region": {"startLine": 65}}}]}, {"ruleId": "scanner-354f493867bd7825", "level": "error", "message": {"text": "Insecure pattern 'exec_used' in frontend/components/app/command-palette.tsx:353"}, "properties": {"repobilityId": "57beac9fb9069830", "scanner": "scanner-primary", "fingerprint": "354f493867bd7825", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["owasp", "exec_used"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "frontend/components/app/command-palette.tsx"}, "region": {"startLine": 353}}}]}, {"ruleId": "scanner-84b51ed3680d06a3", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in frontend/components/ui/chart.tsx:83"}, "properties": {"repobilityId": "226b43b8df649d9b", "scanner": "scanner-primary", "fingerprint": "84b51ed3680d06a3", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "frontend/components/ui/chart.tsx"}, "region": {"startLine": 83}}}]}, {"ruleId": "scanner-6893a6c8b0861585", "level": "warning", "message": {"text": "Very low test-to-source ratio"}, "properties": {"repobilityId": "54a7de3f06314bf0", "scanner": "scanner-primary", "fingerprint": "6893a6c8b0861585", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["tests", "coverage"]}}, {"ruleId": "scanner-141b30a41e03817b", "level": "note", "message": {"text": "No license file detected"}, "properties": {"repobilityId": "d62c44ae14727cbb", "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": "155d8198af32feb2", "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": "ff002d64871af5a2", "scanner": "scanner-primary", "fingerprint": "72b2a6250083a784", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "incomplete", "generated-repo-pattern"]}}, {"ruleId": "scanner-2d0c7b7ab8f8aacf", "level": "warning", "message": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "properties": {"repobilityId": "17c620858ba6e957", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-b9088664ace7f748", "level": "note", "message": {"text": "Composite production-readiness gap"}, "properties": {"repobilityId": "cf0c69d3b019a298", "scanner": "scanner-primary", "fingerprint": "b9088664ace7f748", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["production-readiness", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-749d4bc1bd66df5f", "level": "warning", "message": {"text": "Agent instructions exist but release-hardening basics are missing"}, "properties": {"repobilityId": "0ce002cd752560c8", "scanner": "scanner-primary", "fingerprint": "749d4bc1bd66df5f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-acb3389c06d51bd7", "level": "none", "message": {"text": "Commented-code block (6 lines) in backend/fetcher.py:109"}, "properties": {"repobilityId": "ee272d8a9654d759", "scanner": "scanner-primary", "fingerprint": "acb3389c06d51bd7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d761295a30a78321", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/ranker.py:17"}, "properties": {"repobilityId": "a5b746aff395c678", "scanner": "scanner-primary", "fingerprint": "d761295a30a78321", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5b8f4b7a209c0bc2", "level": "none", "message": {"text": "Commented-code block (6 lines) in backend/main.py:80"}, "properties": {"repobilityId": "c00c65105fbb3297", "scanner": "scanner-primary", "fingerprint": "5b8f4b7a209c0bc2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-865a8c4caa7cad54", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/embeddings.py:38"}, "properties": {"repobilityId": "df1822a2c03348ae", "scanner": "scanner-primary", "fingerprint": "865a8c4caa7cad54", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f4949662563d41a1", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/usage.py:13"}, "properties": {"repobilityId": "cd6d662a14c44df4", "scanner": "scanner-primary", "fingerprint": "f4949662563d41a1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-76f2042d44f3ca8e", "level": "none", "message": {"text": "Commented-code block (7 lines) in frontend/app/layout.tsx:6"}, "properties": {"repobilityId": "4ab0f87467ef8dd9", "scanner": "scanner-primary", "fingerprint": "76f2042d44f3ca8e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-57daee74f1ccf0a1", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/app/page.tsx:5"}, "properties": {"repobilityId": "d88d68790b41bdf8", "scanner": "scanner-primary", "fingerprint": "57daee74f1ccf0a1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1e19f61104427d3f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/components/app/library-manager.tsx:78"}, "properties": {"repobilityId": "04cd1ade57af7cf3", "scanner": "scanner-primary", "fingerprint": "1e19f61104427d3f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-48173fbd82a3976f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/components/app/usage-panel.tsx:67"}, "properties": {"repobilityId": "537bee216026e176", "scanner": "scanner-primary", "fingerprint": "48173fbd82a3976f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-6197fb2767a8b532", "level": "none", "message": {"text": "Commented-code block (6 lines) in frontend/components/landing/galaxy-landing.tsx:5"}, "properties": {"repobilityId": "487a5208059bd1b1", "scanner": "scanner-primary", "fingerprint": "6197fb2767a8b532", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5c927a4316085eca", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/components/landing/manuscript-landing.tsx:34"}, "properties": {"repobilityId": "de030089c52786c9", "scanner": "scanner-primary", "fingerprint": "5c927a4316085eca", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-791cb15199e62adb", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/components/landing/desk-landing.tsx:417"}, "properties": {"repobilityId": "4caf9241da96fa0b", "scanner": "scanner-primary", "fingerprint": "791cb15199e62adb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-76f4bb81505fe187", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/components/admin/admin-costs.tsx:7"}, "properties": {"repobilityId": "21f886ce19b3d736", "scanner": "scanner-primary", "fingerprint": "76f4bb81505fe187", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "8a80be4246ef7c22", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-f92726107bf94b5d", "level": "error", "message": {"text": "FastAPI POST `search` without auth dependency \u2014 backend/main.py:249"}, "properties": {"repobilityId": "adfdb38847678dc6", "scanner": "scanner-primary", "fingerprint": "f92726107bf94b5d", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/main.py"}, "region": {"startLine": 249}}}]}, {"ruleId": "scanner-68d3d9fc4978b6a6", "level": "error", "message": {"text": "FastAPI POST `verify` without auth dependency \u2014 backend/main.py:518"}, "properties": {"repobilityId": "5998a1652dff2ce8", "scanner": "scanner-primary", "fingerprint": "68d3d9fc4978b6a6", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/main.py"}, "region": {"startLine": 518}}}]}, {"ruleId": "scanner-a639d4d2554a80b3", "level": "error", "message": {"text": "FastAPI POST `library_upload` without auth dependency \u2014 backend/main.py:603"}, "properties": {"repobilityId": "9705efcf55f380c8", "scanner": "scanner-primary", "fingerprint": "a639d4d2554a80b3", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/main.py"}, "region": {"startLine": 603}}}]}, {"ruleId": "scanner-69c0c03e669fa212", "level": "error", "message": {"text": "FastAPI DELETE `library_delete` without auth dependency \u2014 backend/main.py:641"}, "properties": {"repobilityId": "2e6bb85f1ce43b22", "scanner": "scanner-primary", "fingerprint": "69c0c03e669fa212", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/main.py"}, "region": {"startLine": 641}}}]}, {"ruleId": "scanner-4dfe5196b1e368ee", "level": "error", "message": {"text": "FastAPI DELETE `library_delete_all` without auth dependency \u2014 backend/main.py:651"}, "properties": {"repobilityId": "65a701e71356cfe8", "scanner": "scanner-primary", "fingerprint": "4dfe5196b1e368ee", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/main.py"}, "region": {"startLine": 651}}}]}, {"ruleId": "scanner-dbc7021173a41a15", "level": "error", "message": {"text": "FastAPI DELETE `account_delete` without auth dependency \u2014 backend/main.py:661"}, "properties": {"repobilityId": "ef2a36f9deda580d", "scanner": "scanner-primary", "fingerprint": "dbc7021173a41a15", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/main.py"}, "region": {"startLine": 661}}}]}, {"ruleId": "scanner-4eb6d5538d4eff67", "level": "error", "message": {"text": "FastAPI POST `admin_reembed` without auth dependency \u2014 backend/main.py:789"}, "properties": {"repobilityId": "eb7aa3db4575a1d5", "scanner": "scanner-primary", "fingerprint": "4eb6d5538d4eff67", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/main.py"}, "region": {"startLine": 789}}}]}, {"ruleId": "scanner-6f0efe07f187a3e5", "level": "error", "message": {"text": "FastAPI POST `waitlist` without auth dependency \u2014 backend/main.py:835"}, "properties": {"repobilityId": "c9e1951dbdcb6275", "scanner": "scanner-primary", "fingerprint": "6f0efe07f187a3e5", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/main.py"}, "region": {"startLine": 835}}}]}, {"ruleId": "scanner-59fcbab3a49b309f", "level": "error", "message": {"text": "FastAPI POST `create_share` without auth dependency \u2014 backend/main.py:880"}, "properties": {"repobilityId": "ed3d90c3e6bd0898", "scanner": "scanner-primary", "fingerprint": "59fcbab3a49b309f", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/main.py"}, "region": {"startLine": 880}}}]}]}]}