{"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-22806a8d76109e8d", "name": "Stray `console.log` in TS/JS \u2014 scripts/probe-violations.ts:14", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/probe-violations.ts:14"}, "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-c76aec25913c1297", "name": "Stray `console.log` in TS/JS \u2014 scripts/probe-clients.ts:17", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/probe-clients.ts:17"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f64b886406e6add7", "name": "Stray `console.log` in TS/JS \u2014 scripts/probe-report-failure.ts:16", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/probe-report-failure.ts:16"}, "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-36b4fa4ad4e5e2d9", "name": "Stray `console.log` in TS/JS \u2014 scripts/probe-sankey-variants.ts:18", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/probe-sankey-variants.ts:18"}, "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-e930a211344fe6f1", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/page.tsx:560", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/page.tsx:560"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-df0721d79628fa9e", "name": "Stray `console.log` in TS/JS \u2014 src/app/page.tsx:52", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/page.tsx:52"}, "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-9665205b52442036", "name": "TODO/FIXME marker in shipping code \u2014 src/app/dashboard/metrics/certificates/page.tsx:185", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/app/dashboard/metrics/certificates/page.tsx:185"}, "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-4f6a2f156f780bcf", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/clients/page.tsx:662", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/clients/page.tsx:662"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fbb68abbee3e478f", "name": "TODO/FIXME marker in shipping code \u2014 src/app/cupping/page.tsx:1018", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/app/cupping/page.tsx:1018"}, "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-f3fe6f3aff7d5d25", "name": "Stray `console.log` in TS/JS \u2014 src/app/cupping/page.tsx:245", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/cupping/page.tsx:245"}, "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-7fa7eb9f0fec68c5", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/cupping/ocr/process-card/route.ts:43", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/cupping/ocr/process-card/route.ts:43"}, "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-ce2db3920390d6ea", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/cupping/scores/[id]/route.ts:145", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/cupping/scores/[id]/route.ts:145"}, "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-e595dfe92a6956fc", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/cupping/scores/save-digital/route.ts:49", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/cupping/scores/save-digital/route.ts:49"}, "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-c7e6b793763c562d", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/cupping/scores/submit/route.ts:63", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/cupping/scores/submit/route.ts:63"}, "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-b9900b89e50df786", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/cupping/scores/aggregate/route.ts:239", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/cupping/scores/aggregate/route.ts:239"}, "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-b1f93357fe00c292", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/cupping/validate/route.ts:124", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/cupping/validate/route.ts:124"}, "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-7517b89ebc5347c4", "name": "TODO/FIXME marker in shipping code \u2014 src/app/api/contracts/search/route.ts:69", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/app/api/contracts/search/route.ts:69"}, "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-dbcd75e6474ed39a", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/users/invite/route.ts:247", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/users/invite/route.ts:247"}, "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-380af9bf9386c3a8", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/users/invite/resend/route.ts:258", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/users/invite/resend/route.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-69ae14764f93c49e", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/auth/azure-signin/route.ts:18", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/auth/azure-signin/route.ts:18"}, "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-f7f88efce29c880d", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/notifications/samples-assigned/route.ts:40", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/notifications/samples-assigned/route.ts:40"}, "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-92631a089ff928e0", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/laboratories/[id]/route.ts:156", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/laboratories/[id]/route.ts:156"}, "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-237209791a10b68d", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/laboratories/[id]/shelves/route.ts:80", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/laboratories/[id]/shelves/route.ts:80"}, "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-596762e3102ccaed", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/laboratories/[id]/personnel/route.ts:59", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/laboratories/[id]/personnel/route.ts:59"}, "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-f73d09f9a1565073", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/profiles/ensure/route.ts:50", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/profiles/ensure/route.ts:50"}, "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-11d4992c6c27f33a", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/samples/route.ts:374", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/samples/route.ts:374"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-13508fd7f71ddfce", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/samples/[id]/duplicate/route.ts:162", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/samples/[id]/duplicate/route.ts:162"}, "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-5035e8b68ab3ee6c", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/samples/[id]/cupping-score/route.ts:76", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/samples/[id]/cupping-score/route.ts:76"}, "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-f9ef7caf267050ff", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/samples/[id]/quality-assessment/route.ts:307", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/samples/[id]/quality-assessment/route.ts:307"}, "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-72f63bc3f7a1e0d3", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/samples/[id]/certificate/route.ts:32", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/samples/[id]/certificate/route.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-697b2e7066619ba7", "name": "TODO/FIXME marker in shipping code \u2014 src/app/api/samples/bulk/export/route.ts:73", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/app/api/samples/bulk/export/route.ts:73"}, "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-d95d326b0e520200", "name": "TODO/FIXME marker in shipping code \u2014 src/app/api/samples/bulk/print-qr-table/route.ts:47", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/app/api/samples/bulk/print-qr-table/route.ts:47"}, "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-33a816136624e7b1", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/samples/bulk/move-to-cupping/route.ts:49", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/samples/bulk/move-to-cupping/route.ts:49"}, "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-20c28aec494068ff", "name": "TODO/FIXME marker in shipping code \u2014 src/app/api/samples/bulk/assign/route.ts:53", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/app/api/samples/bulk/assign/route.ts:53"}, "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-6ab6b3abefb230bd", "name": "Stray `console.log` in TS/JS \u2014 src/app/grading/page.tsx:610", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/grading/page.tsx:610"}, "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-2ba3c5447c9b5474", "name": "Stray `console.log` in TS/JS \u2014 src/app/auth/callback/route.ts:17", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/auth/callback/route.ts:17"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b8f0934bb6d5df4c", "name": "Stray `console.log` in TS/JS \u2014 src/app/test/client-search/page.tsx:141", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/test/client-search/page.tsx:141"}, "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-e4345736a2d8c382", "name": "Stray `console.log` in TS/JS \u2014 src/app/test/client-auto-detection/page.tsx:242", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/test/client-auto-detection/page.tsx:242"}, "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-efa12a59bfaf81ee", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/laboratories/page_ENHANCED.tsx:922", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/laboratories/page_ENHANCED.tsx:922"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-346c5d6aa15cff52", "name": "Stray `console.log` in TS/JS \u2014 src/app/laboratories/page.tsx:491", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/laboratories/page.tsx:491"}, "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-0ac2817f790ad683", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/laboratories/page_BACKUP.tsx:739", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/laboratories/page_BACKUP.tsx:739"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-85e9835b7516372e", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/samples/qc/page.tsx:1458", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/samples/qc/page.tsx:1458"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e7058980abe4bf19", "name": "TODO/FIXME marker in shipping code \u2014 src/app/samples/qc/page.tsx:527", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/app/samples/qc/page.tsx:527"}, "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-3933f45bbf9b3ba4", "name": "Stray `console.log` in TS/JS \u2014 src/app/samples/qc/page.tsx:526", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/samples/qc/page.tsx:526"}, "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-832407ff5e886bd0", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/quality/templates/page.tsx:452", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/quality/templates/page.tsx:452"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-65eba1cbe71be7e8", "name": "TODO/FIXME marker in shipping code \u2014 src/app/quality/templates/page.tsx:603", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/app/quality/templates/page.tsx:603"}, "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-c92c6f92bd991cc8", "name": "Stray `console.log` in TS/JS \u2014 src/hooks/use-notifications.ts:154", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/hooks/use-notifications.ts:154"}, "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-fe0f2aab3a0324be", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/clients/client-detail-view.tsx:650", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/clients/client-detail-view.tsx:650"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4e70084a539a297a", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/clients/add-client-modal.tsx:373", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/clients/add-client-modal.tsx:373"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-371f5a27b5cd4f56", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/clients/client-search-dialog.tsx:184", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/clients/client-search-dialog.tsx:184"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a03f04eeb8c3f123", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/clients/client-auto-detection.tsx:427", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/clients/client-auto-detection.tsx:427"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ed057df300ef4899", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/clients/client-quality-manager.tsx:115", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/clients/client-quality-manager.tsx:115"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e2a3020483632b47", "name": "Stray `console.log` in TS/JS \u2014 src/components/cupping/print-cupping-cards-dialog.tsx:151", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/components/cupping/print-cupping-cards-dialog.tsx:151"}, "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-f1b149a1ba55a72e", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/cupping/scan-cupping-cards-dialog.tsx:619", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/cupping/scan-cupping-cards-dialog.tsx:619"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4ff229b9ce9e9512", "name": "Stray `console.log` in TS/JS \u2014 src/components/cupping/cupping-validation-modal.tsx:303", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/components/cupping/cupping-validation-modal.tsx:303"}, "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-650a131b984e4c8c", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/cupping/ocr-validation-dialog.tsx:368", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/cupping/ocr-validation-dialog.tsx:368"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-727e60154893c1a0", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/cupping/cva/CvaJourney.tsx:241", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/cupping/cva/CvaJourney.tsx:241"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-bd8442919198d7c6", "name": "Stray `console.log` in TS/JS \u2014 src/components/quality-assignments/quality-assignment-dialog.tsx:136", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/components/quality-assignments/quality-assignment-dialog.tsx:136"}, "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-84fc66f2d87e62c1", "name": "Stray `console.log` in TS/JS \u2014 src/components/providers/auth-provider.tsx:92", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/components/providers/auth-provider.tsx:92"}, "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-61ef146bd0bb1cbb", "name": "Stray `console.log` in TS/JS \u2014 src/components/admin/access-requests-manager.tsx:102", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/components/admin/access-requests-manager.tsx:102"}, "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-7107572efcf7fa90", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/layout/left-sidebar.tsx:477", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/layout/left-sidebar.tsx:477"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a4c48ab57fa37b58", "name": "TODO/FIXME marker in shipping code \u2014 src/components/layout/header.tsx:32", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/components/layout/header.tsx:32"}, "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-b9ea998a5c0d9430", "name": "Stray `console.log` in TS/JS \u2014 src/components/layout/header.tsx:33", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/components/layout/header.tsx:33"}, "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-f748f1fe71dcb1a0", "name": "TODO/FIXME marker in shipping code \u2014 src/components/metrics/supply-chain-sankey.tsx:303", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/components/metrics/supply-chain-sankey.tsx:303"}, "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-361a79aa2925e7b3", "name": "TODO/FIXME marker in shipping code \u2014 src/components/storage/shelf-detail-dialog.tsx:175", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/components/storage/shelf-detail-dialog.tsx:175"}, "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-9aec74e9fe3db0b6", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/storage/storage-layout-view.tsx:498", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/storage/storage-layout-view.tsx:498"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2a066dcd6af082d6", "name": "Stray `console.log` in TS/JS \u2014 src/components/storage/storage-layout-view.tsx:166", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/components/storage/storage-layout-view.tsx:166"}, "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-60491dc2fafb2343", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/samples/add-sub-contract-dialog.tsx:410", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/samples/add-sub-contract-dialog.tsx:410"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-15b24fb8d70f6442", "name": "Stray `console.log` in TS/JS \u2014 src/components/samples/sample-intake-form.tsx:138", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/components/samples/sample-intake-form.tsx:138"}, "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-6d7f7a4bca61ba11", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/samples/cupping-grading-section.tsx:819", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/samples/cupping-grading-section.tsx:819"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7c749588bb17e87a", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/samples/other-sample-recipients-panel.tsx:156", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/samples/other-sample-recipients-panel.tsx:156"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-aaf758e863f4e87e", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/samples/intake/other-sample-details-step.tsx:168", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/samples/intake/other-sample-details-step.tsx:168"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ee63501f79ffe93a", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/samples/intake/sub-contract-card.tsx:248", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/samples/intake/sub-contract-card.tsx:248"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-089f7836055763a8", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/samples/intake/contracts-step.tsx:298", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/samples/intake/contracts-step.tsx:298"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8ba5c69ac49bd01a", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/samples/intake/other-sample-intake.tsx:679", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/samples/intake/other-sample-intake.tsx:679"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cbe9091d83695921", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/samples/intake/contract-search-step.tsx:238", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/samples/intake/contract-search-step.tsx:238"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0b6f685ccb8187c9", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/samples/intake/contract-link-badge.tsx:42", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/samples/intake/contract-link-badge.tsx:42"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-764ce425aa753c85", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/samples/intake/quality-step.tsx:359", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/samples/intake/quality-step.tsx:359"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1ce9b8f8635bbf92", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/samples/intake/sample-details-step.tsx:44", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/samples/intake/sample-details-step.tsx:44"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5402cd79b4e4831f", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/quality/template-builder.tsx:1002", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/quality/template-builder.tsx:1002"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8272cb73e0d3f3d0", "name": "Stray `console.log` in TS/JS \u2014 src/components/quality/template-builder.tsx:211", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/components/quality/template-builder.tsx:211"}, "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-4eb2f05adb9efe66", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/quality/spec-editor/quality-spec-editor.tsx:262", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/quality/spec-editor/quality-spec-editor.tsx:262"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-49ee803023712303", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/quality/spec-editor/sections/cupping-section.tsx:188", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/quality/spec-editor/sections/cupping-section.tsx:188"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b0ac743186a02044", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/ui/searchable-select.tsx:77", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/ui/searchable-select.tsx:77"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a1df4a9e79437a3d", "name": "Stray `console.log` in TS/JS \u2014 src/lib/compliance.ts:82", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/compliance.ts:82"}, "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-62979c32ff3f49f4", "name": "Stray `console.log` in TS/JS \u2014 src/lib/azure-ad.ts:75", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/azure-ad.ts:75"}, "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-7bdd000aaba5e5f4", "name": "Stray `console.log` in TS/JS \u2014 src/lib/certificate-data.ts:699", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/certificate-data.ts:699"}, "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-afbd9d95cda8db77", "name": "Insecure pattern 'direct_innerhtml_assignment' in clear-local-auth.html:211", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in clear-local-auth.html:211"}, "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-2a98841e4a8fc336", "name": "Insecure pattern 'direct_innerhtml_assignment' in docs/prompts/qc-detail-config-redesign.html:295", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in docs/prompts/qc-detail-config-redesign.html:295"}, "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-6215601612dbfd34", "name": "Insecure pattern 'direct_innerhtml_assignment' in docs/prompts/cleint-editing/qc-client-edit-v2.html:207", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in docs/prompts/cleint-editing/qc-client-edit-v2.html:207"}, "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-b4bceb37abade2a7", "name": "Insecure pattern 'direct_innerhtml_assignment' in docs/superpowers/specs/prototypes/cva-cupping-prototype.html:787", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in docs/superpowers/specs/prototypes/cva-cupping-prototype.html:787"}, "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-9fa29dc2b7845aa7", "name": "Insecure pattern 'direct_outerhtml_assignment' in docs/superpowers/specs/prototypes/cva-cupping-prototype.html:1791", "shortDescription": {"text": "Insecure pattern 'direct_outerhtml_assignment' in docs/superpowers/specs/prototypes/cva-cupping-prototype.html:1791"}, "fullDescription": {"text": "Found a known-risky pattern (direct_outerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-cb6b3fc8fbba28a0", "name": "Insecure pattern 'direct_innerhtml_assignment' in docs/superpowers/specs/prototypes/cva-flavor-wheel-prototype.html:328", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in docs/superpowers/specs/prototypes/cva-flavor-wheel-prototype.html:328"}, "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-252bdd48e0bc36f8", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-aff8ea26818830e5", "name": "Very large file: src/app/cupping/page.tsx (2258 lines)", "shortDescription": {"text": "Very large file: src/app/cupping/page.tsx (2258 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-1b1c7a131469b946", "name": "Very large file: src/app/grading/page.tsx (1671 lines)", "shortDescription": {"text": "Very large file: src/app/grading/page.tsx (1671 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-e88f89463c5c1b0a", "name": "Very large file: src/app/laboratories/page.tsx (1990 lines)", "shortDescription": {"text": "Very large file: src/app/laboratories/page.tsx (1990 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-1f8ac9db1cfad8f3", "name": "Very large file: src/app/samples/qc/page.tsx (2240 lines)", "shortDescription": {"text": "Very large file: src/app/samples/qc/page.tsx (2240 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-c7f348b6dc3a34f8", "name": "Very large file: src/components/clients/client-form.tsx (1868 lines)", "shortDescription": {"text": "Very large file: src/components/clients/client-form.tsx (1868 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-41a058e069609eca", "name": "Very large file: src/components/cupping/cupping-validation-modal.tsx (1383 lines)", "shortDescription": {"text": "Very large file: src/components/cupping/cupping-validation-modal.tsx (1383 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-04f677c30990cac5", "name": "Very large file: src/components/samples/sample-detail-modal.tsx (1383 lines)", "shortDescription": {"text": "Very large file: src/components/samples/sample-detail-modal.tsx (1383 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-58bac7348ad0699e", "name": "Very large file: src/components/quality/template-builder.tsx (2083 lines)", "shortDescription": {"text": "Very large file: src/components/quality/template-builder.tsx (2083 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-7f46c1a5c346aff1", "name": "Very large file: src/lib/certificate-data.ts (1591 lines)", "shortDescription": {"text": "Very large file: src/lib/certificate-data.ts (1591 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-0a0222e4722eadbd", "name": "Very large file: src/lib/database.types.ts (20283 lines)", "shortDescription": {"text": "Very large file: src/lib/database.types.ts (20283 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6893a6c8b0861585", "name": "Very low test-to-source ratio", "shortDescription": {"text": "Very low test-to-source ratio"}, "fullDescription": {"text": "31 test file(s) for 412 source file(s) (ratio 0.08). Consider adding integration or unit tests for critical paths."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-141b30a41e03817b", "name": "No license file detected", "shortDescription": {"text": "No license file detected"}, "fullDescription": {"text": "No LICENSE/COPYING/NOTICE file was found. Generated repositories often omit licensing, which blocks reuse and automated intake."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3ab5d313dda8e5f9", "name": "Debug logging residue appears in source files", "shortDescription": {"text": "Debug logging residue appears in source files"}, "fullDescription": {"text": "Found 264 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 484 placeholder/mock markers across 93 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-749d4bc1bd66df5f", "name": "Agent instructions exist but release-hardening basics are missing", "shortDescription": {"text": "Agent instructions exist but release-hardening basics are missing"}, "fullDescription": {"text": "AI-coder instruction files were found, but the repo is missing license. Treat this as a contract gap: the agent is guided, but the generated output is not yet guarded by the controls that make it repeatable."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-cbb5857940ba0dc2", "name": "Agent instruction/config may expose a secret: AGENTS.md", "shortDescription": {"text": "Agent instruction/config may expose a secret: AGENTS.md"}, "fullDescription": {"text": "Agent-facing files are routinely pasted into LLM/tool contexts. Move literal tokens, keys, and passwords into a secret manager or document them as placeholders only."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-cc55229a7a3c078d", "name": "Agent authority lacks a verifier contract: .mcp.json", "shortDescription": {"text": "Agent authority lacks a verifier contract: .mcp.json"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c104b36c9c323475", "name": "Agent instruction/config may expose a secret: GEMINI.md", "shortDescription": {"text": "Agent instruction/config may expose a secret: GEMINI.md"}, "fullDescription": {"text": "Agent-facing files are routinely pasted into LLM/tool contexts. Move literal tokens, keys, and passwords into a secret manager or document them as placeholders only."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-250106da925d01d9", "name": "Agent instruction contains unpinned remote install: .github/instructions/dev_workflow.instructions.md", "shortDescription": {"text": "Agent instruction contains unpinned remote install: .github/instructions/dev_workflow.instructions.md"}, "fullDescription": {"text": "Remote install commands in agent instructions are a supply-chain risk, especially when an agent can execute shell commands."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a40e5b458ed97bfd", "name": "Agent instruction/config may expose a secret: .github/instructions/taskmaster.instructions.md", "shortDescription": {"text": "Agent instruction/config may expose a secret: .github/instructions/taskmaster.instructions.md"}, "fullDescription": {"text": "Agent-facing files are routinely pasted into LLM/tool contexts. Move literal tokens, keys, and passwords into a secret manager or document them as placeholders only."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1bd0c17b30417b2f", "name": "Agent authority lacks a verifier contract: .cursor/mcp.json", "shortDescription": {"text": "Agent authority lacks a verifier contract: .cursor/mcp.json"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-92d71f744066c6b5", "name": "Agent instruction contains unpinned remote install: .cursor/rules/taskmaster/dev_workflow.mdc", "shortDescription": {"text": "Agent instruction contains unpinned remote install: .cursor/rules/taskmaster/dev_workflow.mdc"}, "fullDescription": {"text": "Remote install commands in agent instructions are a supply-chain risk, especially when an agent can execute shell commands."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-09fd7ebb1d3259f0", "name": "Agent instruction/config may expose a secret: .cursor/rules/taskmaster/taskmaster.mdc", "shortDescription": {"text": "Agent instruction/config may expose a secret: .cursor/rules/taskmaster/taskmaster.mdc"}, "fullDescription": {"text": "Agent-facing files are routinely pasted into LLM/tool contexts. Move literal tokens, keys, and passwords into a secret manager or document them as placeholders only."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-76add2af6c4d136a", "name": "Agent authority lacks a verifier contract: .windsurf/mcp.json", "shortDescription": {"text": "Agent authority lacks a verifier contract: .windsurf/mcp.json"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-74edea6aab85ec9f", "name": "Agent instruction/config may expose a secret: .windsurf/rules/taskmaster.md", "shortDescription": {"text": "Agent instruction/config may expose a secret: .windsurf/rules/taskmaster.md"}, "fullDescription": {"text": "Agent-facing files are routinely pasted into LLM/tool contexts. Move literal tokens, keys, and passwords into a secret manager or document them as placeholders only."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9d79aaf61e7600db", "name": "Agent instruction contains unpinned remote install: .windsurf/rules/dev_workflow.md", "shortDescription": {"text": "Agent instruction contains unpinned remote install: .windsurf/rules/dev_workflow.md"}, "fullDescription": {"text": "Remote install commands in agent instructions are a supply-chain risk, especially when an agent can execute shell commands."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b1af3029c212b277", "name": "Agent authority lacks a verifier contract: .claude/TM_COMMANDS_GUIDE.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/TM_COMMANDS_GUIDE.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-16b6f9befa21caef", "name": "Agent instruction/config may expose a secret: .claude/agents/task-checker.md", "shortDescription": {"text": "Agent instruction/config may expose a secret: .claude/agents/task-checker.md"}, "fullDescription": {"text": "Agent-facing files are routinely pasted into LLM/tool contexts. Move literal tokens, keys, and passwords into a secret manager or document them as placeholders only."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3b1da2a18b7d9c13", "name": "Agent authority lacks a verifier contract: .claude/agents/task-checker.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/agents/task-checker.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9cb7a796a4361697", "name": "Agent authority lacks a verifier contract: .claude/commands/tm/help.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/commands/tm/help.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a5e86ca6b6a9837f", "name": "Agent authority lacks a verifier contract: .claude/commands/tm/learn.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/commands/tm/learn.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-1573b86895f46c28", "name": "Agent authority lacks a verifier contract: .claude/commands/tm/tm-main.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/commands/tm/tm-main.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0c866a052f5e7a88", "name": "Agent authority lacks a verifier contract: .claude/commands/tm/next/next-task.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/commands/tm/next/next-task.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-39e333227f278961", "name": "Agent instruction contains unpinned remote install: .claude/commands/tm/setup/quick-install-taskmaster.md", "shortDescription": {"text": "Agent instruction contains unpinned remote install: .claude/commands/tm/setup/quick-install-taskmaster.md"}, "fullDescription": {"text": "Remote install commands in agent instructions are a supply-chain risk, especially when an agent can execute shell commands."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d7517ff8eab9acdf", "name": "Agent instruction contains unpinned remote install: .claude/commands/tm/setup/install-taskmaster.md", "shortDescription": {"text": "Agent instruction contains unpinned remote install: .claude/commands/tm/setup/install-taskmaster.md"}, "fullDescription": {"text": "Remote install commands in agent instructions are a supply-chain risk, especially when an agent can execute shell commands."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-561080bd3af6e9d6", "name": "Agent authority lacks a verifier contract: .claude/commands/tm/init/init-project-quick.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/commands/tm/init/init-project-quick.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-1a851256fc6ece5b", "name": "Agent authority lacks a verifier contract: .claude/commands/tm/expand/expand-all-tasks.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/commands/tm/expand/expand-all-tasks.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a983a59229a59777", "name": "Agent authority lacks a verifier contract: .claude/commands/tm/clear-subtasks/clear-subtasks.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/commands/tm/clear-subtasks/clear-subtasks.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0519baa4db4f32fb", "name": "Agent authority lacks a verifier contract: .claude/commands/tm/models/view-models.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/commands/tm/models/view-models.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c5ecc4e47c4b2d33", "name": "Agent authority lacks a verifier contract: .claude/commands/tm/remove-subtasks/remove-subtasks.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/commands/tm/remove-subtasks/remove-subtasks.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d1b567cf97318e61", "name": "Agent authority lacks a verifier contract: .claude/commands/tm/workflows/command-pipeline.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/commands/tm/workflows/command-pipeline.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6128831a0951311a", "name": "Agent authority lacks a verifier contract: .claude/commands/tm/workflows/smart-workflow.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/commands/tm/workflows/smart-workflow.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6e9fbf64b0005866", "name": "Agent authority lacks a verifier contract: .claude/commands/tm/set-status/to-pending.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/commands/tm/set-status/to-pending.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9dd76887ff1f08b3", "name": "Agent authority lacks a verifier contract: .claude/commands/tm/set-status/to-deferred.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/commands/tm/set-status/to-deferred.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-33316b51a59182ed", "name": "Agent authority lacks a verifier contract: .claude/commands/tm/list/list-tasks.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/commands/tm/list/list-tasks.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-507070843374f910", "name": "Agent authority lacks a verifier contract: .claude/commands/tm/list/list-tasks-by-status.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/commands/tm/list/list-tasks-by-status.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-620653472b37dedb", "name": "Agent authority lacks a verifier contract: .claude/commands/tm/list/list-tasks-with-subtasks.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/commands/tm/list/list-tasks-with-subtasks.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-dcc1b739900459d2", "name": "Agent authority lacks a verifier contract: .claude/commands/tm/status/project-status.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/commands/tm/status/project-status.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-cb7e3094fbb5cc20", "name": "Agent authority lacks a verifier contract: .claude/commands/tm/sync-readme/sync-readme.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/commands/tm/sync-readme/sync-readme.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-12dff5e94510f06e", "name": "Agent authority lacks a verifier contract: .claude/commands/tm/analyze-complexity/analyze-complexity.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/commands/tm/analyze-complexity/analyze-complexity.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-92e60f784e8e5c67", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/clients/page.tsx:134", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/clients/page.tsx:134"}, "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-19d94c9a8b978229", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/finance/page.tsx:79", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/finance/page.tsx:79"}, "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-595eed6b80ac69b4", "name": "Legacy-named symbol `exporter_legacy` in src/app/cupping/page.tsx:51", "shortDescription": {"text": "Legacy-named symbol `exporter_legacy` in src/app/cupping/page.tsx:51"}, "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-799c54cf728ba776", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/cupping/page.tsx:503", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/cupping/page.tsx:503"}, "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-407e765241378a50", "name": "Commented-code block (8 lines) in src/app/api/clients/route.ts:16", "shortDescription": {"text": "Commented-code block (8 lines) in src/app/api/clients/route.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-25e1262fc712ba7f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/cupping/ocr/process-card/route.ts:155", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/cupping/ocr/process-card/route.ts:155"}, "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-231885a96e13a697", "name": "Commented-code block (5 lines) in src/app/api/cupping/scores/aggregate/route.ts:502", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/cupping/scores/aggregate/route.ts:502"}, "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-9b0e7b5fa070628b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/cupping/validate/route.ts:295", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/cupping/validate/route.ts:295"}, "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-7936fbdc43d937a0", "name": "Legacy-named symbol `exporter_legacy` in src/app/api/cupping/my-samples/route.ts:158", "shortDescription": {"text": "Legacy-named symbol `exporter_legacy` in src/app/api/cupping/my-samples/route.ts:158"}, "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-7e813c7b45a9fd8a", "name": "Commented-code block (5 lines) in src/app/api/notifications/samples-assigned/route.ts:181", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/notifications/samples-assigned/route.ts: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-4a9ae561b28faef0", "name": "Commented-code block (5 lines) in src/app/api/samples/route.ts:122", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/samples/route.ts:122"}, "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-0f2688cefb2be9a7", "name": "Commented-code block (5 lines) in src/app/api/samples/[id]/duplicate/route.ts:131", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/samples/[id]/duplicate/route.ts:131"}, "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-563a881f4d8a5a1c", "name": "Legacy-named symbol `exporter_legacy` in src/app/api/samples/bulk-details/route.ts:42", "shortDescription": {"text": "Legacy-named symbol `exporter_legacy` in src/app/api/samples/bulk-details/route.ts:42"}, "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-93ebf14ff4b7eb9c", "name": "Legacy-named symbol `exporter_legacy` in src/app/grading/page.tsx:62", "shortDescription": {"text": "Legacy-named symbol `exporter_legacy` in src/app/grading/page.tsx:62"}, "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-489b9631533f0876", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/grading/page.tsx:456", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/grading/page.tsx:456"}, "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-beb485d0360ce306", "name": "Legacy-named symbol `exporter_legacy` in src/app/sample-photo/[slug]/page.tsx:26", "shortDescription": {"text": "Legacy-named symbol `exporter_legacy` in src/app/sample-photo/[slug]/page.tsx:26"}, "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-c2e97bdd84de6d96", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/laboratories/page.tsx:493", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/laboratories/page.tsx:493"}, "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-fa6022d959008f27", "name": "Commented-code block (7 lines) in src/app/certificate/[slug]/page.tsx:94", "shortDescription": {"text": "Commented-code block (7 lines) in src/app/certificate/[slug]/page.tsx:94"}, "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-0dd153c126865e79", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/samples/other/page.tsx:81", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/samples/other/page.tsx:81"}, "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-d19f5852023d6c36", "name": "Commented-code block (5 lines) in src/app/samples/qc/page.tsx:962", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/samples/qc/page.tsx:962"}, "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-a46fc43f49e1214e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/samples/qc/page.tsx:319", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/samples/qc/page.tsx:319"}, "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-7bfec6142b0ff69e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/hooks/use-notifications.ts:55", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/hooks/use-notifications.ts:55"}, "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-86dab20da77b9d7f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/dashboard/dashboard-scan-dialog.tsx:170", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/dashboard/dashboard-scan-dialog.tsx:170"}, "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-ac4d91c0cf20c405", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/clients/client-detail-view.tsx:296", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/clients/client-detail-view.tsx:296"}, "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-2e4f63752d07c33b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/clients/client-lab-config.tsx:55", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/clients/client-lab-config.tsx:55"}, "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-8181bad50d8a4ab9", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/clients/bulk-operations-dialog.tsx:145", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/clients/bulk-operations-dialog.tsx:145"}, "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-d4671da74902ef10", "name": "Legacy-named symbol `searchLegacy` in src/components/clients/add-client-modal.tsx:105", "shortDescription": {"text": "Legacy-named symbol `searchLegacy` in src/components/clients/add-client-modal.tsx:105"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e78f1fa50f2d6cff", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/clients/add-client-modal.tsx:226", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/clients/add-client-modal.tsx:226"}, "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-c38a36083e07c356", "name": "Commented-code block (7 lines) in src/components/clients/client-form.tsx:21", "shortDescription": {"text": "Commented-code block (7 lines) in src/components/clients/client-form.tsx:21"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7787d3a6a24cb0ff", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/clients/client-form.tsx:667", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/clients/client-form.tsx:667"}, "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-d6cc40fdb0ddd3b2", "name": "Commented-code block (6 lines) in src/components/clients/client-quality-manager.tsx:377", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/clients/client-quality-manager.tsx: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-d7bd75890244cac2", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/clients/client-quality-manager.tsx:422", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/clients/client-quality-manager.tsx:422"}, "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-94e4a4554a6d2cfe", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/clients/qc-config-panel.tsx:122", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/clients/qc-config-panel.tsx:122"}, "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-15bbe1fda95c7b4f", "name": "Legacy-named symbol `exporter_legacy` in src/components/cupping/print-cupping-cards-dialog.tsx:50", "shortDescription": {"text": "Legacy-named symbol `exporter_legacy` in src/components/cupping/print-cupping-cards-dialog.tsx:50"}, "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-779894e32f37b669", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/cupping/cupping-reports.tsx:117", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/cupping/cupping-reports.tsx:117"}, "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-7dbaf0a09f3f5755", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/cupping/scan-cupping-cards-dialog.tsx:514", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/cupping/scan-cupping-cards-dialog.tsx:514"}, "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-cc8d47dbef0c4eab", "name": "Commented-code block (5 lines) in src/components/cupping/cupping-validation-modal.tsx:414", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/cupping/cupping-validation-modal.tsx:414"}, "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-a2b9d314dca9c9cd", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/cupping/cupping-validation-modal.tsx:181", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/cupping/cupping-validation-modal.tsx:181"}, "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-cb40661c39b458ad", "name": "Commented-code block (5 lines) in src/components/cupping/cva/wheel/zoom-machine.ts:26", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/cupping/cva/wheel/zoom-machine.ts:26"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e3e89c43a379d9ed", "name": "Commented-code block (5 lines) in src/components/cupping/cva/wheel/FlavorWheel.tsx:13", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/cupping/cva/wheel/FlavorWheel.tsx: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-2b3722cebd8424f8", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/quality-assignments/quality-assignment-dialog.tsx:153", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/quality-assignments/quality-assignment-dialog.tsx:153"}, "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-0519f1fd2c53dfba", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/admin/user-management-panel.tsx:328", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/admin/user-management-panel.tsx:328"}, "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-69eec4c1f9d2759c", "name": "Commented-code block (5 lines) in src/components/layout/left-sidebar.tsx:227", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/layout/left-sidebar.tsx:227"}, "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-43e8454bc26444b0", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/grading/defect-photo-upload.tsx:63", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/grading/defect-photo-upload.tsx:63"}, "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-38e1ecd01bf649ee", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/metrics/metrics-filters.tsx:74", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/metrics/metrics-filters.tsx: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-10b1603f621d517d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/storage/shelf-detail-dialog.tsx:258", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/storage/shelf-detail-dialog.tsx:258"}, "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-8cf793498cd49daa", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/storage/storage-layout-view.tsx:179", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/storage/storage-layout-view.tsx:179"}, "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-9be6907f691f21f0", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/storage/position-assignment-dialog.tsx:88", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/storage/position-assignment-dialog.tsx:88"}, "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-94187d054b8c986a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/samples/add-sub-contract-dialog.tsx:168", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/samples/add-sub-contract-dialog.tsx:168"}, "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-4e2824e357e4ab81", "name": "Commented-code block (6 lines) in src/components/samples/sample-intake-dialog.tsx:6", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/samples/sample-intake-dialog.tsx:6"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-87d3a7d2638d47ae", "name": "Commented-code block (5 lines) in src/components/samples/sample-intake-form.tsx:193", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/samples/sample-intake-form.tsx:193"}, "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-a6c478a81e3bd840", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/samples/sample-intake-form.tsx:792", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/samples/sample-intake-form.tsx:792"}, "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-e3269e56766eafe4", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/samples/cupping-grading-section.tsx:140", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/samples/cupping-grading-section.tsx:140"}, "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-5ab73289caac393f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/samples/supply-chain-edit-table.tsx:95", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/samples/supply-chain-edit-table.tsx:95"}, "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-3b4ca5b56da57b79", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/samples/sample-detail-modal.tsx:392", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/samples/sample-detail-modal.tsx:392"}, "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-bc1e7b724acf786c", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/samples/approval-send-view.tsx:37", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/samples/approval-send-view.tsx:37"}, "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-774c92865184863e", "name": "Commented-code block (5 lines) in src/components/samples/intake/other-sample-intake.tsx:9", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/samples/intake/other-sample-intake.tsx: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-3e7798d60abfc75f", "name": "Commented-code block (6 lines) in src/components/samples/intake/types.ts:7", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/samples/intake/types.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-dc6de94e74d8facc", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/quality/template-builder.tsx:199", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/quality/template-builder.tsx:199"}, "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-47fbbfeaac59cb77", "name": "Commented-code block (5 lines) in src/lib/report-data.ts:125", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/report-data.ts:125"}, "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-f9e12cbfeec1cc9a", "name": "Legacy-named symbol `companies_with_legacy` in src/lib/qc-client-mapper.ts:22", "shortDescription": {"text": "Legacy-named symbol `companies_with_legacy` in src/lib/qc-client-mapper.ts:22"}, "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-58a748a96634172b", "name": "Commented-code block (8 lines) in src/lib/qc-client-mapper.ts:395", "shortDescription": {"text": "Commented-code block (8 lines) in src/lib/qc-client-mapper.ts:395"}, "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-ca0c20092dd44c9f", "name": "Commented-code block (6 lines) in src/lib/quality-matching.ts:8", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/quality-matching.ts:8"}, "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-1981d78007384ba3", "name": "Commented-code block (5 lines) in src/lib/certificate-data.ts:299", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/certificate-data.ts:299"}, "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-75acb08872ac418b", "name": "Legacy-named symbol `companies_with_legacy` in src/lib/database.types.ts:240", "shortDescription": {"text": "Legacy-named symbol `companies_with_legacy` in src/lib/database.types.ts:240"}, "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-4ab9233112826b20", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/graph/token.ts:46", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/graph/token.ts:46"}, "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-bb69975b94623bd4", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/graph/send.ts:189", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/graph/send.ts:189"}, "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-65df07ab4020db79", "name": "18 env vars used in code but missing from .env.example", "shortDescription": {"text": "18 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `GEMINI_API_KEY`, `GOOGLE_VISION_API_KEY`, `LEGACY_SUPABASE_ANON_KEY`, `LEGACY_SUPABASE_URL`, `MICROSOFT_CLIENT_ID`, `MICROSOFT_CLIENT_SECRET`, `MICROSOFT_GRAPH_MAILBOX`, `MICROSOFT_GRAPH_TEST_RECIPIENT` + 10 more. Add them (with a placeholder/comment) to .env.example so onboarding doesn't break."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}]}}, "automationDetails": {"id": "repobility/25237"}, "properties": {"repository": "Danwoltrs/WAQC", "repoUrl": "https://github.com/Danwoltrs/WAQC", "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-22806a8d76109e8d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/probe-violations.ts:14"}, "properties": {"repobilityId": "cd389eba0a0c329f", "scanner": "scanner-primary", "fingerprint": "22806a8d76109e8d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c76aec25913c1297", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/probe-clients.ts:17"}, "properties": {"repobilityId": "91a864642c22b2d1", "scanner": "scanner-primary", "fingerprint": "c76aec25913c1297", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f64b886406e6add7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/probe-report-failure.ts:16"}, "properties": {"repobilityId": "15ef54a3afa00a94", "scanner": "scanner-primary", "fingerprint": "f64b886406e6add7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-36b4fa4ad4e5e2d9", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/probe-sankey-variants.ts:18"}, "properties": {"repobilityId": "93b97b713e34e6f5", "scanner": "scanner-primary", "fingerprint": "36b4fa4ad4e5e2d9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e930a211344fe6f1", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/page.tsx:560"}, "properties": {"repobilityId": "e498d41b9221bfd3", "scanner": "scanner-primary", "fingerprint": "e930a211344fe6f1", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-df0721d79628fa9e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/page.tsx:52"}, "properties": {"repobilityId": "f6d2d4533cf9c615", "scanner": "scanner-primary", "fingerprint": "df0721d79628fa9e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9665205b52442036", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/app/dashboard/metrics/certificates/page.tsx:185"}, "properties": {"repobilityId": "956a18dbd0c7eb9d", "scanner": "scanner-primary", "fingerprint": "9665205b52442036", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-4f6a2f156f780bcf", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/clients/page.tsx:662"}, "properties": {"repobilityId": "746e277d7eaa5a16", "scanner": "scanner-primary", "fingerprint": "4f6a2f156f780bcf", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-fbb68abbee3e478f", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/app/cupping/page.tsx:1018"}, "properties": {"repobilityId": "90c2d0109857fe7a", "scanner": "scanner-primary", "fingerprint": "fbb68abbee3e478f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-f3fe6f3aff7d5d25", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/cupping/page.tsx:245"}, "properties": {"repobilityId": "8ae46fe77fea57d6", "scanner": "scanner-primary", "fingerprint": "f3fe6f3aff7d5d25", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7fa7eb9f0fec68c5", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/cupping/ocr/process-card/route.ts:43"}, "properties": {"repobilityId": "4277aa185417e350", "scanner": "scanner-primary", "fingerprint": "7fa7eb9f0fec68c5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ce2db3920390d6ea", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/cupping/scores/[id]/route.ts:145"}, "properties": {"repobilityId": "3781f04bcd046fe8", "scanner": "scanner-primary", "fingerprint": "ce2db3920390d6ea", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e595dfe92a6956fc", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/cupping/scores/save-digital/route.ts:49"}, "properties": {"repobilityId": "1feec344ad5fd03d", "scanner": "scanner-primary", "fingerprint": "e595dfe92a6956fc", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c7e6b793763c562d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/cupping/scores/submit/route.ts:63"}, "properties": {"repobilityId": "ba5a2503d8e28960", "scanner": "scanner-primary", "fingerprint": "c7e6b793763c562d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b9900b89e50df786", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/cupping/scores/aggregate/route.ts:239"}, "properties": {"repobilityId": "3efd64a91c7ce327", "scanner": "scanner-primary", "fingerprint": "b9900b89e50df786", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b1f93357fe00c292", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/cupping/validate/route.ts:124"}, "properties": {"repobilityId": "8b6a0ea4208920ac", "scanner": "scanner-primary", "fingerprint": "b1f93357fe00c292", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7517b89ebc5347c4", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/app/api/contracts/search/route.ts:69"}, "properties": {"repobilityId": "9aa7577a39f4ceb3", "scanner": "scanner-primary", "fingerprint": "7517b89ebc5347c4", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-dbcd75e6474ed39a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/users/invite/route.ts:247"}, "properties": {"repobilityId": "b4da5a5c3d1e6b6e", "scanner": "scanner-primary", "fingerprint": "dbcd75e6474ed39a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-380af9bf9386c3a8", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/users/invite/resend/route.ts:258"}, "properties": {"repobilityId": "c51d155af8f3b3b3", "scanner": "scanner-primary", "fingerprint": "380af9bf9386c3a8", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-69ae14764f93c49e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/auth/azure-signin/route.ts:18"}, "properties": {"repobilityId": "3ba339a3b5ae4a11", "scanner": "scanner-primary", "fingerprint": "69ae14764f93c49e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f7f88efce29c880d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/notifications/samples-assigned/route.ts:40"}, "properties": {"repobilityId": "ce42d1be6dd4e500", "scanner": "scanner-primary", "fingerprint": "f7f88efce29c880d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-92631a089ff928e0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/laboratories/[id]/route.ts:156"}, "properties": {"repobilityId": "f6bba2fb8ff21e9e", "scanner": "scanner-primary", "fingerprint": "92631a089ff928e0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-237209791a10b68d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/laboratories/[id]/shelves/route.ts:80"}, "properties": {"repobilityId": "ab5d3b013c9bf12b", "scanner": "scanner-primary", "fingerprint": "237209791a10b68d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-596762e3102ccaed", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/laboratories/[id]/personnel/route.ts:59"}, "properties": {"repobilityId": "85a2ea93dca39222", "scanner": "scanner-primary", "fingerprint": "596762e3102ccaed", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f73d09f9a1565073", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/profiles/ensure/route.ts:50"}, "properties": {"repobilityId": "33068c0e1f861e21", "scanner": "scanner-primary", "fingerprint": "f73d09f9a1565073", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-11d4992c6c27f33a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/samples/route.ts:374"}, "properties": {"repobilityId": "b13b6b2c0d565c8b", "scanner": "scanner-primary", "fingerprint": "11d4992c6c27f33a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-13508fd7f71ddfce", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/samples/[id]/duplicate/route.ts:162"}, "properties": {"repobilityId": "4e1284d63c8c326b", "scanner": "scanner-primary", "fingerprint": "13508fd7f71ddfce", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5035e8b68ab3ee6c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/samples/[id]/cupping-score/route.ts:76"}, "properties": {"repobilityId": "b4428a02462bf332", "scanner": "scanner-primary", "fingerprint": "5035e8b68ab3ee6c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f9ef7caf267050ff", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/samples/[id]/quality-assessment/route.ts:307"}, "properties": {"repobilityId": "bf70b6d078201bf8", "scanner": "scanner-primary", "fingerprint": "f9ef7caf267050ff", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-72f63bc3f7a1e0d3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/samples/[id]/certificate/route.ts:32"}, "properties": {"repobilityId": "2f2ab3b633e8749d", "scanner": "scanner-primary", "fingerprint": "72f63bc3f7a1e0d3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-697b2e7066619ba7", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/app/api/samples/bulk/export/route.ts:73"}, "properties": {"repobilityId": "c11e99f712561f48", "scanner": "scanner-primary", "fingerprint": "697b2e7066619ba7", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-d95d326b0e520200", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/app/api/samples/bulk/print-qr-table/route.ts:47"}, "properties": {"repobilityId": "2c8e5f31b86a3678", "scanner": "scanner-primary", "fingerprint": "d95d326b0e520200", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-33a816136624e7b1", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/samples/bulk/move-to-cupping/route.ts:49"}, "properties": {"repobilityId": "bb85eaf39cd0844a", "scanner": "scanner-primary", "fingerprint": "33a816136624e7b1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-20c28aec494068ff", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/app/api/samples/bulk/assign/route.ts:53"}, "properties": {"repobilityId": "19bf300a0e5de042", "scanner": "scanner-primary", "fingerprint": "20c28aec494068ff", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-6ab6b3abefb230bd", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/grading/page.tsx:610"}, "properties": {"repobilityId": "886038ec9b8694ae", "scanner": "scanner-primary", "fingerprint": "6ab6b3abefb230bd", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2ba3c5447c9b5474", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/auth/callback/route.ts:17"}, "properties": {"repobilityId": "b64c2286c00bdf94", "scanner": "scanner-primary", "fingerprint": "2ba3c5447c9b5474", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b8f0934bb6d5df4c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/test/client-search/page.tsx:141"}, "properties": {"repobilityId": "1f2e66e66143366a", "scanner": "scanner-primary", "fingerprint": "b8f0934bb6d5df4c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e4345736a2d8c382", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/test/client-auto-detection/page.tsx:242"}, "properties": {"repobilityId": "c3a681b70a4b9c5d", "scanner": "scanner-primary", "fingerprint": "e4345736a2d8c382", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-efa12a59bfaf81ee", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/laboratories/page_ENHANCED.tsx:922"}, "properties": {"repobilityId": "e67324ad1a18cc37", "scanner": "scanner-primary", "fingerprint": "efa12a59bfaf81ee", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-346c5d6aa15cff52", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/laboratories/page.tsx:491"}, "properties": {"repobilityId": "ec1c0c5435e302ed", "scanner": "scanner-primary", "fingerprint": "346c5d6aa15cff52", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0ac2817f790ad683", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/laboratories/page_BACKUP.tsx:739"}, "properties": {"repobilityId": "63bd84532629c27c", "scanner": "scanner-primary", "fingerprint": "0ac2817f790ad683", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-85e9835b7516372e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/samples/qc/page.tsx:1458"}, "properties": {"repobilityId": "4cc6241cd9da530a", "scanner": "scanner-primary", "fingerprint": "85e9835b7516372e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e7058980abe4bf19", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/app/samples/qc/page.tsx:527"}, "properties": {"repobilityId": "a378b83e8347775b", "scanner": "scanner-primary", "fingerprint": "e7058980abe4bf19", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-3933f45bbf9b3ba4", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/samples/qc/page.tsx:526"}, "properties": {"repobilityId": "204780e6ca5e35f3", "scanner": "scanner-primary", "fingerprint": "3933f45bbf9b3ba4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-832407ff5e886bd0", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/quality/templates/page.tsx:452"}, "properties": {"repobilityId": "0f5ad344cf84d67b", "scanner": "scanner-primary", "fingerprint": "832407ff5e886bd0", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-65eba1cbe71be7e8", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/app/quality/templates/page.tsx:603"}, "properties": {"repobilityId": "87deeeb3b6a0b0e3", "scanner": "scanner-primary", "fingerprint": "65eba1cbe71be7e8", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-c92c6f92bd991cc8", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/hooks/use-notifications.ts:154"}, "properties": {"repobilityId": "d56c1ba2afbcad39", "scanner": "scanner-primary", "fingerprint": "c92c6f92bd991cc8", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-fe0f2aab3a0324be", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/clients/client-detail-view.tsx:650"}, "properties": {"repobilityId": "717ee3acdb91b55d", "scanner": "scanner-primary", "fingerprint": "fe0f2aab3a0324be", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4e70084a539a297a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/clients/add-client-modal.tsx:373"}, "properties": {"repobilityId": "80a622b85b6047f3", "scanner": "scanner-primary", "fingerprint": "4e70084a539a297a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-371f5a27b5cd4f56", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/clients/client-search-dialog.tsx:184"}, "properties": {"repobilityId": "2504ddb459590d1f", "scanner": "scanner-primary", "fingerprint": "371f5a27b5cd4f56", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a03f04eeb8c3f123", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/clients/client-auto-detection.tsx:427"}, "properties": {"repobilityId": "cbce0618fe0fab8b", "scanner": "scanner-primary", "fingerprint": "a03f04eeb8c3f123", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ed057df300ef4899", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/clients/client-quality-manager.tsx:115"}, "properties": {"repobilityId": "7f9cdf1e821ed3c4", "scanner": "scanner-primary", "fingerprint": "ed057df300ef4899", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e2a3020483632b47", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/components/cupping/print-cupping-cards-dialog.tsx:151"}, "properties": {"repobilityId": "bcb2939e40216dca", "scanner": "scanner-primary", "fingerprint": "e2a3020483632b47", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f1b149a1ba55a72e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/cupping/scan-cupping-cards-dialog.tsx:619"}, "properties": {"repobilityId": "4c39d4d73bd8a478", "scanner": "scanner-primary", "fingerprint": "f1b149a1ba55a72e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4ff229b9ce9e9512", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/components/cupping/cupping-validation-modal.tsx:303"}, "properties": {"repobilityId": "12116aacb3b71335", "scanner": "scanner-primary", "fingerprint": "4ff229b9ce9e9512", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-650a131b984e4c8c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/cupping/ocr-validation-dialog.tsx:368"}, "properties": {"repobilityId": "0b46dbaf4bcc5e57", "scanner": "scanner-primary", "fingerprint": "650a131b984e4c8c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-727e60154893c1a0", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/cupping/cva/CvaJourney.tsx:241"}, "properties": {"repobilityId": "0d66b371f70c4d8b", "scanner": "scanner-primary", "fingerprint": "727e60154893c1a0", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-bd8442919198d7c6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/components/quality-assignments/quality-assignment-dialog.tsx:136"}, "properties": {"repobilityId": "c7077839cde05189", "scanner": "scanner-primary", "fingerprint": "bd8442919198d7c6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-84fc66f2d87e62c1", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/components/providers/auth-provider.tsx:92"}, "properties": {"repobilityId": "ec079beeab4b940b", "scanner": "scanner-primary", "fingerprint": "84fc66f2d87e62c1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-61ef146bd0bb1cbb", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/components/admin/access-requests-manager.tsx:102"}, "properties": {"repobilityId": "0c176989e71b9e9c", "scanner": "scanner-primary", "fingerprint": "61ef146bd0bb1cbb", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7107572efcf7fa90", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/layout/left-sidebar.tsx:477"}, "properties": {"repobilityId": "59fd6ef0b524b9d9", "scanner": "scanner-primary", "fingerprint": "7107572efcf7fa90", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a4c48ab57fa37b58", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/components/layout/header.tsx:32"}, "properties": {"repobilityId": "a16c6bdd8984126c", "scanner": "scanner-primary", "fingerprint": "a4c48ab57fa37b58", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-b9ea998a5c0d9430", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/components/layout/header.tsx:33"}, "properties": {"repobilityId": "c46f654e8119fc77", "scanner": "scanner-primary", "fingerprint": "b9ea998a5c0d9430", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f748f1fe71dcb1a0", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/components/metrics/supply-chain-sankey.tsx:303"}, "properties": {"repobilityId": "711d5f6c234758a7", "scanner": "scanner-primary", "fingerprint": "f748f1fe71dcb1a0", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-361a79aa2925e7b3", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/components/storage/shelf-detail-dialog.tsx:175"}, "properties": {"repobilityId": "910f507eb437124b", "scanner": "scanner-primary", "fingerprint": "361a79aa2925e7b3", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-9aec74e9fe3db0b6", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/storage/storage-layout-view.tsx:498"}, "properties": {"repobilityId": "7a6c7f16d85a2e58", "scanner": "scanner-primary", "fingerprint": "9aec74e9fe3db0b6", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-2a066dcd6af082d6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/components/storage/storage-layout-view.tsx:166"}, "properties": {"repobilityId": "8e5f27ad0498f886", "scanner": "scanner-primary", "fingerprint": "2a066dcd6af082d6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-60491dc2fafb2343", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/samples/add-sub-contract-dialog.tsx:410"}, "properties": {"repobilityId": "c668884d76337884", "scanner": "scanner-primary", "fingerprint": "60491dc2fafb2343", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-15b24fb8d70f6442", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/components/samples/sample-intake-form.tsx:138"}, "properties": {"repobilityId": "606b3d6bdaf80822", "scanner": "scanner-primary", "fingerprint": "15b24fb8d70f6442", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6d7f7a4bca61ba11", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/samples/cupping-grading-section.tsx:819"}, "properties": {"repobilityId": "b51e7cf93d164140", "scanner": "scanner-primary", "fingerprint": "6d7f7a4bca61ba11", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-7c749588bb17e87a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/samples/other-sample-recipients-panel.tsx:156"}, "properties": {"repobilityId": "51981c62efdeac3d", "scanner": "scanner-primary", "fingerprint": "7c749588bb17e87a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-aaf758e863f4e87e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/samples/intake/other-sample-details-step.tsx:168"}, "properties": {"repobilityId": "4cd238b8a2403bcd", "scanner": "scanner-primary", "fingerprint": "aaf758e863f4e87e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ee63501f79ffe93a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/samples/intake/sub-contract-card.tsx:248"}, "properties": {"repobilityId": "a1e3e9c1fce7e9ec", "scanner": "scanner-primary", "fingerprint": "ee63501f79ffe93a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-089f7836055763a8", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/samples/intake/contracts-step.tsx:298"}, "properties": {"repobilityId": "62752e7ae624d453", "scanner": "scanner-primary", "fingerprint": "089f7836055763a8", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-8ba5c69ac49bd01a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/samples/intake/other-sample-intake.tsx:679"}, "properties": {"repobilityId": "2bd9a39d7116f209", "scanner": "scanner-primary", "fingerprint": "8ba5c69ac49bd01a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-cbe9091d83695921", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/samples/intake/contract-search-step.tsx:238"}, "properties": {"repobilityId": "fd1de43444e86cf9", "scanner": "scanner-primary", "fingerprint": "cbe9091d83695921", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0b6f685ccb8187c9", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/samples/intake/contract-link-badge.tsx:42"}, "properties": {"repobilityId": "a1e68160cb376c27", "scanner": "scanner-primary", "fingerprint": "0b6f685ccb8187c9", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-764ce425aa753c85", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/samples/intake/quality-step.tsx:359"}, "properties": {"repobilityId": "8b0fc8b3cdacc3ca", "scanner": "scanner-primary", "fingerprint": "764ce425aa753c85", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1ce9b8f8635bbf92", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/samples/intake/sample-details-step.tsx:44"}, "properties": {"repobilityId": "3b855da5597a9d1d", "scanner": "scanner-primary", "fingerprint": "1ce9b8f8635bbf92", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-5402cd79b4e4831f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/quality/template-builder.tsx:1002"}, "properties": {"repobilityId": "04fa5d5d7df68215", "scanner": "scanner-primary", "fingerprint": "5402cd79b4e4831f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-8272cb73e0d3f3d0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/components/quality/template-builder.tsx:211"}, "properties": {"repobilityId": "f9b00f946483d134", "scanner": "scanner-primary", "fingerprint": "8272cb73e0d3f3d0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4eb2f05adb9efe66", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/quality/spec-editor/quality-spec-editor.tsx:262"}, "properties": {"repobilityId": "70722277355db09f", "scanner": "scanner-primary", "fingerprint": "4eb2f05adb9efe66", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-49ee803023712303", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/quality/spec-editor/sections/cupping-section.tsx:188"}, "properties": {"repobilityId": "50bc122c5f6a39d3", "scanner": "scanner-primary", "fingerprint": "49ee803023712303", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b0ac743186a02044", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/ui/searchable-select.tsx:77"}, "properties": {"repobilityId": "fda1ba2bd277e868", "scanner": "scanner-primary", "fingerprint": "b0ac743186a02044", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a1df4a9e79437a3d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/compliance.ts:82"}, "properties": {"repobilityId": "ef0428191b32c132", "scanner": "scanner-primary", "fingerprint": "a1df4a9e79437a3d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-62979c32ff3f49f4", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/azure-ad.ts:75"}, "properties": {"repobilityId": "9a83aeefb43f68d0", "scanner": "scanner-primary", "fingerprint": "62979c32ff3f49f4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7bdd000aaba5e5f4", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/certificate-data.ts:699"}, "properties": {"repobilityId": "73e827500f7d5097", "scanner": "scanner-primary", "fingerprint": "7bdd000aaba5e5f4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-afbd9d95cda8db77", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in clear-local-auth.html:211"}, "properties": {"repobilityId": "7461b5800695bc9a", "scanner": "scanner-primary", "fingerprint": "afbd9d95cda8db77", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "clear-local-auth.html"}, "region": {"startLine": 211}}}]}, {"ruleId": "scanner-2a98841e4a8fc336", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in docs/prompts/qc-detail-config-redesign.html:295"}, "properties": {"repobilityId": "8ec31400e7386732", "scanner": "scanner-primary", "fingerprint": "2a98841e4a8fc336", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "docs/prompts/qc-detail-config-redesign.html"}, "region": {"startLine": 295}}}]}, {"ruleId": "scanner-6215601612dbfd34", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in docs/prompts/cleint-editing/qc-client-edit-v2.html:207"}, "properties": {"repobilityId": "11f7955088313493", "scanner": "scanner-primary", "fingerprint": "6215601612dbfd34", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "docs/prompts/cleint-editing/qc-client-edit-v2.html"}, "region": {"startLine": 207}}}]}, {"ruleId": "scanner-b4bceb37abade2a7", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in docs/superpowers/specs/prototypes/cva-cupping-prototype.html:787"}, "properties": {"repobilityId": "be11f1e5e6d157c0", "scanner": "scanner-primary", "fingerprint": "b4bceb37abade2a7", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "docs/superpowers/specs/prototypes/cva-cupping-prototype.html"}, "region": {"startLine": 787}}}]}, {"ruleId": "scanner-9fa29dc2b7845aa7", "level": "warning", "message": {"text": "Insecure pattern 'direct_outerhtml_assignment' in docs/superpowers/specs/prototypes/cva-cupping-prototype.html:1791"}, "properties": {"repobilityId": "2dc597cbf32db679", "scanner": "scanner-primary", "fingerprint": "9fa29dc2b7845aa7", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_outerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "docs/superpowers/specs/prototypes/cva-cupping-prototype.html"}, "region": {"startLine": 1791}}}]}, {"ruleId": "scanner-cb6b3fc8fbba28a0", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in docs/superpowers/specs/prototypes/cva-flavor-wheel-prototype.html:328"}, "properties": {"repobilityId": "d43708d807c22081", "scanner": "scanner-primary", "fingerprint": "cb6b3fc8fbba28a0", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "docs/superpowers/specs/prototypes/cva-flavor-wheel-prototype.html"}, "region": {"startLine": 328}}}]}, {"ruleId": "scanner-252bdd48e0bc36f8", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "1e0f7d2ada530dba", "scanner": "scanner-primary", "fingerprint": "252bdd48e0bc36f8", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/code-review.yml"}, "region": {"startLine": 20}}}]}, {"ruleId": "scanner-252bdd48e0bc36f8", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "5b570f5282491b18", "scanner": "scanner-primary", "fingerprint": "252bdd48e0bc36f8", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/code-review.yml"}, "region": {"startLine": 25}}}]}, {"ruleId": "scanner-252bdd48e0bc36f8", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "5bd7f740844be267", "scanner": "scanner-primary", "fingerprint": "252bdd48e0bc36f8", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/code-review.yml"}, "region": {"startLine": 85}}}]}, {"ruleId": "scanner-aff8ea26818830e5", "level": "note", "message": {"text": "Very large file: src/app/cupping/page.tsx (2258 lines)"}, "properties": {"repobilityId": "f3aca987829aaf44", "scanner": "scanner-primary", "fingerprint": "aff8ea26818830e5", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-1b1c7a131469b946", "level": "note", "message": {"text": "Very large file: src/app/grading/page.tsx (1671 lines)"}, "properties": {"repobilityId": "6862b891be5beb70", "scanner": "scanner-primary", "fingerprint": "1b1c7a131469b946", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-e88f89463c5c1b0a", "level": "note", "message": {"text": "Very large file: src/app/laboratories/page.tsx (1990 lines)"}, "properties": {"repobilityId": "9e6eb25da1326fcf", "scanner": "scanner-primary", "fingerprint": "e88f89463c5c1b0a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-1f8ac9db1cfad8f3", "level": "note", "message": {"text": "Very large file: src/app/samples/qc/page.tsx (2240 lines)"}, "properties": {"repobilityId": "9b266827a52d38ad", "scanner": "scanner-primary", "fingerprint": "1f8ac9db1cfad8f3", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-c7f348b6dc3a34f8", "level": "note", "message": {"text": "Very large file: src/components/clients/client-form.tsx (1868 lines)"}, "properties": {"repobilityId": "8000dd21f07af08d", "scanner": "scanner-primary", "fingerprint": "c7f348b6dc3a34f8", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-41a058e069609eca", "level": "note", "message": {"text": "Very large file: src/components/cupping/cupping-validation-modal.tsx (1383 lines)"}, "properties": {"repobilityId": "f930d3abf0903532", "scanner": "scanner-primary", "fingerprint": "41a058e069609eca", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-04f677c30990cac5", "level": "note", "message": {"text": "Very large file: src/components/samples/sample-detail-modal.tsx (1383 lines)"}, "properties": {"repobilityId": "e308b47de506f346", "scanner": "scanner-primary", "fingerprint": "04f677c30990cac5", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-58bac7348ad0699e", "level": "note", "message": {"text": "Very large file: src/components/quality/template-builder.tsx (2083 lines)"}, "properties": {"repobilityId": "3a9a55740d302555", "scanner": "scanner-primary", "fingerprint": "58bac7348ad0699e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-7f46c1a5c346aff1", "level": "note", "message": {"text": "Very large file: src/lib/certificate-data.ts (1591 lines)"}, "properties": {"repobilityId": "1201afa540ab978f", "scanner": "scanner-primary", "fingerprint": "7f46c1a5c346aff1", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-0a0222e4722eadbd", "level": "note", "message": {"text": "Very large file: src/lib/database.types.ts (20283 lines)"}, "properties": {"repobilityId": "ca4d4e35c819d250", "scanner": "scanner-primary", "fingerprint": "0a0222e4722eadbd", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-6893a6c8b0861585", "level": "warning", "message": {"text": "Very low test-to-source ratio"}, "properties": {"repobilityId": "54a7de3f06314bf0", "scanner": "scanner-primary", "fingerprint": "6893a6c8b0861585", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["tests", "coverage"]}}, {"ruleId": "scanner-141b30a41e03817b", "level": "note", "message": {"text": "No license file detected"}, "properties": {"repobilityId": "d4139714a6c2cc44", "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": "ca8a3b7c2c0372c3", "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": "ed9834798fa85df8", "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": "4d7031bbf0f419d2", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-749d4bc1bd66df5f", "level": "warning", "message": {"text": "Agent instructions exist but release-hardening basics are missing"}, "properties": {"repobilityId": "295bc2b564d2e066", "scanner": "scanner-primary", "fingerprint": "749d4bc1bd66df5f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-cbb5857940ba0dc2", "level": "error", "message": {"text": "Agent instruction/config may expose a secret: AGENTS.md"}, "properties": {"repobilityId": "e12c7213d5eadf3e", "scanner": "scanner-primary", "fingerprint": "cbb5857940ba0dc2", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["agent-instructions", "secrets", "agents_md"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "AGENTS.md"}, "region": {"startLine": 67}}}]}, {"ruleId": "scanner-cc55229a7a3c078d", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .mcp.json"}, "properties": {"repobilityId": "51942fb3d5b8b5b4", "scanner": "scanner-primary", "fingerprint": "cc55229a7a3c078d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "mcp_config"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".mcp.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-c104b36c9c323475", "level": "error", "message": {"text": "Agent instruction/config may expose a secret: GEMINI.md"}, "properties": {"repobilityId": "83d70c1e74d67dc2", "scanner": "scanner-primary", "fingerprint": "c104b36c9c323475", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["agent-instructions", "secrets", "gemini_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "GEMINI.md"}, "region": {"startLine": 67}}}]}, {"ruleId": "scanner-250106da925d01d9", "level": "warning", "message": {"text": "Agent instruction contains unpinned remote install: .github/instructions/dev_workflow.instructions.md"}, "properties": {"repobilityId": "ef1c3022ce77db0c", "scanner": "scanner-primary", "fingerprint": "250106da925d01d9", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "supply-chain", "agent_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/instructions/dev_workflow.instructions.md"}, "region": {"startLine": 206}}}]}, {"ruleId": "scanner-a40e5b458ed97bfd", "level": "error", "message": {"text": "Agent instruction/config may expose a secret: .github/instructions/taskmaster.instructions.md"}, "properties": {"repobilityId": "b10c1a3b61cd08f3", "scanner": "scanner-primary", "fingerprint": "a40e5b458ed97bfd", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["agent-instructions", "secrets", "agent_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/instructions/taskmaster.instructions.md"}, "region": {"startLine": 376}}}]}, {"ruleId": "scanner-1bd0c17b30417b2f", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .cursor/mcp.json"}, "properties": {"repobilityId": "dd739e66f2986b13", "scanner": "scanner-primary", "fingerprint": "1bd0c17b30417b2f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "mcp_config"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".cursor/mcp.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-92d71f744066c6b5", "level": "warning", "message": {"text": "Agent instruction contains unpinned remote install: .cursor/rules/taskmaster/dev_workflow.mdc"}, "properties": {"repobilityId": "417976262c8b6f12", "scanner": "scanner-primary", "fingerprint": "92d71f744066c6b5", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "supply-chain", "cursor_rule"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".cursor/rules/taskmaster/dev_workflow.mdc"}, "region": {"startLine": 207}}}]}, {"ruleId": "scanner-09fd7ebb1d3259f0", "level": "error", "message": {"text": "Agent instruction/config may expose a secret: .cursor/rules/taskmaster/taskmaster.mdc"}, "properties": {"repobilityId": "12e8386123a6d008", "scanner": "scanner-primary", "fingerprint": "09fd7ebb1d3259f0", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["agent-instructions", "secrets", "cursor_rule"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".cursor/rules/taskmaster/taskmaster.mdc"}, "region": {"startLine": 377}}}]}, {"ruleId": "scanner-76add2af6c4d136a", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .windsurf/mcp.json"}, "properties": {"repobilityId": "24c5db7be62cbca2", "scanner": "scanner-primary", "fingerprint": "76add2af6c4d136a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "mcp_config"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".windsurf/mcp.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-74edea6aab85ec9f", "level": "error", "message": {"text": "Agent instruction/config may expose a secret: .windsurf/rules/taskmaster.md"}, "properties": {"repobilityId": "c77bc4be1c8ab9b4", "scanner": "scanner-primary", "fingerprint": "74edea6aab85ec9f", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["agent-instructions", "secrets", "agent_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".windsurf/rules/taskmaster.md"}, "region": {"startLine": 377}}}]}, {"ruleId": "scanner-9d79aaf61e7600db", "level": "warning", "message": {"text": "Agent instruction contains unpinned remote install: .windsurf/rules/dev_workflow.md"}, "properties": {"repobilityId": "64b94310ddc7a2e3", "scanner": "scanner-primary", "fingerprint": "9d79aaf61e7600db", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "supply-chain", "agent_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".windsurf/rules/dev_workflow.md"}, "region": {"startLine": 207}}}]}, {"ruleId": "scanner-b1af3029c212b277", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/TM_COMMANDS_GUIDE.md"}, "properties": {"repobilityId": "695827122a5e7d87", "scanner": "scanner-primary", "fingerprint": "b1af3029c212b277", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/TM_COMMANDS_GUIDE.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-16b6f9befa21caef", "level": "error", "message": {"text": "Agent instruction/config may expose a secret: .claude/agents/task-checker.md"}, "properties": {"repobilityId": "28dfb27c487f0161", "scanner": "scanner-primary", "fingerprint": "16b6f9befa21caef", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["agent-instructions", "secrets", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/agents/task-checker.md"}, "region": {"startLine": 13}}}]}, {"ruleId": "scanner-3b1da2a18b7d9c13", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/agents/task-checker.md"}, "properties": {"repobilityId": "02a12e11cda934ec", "scanner": "scanner-primary", "fingerprint": "3b1da2a18b7d9c13", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/agents/task-checker.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-9cb7a796a4361697", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/commands/tm/help.md"}, "properties": {"repobilityId": "cf2a068641b8e13a", "scanner": "scanner-primary", "fingerprint": "9cb7a796a4361697", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/commands/tm/help.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-a5e86ca6b6a9837f", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/commands/tm/learn.md"}, "properties": {"repobilityId": "47de57772e928498", "scanner": "scanner-primary", "fingerprint": "a5e86ca6b6a9837f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/commands/tm/learn.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-1573b86895f46c28", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/commands/tm/tm-main.md"}, "properties": {"repobilityId": "e5f24031b5e993a6", "scanner": "scanner-primary", "fingerprint": "1573b86895f46c28", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/commands/tm/tm-main.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-0c866a052f5e7a88", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/commands/tm/next/next-task.md"}, "properties": {"repobilityId": "6d7f4bfcabea7c2f", "scanner": "scanner-primary", "fingerprint": "0c866a052f5e7a88", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/commands/tm/next/next-task.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-39e333227f278961", "level": "warning", "message": {"text": "Agent instruction contains unpinned remote install: .claude/commands/tm/setup/quick-install-taskmaster.md"}, "properties": {"repobilityId": "59c309fc15035db1", "scanner": "scanner-primary", "fingerprint": "39e333227f278961", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "supply-chain", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/commands/tm/setup/quick-install-taskmaster.md"}, "region": {"startLine": 7}}}]}, {"ruleId": "scanner-d7517ff8eab9acdf", "level": "warning", "message": {"text": "Agent instruction contains unpinned remote install: .claude/commands/tm/setup/install-taskmaster.md"}, "properties": {"repobilityId": "00c2199b34f9f4e4", "scanner": "scanner-primary", "fingerprint": "d7517ff8eab9acdf", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "supply-chain", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/commands/tm/setup/install-taskmaster.md"}, "region": {"startLine": 30}}}]}, {"ruleId": "scanner-561080bd3af6e9d6", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/commands/tm/init/init-project-quick.md"}, "properties": {"repobilityId": "362b5245f9be3bc3", "scanner": "scanner-primary", "fingerprint": "561080bd3af6e9d6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/commands/tm/init/init-project-quick.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-1a851256fc6ece5b", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/commands/tm/expand/expand-all-tasks.md"}, "properties": {"repobilityId": "66dbb1928cb76164", "scanner": "scanner-primary", "fingerprint": "1a851256fc6ece5b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/commands/tm/expand/expand-all-tasks.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-a983a59229a59777", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/commands/tm/clear-subtasks/clear-subtasks.md"}, "properties": {"repobilityId": "9a0dca06b839af27", "scanner": "scanner-primary", "fingerprint": "a983a59229a59777", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/commands/tm/clear-subtasks/clear-subtasks.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-0519baa4db4f32fb", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/commands/tm/models/view-models.md"}, "properties": {"repobilityId": "e9bbe3ea2e395dc3", "scanner": "scanner-primary", "fingerprint": "0519baa4db4f32fb", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/commands/tm/models/view-models.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-c5ecc4e47c4b2d33", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/commands/tm/remove-subtasks/remove-subtasks.md"}, "properties": {"repobilityId": "03c3ce36cf4daea2", "scanner": "scanner-primary", "fingerprint": "c5ecc4e47c4b2d33", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/commands/tm/remove-subtasks/remove-subtasks.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-d1b567cf97318e61", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/commands/tm/workflows/command-pipeline.md"}, "properties": {"repobilityId": "630a4b7d08020d29", "scanner": "scanner-primary", "fingerprint": "d1b567cf97318e61", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/commands/tm/workflows/command-pipeline.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-6128831a0951311a", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/commands/tm/workflows/smart-workflow.md"}, "properties": {"repobilityId": "ccc4cf0cc3718f63", "scanner": "scanner-primary", "fingerprint": "6128831a0951311a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/commands/tm/workflows/smart-workflow.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-6e9fbf64b0005866", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/commands/tm/set-status/to-pending.md"}, "properties": {"repobilityId": "4cb08a6ed4f31f11", "scanner": "scanner-primary", "fingerprint": "6e9fbf64b0005866", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/commands/tm/set-status/to-pending.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-9dd76887ff1f08b3", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/commands/tm/set-status/to-deferred.md"}, "properties": {"repobilityId": "1d1680746fd1e616", "scanner": "scanner-primary", "fingerprint": "9dd76887ff1f08b3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/commands/tm/set-status/to-deferred.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-33316b51a59182ed", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/commands/tm/list/list-tasks.md"}, "properties": {"repobilityId": "4e9abadcf23c218d", "scanner": "scanner-primary", "fingerprint": "33316b51a59182ed", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/commands/tm/list/list-tasks.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-507070843374f910", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/commands/tm/list/list-tasks-by-status.md"}, "properties": {"repobilityId": "155b42ddb5f63e5f", "scanner": "scanner-primary", "fingerprint": "507070843374f910", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/commands/tm/list/list-tasks-by-status.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-620653472b37dedb", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/commands/tm/list/list-tasks-with-subtasks.md"}, "properties": {"repobilityId": "3be909b54996b40d", "scanner": "scanner-primary", "fingerprint": "620653472b37dedb", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/commands/tm/list/list-tasks-with-subtasks.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-dcc1b739900459d2", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/commands/tm/status/project-status.md"}, "properties": {"repobilityId": "9695406f9a25ca55", "scanner": "scanner-primary", "fingerprint": "dcc1b739900459d2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/commands/tm/status/project-status.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-cb7e3094fbb5cc20", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/commands/tm/sync-readme/sync-readme.md"}, "properties": {"repobilityId": "e58c979d9fb277f1", "scanner": "scanner-primary", "fingerprint": "cb7e3094fbb5cc20", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/commands/tm/sync-readme/sync-readme.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-12dff5e94510f06e", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/commands/tm/analyze-complexity/analyze-complexity.md"}, "properties": {"repobilityId": "066e272987cd5fb2", "scanner": "scanner-primary", "fingerprint": "12dff5e94510f06e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/commands/tm/analyze-complexity/analyze-complexity.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-92e60f784e8e5c67", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/clients/page.tsx:134"}, "properties": {"repobilityId": "deb079646c67f09b", "scanner": "scanner-primary", "fingerprint": "92e60f784e8e5c67", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-19d94c9a8b978229", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/finance/page.tsx:79"}, "properties": {"repobilityId": "e999523c2757b737", "scanner": "scanner-primary", "fingerprint": "19d94c9a8b978229", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-595eed6b80ac69b4", "level": "note", "message": {"text": "Legacy-named symbol `exporter_legacy` in src/app/cupping/page.tsx:51"}, "properties": {"repobilityId": "ee10818042ee81fc", "scanner": "scanner-primary", "fingerprint": "595eed6b80ac69b4", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-799c54cf728ba776", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/cupping/page.tsx:503"}, "properties": {"repobilityId": "e8303c73387e0466", "scanner": "scanner-primary", "fingerprint": "799c54cf728ba776", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-407e765241378a50", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/app/api/clients/route.ts:16"}, "properties": {"repobilityId": "62bb4cb1713a7198", "scanner": "scanner-primary", "fingerprint": "407e765241378a50", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-25e1262fc712ba7f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/cupping/ocr/process-card/route.ts:155"}, "properties": {"repobilityId": "e2f3b6811082db3f", "scanner": "scanner-primary", "fingerprint": "25e1262fc712ba7f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-231885a96e13a697", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/cupping/scores/aggregate/route.ts:502"}, "properties": {"repobilityId": "27d088d042c8f51f", "scanner": "scanner-primary", "fingerprint": "231885a96e13a697", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9b0e7b5fa070628b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/cupping/validate/route.ts:295"}, "properties": {"repobilityId": "d648300840c87021", "scanner": "scanner-primary", "fingerprint": "9b0e7b5fa070628b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-7936fbdc43d937a0", "level": "note", "message": {"text": "Legacy-named symbol `exporter_legacy` in src/app/api/cupping/my-samples/route.ts:158"}, "properties": {"repobilityId": "32ec9eee4683767f", "scanner": "scanner-primary", "fingerprint": "7936fbdc43d937a0", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-7e813c7b45a9fd8a", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/notifications/samples-assigned/route.ts:181"}, "properties": {"repobilityId": "aea65205cdaa2990", "scanner": "scanner-primary", "fingerprint": "7e813c7b45a9fd8a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4a9ae561b28faef0", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/samples/route.ts:122"}, "properties": {"repobilityId": "ecd695a4bf9fdf0e", "scanner": "scanner-primary", "fingerprint": "4a9ae561b28faef0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0f2688cefb2be9a7", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/samples/[id]/duplicate/route.ts:131"}, "properties": {"repobilityId": "eb3f4f390e168ca1", "scanner": "scanner-primary", "fingerprint": "0f2688cefb2be9a7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-563a881f4d8a5a1c", "level": "note", "message": {"text": "Legacy-named symbol `exporter_legacy` in src/app/api/samples/bulk-details/route.ts:42"}, "properties": {"repobilityId": "07366e6cae666ce8", "scanner": "scanner-primary", "fingerprint": "563a881f4d8a5a1c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-93ebf14ff4b7eb9c", "level": "note", "message": {"text": "Legacy-named symbol `exporter_legacy` in src/app/grading/page.tsx:62"}, "properties": {"repobilityId": "96f18b95f7ba3f35", "scanner": "scanner-primary", "fingerprint": "93ebf14ff4b7eb9c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-489b9631533f0876", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/grading/page.tsx:456"}, "properties": {"repobilityId": "c874b4ef3e6beaa9", "scanner": "scanner-primary", "fingerprint": "489b9631533f0876", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-beb485d0360ce306", "level": "note", "message": {"text": "Legacy-named symbol `exporter_legacy` in src/app/sample-photo/[slug]/page.tsx:26"}, "properties": {"repobilityId": "877510e19fafd016", "scanner": "scanner-primary", "fingerprint": "beb485d0360ce306", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-c2e97bdd84de6d96", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/laboratories/page.tsx:493"}, "properties": {"repobilityId": "e79101bd952b2099", "scanner": "scanner-primary", "fingerprint": "c2e97bdd84de6d96", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-fa6022d959008f27", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/app/certificate/[slug]/page.tsx:94"}, "properties": {"repobilityId": "63535c85f624ae9f", "scanner": "scanner-primary", "fingerprint": "fa6022d959008f27", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0dd153c126865e79", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/samples/other/page.tsx:81"}, "properties": {"repobilityId": "61525c106bd768ff", "scanner": "scanner-primary", "fingerprint": "0dd153c126865e79", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d19f5852023d6c36", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/samples/qc/page.tsx:962"}, "properties": {"repobilityId": "be2049062145bed1", "scanner": "scanner-primary", "fingerprint": "d19f5852023d6c36", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a46fc43f49e1214e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/samples/qc/page.tsx:319"}, "properties": {"repobilityId": "4dd841d9aaf4dc6c", "scanner": "scanner-primary", "fingerprint": "a46fc43f49e1214e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-7bfec6142b0ff69e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/hooks/use-notifications.ts:55"}, "properties": {"repobilityId": "439f04eea529a2a7", "scanner": "scanner-primary", "fingerprint": "7bfec6142b0ff69e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-86dab20da77b9d7f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/dashboard/dashboard-scan-dialog.tsx:170"}, "properties": {"repobilityId": "18ab39b10f639dd7", "scanner": "scanner-primary", "fingerprint": "86dab20da77b9d7f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ac4d91c0cf20c405", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/clients/client-detail-view.tsx:296"}, "properties": {"repobilityId": "8e11051e9119957b", "scanner": "scanner-primary", "fingerprint": "ac4d91c0cf20c405", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2e4f63752d07c33b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/clients/client-lab-config.tsx:55"}, "properties": {"repobilityId": "0054fb9c22dc8eab", "scanner": "scanner-primary", "fingerprint": "2e4f63752d07c33b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-8181bad50d8a4ab9", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/clients/bulk-operations-dialog.tsx:145"}, "properties": {"repobilityId": "caf2b7a2a85d099e", "scanner": "scanner-primary", "fingerprint": "8181bad50d8a4ab9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d4671da74902ef10", "level": "note", "message": {"text": "Legacy-named symbol `searchLegacy` in src/components/clients/add-client-modal.tsx:105"}, "properties": {"repobilityId": "2ea21feffd7d7382", "scanner": "scanner-primary", "fingerprint": "d4671da74902ef10", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-e78f1fa50f2d6cff", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/clients/add-client-modal.tsx:226"}, "properties": {"repobilityId": "bb91e5726b8a1df9", "scanner": "scanner-primary", "fingerprint": "e78f1fa50f2d6cff", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c38a36083e07c356", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/components/clients/client-form.tsx:21"}, "properties": {"repobilityId": "1a27b08f6940dfc8", "scanner": "scanner-primary", "fingerprint": "c38a36083e07c356", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7787d3a6a24cb0ff", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/clients/client-form.tsx:667"}, "properties": {"repobilityId": "a4b528f5a68a5a85", "scanner": "scanner-primary", "fingerprint": "7787d3a6a24cb0ff", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d6cc40fdb0ddd3b2", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/clients/client-quality-manager.tsx:377"}, "properties": {"repobilityId": "4c75f57a8a15eb5d", "scanner": "scanner-primary", "fingerprint": "d6cc40fdb0ddd3b2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d7bd75890244cac2", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/clients/client-quality-manager.tsx:422"}, "properties": {"repobilityId": "aeae430205adca89", "scanner": "scanner-primary", "fingerprint": "d7bd75890244cac2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-94e4a4554a6d2cfe", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/clients/qc-config-panel.tsx:122"}, "properties": {"repobilityId": "42674ce75d09d721", "scanner": "scanner-primary", "fingerprint": "94e4a4554a6d2cfe", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-15bbe1fda95c7b4f", "level": "note", "message": {"text": "Legacy-named symbol `exporter_legacy` in src/components/cupping/print-cupping-cards-dialog.tsx:50"}, "properties": {"repobilityId": "aecc99577d2356ec", "scanner": "scanner-primary", "fingerprint": "15bbe1fda95c7b4f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-779894e32f37b669", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/cupping/cupping-reports.tsx:117"}, "properties": {"repobilityId": "259864a43d72ffc1", "scanner": "scanner-primary", "fingerprint": "779894e32f37b669", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-7dbaf0a09f3f5755", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/cupping/scan-cupping-cards-dialog.tsx:514"}, "properties": {"repobilityId": "2fdfc2b2bf92a3d5", "scanner": "scanner-primary", "fingerprint": "7dbaf0a09f3f5755", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-cc8d47dbef0c4eab", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/cupping/cupping-validation-modal.tsx:414"}, "properties": {"repobilityId": "835586ac87bd1564", "scanner": "scanner-primary", "fingerprint": "cc8d47dbef0c4eab", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a2b9d314dca9c9cd", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/cupping/cupping-validation-modal.tsx:181"}, "properties": {"repobilityId": "f9bf3c925b11d567", "scanner": "scanner-primary", "fingerprint": "a2b9d314dca9c9cd", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-cb40661c39b458ad", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/cupping/cva/wheel/zoom-machine.ts:26"}, "properties": {"repobilityId": "71c18c1eea887eae", "scanner": "scanner-primary", "fingerprint": "cb40661c39b458ad", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e3e89c43a379d9ed", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/cupping/cva/wheel/FlavorWheel.tsx:13"}, "properties": {"repobilityId": "f9fb316b2a440895", "scanner": "scanner-primary", "fingerprint": "e3e89c43a379d9ed", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2b3722cebd8424f8", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/quality-assignments/quality-assignment-dialog.tsx:153"}, "properties": {"repobilityId": "ea7683faaecc57e3", "scanner": "scanner-primary", "fingerprint": "2b3722cebd8424f8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-0519f1fd2c53dfba", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/admin/user-management-panel.tsx:328"}, "properties": {"repobilityId": "6ba9b7901cbfd676", "scanner": "scanner-primary", "fingerprint": "0519f1fd2c53dfba", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-69eec4c1f9d2759c", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/layout/left-sidebar.tsx:227"}, "properties": {"repobilityId": "735fdd3a3901f7fa", "scanner": "scanner-primary", "fingerprint": "69eec4c1f9d2759c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-43e8454bc26444b0", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/grading/defect-photo-upload.tsx:63"}, "properties": {"repobilityId": "a1b14eb871d57c53", "scanner": "scanner-primary", "fingerprint": "43e8454bc26444b0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-38e1ecd01bf649ee", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/metrics/metrics-filters.tsx:74"}, "properties": {"repobilityId": "536588463b317540", "scanner": "scanner-primary", "fingerprint": "38e1ecd01bf649ee", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-10b1603f621d517d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/storage/shelf-detail-dialog.tsx:258"}, "properties": {"repobilityId": "042c8c382bfaaf88", "scanner": "scanner-primary", "fingerprint": "10b1603f621d517d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-8cf793498cd49daa", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/storage/storage-layout-view.tsx:179"}, "properties": {"repobilityId": "217a1cfb435f11ec", "scanner": "scanner-primary", "fingerprint": "8cf793498cd49daa", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9be6907f691f21f0", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/storage/position-assignment-dialog.tsx:88"}, "properties": {"repobilityId": "fa739fc864e7b9f7", "scanner": "scanner-primary", "fingerprint": "9be6907f691f21f0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-94187d054b8c986a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/samples/add-sub-contract-dialog.tsx:168"}, "properties": {"repobilityId": "905b8941f512c3b2", "scanner": "scanner-primary", "fingerprint": "94187d054b8c986a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4e2824e357e4ab81", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/samples/sample-intake-dialog.tsx:6"}, "properties": {"repobilityId": "57d45767a16e62ae", "scanner": "scanner-primary", "fingerprint": "4e2824e357e4ab81", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-87d3a7d2638d47ae", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/samples/sample-intake-form.tsx:193"}, "properties": {"repobilityId": "3cebd30751fd7542", "scanner": "scanner-primary", "fingerprint": "87d3a7d2638d47ae", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a6c478a81e3bd840", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/samples/sample-intake-form.tsx:792"}, "properties": {"repobilityId": "e3f79a3286905f3f", "scanner": "scanner-primary", "fingerprint": "a6c478a81e3bd840", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e3269e56766eafe4", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/samples/cupping-grading-section.tsx:140"}, "properties": {"repobilityId": "2021cff87484b931", "scanner": "scanner-primary", "fingerprint": "e3269e56766eafe4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-5ab73289caac393f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/samples/supply-chain-edit-table.tsx:95"}, "properties": {"repobilityId": "3cfb5885c463f3d3", "scanner": "scanner-primary", "fingerprint": "5ab73289caac393f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3b4ca5b56da57b79", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/samples/sample-detail-modal.tsx:392"}, "properties": {"repobilityId": "a05c03c99ddfa998", "scanner": "scanner-primary", "fingerprint": "3b4ca5b56da57b79", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-bc1e7b724acf786c", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/samples/approval-send-view.tsx:37"}, "properties": {"repobilityId": "d015e3662c3fe0d2", "scanner": "scanner-primary", "fingerprint": "bc1e7b724acf786c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-774c92865184863e", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/samples/intake/other-sample-intake.tsx:9"}, "properties": {"repobilityId": "3429c4e43ab7b8cb", "scanner": "scanner-primary", "fingerprint": "774c92865184863e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3e7798d60abfc75f", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/samples/intake/types.ts:7"}, "properties": {"repobilityId": "a18ae0e57816ac7e", "scanner": "scanner-primary", "fingerprint": "3e7798d60abfc75f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-dc6de94e74d8facc", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/quality/template-builder.tsx:199"}, "properties": {"repobilityId": "1f1cc26afc045cf8", "scanner": "scanner-primary", "fingerprint": "dc6de94e74d8facc", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-47fbbfeaac59cb77", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/report-data.ts:125"}, "properties": {"repobilityId": "063ae29adc68d473", "scanner": "scanner-primary", "fingerprint": "47fbbfeaac59cb77", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f9e12cbfeec1cc9a", "level": "note", "message": {"text": "Legacy-named symbol `companies_with_legacy` in src/lib/qc-client-mapper.ts:22"}, "properties": {"repobilityId": "571fad5eb5593e73", "scanner": "scanner-primary", "fingerprint": "f9e12cbfeec1cc9a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-58a748a96634172b", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/lib/qc-client-mapper.ts:395"}, "properties": {"repobilityId": "29b0a05a1ff034e6", "scanner": "scanner-primary", "fingerprint": "58a748a96634172b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ca0c20092dd44c9f", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/quality-matching.ts:8"}, "properties": {"repobilityId": "af41fa76567f2e9d", "scanner": "scanner-primary", "fingerprint": "ca0c20092dd44c9f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1981d78007384ba3", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/certificate-data.ts:299"}, "properties": {"repobilityId": "046ca7b3f579b49e", "scanner": "scanner-primary", "fingerprint": "1981d78007384ba3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-75acb08872ac418b", "level": "note", "message": {"text": "Legacy-named symbol `companies_with_legacy` in src/lib/database.types.ts:240"}, "properties": {"repobilityId": "9d587ba08aa3c203", "scanner": "scanner-primary", "fingerprint": "75acb08872ac418b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-4ab9233112826b20", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/graph/token.ts:46"}, "properties": {"repobilityId": "958c74b65f827330", "scanner": "scanner-primary", "fingerprint": "4ab9233112826b20", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-bb69975b94623bd4", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/graph/send.ts:189"}, "properties": {"repobilityId": "4f239386bb10bc01", "scanner": "scanner-primary", "fingerprint": "bb69975b94623bd4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-65df07ab4020db79", "level": "note", "message": {"text": "18 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "5e334d56f52c02e1", "scanner": "scanner-primary", "fingerprint": "65df07ab4020db79", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "config-drift"]}}]}]}