{"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-bead75b0f9233e05", "name": "No API endpoints detected", "shortDescription": {"text": "No API endpoints detected"}, "fullDescription": {"text": "The scanner did not find FastAPI/Flask/Express/NestJS/GraphQL/gRPC routes. If this repo exposes APIs, the framework may be unsupported."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b0502e9c416cc6dd", "name": "Stray `console.log` in TS/JS \u2014 scripts/seed-video-units.js:78", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-video-units.js:78"}, "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-922af8b65215d3c6", "name": "TODO/FIXME marker in shipping code \u2014 components/ProjectActivityNav.tsx:215", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 components/ProjectActivityNav.tsx:215"}, "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-202151321215f705", "name": "Stray `console.log` in TS/JS \u2014 convex/portfolioActions.ts:590", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 convex/portfolioActions.ts:590"}, "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-01057703c1153a23", "name": "Stray `console.log` in TS/JS \u2014 convex/observer.ts:27", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 convex/observer.ts:27"}, "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-80def4ff21104e1f", "name": "Stray `console.log` in TS/JS \u2014 convex/scholarDocumentProposalActions.ts:209", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 convex/scholarDocumentProposalActions.ts:209"}, "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-ca7d336c89501403", "name": "Stray `console.log` in TS/JS \u2014 convex/standardsImport.ts:73", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 convex/standardsImport.ts:73"}, "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-b2cf1281a8ba290a", "name": "Stray `console.log` in TS/JS \u2014 convex/seedData.ts:32", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 convex/seedData.ts:32"}, "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-653bc38ea93e4be1", "name": "Stray `console.log` in TS/JS \u2014 convex/scholarDocumentActions.ts:258", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 convex/scholarDocumentActions.ts:258"}, "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-dcb9c8a0a771a7ad", "name": "TODO/FIXME marker in shipping code \u2014 convex/projects.ts:72", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 convex/projects.ts:72"}, "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-a4b7bdbdb9c85d68", "name": "Stray `console.log` in TS/JS \u2014 convex/driveSync.ts:137", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 convex/driveSync.ts:137"}, "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-251e452730f8a692", "name": "Stray `console.log` in TS/JS \u2014 convex/standardsMapper.ts:139", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 convex/standardsMapper.ts:139"}, "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-284dba0424d14ab6", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 app/EmotionRegistry.tsx:52", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 app/EmotionRegistry.tsx:52"}, "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-6d4b14ec329e751f", "name": "Insecure pattern 'node_child_process' in scripts/verify-curriculum-bot-quest.mjs:11", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/verify-curriculum-bot-quest.mjs:11"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d067eaf8663bcf75", "name": "Insecure pattern 'node_child_process' in scripts/verify-scholar-ia.mjs:13", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/verify-scholar-ia.mjs:13"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2bebb061ddba99e0", "name": "Insecure pattern 'node_child_process' in scripts/visual-tour.mjs:21", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/visual-tour.mjs:21"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0b05f0a928cf01bb", "name": "Insecure pattern 'node_child_process' in scripts/verify-class-tab-redesign.mjs:15", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/verify-class-tab-redesign.mjs:15"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c8e5cda39577c8ac", "name": "Insecure pattern 'node_child_process' in scripts/seed-video-units.js:13", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/seed-video-units.js:13"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6e2eb75801c172f2", "name": "Insecure pattern 'node_child_process' in scripts/verify-documents-tab.mjs:22", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/verify-documents-tab.mjs:22"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c46b581136f0939a", "name": "Insecure pattern 'node_child_process' in scripts/verify-assignments-phase3.mjs:11", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/verify-assignments-phase3.mjs:11"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0a7f944f366d9196", "name": "Insecure pattern 'node_child_process' in scripts/verify-kill-quests.mjs:17", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/verify-kill-quests.mjs:17"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-57152faed53b3d1a", "name": "Insecure pattern 'node_child_process' in scripts/generate-app-assets.mjs:98", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/generate-app-assets.mjs:98"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d79955205c0911ed", "name": "Insecure pattern 'node_child_process' in scripts/verify-bot-attaches-rubric.mjs:24", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/verify-bot-attaches-rubric.mjs:24"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c7a527b824652fa9", "name": "Insecure pattern 'node_child_process' in scripts/ensure-auth-keys.mjs:14", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/ensure-auth-keys.mjs:14"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-56e4b9d8d1ab207e", "name": "Insecure pattern 'node_child_process' in scripts/verify-assignments-phase5.mjs:13", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/verify-assignments-phase5.mjs:13"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-25f3aa8d0a0c014d", "name": "Insecure pattern 'node_child_process' in scripts/verify-assignments-phase1.mjs:16", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/verify-assignments-phase1.mjs:16"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a6585715c1e03444", "name": "Insecure pattern 'node_child_process' in scripts/verify-activity-rubric.mjs:23", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/verify-activity-rubric.mjs:23"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e22375ea1f4c4b82", "name": "Insecure pattern 'node_child_process' in scripts/verify-assignments-phase2.mjs:15", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/verify-assignments-phase2.mjs:15"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-7c5127f1e4480513", "name": "Insecure pattern 'node_child_process' in scripts/verify-artifact-perception.mjs:26", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/verify-artifact-perception.mjs:26"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ca060f1ff18e1cb9", "name": "Possible secret in scripts/verify-scholar-plate.mjs", "shortDescription": {"text": "Possible secret in scripts/verify-scholar-plate.mjs"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-8a3c11b730cbd81f", "name": "Insecure pattern 'node_child_process' in scripts/verify-quest-phase3.mjs:19", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/verify-quest-phase3.mjs:19"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-16ce9925693308f6", "name": "Insecure pattern 'cors_wildcard' in convex/http.ts:1167", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in convex/http.ts:1167"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-1879f0871128de4b", "name": "Insecure pattern 'cors_wildcard' in convex/lib/aideStream.ts:187", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in convex/lib/aideStream.ts:187"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2b879e6ac35196e8", "name": "Insecure pattern 'dangerous_innerhtml' in app/EmotionRegistry.tsx:52", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in app/EmotionRegistry.tsx:52"}, "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-7b0981671e0a818d", "name": "Insecure pattern 'cors_wildcard' in app/api/mcp/route.ts:33", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in app/api/mcp/route.ts:33"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f3761b25666a9fe3", "name": "Insecure pattern 'cors_wildcard' in lib/oauthHttp.ts:27", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in lib/oauthHttp.ts:27"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-31fba0d5a42a556f", "name": "Insecure pattern 'node_child_process' in evals/spot-eval/run.ts:30", "shortDescription": {"text": "Insecure pattern 'node_child_process' in evals/spot-eval/run.ts:30"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-1a7d2d4439b3a1b2", "name": "Insecure pattern 'direct_innerhtml_assignment' in public/coread-test.html:204", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/coread-test.html:204"}, "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-cb639d9a10a47b23", "name": "package.json defines install-time lifecycle scripts", "shortDescription": {"text": "package.json defines install-time lifecycle scripts"}, "fullDescription": {"text": "preinstall/install/postinstall/prepare scripts execute during dependency installation. Review them carefully for network calls, obfuscation, shell execution, or credential access."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4601e3ad3bb28677", "name": "No CI/CD pipelines detected", "shortDescription": {"text": "No CI/CD pipelines detected"}, "fullDescription": {"text": "No GitHub Actions, GitLab CI, or CircleCI configs found. Without CI you can't gate deploys on tests/lints."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e3c68d97947140e4", "name": "Very large file: components/ScholarProfile.tsx (1443 lines)", "shortDescription": {"text": "Very large file: components/ScholarProfile.tsx (1443 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-ca2bd327bcd46c50", "name": "Very large file: components/ProjectInterface.tsx (2946 lines)", "shortDescription": {"text": "Very large file: components/ProjectInterface.tsx (2946 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-2ff07ae7b1512fe1", "name": "Very large file: convex/projectHelpers.ts (1556 lines)", "shortDescription": {"text": "Very large file: convex/projectHelpers.ts (1556 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-dbee8e2750cbb390", "name": "Very large file: convex/schema.ts (1624 lines)", "shortDescription": {"text": "Very large file: convex/schema.ts (1624 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-bd69de5dc4a7a459", "name": "Very large file: convex/assignments.ts (1983 lines)", "shortDescription": {"text": "Very large file: convex/assignments.ts (1983 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-922d04448d5cb28e", "name": "Very large file: convex/seedData.ts (2614 lines)", "shortDescription": {"text": "Very large file: convex/seedData.ts (2614 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-e885fe315fa3905b", "name": "Very large file: convex/projects.ts (1820 lines)", "shortDescription": {"text": "Very large file: convex/projects.ts (1820 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-240c7ba944356479", "name": "Very large file: convex/http.ts (2054 lines)", "shortDescription": {"text": "Very large file: convex/http.ts (2054 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-264f9b169506b22c", "name": "Very large file: app/teacher/TeacherDashboard.tsx (1643 lines)", "shortDescription": {"text": "Very large file: app/teacher/TeacherDashboard.tsx (1643 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": "85 tests / 383 src (ratio 0.22)."}, "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 485 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 238 placeholder/mock markers across 85 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-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-cea5451e9bb9efb4", "name": "Commented-code block (5 lines) in capacitor.config.ts:54", "shortDescription": {"text": "Commented-code block (5 lines) in capacitor.config.ts:54"}, "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-5af87721cd5557a3", "name": "Commented-code block (5 lines) in scripts/gen-mupdf-wasm.mjs:9", "shortDescription": {"text": "Commented-code block (5 lines) in scripts/gen-mupdf-wasm.mjs: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-6ed2f93d84072505", "name": "Commented-code block (5 lines) in scripts/verify-directives-tab.mjs:181", "shortDescription": {"text": "Commented-code block (5 lines) in scripts/verify-directives-tab.mjs: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-274ffde6a5b0d9ab", "name": "Commented-code block (6 lines) in scripts/verify-class-tab-redesign.mjs:51", "shortDescription": {"text": "Commented-code block (6 lines) in scripts/verify-class-tab-redesign.mjs: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-93512632f95fa045", "name": "Commented-code block (7 lines) in scripts/exploit-check.mjs:1", "shortDescription": {"text": "Commented-code block (7 lines) in scripts/exploit-check.mjs:1"}, "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-bae7e609105690e7", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/exploit-check.mjs:41", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/exploit-check.mjs:41"}, "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-a3a24ccc1bb27935", "name": "Commented-code block (5 lines) in scripts/login-smoke.mjs:1", "shortDescription": {"text": "Commented-code block (5 lines) in scripts/login-smoke.mjs:1"}, "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-f4a6902b6ca8b302", "name": "Commented-code block (5 lines) in scripts/verify-documents-tab.mjs:321", "shortDescription": {"text": "Commented-code block (5 lines) in scripts/verify-documents-tab.mjs:321"}, "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-87687f7c1e49b291", "name": "Commented-code block (6 lines) in scripts/generate-app-assets.mjs:15", "shortDescription": {"text": "Commented-code block (6 lines) in scripts/generate-app-assets.mjs: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-585eeac6638dfb9c", "name": "Commented-code block (5 lines) in scripts/ensure-auth-keys.mjs:6", "shortDescription": {"text": "Commented-code block (5 lines) in scripts/ensure-auth-keys.mjs: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-c9e0076d1f210100", "name": "Commented-code block (5 lines) in scripts/verify-quest-phase3.mjs:128", "shortDescription": {"text": "Commented-code block (5 lines) in scripts/verify-quest-phase3.mjs:128"}, "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-746e1f3a5d798e56", "name": "Commented-code block (9 lines) in scripts/verify-mcp-oauth.mjs:4", "shortDescription": {"text": "Commented-code block (9 lines) in scripts/verify-mcp-oauth.mjs:4"}, "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-fe4361352bfdeefe", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/verify-mcp-oauth.mjs:77", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/verify-mcp-oauth.mjs:77"}, "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-9e4f22aa27d3d8d3", "name": "Commented-code block (5 lines) in scripts/lib/devBaseUrl.mjs:3", "shortDescription": {"text": "Commented-code block (5 lines) in scripts/lib/devBaseUrl.mjs:3"}, "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-4fbbc31234698423", "name": "Commented-code block (6 lines) in scripts/lib/devAuth.mjs:3", "shortDescription": {"text": "Commented-code block (6 lines) in scripts/lib/devAuth.mjs:3"}, "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-29dc9089bc462193", "name": "Commented-code block (6 lines) in components/ProgressContent.tsx:577", "shortDescription": {"text": "Commented-code block (6 lines) in components/ProgressContent.tsx:577"}, "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-2bfd4a12671fc4a3", "name": "Commented-code block (5 lines) in components/ArtifactDeliverableButton.tsx:75", "shortDescription": {"text": "Commented-code block (5 lines) in components/ArtifactDeliverableButton.tsx:75"}, "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-faa4838968a62e2a", "name": "Commented-code block (5 lines) in components/UnitPickerDialog.tsx:48", "shortDescription": {"text": "Commented-code block (5 lines) in components/UnitPickerDialog.tsx:48"}, "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-3f0c69ff1e77c384", "name": "Commented-code block (5 lines) in components/ScholarAidePane.tsx:47", "shortDescription": {"text": "Commented-code block (5 lines) in components/ScholarAidePane.tsx:47"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fe597e7625f6b4c8", "name": "Commented-code block (5 lines) in components/AccountMenu.tsx:57", "shortDescription": {"text": "Commented-code block (5 lines) in components/AccountMenu.tsx: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-bb705bd70c1f7c4c", "name": "Commented-code block (8 lines) in components/index.ts:1", "shortDescription": {"text": "Commented-code block (8 lines) in components/index.ts:1"}, "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-6d548267ccdb8f00", "name": "Commented-code block (5 lines) in components/NativeShellSetup.tsx:23", "shortDescription": {"text": "Commented-code block (5 lines) in components/NativeShellSetup.tsx:23"}, "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-b873a3f31afe9099", "name": "Commented-code block (7 lines) in components/ScholarPlate.tsx:115", "shortDescription": {"text": "Commented-code block (7 lines) in components/ScholarPlate.tsx:115"}, "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-adb2a01876f692c4", "name": "Commented-code block (5 lines) in components/UnitDesigner.tsx:40", "shortDescription": {"text": "Commented-code block (5 lines) in components/UnitDesigner.tsx: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-d77fb1e27e653416", "name": "Commented-code block (8 lines) in components/ScannerPanel.tsx:176", "shortDescription": {"text": "Commented-code block (8 lines) in components/ScannerPanel.tsx:176"}, "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-9a72aa85b99353b7", "name": "`fetch()` without try/.catch or AbortSignal \u2014 components/ScannerPanel.tsx:759", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/ScannerPanel.tsx:759"}, "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-ccd6954b13e3c1e4", "name": "Commented-code block (5 lines) in components/ProjectInterface.tsx:117", "shortDescription": {"text": "Commented-code block (5 lines) in components/ProjectInterface.tsx: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-27f70436d885e61d", "name": "Commented-code block (5 lines) in components/AuthForm.tsx:22", "shortDescription": {"text": "Commented-code block (5 lines) in components/AuthForm.tsx:22"}, "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-542ca94c464a50a0", "name": "Commented-code block (6 lines) in components/AssignmentPicker.tsx:3", "shortDescription": {"text": "Commented-code block (6 lines) in components/AssignmentPicker.tsx:3"}, "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-776a3d6290c540df", "name": "`fetch()` without try/.catch or AbortSignal \u2014 components/CameraScanDialog.tsx:151", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/CameraScanDialog.tsx:151"}, "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-2570e2090d244363", "name": "Commented-code block (5 lines) in components/MasteryTab.tsx:31", "shortDescription": {"text": "Commented-code block (5 lines) in components/MasteryTab.tsx:31"}, "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-05e9515132e2fe72", "name": "Commented-code block (5 lines) in components/GooglePickerButton.tsx:59", "shortDescription": {"text": "Commented-code block (5 lines) in components/GooglePickerButton.tsx:59"}, "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-2a7bdf3b600b3a96", "name": "Commented-code block (5 lines) in components/UnitOutlineTree.tsx:390", "shortDescription": {"text": "Commented-code block (5 lines) in components/UnitOutlineTree.tsx:390"}, "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-b88cdebfc086ea95", "name": "Commented-code block (5 lines) in components/StartAssignmentDialog.tsx:145", "shortDescription": {"text": "Commented-code block (5 lines) in components/StartAssignmentDialog.tsx: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-698ec77895815848", "name": "Commented-code block (5 lines) in components/ArtifactPanel.tsx:11", "shortDescription": {"text": "Commented-code block (5 lines) in components/ArtifactPanel.tsx:11"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3e74871d1f540f6e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 components/ArtifactPanel.tsx:12", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/ArtifactPanel.tsx:12"}, "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-96afe795b04dd719", "name": "Commented-code block (5 lines) in components/hierarchy/HierarchyRow.tsx:103", "shortDescription": {"text": "Commented-code block (5 lines) in components/hierarchy/HierarchyRow.tsx:103"}, "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-3dcd420683a5825a", "name": "Commented-code block (6 lines) in components/ui/EmojiPickerButton.tsx:3", "shortDescription": {"text": "Commented-code block (6 lines) in components/ui/EmojiPickerButton.tsx:3"}, "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-ee536e9cd414d6bb", "name": "`fetch()` without try/.catch or AbortSignal \u2014 convex/youtubeActions.ts:34", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 convex/youtubeActions.ts:34"}, "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-dbc46e7bed61c410", "name": "Commented-code block (7 lines) in convex/seedUnitForTesting.ts:1", "shortDescription": {"text": "Commented-code block (7 lines) in convex/seedUnitForTesting.ts:1"}, "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-f84d13c46887effc", "name": "Commented-code block (6 lines) in convex/auth.ts:46", "shortDescription": {"text": "Commented-code block (6 lines) in convex/auth.ts: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-c1983eff3f627239", "name": "Commented-code block (6 lines) in convex/googleAccounts.ts:3", "shortDescription": {"text": "Commented-code block (6 lines) in convex/googleAccounts.ts:3"}, "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-7494d84881103803", "name": "Commented-code block (6 lines) in convex/slidesActions.ts:3", "shortDescription": {"text": "Commented-code block (6 lines) in convex/slidesActions.ts:3"}, "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-a8bc75aa3ccc5ff5", "name": "`fetch()` without try/.catch or AbortSignal \u2014 convex/slidesActions.ts:38", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 convex/slidesActions.ts:38"}, "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-b59f36f2b053dca7", "name": "Commented-code block (14 lines) in convex/projectHelpers.ts:62", "shortDescription": {"text": "Commented-code block (14 lines) in convex/projectHelpers.ts:62"}, "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-fed48b5cd9214f69", "name": "`fetch()` without try/.catch or AbortSignal \u2014 convex/audioActions.ts:27", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 convex/audioActions.ts:27"}, "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-cd21a44c285b6ab2", "name": "Commented-code block (5 lines) in convex/schema.ts:89", "shortDescription": {"text": "Commented-code block (5 lines) in convex/schema.ts:89"}, "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-94342a855ae1b49f", "name": "Commented-code block (6 lines) in convex/units.ts:25", "shortDescription": {"text": "Commented-code block (6 lines) in convex/units.ts:25"}, "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-ec0d64393a99391d", "name": "Commented-code block (5 lines) in convex/portfolioActions.ts:368", "shortDescription": {"text": "Commented-code block (5 lines) in convex/portfolioActions.ts:368"}, "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-4a12365c56e0fb02", "name": "`fetch()` without try/.catch or AbortSignal \u2014 convex/portfolioActions.ts:692", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 convex/portfolioActions.ts:692"}, "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-abbf7137d7f93f04", "name": "Commented-code block (6 lines) in convex/deliverables.ts:3", "shortDescription": {"text": "Commented-code block (6 lines) in convex/deliverables.ts:3"}, "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-e77249e2910927d8", "name": "Commented-code block (5 lines) in convex/curriculumAssistant.ts:377", "shortDescription": {"text": "Commented-code block (5 lines) in convex/curriculumAssistant.ts:377"}, "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-76125169f57da8d5", "name": "Commented-code block (8 lines) in convex/activities.ts:1", "shortDescription": {"text": "Commented-code block (8 lines) in convex/activities.ts:1"}, "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-9b4d360fa747f683", "name": "Commented-code block (5 lines) in convex/unitDesignerStream.ts:228", "shortDescription": {"text": "Commented-code block (5 lines) in convex/unitDesignerStream.ts:228"}, "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-f22ea1844ffd33c8", "name": "Commented-code block (5 lines) in convex/mcpOauth.ts:232", "shortDescription": {"text": "Commented-code block (5 lines) in convex/mcpOauth.ts:232"}, "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-6d6aeb69057225b5", "name": "Commented-code block (8 lines) in convex/mcp.ts:263", "shortDescription": {"text": "Commented-code block (8 lines) in convex/mcp.ts:263"}, "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-7480531794fd2289", "name": "Commented-code block (6 lines) in convex/standardsImport.ts:14", "shortDescription": {"text": "Commented-code block (6 lines) in convex/standardsImport.ts:14"}, "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-1d5d8e73af9ce6c6", "name": "`fetch()` without try/.catch or AbortSignal \u2014 convex/standardsImport.ts:74", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 convex/standardsImport.ts:74"}, "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-43f38f9aa2bc3241", "name": "Commented-code block (8 lines) in convex/parents.ts:3", "shortDescription": {"text": "Commented-code block (8 lines) in convex/parents.ts:3"}, "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-dea5a3075ede48be", "name": "Commented-code block (9 lines) in convex/slackBot.ts:447", "shortDescription": {"text": "Commented-code block (9 lines) in convex/slackBot.ts:447"}, "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-ae1fff787917c371", "name": "Commented-code block (9 lines) in convex/assignments.ts:286", "shortDescription": {"text": "Commented-code block (9 lines) in convex/assignments.ts:286"}, "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-57b4ef7a97f8edbc", "name": "Commented-code block (6 lines) in convex/deliverableAssess.ts:5", "shortDescription": {"text": "Commented-code block (6 lines) in convex/deliverableAssess.ts: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-d5f20b497a45223b", "name": "Commented-code block (5 lines) in convex/scholarDocumentActions.ts:27", "shortDescription": {"text": "Commented-code block (5 lines) in convex/scholarDocumentActions.ts:27"}, "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-670924175dcbd768", "name": "Commented-code block (5 lines) in convex/shareBackActions.ts:16", "shortDescription": {"text": "Commented-code block (5 lines) in convex/shareBackActions.ts: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-c9aabeae71baa374", "name": "Commented-code block (5 lines) in convex/shareBack.ts:19", "shortDescription": {"text": "Commented-code block (5 lines) in convex/shareBack.ts: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-2fedaac46ad40749", "name": "Commented-code block (8 lines) in convex/webActivitySessions.ts:1", "shortDescription": {"text": "Commented-code block (8 lines) in convex/webActivitySessions.ts:1"}, "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-3a142db87f1ce76c", "name": "Commented-code block (6 lines) in convex/parentChat.ts:5", "shortDescription": {"text": "Commented-code block (6 lines) in convex/parentChat.ts: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-fa4c76c4060cb9a9", "name": "Commented-code block (5 lines) in convex/projects.ts:256", "shortDescription": {"text": "Commented-code block (5 lines) in convex/projects.ts:256"}, "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-a8491194b3f51fcd", "name": "Commented-code block (8 lines) in convex/http.ts:109", "shortDescription": {"text": "Commented-code block (8 lines) in convex/http.ts: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-3a650d5a27408a85", "name": "`fetch()` without try/.catch or AbortSignal \u2014 convex/http.ts:1647", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 convex/http.ts:1647"}, "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-9f0d0864b3c5d674", "name": "Legacy-named symbol `copiedFromLegacy` in convex/_devVerify.ts:162", "shortDescription": {"text": "Legacy-named symbol `copiedFromLegacy` in convex/_devVerify.ts:162"}, "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-2604a0ea68550d9f", "name": "Commented-code block (5 lines) in convex/_devVerify.ts:522", "shortDescription": {"text": "Commented-code block (5 lines) in convex/_devVerify.ts:522"}, "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-eda545c8669be29d", "name": "Commented-code block (7 lines) in convex/driveSync.ts:5", "shortDescription": {"text": "Commented-code block (7 lines) in convex/driveSync.ts: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-6bdb989240620343", "name": "`fetch()` without try/.catch or AbortSignal \u2014 convex/driveSync.ts:59", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 convex/driveSync.ts:59"}, "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-a4bd417acd778bbc", "name": "Commented-code block (7 lines) in convex/portfolioMaterialize.ts:5", "shortDescription": {"text": "Commented-code block (7 lines) in convex/portfolioMaterialize.ts: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-36279a9bfdb074b0", "name": "Commented-code block (7 lines) in convex/lessons.ts:1", "shortDescription": {"text": "Commented-code block (7 lines) in convex/lessons.ts:1"}, "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-a3ee1c9314a399cf", "name": "Commented-code block (5 lines) in convex/portfolio.ts:352", "shortDescription": {"text": "Commented-code block (5 lines) in convex/portfolio.ts:352"}, "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-616752d146e76104", "name": "Commented-code block (12 lines) in convex/__tests__/crossScholarGates.test.ts:13", "shortDescription": {"text": "Commented-code block (12 lines) in convex/__tests__/crossScholarGates.test.ts: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-15d2978918ac9bc3", "name": "Commented-code block (5 lines) in convex/__tests__/offlineProjectMagic.test.ts:7", "shortDescription": {"text": "Commented-code block (5 lines) in convex/__tests__/offlineProjectMagic.test.ts: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-454bf4a3d6750a2e", "name": "Commented-code block (7 lines) in convex/__tests__/createScholarUnit.test.ts:161", "shortDescription": {"text": "Commented-code block (7 lines) in convex/__tests__/createScholarUnit.test.ts:161"}, "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-61351ee83e2f6999", "name": "Legacy-named symbol `readyOld` in convex/__tests__/portfolio.test.ts:400", "shortDescription": {"text": "Legacy-named symbol `readyOld` in convex/__tests__/portfolio.test.ts:400"}, "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-6576b721e87b9ebd", "name": "Commented-code block (5 lines) in convex/__tests__/portfolio.test.ts:276", "shortDescription": {"text": "Commented-code block (5 lines) in convex/__tests__/portfolio.test.ts:276"}, "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-9bf7de269efa0008", "name": "Commented-code block (9 lines) in convex/__tests__/registrarGates.test.ts:13", "shortDescription": {"text": "Commented-code block (9 lines) in convex/__tests__/registrarGates.test.ts: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-32da1d50b97546ed", "name": "Commented-code block (5 lines) in convex/__tests__/authGuards.test.ts:90", "shortDescription": {"text": "Commented-code block (5 lines) in convex/__tests__/authGuards.test.ts:90"}, "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-39f9b5b7b2cd86c5", "name": "Commented-code block (8 lines) in convex/__tests__/magicLinkAuth.test.ts:13", "shortDescription": {"text": "Commented-code block (8 lines) in convex/__tests__/magicLinkAuth.test.ts: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-08c63430381aa108", "name": "Commented-code block (5 lines) in convex/__tests__/mcp.test.ts:13", "shortDescription": {"text": "Commented-code block (5 lines) in convex/__tests__/mcp.test.ts: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-510553ef19bcedd3", "name": "Commented-code block (5 lines) in convex/__tests__/devLoginSeed.test.ts:12", "shortDescription": {"text": "Commented-code block (5 lines) in convex/__tests__/devLoginSeed.test.ts:12"}, "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-240b84fd3c5fdadd", "name": "Commented-code block (5 lines) in convex/__tests__/projectAccess.test.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in convex/__tests__/projectAccess.test.ts:1"}, "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-fb5994b5b135bd80", "name": "Commented-code block (6 lines) in convex/__tests__/guardianshipGates.test.ts:13", "shortDescription": {"text": "Commented-code block (6 lines) in convex/__tests__/guardianshipGates.test.ts: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-958ff218a767b648", "name": "Commented-code block (5 lines) in convex/__tests__/scholarReadTools.test.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in convex/__tests__/scholarReadTools.test.ts:1"}, "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-55711d8bf396cacd", "name": "Commented-code block (5 lines) in convex/__tests__/shareBack.test.ts:70", "shortDescription": {"text": "Commented-code block (5 lines) in convex/__tests__/shareBack.test.ts:70"}, "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-d092bca76521b1ea", "name": "Commented-code block (10 lines) in convex/__tests__/streamPlaceholders.test.ts:7", "shortDescription": {"text": "Commented-code block (10 lines) in convex/__tests__/streamPlaceholders.test.ts: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-5e911faf842811bd", "name": "Legacy-named symbol `EvOld` in convex/__tests__/slackBot.test.ts:788", "shortDescription": {"text": "Legacy-named symbol `EvOld` in convex/__tests__/slackBot.test.ts:788"}, "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-365212a63e4c7996", "name": "`fetch()` without try/.catch or AbortSignal \u2014 convex/__tests__/slackBot.test.ts:52", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 convex/__tests__/slackBot.test.ts:52"}, "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-09a192ebbc96a6ca", "name": "Commented-code block (8 lines) in convex/lib/scholarReadTools.ts:3", "shortDescription": {"text": "Commented-code block (8 lines) in convex/lib/scholarReadTools.ts:3"}, "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-59b5cc42087e612a", "name": "Commented-code block (7 lines) in convex/lib/botTools.ts:4", "shortDescription": {"text": "Commented-code block (7 lines) in convex/lib/botTools.ts:4"}, "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-671dbb9d67e4c6eb", "name": "Commented-code block (5 lines) in convex/lib/scholarReads.ts:10", "shortDescription": {"text": "Commented-code block (5 lines) in convex/lib/scholarReads.ts:10"}, "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-dbc02e39cc2af940", "name": "Commented-code block (8 lines) in convex/lib/deliverable.ts:27", "shortDescription": {"text": "Commented-code block (8 lines) in convex/lib/deliverable.ts:27"}, "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-37feeff7676d540d", "name": "Commented-code block (5 lines) in convex/lib/slackTools.ts:5", "shortDescription": {"text": "Commented-code block (5 lines) in convex/lib/slackTools.ts: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-b3562f3c0b819e48", "name": "`fetch()` without try/.catch or AbortSignal \u2014 convex/lib/gemini.ts:32", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 convex/lib/gemini.ts:32"}, "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-f43c92e146334145", "name": "Commented-code block (6 lines) in convex/lib/scholarMatch.ts:3", "shortDescription": {"text": "Commented-code block (6 lines) in convex/lib/scholarMatch.ts:3"}, "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-8be584b17a2a7d19", "name": "Commented-code block (11 lines) in convex/lib/aideStream.ts:3", "shortDescription": {"text": "Commented-code block (11 lines) in convex/lib/aideStream.ts:3"}, "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-ccaeebbed4918b09", "name": "Commented-code block (6 lines) in convex/lib/thumbnail.ts:3", "shortDescription": {"text": "Commented-code block (6 lines) in convex/lib/thumbnail.ts:3"}, "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-aadb17064a28888b", "name": "Commented-code block (5 lines) in convex/lib/slackApi.ts:10", "shortDescription": {"text": "Commented-code block (5 lines) in convex/lib/slackApi.ts:10"}, "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-0afb9ded651fc96c", "name": "`fetch()` without try/.catch or AbortSignal \u2014 convex/lib/slackApi.ts:28", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 convex/lib/slackApi.ts:28"}, "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-691595485bb65471", "name": "Commented-code block (5 lines) in convex/lib/unitDesignerTools.ts:3", "shortDescription": {"text": "Commented-code block (5 lines) in convex/lib/unitDesignerTools.ts:3"}, "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-b09f448622cd9645", "name": "Commented-code block (6 lines) in convex/lib/scholarReadPolicy.ts:4", "shortDescription": {"text": "Commented-code block (6 lines) in convex/lib/scholarReadPolicy.ts:4"}, "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-d30947c931e7b5af", "name": "Commented-code block (6 lines) in convex/lib/pdfSegments.ts:3", "shortDescription": {"text": "Commented-code block (6 lines) in convex/lib/pdfSegments.ts:3"}, "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-aed7f78eb614c07d", "name": "Commented-code block (5 lines) in convex/lib/ingestMimes.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in convex/lib/ingestMimes.ts:1"}, "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-b05e6045a3f13a15", "name": "Commented-code block (5 lines) in convex/lib/slackSignature.ts:3", "shortDescription": {"text": "Commented-code block (5 lines) in convex/lib/slackSignature.ts:3"}, "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-b1c68e45dc3c5581", "name": "Commented-code block (6 lines) in convex/lib/aideTools.ts:3", "shortDescription": {"text": "Commented-code block (6 lines) in convex/lib/aideTools.ts:3"}, "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-f0d4b29f6d32c845", "name": "Commented-code block (7 lines) in convex/lib/portfolioStatus.ts:1", "shortDescription": {"text": "Commented-code block (7 lines) in convex/lib/portfolioStatus.ts:1"}, "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-3b389a3b1094da21", "name": "Commented-code block (7 lines) in convex/lib/channels.ts:6", "shortDescription": {"text": "Commented-code block (7 lines) in convex/lib/channels.ts: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-49be239eba8d0cfb", "name": "Commented-code block (7 lines) in convex/lib/slackTranscript.ts:3", "shortDescription": {"text": "Commented-code block (7 lines) in convex/lib/slackTranscript.ts:3"}, "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-b0a92d058bad4f4b", "name": "Commented-code block (5 lines) in convex/lib/google.ts:3", "shortDescription": {"text": "Commented-code block (5 lines) in convex/lib/google.ts:3"}, "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-4591b4217275cfe5", "name": "`fetch()` without try/.catch or AbortSignal \u2014 convex/lib/google.ts:87", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 convex/lib/google.ts:87"}, "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-267327fae200932a", "name": "Commented-code block (5 lines) in app/setup-passkey/page.tsx:85", "shortDescription": {"text": "Commented-code block (5 lines) in app/setup-passkey/page.tsx: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-09b0101622b40128", "name": "Commented-code block (10 lines) in app/api/mcp/route.ts:3", "shortDescription": {"text": "Commented-code block (10 lines) in app/api/mcp/route.ts:3"}, "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-41371350529f9255", "name": "Commented-code block (5 lines) in app/api/drive/webhook/route.ts:3", "shortDescription": {"text": "Commented-code block (5 lines) in app/api/drive/webhook/route.ts:3"}, "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-80f7106edad938c8", "name": "Commented-code block (5 lines) in app/api/oauth/token/route.ts:7", "shortDescription": {"text": "Commented-code block (5 lines) in app/api/oauth/token/route.ts: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-d712c62ce9441c78", "name": "Commented-code block (5 lines) in app/api/oauth/register/route.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in app/api/oauth/register/route.ts:1"}, "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-41af60009d5af52a", "name": "Commented-code block (7 lines) in app/dev-web-assignment/page.tsx:7", "shortDescription": {"text": "Commented-code block (7 lines) in app/dev-web-assignment/page.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-b022ef210d6a5bd4", "name": "Commented-code block (8 lines) in app/oauth/authorize/page.tsx:3", "shortDescription": {"text": "Commented-code block (8 lines) in app/oauth/authorize/page.tsx:3"}, "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-e448fa5e42d82a86", "name": "Commented-code block (8 lines) in app/scholar/page.tsx:111", "shortDescription": {"text": "Commented-code block (8 lines) in app/scholar/page.tsx: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-b73985c524ebbd3a", "name": "Commented-code block (5 lines) in app/scholar/[projectId]/page.tsx:166", "shortDescription": {"text": "Commented-code block (5 lines) in app/scholar/[projectId]/page.tsx:166"}, "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-488e8d270998bd71", "name": "Commented-code block (7 lines) in app/dev-login/page.tsx:5", "shortDescription": {"text": "Commented-code block (7 lines) in app/dev-login/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-8df123ac25a7a1b8", "name": "Commented-code block (10 lines) in app/teacher/TeacherDashboard.tsx:197", "shortDescription": {"text": "Commented-code block (10 lines) in app/teacher/TeacherDashboard.tsx:197"}, "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-558980617ceddf48", "name": "Commented-code block (5 lines) in lib/convexUrls.ts:3", "shortDescription": {"text": "Commented-code block (5 lines) in lib/convexUrls.ts:3"}, "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-7e8aaf7f5400867e", "name": "Commented-code block (6 lines) in lib/curriculumBotPrompts.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in lib/curriculumBotPrompts.ts:1"}, "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-a832e4d0e7340c53", "name": "`fetch()` without try/.catch or AbortSignal \u2014 hooks/useWebAssignment.ts:93", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 hooks/useWebAssignment.ts:93"}, "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-94cf891ee75b5102", "name": "Commented-code block (8 lines) in evals/tutor-quality/run.ts:136", "shortDescription": {"text": "Commented-code block (8 lines) in evals/tutor-quality/run.ts:136"}, "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}}]}}, "automationDetails": {"id": "repobility/21598"}, "properties": {"repository": "tradewinds-center/rabbithole", "repoUrl": "https://github.com/tradewinds-center/rabbithole", "branch": "main"}, "results": [{"ruleId": "scanner-bead75b0f9233e05", "level": "none", "message": {"text": "No API endpoints detected"}, "properties": {"repobilityId": "0f8bb852027c38f8", "scanner": "scanner-primary", "fingerprint": "bead75b0f9233e05", "layer": "api", "severity": "info", "confidence": 1.0, "tags": ["coverage"]}}, {"ruleId": "scanner-b0502e9c416cc6dd", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-video-units.js:78"}, "properties": {"repobilityId": "9a988d71dca2e37a", "scanner": "scanner-primary", "fingerprint": "b0502e9c416cc6dd", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-922af8b65215d3c6", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 components/ProjectActivityNav.tsx:215"}, "properties": {"repobilityId": "2c6a1ecf3fa21bdc", "scanner": "scanner-primary", "fingerprint": "922af8b65215d3c6", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-202151321215f705", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 convex/portfolioActions.ts:590"}, "properties": {"repobilityId": "c6d52f6f33c5d6fa", "scanner": "scanner-primary", "fingerprint": "202151321215f705", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-01057703c1153a23", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 convex/observer.ts:27"}, "properties": {"repobilityId": "888de191c9b268d4", "scanner": "scanner-primary", "fingerprint": "01057703c1153a23", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-80def4ff21104e1f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 convex/scholarDocumentProposalActions.ts:209"}, "properties": {"repobilityId": "136d660d0ae26ff2", "scanner": "scanner-primary", "fingerprint": "80def4ff21104e1f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ca7d336c89501403", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 convex/standardsImport.ts:73"}, "properties": {"repobilityId": "b6fa0d8dd2af6771", "scanner": "scanner-primary", "fingerprint": "ca7d336c89501403", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b2cf1281a8ba290a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 convex/seedData.ts:32"}, "properties": {"repobilityId": "9416c94b1a4b1de5", "scanner": "scanner-primary", "fingerprint": "b2cf1281a8ba290a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-653bc38ea93e4be1", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 convex/scholarDocumentActions.ts:258"}, "properties": {"repobilityId": "3ba360a3569ebabe", "scanner": "scanner-primary", "fingerprint": "653bc38ea93e4be1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-dcb9c8a0a771a7ad", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 convex/projects.ts:72"}, "properties": {"repobilityId": "b2d1828a00bbcd75", "scanner": "scanner-primary", "fingerprint": "dcb9c8a0a771a7ad", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-a4b7bdbdb9c85d68", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 convex/driveSync.ts:137"}, "properties": {"repobilityId": "83bceadaa1bab032", "scanner": "scanner-primary", "fingerprint": "a4b7bdbdb9c85d68", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-251e452730f8a692", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 convex/standardsMapper.ts:139"}, "properties": {"repobilityId": "35f884a76adff3be", "scanner": "scanner-primary", "fingerprint": "251e452730f8a692", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-284dba0424d14ab6", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 app/EmotionRegistry.tsx:52"}, "properties": {"repobilityId": "20a15e0744add268", "scanner": "scanner-primary", "fingerprint": "284dba0424d14ab6", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-6d4b14ec329e751f", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/verify-curriculum-bot-quest.mjs:11"}, "properties": {"repobilityId": "37b785661fe57cf2", "scanner": "scanner-primary", "fingerprint": "6d4b14ec329e751f", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/verify-curriculum-bot-quest.mjs"}, "region": {"startLine": 11}}}]}, {"ruleId": "scanner-d067eaf8663bcf75", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/verify-scholar-ia.mjs:13"}, "properties": {"repobilityId": "35947a9264648da0", "scanner": "scanner-primary", "fingerprint": "d067eaf8663bcf75", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/verify-scholar-ia.mjs"}, "region": {"startLine": 13}}}]}, {"ruleId": "scanner-2bebb061ddba99e0", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/visual-tour.mjs:21"}, "properties": {"repobilityId": "7cb71648a70f7494", "scanner": "scanner-primary", "fingerprint": "2bebb061ddba99e0", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/visual-tour.mjs"}, "region": {"startLine": 21}}}]}, {"ruleId": "scanner-0b05f0a928cf01bb", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/verify-class-tab-redesign.mjs:15"}, "properties": {"repobilityId": "9cce676065f053aa", "scanner": "scanner-primary", "fingerprint": "0b05f0a928cf01bb", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/verify-class-tab-redesign.mjs"}, "region": {"startLine": 15}}}]}, {"ruleId": "scanner-c8e5cda39577c8ac", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/seed-video-units.js:13"}, "properties": {"repobilityId": "83903f9bc193f450", "scanner": "scanner-primary", "fingerprint": "c8e5cda39577c8ac", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/seed-video-units.js"}, "region": {"startLine": 13}}}]}, {"ruleId": "scanner-6e2eb75801c172f2", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/verify-documents-tab.mjs:22"}, "properties": {"repobilityId": "fc732b2d095c0496", "scanner": "scanner-primary", "fingerprint": "6e2eb75801c172f2", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/verify-documents-tab.mjs"}, "region": {"startLine": 22}}}]}, {"ruleId": "scanner-c46b581136f0939a", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/verify-assignments-phase3.mjs:11"}, "properties": {"repobilityId": "e9791266903a540c", "scanner": "scanner-primary", "fingerprint": "c46b581136f0939a", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/verify-assignments-phase3.mjs"}, "region": {"startLine": 11}}}]}, {"ruleId": "scanner-0a7f944f366d9196", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/verify-kill-quests.mjs:17"}, "properties": {"repobilityId": "f198434a109663bc", "scanner": "scanner-primary", "fingerprint": "0a7f944f366d9196", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/verify-kill-quests.mjs"}, "region": {"startLine": 17}}}]}, {"ruleId": "scanner-57152faed53b3d1a", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/generate-app-assets.mjs:98"}, "properties": {"repobilityId": "c57d5c0c756ce774", "scanner": "scanner-primary", "fingerprint": "57152faed53b3d1a", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/generate-app-assets.mjs"}, "region": {"startLine": 98}}}]}, {"ruleId": "scanner-d79955205c0911ed", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/verify-bot-attaches-rubric.mjs:24"}, "properties": {"repobilityId": "3047f42460ed48ad", "scanner": "scanner-primary", "fingerprint": "d79955205c0911ed", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/verify-bot-attaches-rubric.mjs"}, "region": {"startLine": 24}}}]}, {"ruleId": "scanner-c7a527b824652fa9", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/ensure-auth-keys.mjs:14"}, "properties": {"repobilityId": "398db2fe93a9dcc3", "scanner": "scanner-primary", "fingerprint": "c7a527b824652fa9", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/ensure-auth-keys.mjs"}, "region": {"startLine": 14}}}]}, {"ruleId": "scanner-56e4b9d8d1ab207e", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/verify-assignments-phase5.mjs:13"}, "properties": {"repobilityId": "99c7fb1b3ba8f06d", "scanner": "scanner-primary", "fingerprint": "56e4b9d8d1ab207e", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/verify-assignments-phase5.mjs"}, "region": {"startLine": 13}}}]}, {"ruleId": "scanner-25f3aa8d0a0c014d", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/verify-assignments-phase1.mjs:16"}, "properties": {"repobilityId": "4dd44b6223fc0ced", "scanner": "scanner-primary", "fingerprint": "25f3aa8d0a0c014d", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/verify-assignments-phase1.mjs"}, "region": {"startLine": 16}}}]}, {"ruleId": "scanner-a6585715c1e03444", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/verify-activity-rubric.mjs:23"}, "properties": {"repobilityId": "db662dab5dd741b6", "scanner": "scanner-primary", "fingerprint": "a6585715c1e03444", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/verify-activity-rubric.mjs"}, "region": {"startLine": 23}}}]}, {"ruleId": "scanner-e22375ea1f4c4b82", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/verify-assignments-phase2.mjs:15"}, "properties": {"repobilityId": "0b44e4bcb208ea8b", "scanner": "scanner-primary", "fingerprint": "e22375ea1f4c4b82", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/verify-assignments-phase2.mjs"}, "region": {"startLine": 15}}}]}, {"ruleId": "scanner-7c5127f1e4480513", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/verify-artifact-perception.mjs:26"}, "properties": {"repobilityId": "9a56c8f15ae7f113", "scanner": "scanner-primary", "fingerprint": "7c5127f1e4480513", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/verify-artifact-perception.mjs"}, "region": {"startLine": 26}}}]}, {"ruleId": "scanner-ca060f1ff18e1cb9", "level": "error", "message": {"text": "Possible secret in scripts/verify-scholar-plate.mjs"}, "properties": {"repobilityId": "1b2aab85dcdf4cbe", "scanner": "scanner-primary", "fingerprint": "ca060f1ff18e1cb9", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/verify-scholar-plate.mjs"}, "region": {"startLine": 9}}}]}, {"ruleId": "scanner-8a3c11b730cbd81f", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/verify-quest-phase3.mjs:19"}, "properties": {"repobilityId": "003a230f9a7980a4", "scanner": "scanner-primary", "fingerprint": "8a3c11b730cbd81f", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/verify-quest-phase3.mjs"}, "region": {"startLine": 19}}}]}, {"ruleId": "scanner-16ce9925693308f6", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in convex/http.ts:1167"}, "properties": {"repobilityId": "275ed841cb34dafb", "scanner": "scanner-primary", "fingerprint": "16ce9925693308f6", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "convex/http.ts"}, "region": {"startLine": 1167}}}]}, {"ruleId": "scanner-1879f0871128de4b", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in convex/lib/aideStream.ts:187"}, "properties": {"repobilityId": "6da40635f4687f6b", "scanner": "scanner-primary", "fingerprint": "1879f0871128de4b", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "convex/lib/aideStream.ts"}, "region": {"startLine": 187}}}]}, {"ruleId": "scanner-2b879e6ac35196e8", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in app/EmotionRegistry.tsx:52"}, "properties": {"repobilityId": "28b5b0938e510fc0", "scanner": "scanner-primary", "fingerprint": "2b879e6ac35196e8", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app/EmotionRegistry.tsx"}, "region": {"startLine": 52}}}]}, {"ruleId": "scanner-7b0981671e0a818d", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in app/api/mcp/route.ts:33"}, "properties": {"repobilityId": "d6535ea92223e872", "scanner": "scanner-primary", "fingerprint": "7b0981671e0a818d", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app/api/mcp/route.ts"}, "region": {"startLine": 33}}}]}, {"ruleId": "scanner-f3761b25666a9fe3", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in lib/oauthHttp.ts:27"}, "properties": {"repobilityId": "7ab9a22bf87d447c", "scanner": "scanner-primary", "fingerprint": "f3761b25666a9fe3", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "lib/oauthHttp.ts"}, "region": {"startLine": 27}}}]}, {"ruleId": "scanner-31fba0d5a42a556f", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in evals/spot-eval/run.ts:30"}, "properties": {"repobilityId": "3189fb4085d49757", "scanner": "scanner-primary", "fingerprint": "31fba0d5a42a556f", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "evals/spot-eval/run.ts"}, "region": {"startLine": 30}}}]}, {"ruleId": "scanner-1a7d2d4439b3a1b2", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/coread-test.html:204"}, "properties": {"repobilityId": "3beaa4f7aca9234e", "scanner": "scanner-primary", "fingerprint": "1a7d2d4439b3a1b2", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/coread-test.html"}, "region": {"startLine": 204}}}]}, {"ruleId": "scanner-cb639d9a10a47b23", "level": "note", "message": {"text": "package.json defines install-time lifecycle scripts"}, "properties": {"repobilityId": "4d02a5c7daed0bc5", "scanner": "scanner-primary", "fingerprint": "cb639d9a10a47b23", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "npm", "install-scripts"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-4601e3ad3bb28677", "level": "warning", "message": {"text": "No CI/CD pipelines detected"}, "properties": {"repobilityId": "c3ee439bce2bc51e", "scanner": "scanner-primary", "fingerprint": "4601e3ad3bb28677", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["coverage"]}}, {"ruleId": "scanner-e3c68d97947140e4", "level": "note", "message": {"text": "Very large file: components/ScholarProfile.tsx (1443 lines)"}, "properties": {"repobilityId": "6915b120f79b2859", "scanner": "scanner-primary", "fingerprint": "e3c68d97947140e4", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-ca2bd327bcd46c50", "level": "note", "message": {"text": "Very large file: components/ProjectInterface.tsx (2946 lines)"}, "properties": {"repobilityId": "28d94faf86243c9c", "scanner": "scanner-primary", "fingerprint": "ca2bd327bcd46c50", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-2ff07ae7b1512fe1", "level": "note", "message": {"text": "Very large file: convex/projectHelpers.ts (1556 lines)"}, "properties": {"repobilityId": "5663c9f92269d732", "scanner": "scanner-primary", "fingerprint": "2ff07ae7b1512fe1", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-dbee8e2750cbb390", "level": "note", "message": {"text": "Very large file: convex/schema.ts (1624 lines)"}, "properties": {"repobilityId": "765996cffc16f9cc", "scanner": "scanner-primary", "fingerprint": "dbee8e2750cbb390", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-bd69de5dc4a7a459", "level": "note", "message": {"text": "Very large file: convex/assignments.ts (1983 lines)"}, "properties": {"repobilityId": "8b9789e8f7a680d2", "scanner": "scanner-primary", "fingerprint": "bd69de5dc4a7a459", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-922d04448d5cb28e", "level": "note", "message": {"text": "Very large file: convex/seedData.ts (2614 lines)"}, "properties": {"repobilityId": "93030497d0f9296c", "scanner": "scanner-primary", "fingerprint": "922d04448d5cb28e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-e885fe315fa3905b", "level": "note", "message": {"text": "Very large file: convex/projects.ts (1820 lines)"}, "properties": {"repobilityId": "763386c233174a66", "scanner": "scanner-primary", "fingerprint": "e885fe315fa3905b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-240c7ba944356479", "level": "note", "message": {"text": "Very large file: convex/http.ts (2054 lines)"}, "properties": {"repobilityId": "47346167ac9ffd34", "scanner": "scanner-primary", "fingerprint": "240c7ba944356479", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-264f9b169506b22c", "level": "note", "message": {"text": "Very large file: app/teacher/TeacherDashboard.tsx (1643 lines)"}, "properties": {"repobilityId": "142c6b919a8cd0e7", "scanner": "scanner-primary", "fingerprint": "264f9b169506b22c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-ea3b5e389d8c9c0f", "level": "note", "message": {"text": "Low test-to-source ratio"}, "properties": {"repobilityId": "ef7b2552cc00a375", "scanner": "scanner-primary", "fingerprint": "ea3b5e389d8c9c0f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["tests"]}}, {"ruleId": "scanner-141b30a41e03817b", "level": "note", "message": {"text": "No license file detected"}, "properties": {"repobilityId": "4d8a1426feb063ed", "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": "26c386268dd241c7", "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": "31dca0a608db45a9", "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": "4772e2536188fdf1", "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": "bbafec44d4cef1cf", "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": "e1a163da89f1f157", "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": "51320f2760967235", "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": "8d699f137eeaf8ad", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-cea5451e9bb9efb4", "level": "none", "message": {"text": "Commented-code block (5 lines) in capacitor.config.ts:54"}, "properties": {"repobilityId": "4bd87e1f9fb03e4a", "scanner": "scanner-primary", "fingerprint": "cea5451e9bb9efb4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5af87721cd5557a3", "level": "none", "message": {"text": "Commented-code block (5 lines) in scripts/gen-mupdf-wasm.mjs:9"}, "properties": {"repobilityId": "b096f5fcb33f700b", "scanner": "scanner-primary", "fingerprint": "5af87721cd5557a3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6ed2f93d84072505", "level": "none", "message": {"text": "Commented-code block (5 lines) in scripts/verify-directives-tab.mjs:181"}, "properties": {"repobilityId": "db3b0aefe9cd67f4", "scanner": "scanner-primary", "fingerprint": "6ed2f93d84072505", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-274ffde6a5b0d9ab", "level": "none", "message": {"text": "Commented-code block (6 lines) in scripts/verify-class-tab-redesign.mjs:51"}, "properties": {"repobilityId": "e16faccd5cd4a435", "scanner": "scanner-primary", "fingerprint": "274ffde6a5b0d9ab", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-93512632f95fa045", "level": "none", "message": {"text": "Commented-code block (7 lines) in scripts/exploit-check.mjs:1"}, "properties": {"repobilityId": "9ee6e8cfeb9d0ac4", "scanner": "scanner-primary", "fingerprint": "93512632f95fa045", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bae7e609105690e7", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/exploit-check.mjs:41"}, "properties": {"repobilityId": "bb4cf6175a9f8ae8", "scanner": "scanner-primary", "fingerprint": "bae7e609105690e7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a3a24ccc1bb27935", "level": "none", "message": {"text": "Commented-code block (5 lines) in scripts/login-smoke.mjs:1"}, "properties": {"repobilityId": "b01e91c52f4a99fc", "scanner": "scanner-primary", "fingerprint": "a3a24ccc1bb27935", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f4a6902b6ca8b302", "level": "none", "message": {"text": "Commented-code block (5 lines) in scripts/verify-documents-tab.mjs:321"}, "properties": {"repobilityId": "3be28d67d1e06aad", "scanner": "scanner-primary", "fingerprint": "f4a6902b6ca8b302", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-87687f7c1e49b291", "level": "none", "message": {"text": "Commented-code block (6 lines) in scripts/generate-app-assets.mjs:15"}, "properties": {"repobilityId": "6727c63bd2120c8b", "scanner": "scanner-primary", "fingerprint": "87687f7c1e49b291", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-585eeac6638dfb9c", "level": "none", "message": {"text": "Commented-code block (5 lines) in scripts/ensure-auth-keys.mjs:6"}, "properties": {"repobilityId": "ba26815fa9c1b230", "scanner": "scanner-primary", "fingerprint": "585eeac6638dfb9c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c9e0076d1f210100", "level": "none", "message": {"text": "Commented-code block (5 lines) in scripts/verify-quest-phase3.mjs:128"}, "properties": {"repobilityId": "7476bc2971aacab1", "scanner": "scanner-primary", "fingerprint": "c9e0076d1f210100", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-746e1f3a5d798e56", "level": "none", "message": {"text": "Commented-code block (9 lines) in scripts/verify-mcp-oauth.mjs:4"}, "properties": {"repobilityId": "f07f6667a4be9ca5", "scanner": "scanner-primary", "fingerprint": "746e1f3a5d798e56", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fe4361352bfdeefe", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/verify-mcp-oauth.mjs:77"}, "properties": {"repobilityId": "1cab464d91483084", "scanner": "scanner-primary", "fingerprint": "fe4361352bfdeefe", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9e4f22aa27d3d8d3", "level": "none", "message": {"text": "Commented-code block (5 lines) in scripts/lib/devBaseUrl.mjs:3"}, "properties": {"repobilityId": "2b2e514979b84142", "scanner": "scanner-primary", "fingerprint": "9e4f22aa27d3d8d3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4fbbc31234698423", "level": "none", "message": {"text": "Commented-code block (6 lines) in scripts/lib/devAuth.mjs:3"}, "properties": {"repobilityId": "f593cf1e88cbabac", "scanner": "scanner-primary", "fingerprint": "4fbbc31234698423", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-29dc9089bc462193", "level": "none", "message": {"text": "Commented-code block (6 lines) in components/ProgressContent.tsx:577"}, "properties": {"repobilityId": "0825b9e5f05343e3", "scanner": "scanner-primary", "fingerprint": "29dc9089bc462193", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2bfd4a12671fc4a3", "level": "none", "message": {"text": "Commented-code block (5 lines) in components/ArtifactDeliverableButton.tsx:75"}, "properties": {"repobilityId": "45e1d890a6641294", "scanner": "scanner-primary", "fingerprint": "2bfd4a12671fc4a3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-faa4838968a62e2a", "level": "none", "message": {"text": "Commented-code block (5 lines) in components/UnitPickerDialog.tsx:48"}, "properties": {"repobilityId": "c71d36f6ce7fefe7", "scanner": "scanner-primary", "fingerprint": "faa4838968a62e2a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3f0c69ff1e77c384", "level": "none", "message": {"text": "Commented-code block (5 lines) in components/ScholarAidePane.tsx:47"}, "properties": {"repobilityId": "5f50e91af73ff9bf", "scanner": "scanner-primary", "fingerprint": "3f0c69ff1e77c384", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fe597e7625f6b4c8", "level": "none", "message": {"text": "Commented-code block (5 lines) in components/AccountMenu.tsx:57"}, "properties": {"repobilityId": "73dc5a63f7585389", "scanner": "scanner-primary", "fingerprint": "fe597e7625f6b4c8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bb705bd70c1f7c4c", "level": "none", "message": {"text": "Commented-code block (8 lines) in components/index.ts:1"}, "properties": {"repobilityId": "20cd56cb50a193a1", "scanner": "scanner-primary", "fingerprint": "bb705bd70c1f7c4c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6d548267ccdb8f00", "level": "none", "message": {"text": "Commented-code block (5 lines) in components/NativeShellSetup.tsx:23"}, "properties": {"repobilityId": "eaa03ec7a46cf37a", "scanner": "scanner-primary", "fingerprint": "6d548267ccdb8f00", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b873a3f31afe9099", "level": "none", "message": {"text": "Commented-code block (7 lines) in components/ScholarPlate.tsx:115"}, "properties": {"repobilityId": "0bbdfbb1310791bf", "scanner": "scanner-primary", "fingerprint": "b873a3f31afe9099", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-adb2a01876f692c4", "level": "none", "message": {"text": "Commented-code block (5 lines) in components/UnitDesigner.tsx:40"}, "properties": {"repobilityId": "8d524651eeadded5", "scanner": "scanner-primary", "fingerprint": "adb2a01876f692c4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d77fb1e27e653416", "level": "none", "message": {"text": "Commented-code block (8 lines) in components/ScannerPanel.tsx:176"}, "properties": {"repobilityId": "7dfc0cd1ac7ed3c8", "scanner": "scanner-primary", "fingerprint": "d77fb1e27e653416", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9a72aa85b99353b7", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/ScannerPanel.tsx:759"}, "properties": {"repobilityId": "c8b27a117d757705", "scanner": "scanner-primary", "fingerprint": "9a72aa85b99353b7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ccd6954b13e3c1e4", "level": "none", "message": {"text": "Commented-code block (5 lines) in components/ProjectInterface.tsx:117"}, "properties": {"repobilityId": "8a42da37beefb646", "scanner": "scanner-primary", "fingerprint": "ccd6954b13e3c1e4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-27f70436d885e61d", "level": "none", "message": {"text": "Commented-code block (5 lines) in components/AuthForm.tsx:22"}, "properties": {"repobilityId": "794f2ddf6ef0b9cb", "scanner": "scanner-primary", "fingerprint": "27f70436d885e61d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-542ca94c464a50a0", "level": "none", "message": {"text": "Commented-code block (6 lines) in components/AssignmentPicker.tsx:3"}, "properties": {"repobilityId": "0f72d325d0454c45", "scanner": "scanner-primary", "fingerprint": "542ca94c464a50a0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-776a3d6290c540df", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/CameraScanDialog.tsx:151"}, "properties": {"repobilityId": "019fc8eb3c599032", "scanner": "scanner-primary", "fingerprint": "776a3d6290c540df", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2570e2090d244363", "level": "none", "message": {"text": "Commented-code block (5 lines) in components/MasteryTab.tsx:31"}, "properties": {"repobilityId": "e107f1827e6cca0a", "scanner": "scanner-primary", "fingerprint": "2570e2090d244363", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-05e9515132e2fe72", "level": "none", "message": {"text": "Commented-code block (5 lines) in components/GooglePickerButton.tsx:59"}, "properties": {"repobilityId": "3bdef629e6c7924a", "scanner": "scanner-primary", "fingerprint": "05e9515132e2fe72", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2a7bdf3b600b3a96", "level": "none", "message": {"text": "Commented-code block (5 lines) in components/UnitOutlineTree.tsx:390"}, "properties": {"repobilityId": "e852ce9dce5118d7", "scanner": "scanner-primary", "fingerprint": "2a7bdf3b600b3a96", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b88cdebfc086ea95", "level": "none", "message": {"text": "Commented-code block (5 lines) in components/StartAssignmentDialog.tsx:145"}, "properties": {"repobilityId": "d290c2a856c375d3", "scanner": "scanner-primary", "fingerprint": "b88cdebfc086ea95", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-698ec77895815848", "level": "none", "message": {"text": "Commented-code block (5 lines) in components/ArtifactPanel.tsx:11"}, "properties": {"repobilityId": "bd5545ae80b72782", "scanner": "scanner-primary", "fingerprint": "698ec77895815848", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3e74871d1f540f6e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/ArtifactPanel.tsx:12"}, "properties": {"repobilityId": "796a2e32c51856d4", "scanner": "scanner-primary", "fingerprint": "3e74871d1f540f6e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-96afe795b04dd719", "level": "none", "message": {"text": "Commented-code block (5 lines) in components/hierarchy/HierarchyRow.tsx:103"}, "properties": {"repobilityId": "87ef214e9e04bddb", "scanner": "scanner-primary", "fingerprint": "96afe795b04dd719", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3dcd420683a5825a", "level": "none", "message": {"text": "Commented-code block (6 lines) in components/ui/EmojiPickerButton.tsx:3"}, "properties": {"repobilityId": "48139b680fd3b97a", "scanner": "scanner-primary", "fingerprint": "3dcd420683a5825a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ee536e9cd414d6bb", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 convex/youtubeActions.ts:34"}, "properties": {"repobilityId": "68ce7064dc6050c3", "scanner": "scanner-primary", "fingerprint": "ee536e9cd414d6bb", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-dbc46e7bed61c410", "level": "none", "message": {"text": "Commented-code block (7 lines) in convex/seedUnitForTesting.ts:1"}, "properties": {"repobilityId": "3d5ba325dd8739bb", "scanner": "scanner-primary", "fingerprint": "dbc46e7bed61c410", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f84d13c46887effc", "level": "none", "message": {"text": "Commented-code block (6 lines) in convex/auth.ts:46"}, "properties": {"repobilityId": "8ace6b4d20c6bcbf", "scanner": "scanner-primary", "fingerprint": "f84d13c46887effc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c1983eff3f627239", "level": "none", "message": {"text": "Commented-code block (6 lines) in convex/googleAccounts.ts:3"}, "properties": {"repobilityId": "f829be3658238a76", "scanner": "scanner-primary", "fingerprint": "c1983eff3f627239", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7494d84881103803", "level": "none", "message": {"text": "Commented-code block (6 lines) in convex/slidesActions.ts:3"}, "properties": {"repobilityId": "db77afac64f10c85", "scanner": "scanner-primary", "fingerprint": "7494d84881103803", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a8bc75aa3ccc5ff5", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 convex/slidesActions.ts:38"}, "properties": {"repobilityId": "6157626f1f55d259", "scanner": "scanner-primary", "fingerprint": "a8bc75aa3ccc5ff5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b59f36f2b053dca7", "level": "none", "message": {"text": "Commented-code block (14 lines) in convex/projectHelpers.ts:62"}, "properties": {"repobilityId": "23228fc4cda07c55", "scanner": "scanner-primary", "fingerprint": "b59f36f2b053dca7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fed48b5cd9214f69", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 convex/audioActions.ts:27"}, "properties": {"repobilityId": "46626220ccb5703b", "scanner": "scanner-primary", "fingerprint": "fed48b5cd9214f69", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-cd21a44c285b6ab2", "level": "none", "message": {"text": "Commented-code block (5 lines) in convex/schema.ts:89"}, "properties": {"repobilityId": "942e344df1efed7a", "scanner": "scanner-primary", "fingerprint": "cd21a44c285b6ab2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-94342a855ae1b49f", "level": "none", "message": {"text": "Commented-code block (6 lines) in convex/units.ts:25"}, "properties": {"repobilityId": "ca1ca5c5c5dbeb50", "scanner": "scanner-primary", "fingerprint": "94342a855ae1b49f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ec0d64393a99391d", "level": "none", "message": {"text": "Commented-code block (5 lines) in convex/portfolioActions.ts:368"}, "properties": {"repobilityId": "c81dc5c3e64ae80e", "scanner": "scanner-primary", "fingerprint": "ec0d64393a99391d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4a12365c56e0fb02", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 convex/portfolioActions.ts:692"}, "properties": {"repobilityId": "d57dbdc2984ce0ee", "scanner": "scanner-primary", "fingerprint": "4a12365c56e0fb02", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-abbf7137d7f93f04", "level": "none", "message": {"text": "Commented-code block (6 lines) in convex/deliverables.ts:3"}, "properties": {"repobilityId": "1b5ad5388dfc2e36", "scanner": "scanner-primary", "fingerprint": "abbf7137d7f93f04", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e77249e2910927d8", "level": "none", "message": {"text": "Commented-code block (5 lines) in convex/curriculumAssistant.ts:377"}, "properties": {"repobilityId": "b0ed2f7ce358b1d7", "scanner": "scanner-primary", "fingerprint": "e77249e2910927d8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-76125169f57da8d5", "level": "none", "message": {"text": "Commented-code block (8 lines) in convex/activities.ts:1"}, "properties": {"repobilityId": "1a7bfa53774f8700", "scanner": "scanner-primary", "fingerprint": "76125169f57da8d5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9b4d360fa747f683", "level": "none", "message": {"text": "Commented-code block (5 lines) in convex/unitDesignerStream.ts:228"}, "properties": {"repobilityId": "848442635a3f12e9", "scanner": "scanner-primary", "fingerprint": "9b4d360fa747f683", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f22ea1844ffd33c8", "level": "none", "message": {"text": "Commented-code block (5 lines) in convex/mcpOauth.ts:232"}, "properties": {"repobilityId": "7658433a9397883a", "scanner": "scanner-primary", "fingerprint": "f22ea1844ffd33c8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6d6aeb69057225b5", "level": "none", "message": {"text": "Commented-code block (8 lines) in convex/mcp.ts:263"}, "properties": {"repobilityId": "6a0cd3ed13a1b120", "scanner": "scanner-primary", "fingerprint": "6d6aeb69057225b5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7480531794fd2289", "level": "none", "message": {"text": "Commented-code block (6 lines) in convex/standardsImport.ts:14"}, "properties": {"repobilityId": "994c20761f872b7c", "scanner": "scanner-primary", "fingerprint": "7480531794fd2289", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1d5d8e73af9ce6c6", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 convex/standardsImport.ts:74"}, "properties": {"repobilityId": "e5481b6d9bababab", "scanner": "scanner-primary", "fingerprint": "1d5d8e73af9ce6c6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-43f38f9aa2bc3241", "level": "none", "message": {"text": "Commented-code block (8 lines) in convex/parents.ts:3"}, "properties": {"repobilityId": "b5607b13e2e7e5ce", "scanner": "scanner-primary", "fingerprint": "43f38f9aa2bc3241", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-dea5a3075ede48be", "level": "none", "message": {"text": "Commented-code block (9 lines) in convex/slackBot.ts:447"}, "properties": {"repobilityId": "c86cd14f93c42bd9", "scanner": "scanner-primary", "fingerprint": "dea5a3075ede48be", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ae1fff787917c371", "level": "none", "message": {"text": "Commented-code block (9 lines) in convex/assignments.ts:286"}, "properties": {"repobilityId": "808b0115440c8135", "scanner": "scanner-primary", "fingerprint": "ae1fff787917c371", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-57b4ef7a97f8edbc", "level": "none", "message": {"text": "Commented-code block (6 lines) in convex/deliverableAssess.ts:5"}, "properties": {"repobilityId": "3f32d18fdae0c840", "scanner": "scanner-primary", "fingerprint": "57b4ef7a97f8edbc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d5f20b497a45223b", "level": "none", "message": {"text": "Commented-code block (5 lines) in convex/scholarDocumentActions.ts:27"}, "properties": {"repobilityId": "f4d547d7c71d0be7", "scanner": "scanner-primary", "fingerprint": "d5f20b497a45223b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-670924175dcbd768", "level": "none", "message": {"text": "Commented-code block (5 lines) in convex/shareBackActions.ts:16"}, "properties": {"repobilityId": "fdb143d65d20164f", "scanner": "scanner-primary", "fingerprint": "670924175dcbd768", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c9aabeae71baa374", "level": "none", "message": {"text": "Commented-code block (5 lines) in convex/shareBack.ts:19"}, "properties": {"repobilityId": "9170568ee1d4722c", "scanner": "scanner-primary", "fingerprint": "c9aabeae71baa374", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2fedaac46ad40749", "level": "none", "message": {"text": "Commented-code block (8 lines) in convex/webActivitySessions.ts:1"}, "properties": {"repobilityId": "0d8e52a891ed20d0", "scanner": "scanner-primary", "fingerprint": "2fedaac46ad40749", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3a142db87f1ce76c", "level": "none", "message": {"text": "Commented-code block (6 lines) in convex/parentChat.ts:5"}, "properties": {"repobilityId": "58ab5adc769055e5", "scanner": "scanner-primary", "fingerprint": "3a142db87f1ce76c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fa4c76c4060cb9a9", "level": "none", "message": {"text": "Commented-code block (5 lines) in convex/projects.ts:256"}, "properties": {"repobilityId": "707a000dc3efc18d", "scanner": "scanner-primary", "fingerprint": "fa4c76c4060cb9a9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a8491194b3f51fcd", "level": "none", "message": {"text": "Commented-code block (8 lines) in convex/http.ts:109"}, "properties": {"repobilityId": "424bbca0bc6dde2e", "scanner": "scanner-primary", "fingerprint": "a8491194b3f51fcd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3a650d5a27408a85", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 convex/http.ts:1647"}, "properties": {"repobilityId": "db0075f019d681a4", "scanner": "scanner-primary", "fingerprint": "3a650d5a27408a85", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9f0d0864b3c5d674", "level": "note", "message": {"text": "Legacy-named symbol `copiedFromLegacy` in convex/_devVerify.ts:162"}, "properties": {"repobilityId": "e376167a7bfcb07c", "scanner": "scanner-primary", "fingerprint": "9f0d0864b3c5d674", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-2604a0ea68550d9f", "level": "none", "message": {"text": "Commented-code block (5 lines) in convex/_devVerify.ts:522"}, "properties": {"repobilityId": "13c3c47ecb4c3459", "scanner": "scanner-primary", "fingerprint": "2604a0ea68550d9f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-eda545c8669be29d", "level": "none", "message": {"text": "Commented-code block (7 lines) in convex/driveSync.ts:5"}, "properties": {"repobilityId": "457a8162798b3c06", "scanner": "scanner-primary", "fingerprint": "eda545c8669be29d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6bdb989240620343", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 convex/driveSync.ts:59"}, "properties": {"repobilityId": "b6a7003bd8748d1a", "scanner": "scanner-primary", "fingerprint": "6bdb989240620343", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a4bd417acd778bbc", "level": "none", "message": {"text": "Commented-code block (7 lines) in convex/portfolioMaterialize.ts:5"}, "properties": {"repobilityId": "88713e2109b481f2", "scanner": "scanner-primary", "fingerprint": "a4bd417acd778bbc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-36279a9bfdb074b0", "level": "none", "message": {"text": "Commented-code block (7 lines) in convex/lessons.ts:1"}, "properties": {"repobilityId": "e752a60e2e9d3129", "scanner": "scanner-primary", "fingerprint": "36279a9bfdb074b0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a3ee1c9314a399cf", "level": "none", "message": {"text": "Commented-code block (5 lines) in convex/portfolio.ts:352"}, "properties": {"repobilityId": "bc4490572112da94", "scanner": "scanner-primary", "fingerprint": "a3ee1c9314a399cf", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-616752d146e76104", "level": "none", "message": {"text": "Commented-code block (12 lines) in convex/__tests__/crossScholarGates.test.ts:13"}, "properties": {"repobilityId": "334f1e3e4b16d2fe", "scanner": "scanner-primary", "fingerprint": "616752d146e76104", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-15d2978918ac9bc3", "level": "none", "message": {"text": "Commented-code block (5 lines) in convex/__tests__/offlineProjectMagic.test.ts:7"}, "properties": {"repobilityId": "255d9eb6bc939300", "scanner": "scanner-primary", "fingerprint": "15d2978918ac9bc3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-454bf4a3d6750a2e", "level": "none", "message": {"text": "Commented-code block (7 lines) in convex/__tests__/createScholarUnit.test.ts:161"}, "properties": {"repobilityId": "71107a2b4924274f", "scanner": "scanner-primary", "fingerprint": "454bf4a3d6750a2e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-61351ee83e2f6999", "level": "note", "message": {"text": "Legacy-named symbol `readyOld` in convex/__tests__/portfolio.test.ts:400"}, "properties": {"repobilityId": "76dc78145fc15f90", "scanner": "scanner-primary", "fingerprint": "61351ee83e2f6999", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-6576b721e87b9ebd", "level": "none", "message": {"text": "Commented-code block (5 lines) in convex/__tests__/portfolio.test.ts:276"}, "properties": {"repobilityId": "073fb8ae8c6b2483", "scanner": "scanner-primary", "fingerprint": "6576b721e87b9ebd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9bf7de269efa0008", "level": "none", "message": {"text": "Commented-code block (9 lines) in convex/__tests__/registrarGates.test.ts:13"}, "properties": {"repobilityId": "1bb3f56fe936397f", "scanner": "scanner-primary", "fingerprint": "9bf7de269efa0008", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-32da1d50b97546ed", "level": "none", "message": {"text": "Commented-code block (5 lines) in convex/__tests__/authGuards.test.ts:90"}, "properties": {"repobilityId": "023f27d6ac79d1eb", "scanner": "scanner-primary", "fingerprint": "32da1d50b97546ed", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-39f9b5b7b2cd86c5", "level": "none", "message": {"text": "Commented-code block (8 lines) in convex/__tests__/magicLinkAuth.test.ts:13"}, "properties": {"repobilityId": "25f918c07330c9d9", "scanner": "scanner-primary", "fingerprint": "39f9b5b7b2cd86c5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-08c63430381aa108", "level": "none", "message": {"text": "Commented-code block (5 lines) in convex/__tests__/mcp.test.ts:13"}, "properties": {"repobilityId": "4ca3f62df6ebb690", "scanner": "scanner-primary", "fingerprint": "08c63430381aa108", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-510553ef19bcedd3", "level": "none", "message": {"text": "Commented-code block (5 lines) in convex/__tests__/devLoginSeed.test.ts:12"}, "properties": {"repobilityId": "3656bdbcf814948e", "scanner": "scanner-primary", "fingerprint": "510553ef19bcedd3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-240b84fd3c5fdadd", "level": "none", "message": {"text": "Commented-code block (5 lines) in convex/__tests__/projectAccess.test.ts:1"}, "properties": {"repobilityId": "b8e42fc077dddaf1", "scanner": "scanner-primary", "fingerprint": "240b84fd3c5fdadd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fb5994b5b135bd80", "level": "none", "message": {"text": "Commented-code block (6 lines) in convex/__tests__/guardianshipGates.test.ts:13"}, "properties": {"repobilityId": "967b2fe5af6a0562", "scanner": "scanner-primary", "fingerprint": "fb5994b5b135bd80", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-958ff218a767b648", "level": "none", "message": {"text": "Commented-code block (5 lines) in convex/__tests__/scholarReadTools.test.ts:1"}, "properties": {"repobilityId": "44f1630478a5cbff", "scanner": "scanner-primary", "fingerprint": "958ff218a767b648", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-55711d8bf396cacd", "level": "none", "message": {"text": "Commented-code block (5 lines) in convex/__tests__/shareBack.test.ts:70"}, "properties": {"repobilityId": "3c9c64b63e4be3f3", "scanner": "scanner-primary", "fingerprint": "55711d8bf396cacd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d092bca76521b1ea", "level": "none", "message": {"text": "Commented-code block (10 lines) in convex/__tests__/streamPlaceholders.test.ts:7"}, "properties": {"repobilityId": "e1fab961034de64d", "scanner": "scanner-primary", "fingerprint": "d092bca76521b1ea", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5e911faf842811bd", "level": "note", "message": {"text": "Legacy-named symbol `EvOld` in convex/__tests__/slackBot.test.ts:788"}, "properties": {"repobilityId": "32b19e9dabc3483e", "scanner": "scanner-primary", "fingerprint": "5e911faf842811bd", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-365212a63e4c7996", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 convex/__tests__/slackBot.test.ts:52"}, "properties": {"repobilityId": "b36e0ce5af250a8a", "scanner": "scanner-primary", "fingerprint": "365212a63e4c7996", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-09a192ebbc96a6ca", "level": "none", "message": {"text": "Commented-code block (8 lines) in convex/lib/scholarReadTools.ts:3"}, "properties": {"repobilityId": "9aaf10a1453b0a2b", "scanner": "scanner-primary", "fingerprint": "09a192ebbc96a6ca", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-59b5cc42087e612a", "level": "none", "message": {"text": "Commented-code block (7 lines) in convex/lib/botTools.ts:4"}, "properties": {"repobilityId": "c1a5d3afa43231a5", "scanner": "scanner-primary", "fingerprint": "59b5cc42087e612a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-671dbb9d67e4c6eb", "level": "none", "message": {"text": "Commented-code block (5 lines) in convex/lib/scholarReads.ts:10"}, "properties": {"repobilityId": "7be1cfab5acdbd9c", "scanner": "scanner-primary", "fingerprint": "671dbb9d67e4c6eb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-dbc02e39cc2af940", "level": "none", "message": {"text": "Commented-code block (8 lines) in convex/lib/deliverable.ts:27"}, "properties": {"repobilityId": "3085062938f84c44", "scanner": "scanner-primary", "fingerprint": "dbc02e39cc2af940", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-37feeff7676d540d", "level": "none", "message": {"text": "Commented-code block (5 lines) in convex/lib/slackTools.ts:5"}, "properties": {"repobilityId": "8761856f8489b3df", "scanner": "scanner-primary", "fingerprint": "37feeff7676d540d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b3562f3c0b819e48", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 convex/lib/gemini.ts:32"}, "properties": {"repobilityId": "623a0e0a5ad87c44", "scanner": "scanner-primary", "fingerprint": "b3562f3c0b819e48", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f43c92e146334145", "level": "none", "message": {"text": "Commented-code block (6 lines) in convex/lib/scholarMatch.ts:3"}, "properties": {"repobilityId": "6b6ace9ad3a856cd", "scanner": "scanner-primary", "fingerprint": "f43c92e146334145", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8be584b17a2a7d19", "level": "none", "message": {"text": "Commented-code block (11 lines) in convex/lib/aideStream.ts:3"}, "properties": {"repobilityId": "5491212f77a84da0", "scanner": "scanner-primary", "fingerprint": "8be584b17a2a7d19", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ccaeebbed4918b09", "level": "none", "message": {"text": "Commented-code block (6 lines) in convex/lib/thumbnail.ts:3"}, "properties": {"repobilityId": "13f2cdca1082f420", "scanner": "scanner-primary", "fingerprint": "ccaeebbed4918b09", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-aadb17064a28888b", "level": "none", "message": {"text": "Commented-code block (5 lines) in convex/lib/slackApi.ts:10"}, "properties": {"repobilityId": "98443a6d4808f5ee", "scanner": "scanner-primary", "fingerprint": "aadb17064a28888b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0afb9ded651fc96c", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 convex/lib/slackApi.ts:28"}, "properties": {"repobilityId": "386725a2a238491e", "scanner": "scanner-primary", "fingerprint": "0afb9ded651fc96c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-691595485bb65471", "level": "none", "message": {"text": "Commented-code block (5 lines) in convex/lib/unitDesignerTools.ts:3"}, "properties": {"repobilityId": "da4885541f231b80", "scanner": "scanner-primary", "fingerprint": "691595485bb65471", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b09f448622cd9645", "level": "none", "message": {"text": "Commented-code block (6 lines) in convex/lib/scholarReadPolicy.ts:4"}, "properties": {"repobilityId": "7aea875b63b84df1", "scanner": "scanner-primary", "fingerprint": "b09f448622cd9645", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d30947c931e7b5af", "level": "none", "message": {"text": "Commented-code block (6 lines) in convex/lib/pdfSegments.ts:3"}, "properties": {"repobilityId": "a6d81348004c874a", "scanner": "scanner-primary", "fingerprint": "d30947c931e7b5af", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-aed7f78eb614c07d", "level": "none", "message": {"text": "Commented-code block (5 lines) in convex/lib/ingestMimes.ts:1"}, "properties": {"repobilityId": "a90a4c37a89038ed", "scanner": "scanner-primary", "fingerprint": "aed7f78eb614c07d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b05e6045a3f13a15", "level": "none", "message": {"text": "Commented-code block (5 lines) in convex/lib/slackSignature.ts:3"}, "properties": {"repobilityId": "a90ab3b6bec0d51b", "scanner": "scanner-primary", "fingerprint": "b05e6045a3f13a15", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b1c68e45dc3c5581", "level": "none", "message": {"text": "Commented-code block (6 lines) in convex/lib/aideTools.ts:3"}, "properties": {"repobilityId": "b87b106c77f3656a", "scanner": "scanner-primary", "fingerprint": "b1c68e45dc3c5581", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f0d4b29f6d32c845", "level": "none", "message": {"text": "Commented-code block (7 lines) in convex/lib/portfolioStatus.ts:1"}, "properties": {"repobilityId": "57a0c2a18ebfc989", "scanner": "scanner-primary", "fingerprint": "f0d4b29f6d32c845", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3b389a3b1094da21", "level": "none", "message": {"text": "Commented-code block (7 lines) in convex/lib/channels.ts:6"}, "properties": {"repobilityId": "4543505253cc230c", "scanner": "scanner-primary", "fingerprint": "3b389a3b1094da21", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-49be239eba8d0cfb", "level": "none", "message": {"text": "Commented-code block (7 lines) in convex/lib/slackTranscript.ts:3"}, "properties": {"repobilityId": "c96b78b089b4daca", "scanner": "scanner-primary", "fingerprint": "49be239eba8d0cfb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b0a92d058bad4f4b", "level": "none", "message": {"text": "Commented-code block (5 lines) in convex/lib/google.ts:3"}, "properties": {"repobilityId": "8469d83fda00865c", "scanner": "scanner-primary", "fingerprint": "b0a92d058bad4f4b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4591b4217275cfe5", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 convex/lib/google.ts:87"}, "properties": {"repobilityId": "5343a415c975a17b", "scanner": "scanner-primary", "fingerprint": "4591b4217275cfe5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-267327fae200932a", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/setup-passkey/page.tsx:85"}, "properties": {"repobilityId": "bce84f7862df3d91", "scanner": "scanner-primary", "fingerprint": "267327fae200932a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-09b0101622b40128", "level": "none", "message": {"text": "Commented-code block (10 lines) in app/api/mcp/route.ts:3"}, "properties": {"repobilityId": "5d90adf65f550551", "scanner": "scanner-primary", "fingerprint": "09b0101622b40128", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-41371350529f9255", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/api/drive/webhook/route.ts:3"}, "properties": {"repobilityId": "207ee06bba1478e8", "scanner": "scanner-primary", "fingerprint": "41371350529f9255", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-80f7106edad938c8", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/api/oauth/token/route.ts:7"}, "properties": {"repobilityId": "5bd92f0232f4d322", "scanner": "scanner-primary", "fingerprint": "80f7106edad938c8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d712c62ce9441c78", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/api/oauth/register/route.ts:1"}, "properties": {"repobilityId": "8184be4b7aa07194", "scanner": "scanner-primary", "fingerprint": "d712c62ce9441c78", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-41af60009d5af52a", "level": "none", "message": {"text": "Commented-code block (7 lines) in app/dev-web-assignment/page.tsx:7"}, "properties": {"repobilityId": "89982e7e4c9aa5a8", "scanner": "scanner-primary", "fingerprint": "41af60009d5af52a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b022ef210d6a5bd4", "level": "none", "message": {"text": "Commented-code block (8 lines) in app/oauth/authorize/page.tsx:3"}, "properties": {"repobilityId": "63e291a531feabe0", "scanner": "scanner-primary", "fingerprint": "b022ef210d6a5bd4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e448fa5e42d82a86", "level": "none", "message": {"text": "Commented-code block (8 lines) in app/scholar/page.tsx:111"}, "properties": {"repobilityId": "87eb63271d903f57", "scanner": "scanner-primary", "fingerprint": "e448fa5e42d82a86", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b73985c524ebbd3a", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/scholar/[projectId]/page.tsx:166"}, "properties": {"repobilityId": "93195d2d83c43a6b", "scanner": "scanner-primary", "fingerprint": "b73985c524ebbd3a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-488e8d270998bd71", "level": "none", "message": {"text": "Commented-code block (7 lines) in app/dev-login/page.tsx:5"}, "properties": {"repobilityId": "0c56426dcb9bc129", "scanner": "scanner-primary", "fingerprint": "488e8d270998bd71", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8df123ac25a7a1b8", "level": "none", "message": {"text": "Commented-code block (10 lines) in app/teacher/TeacherDashboard.tsx:197"}, "properties": {"repobilityId": "87bcb67c5d831f0f", "scanner": "scanner-primary", "fingerprint": "8df123ac25a7a1b8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-558980617ceddf48", "level": "none", "message": {"text": "Commented-code block (5 lines) in lib/convexUrls.ts:3"}, "properties": {"repobilityId": "add5b7cda31bf95c", "scanner": "scanner-primary", "fingerprint": "558980617ceddf48", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7e8aaf7f5400867e", "level": "none", "message": {"text": "Commented-code block (6 lines) in lib/curriculumBotPrompts.ts:1"}, "properties": {"repobilityId": "945e7255555ad748", "scanner": "scanner-primary", "fingerprint": "7e8aaf7f5400867e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a832e4d0e7340c53", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 hooks/useWebAssignment.ts:93"}, "properties": {"repobilityId": "9658bd6c82ee5e57", "scanner": "scanner-primary", "fingerprint": "a832e4d0e7340c53", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-94cf891ee75b5102", "level": "none", "message": {"text": "Commented-code block (8 lines) in evals/tutor-quality/run.ts:136"}, "properties": {"repobilityId": "91c7f16dfc075324", "scanner": "scanner-primary", "fingerprint": "94cf891ee75b5102", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}]}]}