{"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-f5321e137e2abdaf", "name": "Possibly dead Python function: add_labeller_to_all_assignments", "shortDescription": {"text": "Possibly dead Python function: add_labeller_to_all_assignments"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-305a7107e568ade0", "name": "Possibly dead Python function: replace_labeller_in_all_assignments", "shortDescription": {"text": "Possibly dead Python function: replace_labeller_in_all_assignments"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-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-c8fde27d31541a6c", "name": "Stray `console.log` in TS/JS \u2014 my-app/scripts/check-nakatani-videos.ts:27", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 my-app/scripts/check-nakatani-videos.ts:27"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6a16665699118a14", "name": "Stray `console.log` in TS/JS \u2014 my-app/scripts/export-events-jan-19-23.ts:109", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 my-app/scripts/export-events-jan-19-23.ts:109"}, "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-3757b8537065b595", "name": "Stray `console.log` in TS/JS \u2014 my-app/scripts/check-storage-limits.ts:24", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 my-app/scripts/check-storage-limits.ts:24"}, "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-5ed073d220a249d6", "name": "Stray `console.log` in TS/JS \u2014 my-app/scripts/backfill-video-titles.ts:6", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 my-app/scripts/backfill-video-titles.ts:6"}, "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-51c0d461bc163971", "name": "Stray `console.log` in TS/JS \u2014 my-app/scripts/check-assignment.ts:17", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 my-app/scripts/check-assignment.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-d97193f67069e1db", "name": "Stray `console.log` in TS/JS \u2014 my-app/scripts/rename-storage-paths.ts:67", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 my-app/scripts/rename-storage-paths.ts:67"}, "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-99dcf11ef0d25b5a", "name": "Stray `console.log` in TS/JS \u2014 my-app/scripts/backfill-external-api.ts:125", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 my-app/scripts/backfill-external-api.ts:125"}, "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-0930f9fc6b2b3017", "name": "Stray `console.log` in TS/JS \u2014 my-app/scripts/test-get-fight.ts:9", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 my-app/scripts/test-get-fight.ts:9"}, "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-82f511583f230262", "name": "Stray `console.log` in TS/JS \u2014 my-app/scripts/count-missing-attribution.js:11", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 my-app/scripts/count-missing-attribution.js:11"}, "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-f47444c713d24420", "name": "Stray `console.log` in TS/JS \u2014 my-app/scripts/validate-qc-data.ts:11", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 my-app/scripts/validate-qc-data.ts:11"}, "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-222b229f3a6f7897", "name": "Stray `console.log` in TS/JS \u2014 my-app/scripts/test-preserve-event-createdat.ts:60", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 my-app/scripts/test-preserve-event-createdat.ts:60"}, "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-54532d29b2d041a4", "name": "Stray `console.log` in TS/JS \u2014 my-app/scripts/backfill-data.ts:77", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 my-app/scripts/backfill-data.ts:77"}, "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-abb7258c1fc85cf3", "name": "Stray `console.log` in TS/JS \u2014 my-app/scripts/export-events-feb-2-6.ts:112", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 my-app/scripts/export-events-feb-2-6.ts:112"}, "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-29e49863eab701af", "name": "Stray `console.log` in TS/JS \u2014 my-app/scripts/fix-storage-paths-db.ts:41", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 my-app/scripts/fix-storage-paths-db.ts:41"}, "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-1c5236f8f24cb033", "name": "Stray `console.log` in TS/JS \u2014 my-app/scripts/compare-intent.ts:15", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 my-app/scripts/compare-intent.ts:15"}, "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-753b2a7fabf2a19e", "name": "Stray `console.log` in TS/JS \u2014 my-app/scripts/test-external-api.ts:49", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 my-app/scripts/test-external-api.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-ba729e144ccfb8dd", "name": "Stray `console.log` in TS/JS \u2014 my-app/scripts/export-events-by-date.ts:79", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 my-app/scripts/export-events-by-date.ts:79"}, "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-d4ca7bf1d946a797", "name": "Stray `console.log` in TS/JS \u2014 my-app/scripts/count-missing-attribution.ts:11", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 my-app/scripts/count-missing-attribution.ts:11"}, "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-d1153ead4a6cdfee", "name": "Stray `console.log` in TS/JS \u2014 my-app/scripts/audit-storage-cache.ts:110", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 my-app/scripts/audit-storage-cache.ts:110"}, "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-b8c54426b54bca14", "name": "Stray `console.log` in TS/JS \u2014 my-app/scripts/export-dan-qc-changes.ts:53", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 my-app/scripts/export-dan-qc-changes.ts:53"}, "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-012a61f18b98722a", "name": "Stray `console.log` in TS/JS \u2014 my-app/scripts/test-put-request.ts:9", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 my-app/scripts/test-put-request.ts:9"}, "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-8edc22d35d401f13", "name": "`truncate` class without `title=` for hover reveal \u2014 my-app/src/components/ExportReportsSection.tsx:133", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 my-app/src/components/ExportReportsSection.tsx:133"}, "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-5866d2142acf8bc8", "name": "Stray `console.log` in TS/JS \u2014 my-app/src/components/ExportReportsSection.tsx:395", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 my-app/src/components/ExportReportsSection.tsx:395"}, "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-bb9feb028db249b9", "name": "`truncate` class without `title=` for hover reveal \u2014 my-app/src/components/VideoGrid.tsx:177", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 my-app/src/components/VideoGrid.tsx:177"}, "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-23e8fb76465033ee", "name": "TODO/FIXME marker in shipping code \u2014 my-app/src/components/VideoGrid.tsx:462", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 my-app/src/components/VideoGrid.tsx:462"}, "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-285b53a8d09e7559", "name": "`truncate` class without `title=` for hover reveal \u2014 my-app/src/components/Sidebar.tsx:305", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 my-app/src/components/Sidebar.tsx:305"}, "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-5e9e1e3878b6ff96", "name": "`truncate` class without `title=` for hover reveal \u2014 my-app/src/components/AssignmentModal.tsx:132", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 my-app/src/components/AssignmentModal.tsx:132"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d9d433ec0497c695", "name": "Stray `console.log` in TS/JS \u2014 my-app/src/components/AssignmentModal.tsx:36", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 my-app/src/components/AssignmentModal.tsx:36"}, "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-660dc3f813b2a7e1", "name": "Stray `console.log` in TS/JS \u2014 my-app/src/components/workspace/VideoPlayer.tsx:117", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 my-app/src/components/workspace/VideoPlayer.tsx:117"}, "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-6c3c376653ee2930", "name": "Stray `console.log` in TS/JS \u2014 my-app/src/app/page.tsx:39", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 my-app/src/app/page.tsx:39"}, "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-ad27615801847cf0", "name": "Stray `console.log` in TS/JS \u2014 my-app/src/app/upload/page.tsx:175", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 my-app/src/app/upload/page.tsx:175"}, "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-6f3a5097e98ac692", "name": "Stray `console.log` in TS/JS \u2014 my-app/src/app/api/external/accounts/route.ts:7", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 my-app/src/app/api/external/accounts/route.ts:7"}, "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-4823271e727878da", "name": "Stray `console.log` in TS/JS \u2014 my-app/src/app/api/external/fights/route.ts:12", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 my-app/src/app/api/external/fights/route.ts:12"}, "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-2032ee5aff1bfcac", "name": "Stray `console.log` in TS/JS \u2014 my-app/src/app/api/external/fights/[title]/route.ts:16", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 my-app/src/app/api/external/fights/[title]/route.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-b04d80b1593bd67e", "name": "Stray `console.log` in TS/JS \u2014 my-app/src/app/api/external/fights/[title]/rounds/route.ts:16", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 my-app/src/app/api/external/fights/[title]/rounds/route.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-df902805901fff16", "name": "Stray `console.log` in TS/JS \u2014 my-app/src/app/api/auth/login/route.ts:23", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 my-app/src/app/api/auth/login/route.ts:23"}, "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-8d0d50720926a00c", "name": "Stray `console.log` in TS/JS \u2014 my-app/src/app/api/auth/signup/route.ts:26", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 my-app/src/app/api/auth/signup/route.ts:26"}, "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-814afa97321e45fb", "name": "Stray `console.log` in TS/JS \u2014 my-app/src/app/api/admin/migrate-boxer-names/route.ts:61", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 my-app/src/app/api/admin/migrate-boxer-names/route.ts:61"}, "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-d2edef0b9b548acd", "name": "Stray `console.log` in TS/JS \u2014 my-app/src/app/api/admin/export-events/round/route.ts:103", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 my-app/src/app/api/admin/export-events/round/route.ts:103"}, "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-77e18d5f00581987", "name": "Stray `console.log` in TS/JS \u2014 my-app/src/app/api/videos/route.ts:14", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 my-app/src/app/api/videos/route.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-782b63509805a86b", "name": "Stray `console.log` in TS/JS \u2014 my-app/src/app/api/videos/log-upload-error/route.ts:20", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 my-app/src/app/api/videos/log-upload-error/route.ts:20"}, "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-9bc9f2174fa6e411", "name": "Stray `console.log` in TS/JS \u2014 my-app/src/app/api/videos/bucket-info/route.ts:38", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 my-app/src/app/api/videos/bucket-info/route.ts:38"}, "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-b7bebfa3c5e35cf3", "name": "Stray `console.log` in TS/JS \u2014 my-app/src/app/api/videos/[id]/route.ts:84", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 my-app/src/app/api/videos/[id]/route.ts:84"}, "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-8cdfb54260ed0834", "name": "Stray `console.log` in TS/JS \u2014 my-app/src/app/api/videos/[id]/events/route.ts:110", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 my-app/src/app/api/videos/[id]/events/route.ts:110"}, "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-ce9a7cb4f060f638", "name": "Stray `console.log` in TS/JS \u2014 my-app/src/app/api/videos/[id]/assign/route.ts:30", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 my-app/src/app/api/videos/[id]/assign/route.ts:30"}, "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-0d78826a2aac163e", "name": "Stray `console.log` in TS/JS \u2014 my-app/src/app/api/videos/[id]/status/route.ts:121", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 my-app/src/app/api/videos/[id]/status/route.ts:121"}, "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-e07b816a885599e9", "name": "Stray `console.log` in TS/JS \u2014 my-app/src/app/api/videos/get-upload-token/route.ts:24", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 my-app/src/app/api/videos/get-upload-token/route.ts:24"}, "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-06e331e0c5fd865c", "name": "Stray `console.log` in TS/JS \u2014 my-app/src/app/api/videos/get-upload-urls/route.ts:22", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 my-app/src/app/api/videos/get-upload-urls/route.ts:22"}, "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-43b7e9cb1e8cd029", "name": "Stray `console.log` in TS/JS \u2014 my-app/src/app/api/debug/external-api-test/route.ts:7", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 my-app/src/app/api/debug/external-api-test/route.ts:7"}, "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-48035fe18fb10223", "name": "Stray `console.log` in TS/JS \u2014 my-app/src/app/workspace/page.tsx:172", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 my-app/src/app/workspace/page.tsx:172"}, "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-fc305a5696a5e91a", "name": "Stray `console.log` in TS/JS \u2014 my-app/src/lib/video-helpers.ts:21", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 my-app/src/lib/video-helpers.ts:21"}, "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-e92cfda6900ee40a", "name": "Stray `console.log` in TS/JS \u2014 my-app/src/lib/external-api.ts:51", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 my-app/src/lib/external-api.ts:51"}, "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-c97da70a90c5346d", "name": "Stray `console.log` in TS/JS \u2014 my-app/src/lib/storage/test-upload.ts:28", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 my-app/src/lib/storage/test-upload.ts:28"}, "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-a683f0e84676af7f", "name": "Stray `console.log` in TS/JS \u2014 my-app/src/lib/storage/standard-upload.ts:62", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 my-app/src/lib/storage/standard-upload.ts:62"}, "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-002532a87f88160e", "name": "Stray `console.log` in TS/JS \u2014 my-app/src/lib/storage/index.ts:21", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 my-app/src/lib/storage/index.ts:21"}, "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-8e09c2d3e3f27828", "name": "Stray `console.log` in TS/JS \u2014 my-app/src/lib/storage/direct-upload.ts:40", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 my-app/src/lib/storage/direct-upload.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-817450296b160d92", "name": "Stray `console.log` in TS/JS \u2014 my-app/src/lib/storage/supabase-client-upload.ts:76", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 my-app/src/lib/storage/supabase-client-upload.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-eb2ba5bfbb82d26b", "name": "Stray `console.log` in TS/JS \u2014 my-app/src/lib/storage/resumable-upload.ts:75", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 my-app/src/lib/storage/resumable-upload.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-ea1094b4b06fc91b", "name": "TODO/FIXME marker in shipping code \u2014 my-app/src/lib/storage/s3-provider.ts:21", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 my-app/src/lib/storage/s3-provider.ts:21"}, "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-c2ec7ac7a38a8be8", "name": "package.json defines install-time lifecycle scripts", "shortDescription": {"text": "package.json defines install-time lifecycle scripts"}, "fullDescription": {"text": "preinstall/install/postinstall/prepare scripts execute during dependency installation. Review them carefully for network calls, obfuscation, shell execution, or credential access."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4601e3ad3bb28677", "name": "No CI/CD pipelines detected", "shortDescription": {"text": "No CI/CD pipelines detected"}, "fullDescription": {"text": "No GitHub Actions, GitLab CI, or CircleCI configs found. Without CI you can't gate deploys on tests/lints."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-8143373ff61aa08e", "name": "Very large file: my-app/src/components/workspace/VideoPlayer.tsx (1191 lines)", "shortDescription": {"text": "Very large file: my-app/src/components/workspace/VideoPlayer.tsx (1191 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": "7 test file(s) for 95 source file(s) (ratio 0.07). 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 808 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 42 placeholder/mock markers across 10 source files. This often means the repo looks complete while core flows still use generated scaffolding or fake data."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9d79c4077342a7d0", "name": "Runtime service client appears to use placeholder configuration", "shortDescription": {"text": "Runtime service client appears to use placeholder configuration"}, "fullDescription": {"text": "A runtime source file appears to wire Supabase/Firebase/AI/payment-style clients to placeholder URLs, keys, or fallback values. In the Fable corpus this often means the UI/API shape is present while the backend service is not actually configured."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2d0c7b7ab8f8aacf", "name": "Critical user flow still appears backed by mock or placeholder data", "shortDescription": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "fullDescription": {"text": "A payment/auth/admin/order/billing-style flow contains mock, fake, TODO, dummy, or placeholder markers in runtime source. In the Fable corpus this is a high-leverage completeness smell: the app can look finished while the money, identity, or tenant flow is still scaffolded."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b9088664ace7f748", "name": "Composite production-readiness gap", "shortDescription": {"text": "Composite production-readiness gap"}, "fullDescription": {"text": "Multiple low-cost hardening controls are missing together: license, ci, tests. Opus verification showed these co-occurring gaps are a better readiness signal than reading each flag in isolation."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-749d4bc1bd66df5f", "name": "Agent instructions exist but release-hardening basics are missing", "shortDescription": {"text": "Agent instructions exist but release-hardening basics are missing"}, "fullDescription": {"text": "AI-coder instruction files were found, but the repo is missing license, ci, tests. Treat this as a contract gap: the agent is guided, but the generated output is not yet guarded by the controls that make it repeatable."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ea8f3013f588db25", "name": "Shallow git history limits provenance confidence", "shortDescription": {"text": "Shallow git history limits provenance confidence"}, "fullDescription": {"text": "The repository is a shallow clone. Origin/evolution analysis cannot distinguish fresh generation, imported legacy code, or long-lived human code with high confidence."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8424db9c75e04ba4", "name": "Very short observed git history", "shortDescription": {"text": "Very short observed git history"}, "fullDescription": {"text": "The repo has multiple source files but two or fewer visible commits. This is not a failure by itself, but it lowers confidence in evolution-based diagnosis."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-122f91b7f2906dc4", "name": "Agent authority lacks a verifier contract: .claude/settings.json", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/settings.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-6a84c58dd9354a06", "name": "`fetch()` without try/.catch or AbortSignal \u2014 my-app/src/components/ExportReportsSection.tsx:396", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 my-app/src/components/ExportReportsSection.tsx:396"}, "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-fde56cc262a91db4", "name": "`fetch()` without try/.catch or AbortSignal \u2014 my-app/src/components/ClipExportPanel.tsx:25", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 my-app/src/components/ClipExportPanel.tsx:25"}, "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-55c96c95493754b5", "name": "`fetch()` without try/.catch or AbortSignal \u2014 my-app/src/components/AssignmentModal.tsx:92", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 my-app/src/components/AssignmentModal.tsx:92"}, "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-30e304feaef94a01", "name": "`fetch()` without try/.catch or AbortSignal \u2014 my-app/src/app/api/external/accounts/route.ts:25", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 my-app/src/app/api/external/accounts/route.ts:25"}, "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-b75408fb86109516", "name": "`fetch()` without try/.catch or AbortSignal \u2014 my-app/src/app/api/external/fights/[title]/route.ts:109", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 my-app/src/app/api/external/fights/[title]/route.ts:109"}, "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-88c2493f479f67b4", "name": "`fetch()` without try/.catch or AbortSignal \u2014 my-app/src/app/api/videos/bucket-info/route.ts:17", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 my-app/src/app/api/videos/bucket-info/route.ts:17"}, "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-cf6434d5ed3e8f38", "name": "Commented-code block (6 lines) in my-app/src/app/api/videos/[id]/events/route.ts:75", "shortDescription": {"text": "Commented-code block (6 lines) in my-app/src/app/api/videos/[id]/events/route.ts:75"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fe96f7e994cd2393", "name": "`fetch()` without try/.catch or AbortSignal \u2014 my-app/src/app/api/debug/external-api-test/route.ts:214", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 my-app/src/app/api/debug/external-api-test/route.ts:214"}, "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-3634c6ee0a648af9", "name": "`fetch()` without try/.catch or AbortSignal \u2014 my-app/src/app/workspace/page.tsx:369", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 my-app/src/app/workspace/page.tsx:369"}, "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-c2a2e2cbc0ccb79c", "name": "`fetch()` without try/.catch or AbortSignal \u2014 my-app/src/lib/external-api.ts:133", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 my-app/src/lib/external-api.ts:133"}, "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-2ff122b01c937df1", "name": "`fetch()` without try/.catch or AbortSignal \u2014 my-app/src/lib/hooks/useCurrentUser.ts:41", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 my-app/src/lib/hooks/useCurrentUser.ts:41"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ac1764f3c428963a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 my-app/src/lib/storage/standard-upload.ts:30", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 my-app/src/lib/storage/standard-upload.ts:30"}, "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-18ef884e5cd180e8", "name": "`fetch()` without try/.catch or AbortSignal \u2014 my-app/src/lib/storage/direct-upload.ts:125", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 my-app/src/lib/storage/direct-upload.ts:125"}, "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-4d9f6e90e81abf86", "name": "`fetch()` without try/.catch or AbortSignal \u2014 my-app/src/lib/storage/supabase-client-upload.ts:34", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 my-app/src/lib/storage/supabase-client-upload.ts:34"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2a41a247c7985fb8", "name": "`fetch()` without try/.catch or AbortSignal \u2014 my-app/src/lib/storage/resumable-upload.ts:39", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 my-app/src/lib/storage/resumable-upload.ts:39"}, "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}}]}}, "automationDetails": {"id": "repobility/19848"}, "properties": {"repository": "slimmsyd/BRLabelingApplication", "repoUrl": "https://github.com/slimmsyd/BRLabelingApplication", "branch": "main"}, "results": [{"ruleId": "scanner-f5321e137e2abdaf", "level": "note", "message": {"text": "Possibly dead Python function: add_labeller_to_all_assignments"}, "properties": {"repobilityId": "cd67cf7e2e4ab28d", "scanner": "scanner-primary", "fingerprint": "f5321e137e2abdaf", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "Python/scripts/allocate_labeller.py:49"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-305a7107e568ade0", "level": "note", "message": {"text": "Possibly dead Python function: replace_labeller_in_all_assignments"}, "properties": {"repobilityId": "fcea5789cfbf9910", "scanner": "scanner-primary", "fingerprint": "305a7107e568ade0", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "Python/scripts/allocate_labeller.py:74"}, "region": {"startLine": 1}}}]}, {"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-c8fde27d31541a6c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 my-app/scripts/check-nakatani-videos.ts:27"}, "properties": {"repobilityId": "2f00e217e53abfbc", "scanner": "scanner-primary", "fingerprint": "c8fde27d31541a6c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6a16665699118a14", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 my-app/scripts/export-events-jan-19-23.ts:109"}, "properties": {"repobilityId": "ce93a0dfe715346f", "scanner": "scanner-primary", "fingerprint": "6a16665699118a14", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3757b8537065b595", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 my-app/scripts/check-storage-limits.ts:24"}, "properties": {"repobilityId": "b49a479ab8407f46", "scanner": "scanner-primary", "fingerprint": "3757b8537065b595", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5ed073d220a249d6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 my-app/scripts/backfill-video-titles.ts:6"}, "properties": {"repobilityId": "7680b2abfb18f4c4", "scanner": "scanner-primary", "fingerprint": "5ed073d220a249d6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-51c0d461bc163971", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 my-app/scripts/check-assignment.ts:17"}, "properties": {"repobilityId": "0911b22b283fa7ec", "scanner": "scanner-primary", "fingerprint": "51c0d461bc163971", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d97193f67069e1db", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 my-app/scripts/rename-storage-paths.ts:67"}, "properties": {"repobilityId": "3116a6d7e810f632", "scanner": "scanner-primary", "fingerprint": "d97193f67069e1db", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-99dcf11ef0d25b5a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 my-app/scripts/backfill-external-api.ts:125"}, "properties": {"repobilityId": "c06c118ed026caee", "scanner": "scanner-primary", "fingerprint": "99dcf11ef0d25b5a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0930f9fc6b2b3017", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 my-app/scripts/test-get-fight.ts:9"}, "properties": {"repobilityId": "83b3661dcd804eb7", "scanner": "scanner-primary", "fingerprint": "0930f9fc6b2b3017", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-82f511583f230262", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 my-app/scripts/count-missing-attribution.js:11"}, "properties": {"repobilityId": "e69225c9ea42fe71", "scanner": "scanner-primary", "fingerprint": "82f511583f230262", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f47444c713d24420", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 my-app/scripts/validate-qc-data.ts:11"}, "properties": {"repobilityId": "fb64d12ee9662ef7", "scanner": "scanner-primary", "fingerprint": "f47444c713d24420", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-222b229f3a6f7897", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 my-app/scripts/test-preserve-event-createdat.ts:60"}, "properties": {"repobilityId": "801b9f7a870ad213", "scanner": "scanner-primary", "fingerprint": "222b229f3a6f7897", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-54532d29b2d041a4", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 my-app/scripts/backfill-data.ts:77"}, "properties": {"repobilityId": "33dc5dfe8b05380b", "scanner": "scanner-primary", "fingerprint": "54532d29b2d041a4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-abb7258c1fc85cf3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 my-app/scripts/export-events-feb-2-6.ts:112"}, "properties": {"repobilityId": "91c8506f47c82575", "scanner": "scanner-primary", "fingerprint": "abb7258c1fc85cf3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-29e49863eab701af", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 my-app/scripts/fix-storage-paths-db.ts:41"}, "properties": {"repobilityId": "029f0ef9988f7a9f", "scanner": "scanner-primary", "fingerprint": "29e49863eab701af", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1c5236f8f24cb033", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 my-app/scripts/compare-intent.ts:15"}, "properties": {"repobilityId": "13a88cb6f39ea15c", "scanner": "scanner-primary", "fingerprint": "1c5236f8f24cb033", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-753b2a7fabf2a19e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 my-app/scripts/test-external-api.ts:49"}, "properties": {"repobilityId": "eb42c19802964196", "scanner": "scanner-primary", "fingerprint": "753b2a7fabf2a19e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ba729e144ccfb8dd", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 my-app/scripts/export-events-by-date.ts:79"}, "properties": {"repobilityId": "cf9cb45aeefc8843", "scanner": "scanner-primary", "fingerprint": "ba729e144ccfb8dd", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d4ca7bf1d946a797", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 my-app/scripts/count-missing-attribution.ts:11"}, "properties": {"repobilityId": "e0e9619207fca24c", "scanner": "scanner-primary", "fingerprint": "d4ca7bf1d946a797", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d1153ead4a6cdfee", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 my-app/scripts/audit-storage-cache.ts:110"}, "properties": {"repobilityId": "42ca360ee352743b", "scanner": "scanner-primary", "fingerprint": "d1153ead4a6cdfee", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b8c54426b54bca14", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 my-app/scripts/export-dan-qc-changes.ts:53"}, "properties": {"repobilityId": "0c08633c620301a5", "scanner": "scanner-primary", "fingerprint": "b8c54426b54bca14", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-012a61f18b98722a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 my-app/scripts/test-put-request.ts:9"}, "properties": {"repobilityId": "eaba65384e1cb42c", "scanner": "scanner-primary", "fingerprint": "012a61f18b98722a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8edc22d35d401f13", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 my-app/src/components/ExportReportsSection.tsx:133"}, "properties": {"repobilityId": "15da72ae5164880f", "scanner": "scanner-primary", "fingerprint": "8edc22d35d401f13", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-5866d2142acf8bc8", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 my-app/src/components/ExportReportsSection.tsx:395"}, "properties": {"repobilityId": "76921cc8959abd15", "scanner": "scanner-primary", "fingerprint": "5866d2142acf8bc8", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-bb9feb028db249b9", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 my-app/src/components/VideoGrid.tsx:177"}, "properties": {"repobilityId": "4026f4d95507858e", "scanner": "scanner-primary", "fingerprint": "bb9feb028db249b9", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-23e8fb76465033ee", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 my-app/src/components/VideoGrid.tsx:462"}, "properties": {"repobilityId": "7fd5d6c0fc8c2dec", "scanner": "scanner-primary", "fingerprint": "23e8fb76465033ee", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-285b53a8d09e7559", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 my-app/src/components/Sidebar.tsx:305"}, "properties": {"repobilityId": "d5cbf63e2ac629d0", "scanner": "scanner-primary", "fingerprint": "285b53a8d09e7559", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-5e9e1e3878b6ff96", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 my-app/src/components/AssignmentModal.tsx:132"}, "properties": {"repobilityId": "3f8dd24fbf1a187e", "scanner": "scanner-primary", "fingerprint": "5e9e1e3878b6ff96", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d9d433ec0497c695", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 my-app/src/components/AssignmentModal.tsx:36"}, "properties": {"repobilityId": "4ccdd08070f2f90f", "scanner": "scanner-primary", "fingerprint": "d9d433ec0497c695", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-660dc3f813b2a7e1", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 my-app/src/components/workspace/VideoPlayer.tsx:117"}, "properties": {"repobilityId": "35275d2f673ebeac", "scanner": "scanner-primary", "fingerprint": "660dc3f813b2a7e1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6c3c376653ee2930", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 my-app/src/app/page.tsx:39"}, "properties": {"repobilityId": "bb2c6e6fa8306123", "scanner": "scanner-primary", "fingerprint": "6c3c376653ee2930", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ad27615801847cf0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 my-app/src/app/upload/page.tsx:175"}, "properties": {"repobilityId": "b3673228da6840c7", "scanner": "scanner-primary", "fingerprint": "ad27615801847cf0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6f3a5097e98ac692", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 my-app/src/app/api/external/accounts/route.ts:7"}, "properties": {"repobilityId": "d1a29df5f7bbca8c", "scanner": "scanner-primary", "fingerprint": "6f3a5097e98ac692", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4823271e727878da", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 my-app/src/app/api/external/fights/route.ts:12"}, "properties": {"repobilityId": "2a7d2beae3934850", "scanner": "scanner-primary", "fingerprint": "4823271e727878da", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2032ee5aff1bfcac", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 my-app/src/app/api/external/fights/[title]/route.ts:16"}, "properties": {"repobilityId": "9d4794b4df9fa5a9", "scanner": "scanner-primary", "fingerprint": "2032ee5aff1bfcac", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b04d80b1593bd67e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 my-app/src/app/api/external/fights/[title]/rounds/route.ts:16"}, "properties": {"repobilityId": "08b8c926a1c4fe6a", "scanner": "scanner-primary", "fingerprint": "b04d80b1593bd67e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-df902805901fff16", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 my-app/src/app/api/auth/login/route.ts:23"}, "properties": {"repobilityId": "ea956bcbefa768b4", "scanner": "scanner-primary", "fingerprint": "df902805901fff16", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8d0d50720926a00c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 my-app/src/app/api/auth/signup/route.ts:26"}, "properties": {"repobilityId": "853b0fdad3100d37", "scanner": "scanner-primary", "fingerprint": "8d0d50720926a00c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-814afa97321e45fb", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 my-app/src/app/api/admin/migrate-boxer-names/route.ts:61"}, "properties": {"repobilityId": "d7a1ffbfd79442eb", "scanner": "scanner-primary", "fingerprint": "814afa97321e45fb", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d2edef0b9b548acd", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 my-app/src/app/api/admin/export-events/round/route.ts:103"}, "properties": {"repobilityId": "205bcf014808a8c7", "scanner": "scanner-primary", "fingerprint": "d2edef0b9b548acd", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-77e18d5f00581987", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 my-app/src/app/api/videos/route.ts:14"}, "properties": {"repobilityId": "17fd9211411ca0d6", "scanner": "scanner-primary", "fingerprint": "77e18d5f00581987", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-782b63509805a86b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 my-app/src/app/api/videos/log-upload-error/route.ts:20"}, "properties": {"repobilityId": "e058d83f77ff5df1", "scanner": "scanner-primary", "fingerprint": "782b63509805a86b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9bc9f2174fa6e411", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 my-app/src/app/api/videos/bucket-info/route.ts:38"}, "properties": {"repobilityId": "79b3d21fbe1cd6b2", "scanner": "scanner-primary", "fingerprint": "9bc9f2174fa6e411", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b7bebfa3c5e35cf3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 my-app/src/app/api/videos/[id]/route.ts:84"}, "properties": {"repobilityId": "a710d9f0af359aa8", "scanner": "scanner-primary", "fingerprint": "b7bebfa3c5e35cf3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8cdfb54260ed0834", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 my-app/src/app/api/videos/[id]/events/route.ts:110"}, "properties": {"repobilityId": "1b85da6479022cd5", "scanner": "scanner-primary", "fingerprint": "8cdfb54260ed0834", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ce9a7cb4f060f638", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 my-app/src/app/api/videos/[id]/assign/route.ts:30"}, "properties": {"repobilityId": "4690ee6ff45ece19", "scanner": "scanner-primary", "fingerprint": "ce9a7cb4f060f638", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0d78826a2aac163e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 my-app/src/app/api/videos/[id]/status/route.ts:121"}, "properties": {"repobilityId": "e3d34f92f84adc18", "scanner": "scanner-primary", "fingerprint": "0d78826a2aac163e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e07b816a885599e9", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 my-app/src/app/api/videos/get-upload-token/route.ts:24"}, "properties": {"repobilityId": "1df42c691717549f", "scanner": "scanner-primary", "fingerprint": "e07b816a885599e9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-06e331e0c5fd865c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 my-app/src/app/api/videos/get-upload-urls/route.ts:22"}, "properties": {"repobilityId": "3df5ce55971833f9", "scanner": "scanner-primary", "fingerprint": "06e331e0c5fd865c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-43b7e9cb1e8cd029", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 my-app/src/app/api/debug/external-api-test/route.ts:7"}, "properties": {"repobilityId": "6bddcf52917425c1", "scanner": "scanner-primary", "fingerprint": "43b7e9cb1e8cd029", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-48035fe18fb10223", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 my-app/src/app/workspace/page.tsx:172"}, "properties": {"repobilityId": "5c035303af6f6e9d", "scanner": "scanner-primary", "fingerprint": "48035fe18fb10223", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-fc305a5696a5e91a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 my-app/src/lib/video-helpers.ts:21"}, "properties": {"repobilityId": "42d116401e2dc447", "scanner": "scanner-primary", "fingerprint": "fc305a5696a5e91a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e92cfda6900ee40a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 my-app/src/lib/external-api.ts:51"}, "properties": {"repobilityId": "bfdaf35be8bd0eef", "scanner": "scanner-primary", "fingerprint": "e92cfda6900ee40a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c97da70a90c5346d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 my-app/src/lib/storage/test-upload.ts:28"}, "properties": {"repobilityId": "9828c5584db99c7e", "scanner": "scanner-primary", "fingerprint": "c97da70a90c5346d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a683f0e84676af7f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 my-app/src/lib/storage/standard-upload.ts:62"}, "properties": {"repobilityId": "6fac1c22bc698b78", "scanner": "scanner-primary", "fingerprint": "a683f0e84676af7f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-002532a87f88160e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 my-app/src/lib/storage/index.ts:21"}, "properties": {"repobilityId": "2e7f60adc891094a", "scanner": "scanner-primary", "fingerprint": "002532a87f88160e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8e09c2d3e3f27828", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 my-app/src/lib/storage/direct-upload.ts:40"}, "properties": {"repobilityId": "98243a7b4b8e674a", "scanner": "scanner-primary", "fingerprint": "8e09c2d3e3f27828", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-817450296b160d92", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 my-app/src/lib/storage/supabase-client-upload.ts:76"}, "properties": {"repobilityId": "d77f5dc31b69975b", "scanner": "scanner-primary", "fingerprint": "817450296b160d92", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-eb2ba5bfbb82d26b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 my-app/src/lib/storage/resumable-upload.ts:75"}, "properties": {"repobilityId": "f2ba0901140f7a76", "scanner": "scanner-primary", "fingerprint": "eb2ba5bfbb82d26b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ea1094b4b06fc91b", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 my-app/src/lib/storage/s3-provider.ts:21"}, "properties": {"repobilityId": "e3df0618dab33d03", "scanner": "scanner-primary", "fingerprint": "ea1094b4b06fc91b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-c2ec7ac7a38a8be8", "level": "note", "message": {"text": "package.json defines install-time lifecycle scripts"}, "properties": {"repobilityId": "496c5d1ec4851fc5", "scanner": "scanner-primary", "fingerprint": "c2ec7ac7a38a8be8", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "npm", "install-scripts"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "my-app/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-4601e3ad3bb28677", "level": "warning", "message": {"text": "No CI/CD pipelines detected"}, "properties": {"repobilityId": "c3ee439bce2bc51e", "scanner": "scanner-primary", "fingerprint": "4601e3ad3bb28677", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["coverage"]}}, {"ruleId": "scanner-8143373ff61aa08e", "level": "note", "message": {"text": "Very large file: my-app/src/components/workspace/VideoPlayer.tsx (1191 lines)"}, "properties": {"repobilityId": "8f0142e5745bfdcf", "scanner": "scanner-primary", "fingerprint": "8143373ff61aa08e", "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": "96f0abba2a4ac04a", "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": "2141e9bfcd62c592", "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": "8f4bdde72fc5a96c", "scanner": "scanner-primary", "fingerprint": "72b2a6250083a784", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "incomplete", "generated-repo-pattern"]}}, {"ruleId": "scanner-9d79c4077342a7d0", "level": "warning", "message": {"text": "Runtime service client appears to use placeholder configuration"}, "properties": {"repobilityId": "a3211fedbe74afb9", "scanner": "scanner-primary", "fingerprint": "9d79c4077342a7d0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "runtime-config", "service-client", "generated-repo-pattern"]}}, {"ruleId": "scanner-2d0c7b7ab8f8aacf", "level": "warning", "message": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "properties": {"repobilityId": "229ee6442a5681f2", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-b9088664ace7f748", "level": "warning", "message": {"text": "Composite production-readiness gap"}, "properties": {"repobilityId": "586e1f5269870b88", "scanner": "scanner-primary", "fingerprint": "b9088664ace7f748", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["production-readiness", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-749d4bc1bd66df5f", "level": "warning", "message": {"text": "Agent instructions exist but release-hardening basics are missing"}, "properties": {"repobilityId": "1875e118ccdb513a", "scanner": "scanner-primary", "fingerprint": "749d4bc1bd66df5f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-ea8f3013f588db25", "level": "note", "message": {"text": "Shallow git history limits provenance confidence"}, "properties": {"repobilityId": "904c3f9c524fa50a", "scanner": "scanner-primary", "fingerprint": "ea8f3013f588db25", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-8424db9c75e04ba4", "level": "none", "message": {"text": "Very short observed git history"}, "properties": {"repobilityId": "0efea9582139d40d", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-122f91b7f2906dc4", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/settings.json"}, "properties": {"repobilityId": "a2967269048b6a9d", "scanner": "scanner-primary", "fingerprint": "122f91b7f2906dc4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/settings.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-6a84c58dd9354a06", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 my-app/src/components/ExportReportsSection.tsx:396"}, "properties": {"repobilityId": "207abd82aaaf7b67", "scanner": "scanner-primary", "fingerprint": "6a84c58dd9354a06", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-fde56cc262a91db4", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 my-app/src/components/ClipExportPanel.tsx:25"}, "properties": {"repobilityId": "e104d2f9738eb3ae", "scanner": "scanner-primary", "fingerprint": "fde56cc262a91db4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-55c96c95493754b5", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 my-app/src/components/AssignmentModal.tsx:92"}, "properties": {"repobilityId": "db1a81d07307a52e", "scanner": "scanner-primary", "fingerprint": "55c96c95493754b5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-30e304feaef94a01", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 my-app/src/app/api/external/accounts/route.ts:25"}, "properties": {"repobilityId": "924724a9ec5000d6", "scanner": "scanner-primary", "fingerprint": "30e304feaef94a01", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b75408fb86109516", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 my-app/src/app/api/external/fights/[title]/route.ts:109"}, "properties": {"repobilityId": "8ad5b7ffc90dbf91", "scanner": "scanner-primary", "fingerprint": "b75408fb86109516", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-88c2493f479f67b4", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 my-app/src/app/api/videos/bucket-info/route.ts:17"}, "properties": {"repobilityId": "f2b5f5df11df1ffc", "scanner": "scanner-primary", "fingerprint": "88c2493f479f67b4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-cf6434d5ed3e8f38", "level": "none", "message": {"text": "Commented-code block (6 lines) in my-app/src/app/api/videos/[id]/events/route.ts:75"}, "properties": {"repobilityId": "2b958395186ccbc4", "scanner": "scanner-primary", "fingerprint": "cf6434d5ed3e8f38", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fe96f7e994cd2393", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 my-app/src/app/api/debug/external-api-test/route.ts:214"}, "properties": {"repobilityId": "965d2ab5171d53d4", "scanner": "scanner-primary", "fingerprint": "fe96f7e994cd2393", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3634c6ee0a648af9", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 my-app/src/app/workspace/page.tsx:369"}, "properties": {"repobilityId": "cf3f395f473f528e", "scanner": "scanner-primary", "fingerprint": "3634c6ee0a648af9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c2a2e2cbc0ccb79c", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 my-app/src/lib/external-api.ts:133"}, "properties": {"repobilityId": "adb7e503b60eacae", "scanner": "scanner-primary", "fingerprint": "c2a2e2cbc0ccb79c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2ff122b01c937df1", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 my-app/src/lib/hooks/useCurrentUser.ts:41"}, "properties": {"repobilityId": "dbeced7f95d2867c", "scanner": "scanner-primary", "fingerprint": "2ff122b01c937df1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ac1764f3c428963a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 my-app/src/lib/storage/standard-upload.ts:30"}, "properties": {"repobilityId": "e85fe9569866b6d5", "scanner": "scanner-primary", "fingerprint": "ac1764f3c428963a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-18ef884e5cd180e8", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 my-app/src/lib/storage/direct-upload.ts:125"}, "properties": {"repobilityId": "4ad7c134e020ca8e", "scanner": "scanner-primary", "fingerprint": "18ef884e5cd180e8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4d9f6e90e81abf86", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 my-app/src/lib/storage/supabase-client-upload.ts:34"}, "properties": {"repobilityId": "ea421c23733694aa", "scanner": "scanner-primary", "fingerprint": "4d9f6e90e81abf86", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2a41a247c7985fb8", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 my-app/src/lib/storage/resumable-upload.ts:39"}, "properties": {"repobilityId": "1a1f8d78e03c3f0a", "scanner": "scanner-primary", "fingerprint": "2a41a247c7985fb8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}]}]}