{"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-893ef2f0f01fd289", "name": "Stray `console.log` in TS/JS \u2014 seed-riverside.ts:8", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 seed-riverside.ts:8"}, "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-a29612114c9fab2f", "name": "Stray `console.log` in TS/JS \u2014 seed-orders.ts:27", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 seed-orders.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-586c7f9e9cb9ea25", "name": "Stray `console.log` in TS/JS \u2014 simulate-build.ts:7", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 simulate-build.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-690f41f42d965497", "name": "Stray `console.log` in TS/JS \u2014 docs/build-guide-docx.js:233", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 docs/build-guide-docx.js:233"}, "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-cb24e6d34d7418bf", "name": "Stray `console.log` in TS/JS \u2014 docs/build-pptx.js:282", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 docs/build-pptx.js:282"}, "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-f6b3163005d71cb3", "name": "Stray `console.log` in TS/JS \u2014 docs/build-flows-docx.js:294", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 docs/build-flows-docx.js:294"}, "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-c1a40a661ff40400", "name": "Stray `console.log` in TS/JS \u2014 scripts/diag-templates.ts:14", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/diag-templates.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-6a08c3ef2f4db98f", "name": "Stray `console.log` in TS/JS \u2014 scripts/preview-cleanup.ts:56", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/preview-cleanup.ts:56"}, "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-8032267254382c2c", "name": "Stray `console.log` in TS/JS \u2014 scripts/tighten-original-dates.ts:19", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/tighten-original-dates.ts:19"}, "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-e08c0e1322d317ce", "name": "Stray `console.log` in TS/JS \u2014 scripts/apply-order-lateness-reasons-schema.ts:50", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/apply-order-lateness-reasons-schema.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-56d98424f9af2753", "name": "Stray `console.log` in TS/JS \u2014 scripts/inspect-contacts-suppliers.ts:14", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/inspect-contacts-suppliers.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-d9059fb4777a3cf6", "name": "Stray `console.log` in TS/JS \u2014 scripts/create-sites.js:91", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/create-sites.js:91"}, "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-9d6cd36f54fcf641", "name": "Stray `console.log` in TS/JS \u2014 scripts/apply-immutability-triggers.ts:91", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/apply-immutability-triggers.ts:91"}, "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-eb2b2aca7e814c23", "name": "Stray `console.log` in TS/JS \u2014 scripts/fix-2story-and-variants.ts:90", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-2story-and-variants.ts:90"}, "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-18d980a8754aef29", "name": "Stray `console.log` in TS/JS \u2014 scripts/apply-compliance-toolbox-ncr-schema.ts:11", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/apply-compliance-toolbox-ncr-schema.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-acf1f8e8e5b639e5", "name": "Stray `console.log` in TS/JS \u2014 scripts/inspect-templates.ts:22", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/inspect-templates.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-995057c5060fac0f", "name": "Stray `console.log` in TS/JS \u2014 scripts/test-cascade-e2e.ts:26", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-cascade-e2e.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-ca6fdca25cfb10d6", "name": "Stray `console.log` in TS/JS \u2014 scripts/smoke-test.ts:428", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/smoke-test.ts:428"}, "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-4d41c2bfcd5c85bc", "name": "Stray `console.log` in TS/JS \u2014 scripts/apply-order-split.ts:11", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/apply-order-split.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-b1c4cfd5e033a584", "name": "Stray `console.log` in TS/JS \u2014 scripts/apply-toolbox-talk-doc.ts:12", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/apply-toolbox-talk-doc.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-d1526b8e53fb42ea", "name": "Stray `console.log` in TS/JS \u2014 scripts/seed-lateness-from-current-state.ts:70", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-lateness-from-current-state.ts:70"}, "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-3b68643b4b58b0ea", "name": "Stray `console.log` in TS/JS \u2014 scripts/apply-watched-sites-schema.ts:15", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/apply-watched-sites-schema.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-8da73b75c6739c4f", "name": "Stray `console.log` in TS/JS \u2014 scripts/diag-orphan-orders.ts:18", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/diag-orphan-orders.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-8077867d46386ae9", "name": "Stray `console.log` in TS/JS \u2014 scripts/apply-event-log-detail-schema.ts:25", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/apply-event-log-detail-schema.ts:25"}, "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-78af5218281a127d", "name": "Stray `console.log` in TS/JS \u2014 scripts/cleanup-orphan-orders.ts:20", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/cleanup-orphan-orders.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-ca75acaf3cdc1937", "name": "Stray `console.log` in TS/JS \u2014 scripts/repro-stage-gap.ts:16", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/repro-stage-gap.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-4950f476ec9e4ac2", "name": "Stray `console.log` in TS/JS \u2014 scripts/apply-toolbox-contractor-link.ts:17", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/apply-toolbox-contractor-link.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-49d42843632e1461", "name": "Stray `console.log` in TS/JS \u2014 scripts/apply-site-completed-at.ts:15", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/apply-site-completed-at.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-35014609d6fd4be3", "name": "Stray `console.log` in TS/JS \u2014 scripts/nuke-site.ts:21", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/nuke-site.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-001c13a647793429", "name": "Stray `console.log` in TS/JS \u2014 scripts/seed-users.ts:7", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-users.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-74df595d0264550b", "name": "Stray `console.log` in TS/JS \u2014 scripts/test-audit-fixes.ts:88", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-audit-fixes.ts:88"}, "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-f2f3af0ffd24cff0", "name": "Stray `console.log` in TS/JS \u2014 scripts/populate-template-orders.js:231", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/populate-template-orders.js:231"}, "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-af637e82fbc04cc7", "name": "Stray `console.log` in TS/JS \u2014 scripts/apply-enum-check-constraints.ts:70", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/apply-enum-check-constraints.ts:70"}, "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-c27194dcb45d0018", "name": "Stray `console.log` in TS/JS \u2014 scripts/audit-contact-dedup.ts:22", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/audit-contact-dedup.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-e00e6936d8d0197c", "name": "Stray `console.log` in TS/JS \u2014 scripts/backfill-skewed-ordered-deliveries.ts:43", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/backfill-skewed-ordered-deliveries.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-3d07df97f4433948", "name": "Stray `console.log` in TS/JS \u2014 scripts/e2e-full-test.ts:37", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/e2e-full-test.ts:37"}, "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-a7a53c93dd570744", "name": "Stray `console.log` in TS/JS \u2014 scripts/migrate-variants-to-fullfat.ts:41", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/migrate-variants-to-fullfat.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-56767f55d942b656", "name": "Stray `console.log` in TS/JS \u2014 scripts/apply-site-event-notification-types.ts:12", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/apply-site-event-notification-types.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-d7d91ce8f089f2d8", "name": "Stray `console.log` in TS/JS \u2014 scripts/audit-analytics-vs-brief.ts:35", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/audit-analytics-vs-brief.ts:35"}, "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-1028c1a63d61712f", "name": "Stray `console.log` in TS/JS \u2014 scripts/restore-templates.ts:17", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/restore-templates.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-102a1e9a2ceb54f1", "name": "Stray `console.log` in TS/JS \u2014 scripts/apply-audit-indexes.ts:92", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/apply-audit-indexes.ts: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-abf25a0191012ffa", "name": "Stray `console.log` in TS/JS \u2014 scripts/apply-cascade-to-setnull.ts:92", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/apply-cascade-to-setnull.ts: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-435956e8a5fb3c2d", "name": "Stray `console.log` in TS/JS \u2014 scripts/fix-stage-gap-now.ts:17", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-stage-gap-now.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-38979aea08f7a7ad", "name": "Stray `console.log` in TS/JS \u2014 scripts/promote-drafts-to-live.ts:29", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/promote-drafts-to-live.ts:29"}, "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-e747a07a9d83212d", "name": "Stray `console.log` in TS/JS \u2014 scripts/diag-2story-suppliers.ts:23", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/diag-2story-suppliers.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-b53a2227d4522183", "name": "Stray `console.log` in TS/JS \u2014 scripts/test-quants-stress.ts:62", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-quants-stress.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-758a6cd9a3b9e7ce", "name": "Stray `console.log` in TS/JS \u2014 scripts/check-contact-split.ts:6", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-contact-split.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-750a607078045d49", "name": "Stray `console.log` in TS/JS \u2014 scripts/apply-customer-push-subscription.ts:11", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/apply-customer-push-subscription.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-972d1a2708e52d1b", "name": "Stray `console.log` in TS/JS \u2014 scripts/apply-delay-reasons-schema.ts:26", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/apply-delay-reasons-schema.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-05bb84211bfd687c", "name": "Stray `console.log` in TS/JS \u2014 scripts/rebaseline-originals.ts:27", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/rebaseline-originals.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-2c159e40fefda76f", "name": "Stray `console.log` in TS/JS \u2014 scripts/apply-user-archived-at.ts:25", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/apply-user-archived-at.ts:25"}, "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-6d79358143ce04af", "name": "Stray `console.log` in TS/JS \u2014 scripts/reconcile-late-completion-overlaps.ts:44", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/reconcile-late-completion-overlaps.ts:44"}, "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-c640869615e0d8f7", "name": "Stray `console.log` in TS/JS \u2014 scripts/audit-performance.ts:46", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/audit-performance.ts:46"}, "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-66beda0899aed8f7", "name": "Stray `console.log` in TS/JS \u2014 scripts/inspect-db.ts:34", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/inspect-db.ts:34"}, "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-4308b9f3cd9cb3de", "name": "Stray `console.log` in TS/JS \u2014 scripts/recompute-plot-dates.ts:52", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/recompute-plot-dates.ts: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-76405099468c34c6", "name": "Stray `console.log` in TS/JS \u2014 scripts/inspect-2story-full.ts:14", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/inspect-2story-full.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-9bc2ae5a871a6f38", "name": "Stray `console.log` in TS/JS \u2014 scripts/ensure-test-account.ts:69", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/ensure-test-account.ts:69"}, "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-ad90f5f8c272b5b8", "name": "Stray `console.log` in TS/JS \u2014 scripts/reset-old-hall-village.ts:41", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/reset-old-hall-village.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-900559e4cb6de60f", "name": "Stray `console.log` in TS/JS \u2014 scripts/apply-prestart-variations-defects-schema.ts:12", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/apply-prestart-variations-defects-schema.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-5c072a45f5ca5b29", "name": "Stray `console.log` in TS/JS \u2014 scripts/apply-draw-voice-annotation-schema.ts:11", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/apply-draw-voice-annotation-schema.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-b9bfdd559b194166", "name": "Stray `console.log` in TS/JS \u2014 scripts/test-cascade.ts:34", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-cascade.ts:34"}, "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-aa0e35c1a83a73e8", "name": "Stray `console.log` in TS/JS \u2014 scripts/test-consistency.ts:57", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-consistency.ts:57"}, "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-7bbb59d86cfa941b", "name": "Stray `console.log` in TS/JS \u2014 scripts/test-scale.ts:66", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-scale.ts:66"}, "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-07d91f118153a369", "name": "Stray `console.log` in TS/JS \u2014 scripts/apply-customer-share-schema.ts:23", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/apply-customer-share-schema.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-ac78323d3a967623", "name": "Stray `console.log` in TS/JS \u2014 scripts/migrate-subjob-duration-to-days.ts:22", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/migrate-subjob-duration-to-days.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-229e80b5aff13472", "name": "Stray `console.log` in TS/JS \u2014 scripts/apply-archive-pattern.ts:30", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/apply-archive-pattern.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-85a35f473be2130a", "name": "Stray `console.log` in TS/JS \u2014 scripts/apply-lateness-event.ts:14", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/apply-lateness-event.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-c2d854cddefcb03f", "name": "Stray `console.log` in TS/JS \u2014 scripts/apply-templates-schema.ts:207", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/apply-templates-schema.ts:207"}, "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-1c88134548ce87e7", "name": "Stray `console.log` in TS/JS \u2014 scripts/verify-2story.ts:26", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/verify-2story.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-fb9ef405ba93c50f", "name": "Stray `console.log` in TS/JS \u2014 scripts/test-quants.ts:62", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-quants.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-82e21da41c230413", "name": "Stray `console.log` in TS/JS \u2014 scripts/backfill-compliance-permissions.ts:32", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/backfill-compliance-permissions.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-8e06f9b0ef1621c5", "name": "Stray `console.log` in TS/JS \u2014 scripts/seed-ui-test.ts:17", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-ui-test.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-473a83d15dade003", "name": "Stray `console.log` in TS/JS \u2014 scripts/repair-plot-cascade.ts:210", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/repair-plot-cascade.ts:210"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-067665f32d91cac8", "name": "Stray `console.log` in TS/JS \u2014 scripts/apply-eventlog-cascade-fix.ts:95", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/apply-eventlog-cascade-fix.ts:95"}, "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-c318089f25ff516f", "name": "Stray `console.log` in TS/JS \u2014 scripts/apply-rained-off-date-index.ts:22", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/apply-rained-off-date-index.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-35421f01b2178b9b", "name": "Stray `console.log` in TS/JS \u2014 scripts/generate-icons.js:204", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/generate-icons.js:204"}, "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-890f0a45fe95fc1a", "name": "Stray `console.log` in TS/JS \u2014 scripts/apply-lateness-supplier-attribution.ts:26", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/apply-lateness-supplier-attribution.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-a1f00e4f6d46f16c", "name": "Stray `console.log` in TS/JS \u2014 scripts/seed-launch-sites.ts:44", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-launch-sites.ts:44"}, "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-0a99688bf1e03685", "name": "Stray `console.log` in TS/JS \u2014 scripts/wipe-fake-sites.ts:41", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/wipe-fake-sites.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-572ec76c8bba12ed", "name": "Stray `console.log` in TS/JS \u2014 scripts/backfill-closed-snag-resolved-at.ts:38", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/backfill-closed-snag-resolved-at.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-1cf3b3a52d5667d5", "name": "Stray `console.log` in TS/JS \u2014 scripts/add-2story-quants-drawings.ts:123", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/add-2story-quants-drawings.ts:123"}, "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-23a07c3e4d4dce38", "name": "Stray `console.log` in TS/JS \u2014 scripts/list-db-indexes.ts:21", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/list-db-indexes.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-cf7a2bd7ebc157c7", "name": "Stray `console.log` in TS/JS \u2014 scripts/apply-customer-link-backfill.ts:20", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/apply-customer-link-backfill.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-5ae08ef1f8d752ef", "name": "Stray `console.log` in TS/JS \u2014 scripts/apply-house-value-schema.ts:23", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/apply-house-value-schema.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-0babd6c94866c385", "name": "Stray `console.log` in TS/JS \u2014 scripts/diag-variants.ts:18", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/diag-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-559348d78f446751", "name": "Stray `console.log` in TS/JS \u2014 scripts/flip-watch-to-mute.ts:35", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/flip-watch-to-mute.ts:35"}, "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-38224898f09596c1", "name": "Stray `console.log` in TS/JS \u2014 scripts/seed-permissions.ts:23", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-permissions.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-a12e75094e58c733", "name": "Stray `console.log` in TS/JS \u2014 scripts/apply-app-settings.ts:11", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/apply-app-settings.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-32f7d0a39172b758", "name": "Stray `console.log` in TS/JS \u2014 scripts/verify-late-order-schema.ts:25", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/verify-late-order-schema.ts:25"}, "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-a1ee9dfa634c5a02", "name": "Stray `console.log` in TS/JS \u2014 scripts/apply-super-admin-role.ts:11", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/apply-super-admin-role.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-4bf18cc2fe6824d4", "name": "Stray `console.log` in TS/JS \u2014 scripts/run-reconcile.ts:19", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/run-reconcile.ts:19"}, "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-cce6ab0753f2a9f7", "name": "Stray `console.log` in TS/JS \u2014 scripts/verify-2story-extras.ts:35", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/verify-2story-extras.ts:35"}, "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-4865c7b531929ccf", "name": "Stray `console.log` in TS/JS \u2014 scripts/fill-2story-clone.ts:172", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fill-2story-clone.ts: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-7b1e4fd463ec8926", "name": "Stray `console.log` in TS/JS \u2014 scripts/test-e2e-template.ts:80", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-e2e-template.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-2643f5d8a7e380e4", "name": "Stray `console.log` in TS/JS \u2014 scripts/run-cleanup.ts:32", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/run-cleanup.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-fe7accbb4b977108", "name": "Stray `console.log` in TS/JS \u2014 scripts/seed-2story-template.ts:340", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-2story-template.ts:340"}, "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-58a881ff8b38faec", "name": "Stray `console.log` in TS/JS \u2014 scripts/audit-integrity.ts:30", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/audit-integrity.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-33a1d6a8b2edd80b", "name": "Stray `console.log` in TS/JS \u2014 scripts/test-permissions.ts:33", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-permissions.ts: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-b20d7dac7691c49f", "name": "Stray `console.log` in TS/JS \u2014 prisma/seed.ts:8", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 prisma/seed.ts:8"}, "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-f2d39bcdd7cfba46", "name": "Stray `console.log` in TS/JS \u2014 prisma/seed-latest-site.ts:7", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 prisma/seed-latest-site.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-e4380510da6042cb", "name": "Stray `console.log` in TS/JS \u2014 src/instrumentation.ts:45", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/instrumentation.ts:45"}, "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-789cbd6052061f23", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/PostCompletionDialog.tsx:236", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/PostCompletionDialog.tsx:236"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c29a7734c57e8c36", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/TemplateMobileSummary.tsx:66", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/TemplateMobileSummary.tsx:66"}, "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-23c896c778d61ff9", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/TemplateEditor.tsx:1629", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/TemplateEditor.tsx:1629"}, "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-fd688e2d0b7b40d4", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/TemplateTimeline.tsx:437", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/TemplateTimeline.tsx:437"}, "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-813d167b3d19c012", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/TemplateVariantsSection.tsx:271", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/TemplateVariantsSection.tsx:271"}, "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-23f197a37565e460", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/TemplateExtras.tsx:706", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/TemplateExtras.tsx:706"}, "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-eb1255b10c027661", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/PlotTemplatesSection.tsx:733", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/PlotTemplatesSection.tsx:733"}, "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-35b7f502c0a5c5b9", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/TemplateValidationPanel.tsx:210", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/TemplateValidationPanel.tsx:210"}, "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-d95918182fb7bfb5", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/layout/SearchModal.tsx:328", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/layout/SearchModal.tsx:328"}, "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-71d1ece9e990c512", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/layout/Sidebar.tsx:600", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/layout/Sidebar.tsx:600"}, "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-4c02179a65af1b9f", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/plots/PlotCustomerViewTab.tsx:442", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/plots/PlotCustomerViewTab.tsx:442"}, "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-26be420597399faf", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/plots/PlotTodoList.tsx:489", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/plots/PlotTodoList.tsx:489"}, "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-3bee181adb79f767", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/plots/PlotDrawingsSection.tsx:293", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/plots/PlotDrawingsSection.tsx:293"}, "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-8af8e82d5d40aa45", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/plots/PlotDetailClient.tsx:890", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/plots/PlotDetailClient.tsx:890"}, "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-a14be3d6805b52d7", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/users/UsersClient.tsx:648", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/users/UsersClient.tsx:648"}, "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-0d2c89906a8ea60b", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/orders/OrdersClient.tsx:277", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/orders/OrdersClient.tsx:277"}, "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-e82da7c3e6afc86e", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/orders/LateSendPromptProvider.tsx:357", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/orders/LateSendPromptProvider.tsx:357"}, "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-e353df244be430b6", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/orders/SiteOrders.tsx:797", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/orders/SiteOrders.tsx:797"}, "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-3dc0cc67dde68a92", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/gantt/GanttOrderFlag.tsx:127", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/gantt/GanttOrderFlag.tsx:127"}, "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-05d4a6a3bdb7ae3d", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/gantt/GanttChart.tsx:511", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/gantt/GanttChart.tsx:511"}, "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-9656e88ee77e2059", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/gantt/GanttBar.tsx:106", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/gantt/GanttBar.tsx:106"}, "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-73e2a32d1cfb1420", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/walkthrough/SiteWalkthrough.tsx:699", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/walkthrough/SiteWalkthrough.tsx:699"}, "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-e1498fc6758202ce", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/handover/HandoverChecklist.tsx:292", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/handover/HandoverChecklist.tsx:292"}, "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-5814c4447ccfc2ee", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/shared/MiniGantt.tsx:207", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/shared/MiniGantt.tsx:207"}, "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-f64276e1153987ae", "name": "Stray `console.log` in TS/JS \u2014 src/components/ui/toast.tsx:177", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/components/ui/toast.tsx:177"}, "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-5c44131f2c629969", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/DashboardClient.tsx:488", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/DashboardClient.tsx:488"}, "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-17342895ea9f0e39", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/lateness/LatenessSummary.tsx:568", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/lateness/LatenessSummary.tsx:568"}, "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-ffe82a78e152e955", "name": "Stray `console.log` in TS/JS \u2014 src/components/providers/ServiceWorkerProvider.tsx:18", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/components/providers/ServiceWorkerProvider.tsx: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-9c60df64ce9cbead", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/tasks/TasksClient.tsx:608", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/tasks/TasksClient.tsx:608"}, "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-9efe59743ba9ebb8", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/SiteDocumentsClient.tsx:413", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/SiteDocumentsClient.tsx:413"}, "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-a3cdda0fbb8158e3", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/suppliers/SuppliersListClient.tsx:185", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/suppliers/SuppliersListClient.tsx:185"}, "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-508fed467a088c65", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/snags/SnagAgeingReport.tsx:223", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/snags/SnagAgeingReport.tsx:223"}, "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-a432c6a5666ad110", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/contacts/ContractorDetailSheet.tsx:178", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/contacts/ContractorDetailSheet.tsx:178"}, "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-920fd5780bb84d85", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/contacts/ContactsClient.tsx:333", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/contacts/ContactsClient.tsx:333"}, "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-98b7f2d1d52d6bff", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/contacts/ContactDetailClient.tsx:500", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/contacts/ContactDetailClient.tsx:500"}, "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-86c1f6b2c91e111a", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/reports/SiteCalendar.tsx:441", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/reports/SiteCalendar.tsx:441"}, "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-d92e6b751ccc4b76", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/reports/ContractorComms.tsx:221", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/reports/ContractorComms.tsx:221"}, "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-32857844f200f570", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/reports/DailySiteBrief.tsx:1221", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/reports/DailySiteBrief.tsx:1221"}, "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-0f4e17e49292c517", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/reports/CriticalPath.tsx:363", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/reports/CriticalPath.tsx:363"}, "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-b2db9c4affe9bf39", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/reports/daily-brief/UpcomingOrdersSection.tsx:101", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/reports/daily-brief/UpcomingOrdersSection.tsx:101"}, "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-e792f81f77699e6b", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/programme/JobOrdersSection.tsx:65", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/programme/JobOrdersSection.tsx:65"}, "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-28440d835da3a42b", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/programme/JobPhotoLightbox.tsx:178", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/programme/JobPhotoLightbox.tsx:178"}, "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-77acac5a8b5bff08", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/programme/JobWeekPanel.tsx:1205", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/programme/JobWeekPanel.tsx:1205"}, "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-4bd4cd9d57b7a848", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/programme/JobPhotosSection.tsx:216", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/programme/JobPhotosSection.tsx:216"}, "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-25c1a603897f5456", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/programme/SiteProgramme.tsx:1625", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/programme/SiteProgramme.tsx:1625"}, "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-d3fb2e80d251c725", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/documents/DocumentList.tsx:182", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/documents/DocumentList.tsx:182"}, "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-0ff653cc62d88bf8", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/jobs/JobDetailClient.tsx:1111", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/jobs/JobDetailClient.tsx:1111"}, "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-cf4f7a8f4167ef2f", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/sites/SitesClient.tsx:292", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/sites/SitesClient.tsx:292"}, "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-b3fa2b1804575733", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/sites/SiteHeatmap.tsx:131", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/sites/SiteHeatmap.tsx:131"}, "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-b8373a9892568cef", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/sites/SiteStoryPanel.tsx:644", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/sites/SiteStoryPanel.tsx:644"}, "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-6b56129615d25f15", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/sites/SiteCustomerPagesPanel.tsx:383", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/sites/SiteCustomerPagesPanel.tsx:383"}, "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-5b6ef84473b6afd9", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/sites/SiteNCRs.tsx:212", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/sites/SiteNCRs.tsx:212"}, "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-c638ebc44cbe4707", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/sites/SiteDetailClient.tsx:2300", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/sites/SiteDetailClient.tsx:2300"}, "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-d462c3a29574925a", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/sites/BatchProgrammePreview.tsx:322", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/sites/BatchProgrammePreview.tsx:322"}, "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-aa7c67e65aa1ecfd", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/sites/SiteToolboxTalks.tsx:549", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/sites/SiteToolboxTalks.tsx:549"}, "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-0b8fda89e9e1baf2", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/sites/SitePhotoAlbum.tsx:175", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/sites/SitePhotoAlbum.tsx:175"}, "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-f8d01bea907f396b", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/sites/SiteOnSiteToday.tsx:192", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/sites/SiteOnSiteToday.tsx:192"}, "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-ec75234eae744cb8", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/contractor/[token]/page.tsx:646", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/contractor/[token]/page.tsx:646"}, "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-7431d8b5a7f36acd", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/live/[token]/LiveCabinScreen.tsx:172", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/live/[token]/LiveCabinScreen.tsx:172"}, "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-a45202b041dab520", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/api/contractor-share/[token]/snag-action/route.ts:51", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/api/contractor-share/[token]/snag-action/route.ts:51"}, "fullDescription": {"text": "Open XSS surface unless the input is provably trusted. Replace with explicit JSX or sanitize via a vetted library.\n\nWhy: OWASP basics. Already partially flagged by the security analyzer.\nRule id: fq.dangerous-html"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-1edc68996f183daa", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/portfolio/page.tsx:162", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/portfolio/page.tsx:162"}, "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-64529d53b55f16be", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/progress/[token]/page.tsx:523", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/progress/[token]/page.tsx:523"}, "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-e185c63289f74b59", "name": "`truncate` class without `title=` for hover reveal \u2014 src/hooks/useReviewSupplierMaterials.tsx:345", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/hooks/useReviewSupplierMaterials.tsx:345"}, "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-9b59c86f6fb159f9", "name": "`truncate` class without `title=` for hover reveal \u2014 src/hooks/useJobAction.tsx:2075", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/hooks/useJobAction.tsx:2075"}, "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-010bf0b23c5ddfc2", "name": "Stray `console.log` in TS/JS \u2014 src/hooks/useJobAction.tsx:462", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/hooks/useJobAction.tsx:462"}, "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-c8e9ed62f380b1af", "name": "`truncate` class without `title=` for hover reveal \u2014 src/hooks/useJobContractorPicker.tsx:226", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/hooks/useJobContractorPicker.tsx:226"}, "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-b726abf607496ed6", "name": "Possible secret in scripts/test-cascade-e2e.ts", "shortDescription": {"text": "Possible secret in scripts/test-cascade-e2e.ts"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-4e8d1d254d07f306", "name": "Possible secret in scripts/seed-users.ts", "shortDescription": {"text": "Possible secret in scripts/seed-users.ts"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-973e66130eb05fcb", "name": "Possible secret in scripts/test-audit-fixes.ts", "shortDescription": {"text": "Possible secret in scripts/test-audit-fixes.ts"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-8e6e5c6ad963df89", "name": "Possible secret in scripts/test-quants-stress.ts", "shortDescription": {"text": "Possible secret in scripts/test-quants-stress.ts"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-1f18a1f0e93d4f1e", "name": "Possible secret in scripts/test-consistency.ts", "shortDescription": {"text": "Possible secret in scripts/test-consistency.ts"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-fd60dae7c5233e6b", "name": "Possible secret in scripts/test-scale.ts", "shortDescription": {"text": "Possible secret in scripts/test-scale.ts"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-7a5edacea3059361", "name": "Possible secret in scripts/test-quants.ts", "shortDescription": {"text": "Possible secret in scripts/test-quants.ts"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-cf88ee9c7b2465be", "name": "Possible secret in scripts/test-permissions.ts", "shortDescription": {"text": "Possible secret in scripts/test-permissions.ts"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-abf3b008afdb61d7", "name": "Insecure pattern 'document_write' in src/components/plots/PlotQRCode.tsx:75", "shortDescription": {"text": "Insecure pattern 'document_write' in src/components/plots/PlotQRCode.tsx:75"}, "fullDescription": {"text": "Found a known-risky pattern (document_write). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "low", "confidence": 1.0}}, {"id": "scanner-cb639d9a10a47b23", "name": "package.json defines install-time lifecycle scripts", "shortDescription": {"text": "package.json defines install-time lifecycle scripts"}, "fullDescription": {"text": "preinstall/install/postinstall/prepare scripts execute during dependency installation. Review them carefully for network calls, obfuscation, shell execution, or credential access."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4601e3ad3bb28677", "name": "No CI/CD pipelines detected", "shortDescription": {"text": "No CI/CD pipelines detected"}, "fullDescription": {"text": "No GitHub Actions, GitLab CI, or CircleCI configs found. Without CI you can't gate deploys on tests/lints."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-174863b49f430083", "name": "Very large file: src/components/settings/TemplateEditor.tsx (3860 lines)", "shortDescription": {"text": "Very large file: src/components/settings/TemplateEditor.tsx (3860 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-d2f515a49b8a1141", "name": "Very large file: src/components/plots/PlotDetailClient.tsx (1973 lines)", "shortDescription": {"text": "Very large file: src/components/plots/PlotDetailClient.tsx (1973 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-e15940983030896f", "name": "Very large file: src/components/orders/OrdersClient.tsx (1645 lines)", "shortDescription": {"text": "Very large file: src/components/orders/OrdersClient.tsx (1645 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-ab59744612e5fbfa", "name": "Very large file: src/components/orders/SiteOrders.tsx (1438 lines)", "shortDescription": {"text": "Very large file: src/components/orders/SiteOrders.tsx (1438 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-75fef110ff34a125", "name": "Very large file: src/components/walkthrough/SiteWalkthrough.tsx (1732 lines)", "shortDescription": {"text": "Very large file: src/components/walkthrough/SiteWalkthrough.tsx (1732 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-03b4ef10f9d61d61", "name": "Very large file: src/components/analytics/AnalyticsClient.tsx (1553 lines)", "shortDescription": {"text": "Very large file: src/components/analytics/AnalyticsClient.tsx (1553 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-d752d3c037157a83", "name": "Very large file: src/components/tasks/TasksClient.tsx (1303 lines)", "shortDescription": {"text": "Very large file: src/components/tasks/TasksClient.tsx (1303 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-52439a70264b08b9", "name": "Very large file: src/components/snags/SnagDialog.tsx (1651 lines)", "shortDescription": {"text": "Very large file: src/components/snags/SnagDialog.tsx (1651 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-d9532ed3ca925d67", "name": "Very large file: src/components/reports/ContractorComms.tsx (1423 lines)", "shortDescription": {"text": "Very large file: src/components/reports/ContractorComms.tsx (1423 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-90adb02ae08e4736", "name": "Very large file: src/components/reports/DailySiteBrief.tsx (3457 lines)", "shortDescription": {"text": "Very large file: src/components/reports/DailySiteBrief.tsx (3457 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-c4b835ee83cb091d", "name": "Very large file: src/components/programme/JobWeekPanel.tsx (1911 lines)", "shortDescription": {"text": "Very large file: src/components/programme/JobWeekPanel.tsx (1911 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-526957cbf035d25d", "name": "Very large file: src/components/programme/SiteProgramme.tsx (2690 lines)", "shortDescription": {"text": "Very large file: src/components/programme/SiteProgramme.tsx (2690 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-b74bbe54e092f1a7", "name": "Very large file: src/components/jobs/JobDetailClient.tsx (2146 lines)", "shortDescription": {"text": "Very large file: src/components/jobs/JobDetailClient.tsx (2146 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-f60da8f1dccbef37", "name": "Very large file: src/components/sites/CreateSiteWizard.tsx (1561 lines)", "shortDescription": {"text": "Very large file: src/components/sites/CreateSiteWizard.tsx (1561 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-4c0f46e3f96a1504", "name": "Very large file: src/components/sites/SiteStoryPanel.tsx (1588 lines)", "shortDescription": {"text": "Very large file: src/components/sites/SiteStoryPanel.tsx (1588 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-c70d9ddd6a0596f8", "name": "Very large file: src/components/sites/SiteDetailClient.tsx (2840 lines)", "shortDescription": {"text": "Very large file: src/components/sites/SiteDetailClient.tsx (2840 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-0e3ea5056d8ff15e", "name": "Very large file: src/app/contractor/[token]/page.tsx (1103 lines)", "shortDescription": {"text": "Very large file: src/app/contractor/[token]/page.tsx (1103 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-fad8a3338089db32", "name": "Very large file: src/lib/handover-pdf-renderers.ts (1548 lines)", "shortDescription": {"text": "Very large file: src/lib/handover-pdf-renderers.ts (1548 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-2627e4107737be3c", "name": "Very large file: src/lib/site-story.ts (1828 lines)", "shortDescription": {"text": "Very large file: src/lib/site-story.ts (1828 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-2537ab93f62b25c9", "name": "Very large file: src/lib/handover-zip.ts (1450 lines)", "shortDescription": {"text": "Very large file: src/lib/handover-zip.ts (1450 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-22245b1c9fc4eee1", "name": "Very large file: src/hooks/useJobAction.tsx (2152 lines)", "shortDescription": {"text": "Very large file: src/hooks/useJobAction.tsx (2152 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": "20 test file(s) for 561 source file(s) (ratio 0.04). 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 710 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 253 placeholder/mock markers across 71 source files. This often means the repo looks complete while core flows still use generated scaffolding or fake data."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2d0c7b7ab8f8aacf", "name": "Critical user flow still appears backed by mock or placeholder data", "shortDescription": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "fullDescription": {"text": "A payment/auth/admin/order/billing-style flow contains mock, fake, TODO, dummy, or placeholder markers in runtime source. In the Fable corpus this is a high-leverage completeness smell: the app can look finished while the money, identity, or tenant flow is still scaffolded."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b9088664ace7f748", "name": "Composite production-readiness gap", "shortDescription": {"text": "Composite production-readiness gap"}, "fullDescription": {"text": "Multiple low-cost hardening controls are missing together: license, ci. Opus verification showed these co-occurring gaps are a better readiness signal than reading each flag in isolation."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-749d4bc1bd66df5f", "name": "Agent instructions exist but release-hardening basics are missing", "shortDescription": {"text": "Agent instructions exist but release-hardening basics are missing"}, "fullDescription": {"text": "AI-coder instruction files were found, but the repo is missing license, ci. Treat this as a contract gap: the agent is guided, but the generated output is not yet guarded by the controls that make it repeatable."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ea8f3013f588db25", "name": "Shallow git history limits provenance confidence", "shortDescription": {"text": "Shallow git history limits provenance confidence"}, "fullDescription": {"text": "The repository is a shallow clone. Origin/evolution analysis cannot distinguish fresh generation, imported legacy code, or long-lived human code with high confidence."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8424db9c75e04ba4", "name": "Very short observed git history", "shortDescription": {"text": "Very short observed git history"}, "fullDescription": {"text": "The repo has multiple source files but two or fewer visible commits. This is not a failure by itself, but it lowers confidence in evolution-based diagnosis."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-06bda7a587483e26", "name": "Commented-code block (6 lines) in eslint.config.mjs:26", "shortDescription": {"text": "Commented-code block (6 lines) in eslint.config.mjs: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-e5e897e645a5f516", "name": "Commented-code block (6 lines) in scripts/create-sites.js:14", "shortDescription": {"text": "Commented-code block (6 lines) in scripts/create-sites.js:14"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-58a0f101b31381f7", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/create-sites.js:51", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/create-sites.js:51"}, "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-f08f8a71eb4e00e7", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/test-cascade-e2e.ts:43", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/test-cascade-e2e.ts:43"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-fd6c076414567287", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/test-audit-fixes.ts:48", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/test-audit-fixes.ts:48"}, "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-c626286587c1f53f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/test-quants-stress.ts:43", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/test-quants-stress.ts:43"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f8c6022b4feb2a88", "name": "Commented-code block (6 lines) in scripts/reconcile-late-completion-overlaps.ts:57", "shortDescription": {"text": "Commented-code block (6 lines) in scripts/reconcile-late-completion-overlaps.ts:57"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9a9b1818352483d9", "name": "Commented-code block (5 lines) in scripts/test-cascade.ts:126", "shortDescription": {"text": "Commented-code block (5 lines) in scripts/test-cascade.ts:126"}, "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-0bf02082cc6ce119", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/test-consistency.ts:34", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/test-consistency.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-1f9d8f661f853699", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/test-scale.ts:34", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/test-scale.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-1c01a29fcaef4b82", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/test-quants.ts:43", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/test-quants.ts:43"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c604bfce4c72cefd", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/test-e2e-template.ts:51", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/test-e2e-template.ts:51"}, "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-9aebe22a75066736", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/test-permissions.ts:53", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/test-permissions.ts:53"}, "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-42ee25206b6d22ea", "name": "Commented-code block (6 lines) in public/sw.js:75", "shortDescription": {"text": "Commented-code block (6 lines) in public/sw.js: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-38390faee5109e62", "name": "`fetch()` without try/.catch or AbortSignal \u2014 public/sw.js:92", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 public/sw.js: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-683e95dbcfb04a28", "name": "Commented-code block (11 lines) in src/components/settings/SettingsClient.tsx:69", "shortDescription": {"text": "Commented-code block (11 lines) in src/components/settings/SettingsClient.tsx:69"}, "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-90067f4c062184a0", "name": "Commented-code block (5 lines) in src/components/settings/TemplateEditor.tsx:99", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/settings/TemplateEditor.tsx:99"}, "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-fab5160c0f37002c", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/settings/TemplateEditor.tsx:417", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/settings/TemplateEditor.tsx:417"}, "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-cda016b6edbd4e8b", "name": "Commented-code block (9 lines) in src/components/settings/TemplateTimeline.tsx:50", "shortDescription": {"text": "Commented-code block (9 lines) in src/components/settings/TemplateTimeline.tsx:50"}, "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-a95258e77c80e3c8", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/settings/TemplateAuditLog.tsx:25", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/settings/TemplateAuditLog.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-ab5e5bfb77d9ec99", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/settings/TemplateCompareDialog.tsx:71", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/settings/TemplateCompareDialog.tsx:71"}, "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-49828facec1158b2", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/settings/TemplateContractorsTableDialog.tsx:134", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/settings/TemplateContractorsTableDialog.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-638a5f94a7f3c925", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/settings/TemplateVariantsSection.tsx:153", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/settings/TemplateVariantsSection.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-16c1932abd87d748", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/settings/TemplateOrdersTableDialog.tsx:159", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/settings/TemplateOrdersTableDialog.tsx:159"}, "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-728f53eb2c75222a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/settings/TemplateExtras.tsx:157", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/settings/TemplateExtras.tsx:157"}, "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-9507bf7c8f668708", "name": "Commented-code block (7 lines) in src/components/settings/PlotTemplatesSection.tsx:153", "shortDescription": {"text": "Commented-code block (7 lines) in src/components/settings/PlotTemplatesSection.tsx:153"}, "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-cfdf82079c0269a6", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/settings/PlotTemplatesSection.tsx:198", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/settings/PlotTemplatesSection.tsx:198"}, "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-36e52d64c01175a1", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/settings/BrandingSection.tsx:49", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/settings/BrandingSection.tsx:49"}, "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-8fbaa6483280cf6f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/settings/TemplateValidationPanel.tsx:46", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/settings/TemplateValidationPanel.tsx: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-32cdb202b797db40", "name": "Commented-code block (5 lines) in src/components/settings/NotificationsSection.tsx:182", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/settings/NotificationsSection.tsx:182"}, "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-c3b8b97d5734dab3", "name": "Commented-code block (5 lines) in src/components/layout/SearchModal.tsx:134", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/layout/SearchModal.tsx:134"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7dff7dcc9384c5a5", "name": "Commented-code block (6 lines) in src/components/layout/Sidebar.tsx:97", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/layout/Sidebar.tsx:97"}, "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-1a25701687b6c321", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/layout/Sidebar.tsx:230", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/layout/Sidebar.tsx:230"}, "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-8295c1a1b0a5402a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/plots/PlotCustomerViewTab.tsx:79", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/plots/PlotCustomerViewTab.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-33f3a830566cab6c", "name": "Commented-code block (6 lines) in src/components/plots/PlotDrawingsSection.tsx:33", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/plots/PlotDrawingsSection.tsx:33"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-80826d0cc948fedc", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/plots/PlotDrawingsSection.tsx:41", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/plots/PlotDrawingsSection.tsx: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-06c4554b11980a9a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/plots/PlotQualityPanel.tsx:157", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/plots/PlotQualityPanel.tsx:157"}, "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-b2421a0501de10dc", "name": "Commented-code block (7 lines) in src/components/plots/PlotDetailClient.tsx:520", "shortDescription": {"text": "Commented-code block (7 lines) in src/components/plots/PlotDetailClient.tsx:520"}, "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-daa544dd653eb031", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/plots/PlotMaterialsSection.tsx:46", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/plots/PlotMaterialsSection.tsx: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-02d125bcdc0c3f0c", "name": "Commented-code block (5 lines) in src/components/users/UsersClient.tsx:128", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/users/UsersClient.tsx:128"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e997bc8e4934f8cd", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/users/UsersClient.tsx:477", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/users/UsersClient.tsx:477"}, "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-f1236300a6359190", "name": "Commented-code block (7 lines) in src/components/orders/OrdersClient.tsx:529", "shortDescription": {"text": "Commented-code block (7 lines) in src/components/orders/OrdersClient.tsx:529"}, "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-47d9ca6fb8ab7b7f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/orders/OrdersClient.tsx:667", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/orders/OrdersClient.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-7eec94cb62c59f0e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/orders/OrderDeliveryFollowUpDialog.tsx:75", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/orders/OrderDeliveryFollowUpDialog.tsx:75"}, "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-ad979f025327ebf4", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/orders/OrderDetailSheet.tsx:235", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/orders/OrderDetailSheet.tsx:235"}, "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-3dd78f79bf18b534", "name": "Commented-code block (5 lines) in src/components/orders/SiteOrders.tsx:87", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/orders/SiteOrders.tsx:87"}, "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-cd708fd660477a32", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/orders/SiteOrders.tsx:308", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/orders/SiteOrders.tsx:308"}, "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-4887fe22694fc571", "name": "Commented-code block (5 lines) in src/components/gantt/GanttChart.tsx:91", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/gantt/GanttChart.tsx:91"}, "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-b62c901e402e3e49", "name": "Commented-code block (5 lines) in src/components/walkthrough/SiteWalkthrough.tsx:130", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/walkthrough/SiteWalkthrough.tsx:130"}, "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-4300306f33c102a3", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/walkthrough/SiteWalkthrough.tsx:449", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/walkthrough/SiteWalkthrough.tsx:449"}, "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-4a9343e6cc46288d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/analytics/AnalyticsClient.tsx:975", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/analytics/AnalyticsClient.tsx:975"}, "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-b13a63036f2b935c", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/analytics/sections/TextThemesWidget.tsx:22", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/analytics/sections/TextThemesWidget.tsx:22"}, "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-164132d90fbebc73", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/analytics/sections/MaterialsWidget.tsx:42", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/analytics/sections/MaterialsWidget.tsx:42"}, "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-3440232f7f08e09a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/analytics/sections/EventTypesWidget.tsx:39", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/analytics/sections/EventTypesWidget.tsx: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}}, {"id": "scanner-7f0ebcaa53582477", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/analytics/sections/VariationsWidget.tsx:37", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/analytics/sections/VariationsWidget.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-9db1eecb0e7af2b0", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/analytics/sections/SupplierScorecardWidget.tsx:30", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/analytics/sections/SupplierScorecardWidget.tsx: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-02ec96b5ff016316", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/analytics/sections/QualityWidget.tsx:59", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/analytics/sections/QualityWidget.tsx:59"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-231e4ac48a88968a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/handover/HandoverChecklist.tsx:120", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/handover/HandoverChecklist.tsx:120"}, "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-7bf1d257d144a642", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/events/EventsClient.tsx:484", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/events/EventsClient.tsx:484"}, "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-ebbddc7b7f2c5bdc", "name": "Commented-code block (6 lines) in src/components/shared/ReportExportButtons.tsx:29", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/shared/ReportExportButtons.tsx:29"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-41e0cb7f9bf8139c", "name": "Commented-code block (14 lines) in src/components/shared/MiniGantt.tsx:59", "shortDescription": {"text": "Commented-code block (14 lines) in src/components/shared/MiniGantt.tsx:59"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d38dae6755ac8c36", "name": "Commented-code block (5 lines) in src/components/shared/HelpTip.tsx:80", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/shared/HelpTip.tsx:80"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-48e9ac9d7f18b811", "name": "Commented-code block (9 lines) in src/components/ui/dialog.tsx:56", "shortDescription": {"text": "Commented-code block (9 lines) in src/components/ui/dialog.tsx:56"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b5b5a9ecdb643ca1", "name": "Commented-code block (10 lines) in src/components/ui/button.tsx:12", "shortDescription": {"text": "Commented-code block (10 lines) in src/components/ui/button.tsx:12"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5d86b8ac7bb2e7d2", "name": "Commented-code block (6 lines) in src/components/ui/tabs.tsx:47", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/ui/tabs.tsx:47"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b943b54371f394bb", "name": "Commented-code block (8 lines) in src/components/dashboard/DashboardClient.tsx:284", "shortDescription": {"text": "Commented-code block (8 lines) in src/components/dashboard/DashboardClient.tsx:284"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-609d5530f2c06ecc", "name": "Commented-code block (5 lines) in src/components/lateness/LatenessSummary.tsx:37", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/lateness/LatenessSummary.tsx:37"}, "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-58fc719dcd0ffea8", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/lateness/LatenessSummary.tsx:184", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/lateness/LatenessSummary.tsx:184"}, "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-5c47a955e34365b3", "name": "Commented-code block (5 lines) in src/components/inspections/InspectionsClient.tsx:739", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/inspections/InspectionsClient.tsx:739"}, "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-b307e6a75c2f3176", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/inspections/InspectionsClient.tsx:522", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/inspections/InspectionsClient.tsx:522"}, "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-7a3cb49029751977", "name": "Commented-code block (5 lines) in src/components/tasks/TasksClient.tsx:102", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/tasks/TasksClient.tsx:102"}, "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-b4699997ceebe8d5", "name": "Commented-code block (6 lines) in src/components/admin/SiteDocumentsClient.tsx:3", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/admin/SiteDocumentsClient.tsx:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-57ac24eeef35e5ab", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/admin/SiteDocumentsClient.tsx:257", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/admin/SiteDocumentsClient.tsx:257"}, "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-941f70416c1a560e", "name": "Commented-code block (5 lines) in src/components/suppliers/SupplierDetailClient.tsx:139", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/suppliers/SupplierDetailClient.tsx:139"}, "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-6f8559de377b3999", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/suppliers/SupplierDetailClient.tsx:287", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/suppliers/SupplierDetailClient.tsx:287"}, "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-753645837d666b1e", "name": "Commented-code block (7 lines) in src/components/suppliers/SuppliersAndContractorsPage.tsx:54", "shortDescription": {"text": "Commented-code block (7 lines) in src/components/suppliers/SuppliersAndContractorsPage.tsx:54"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-bb68dd2719ac78c8", "name": "Commented-code block (5 lines) in src/components/snags/SnagList.tsx:139", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/snags/SnagList.tsx:139"}, "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-bd014dc974566308", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/snags/SnagList.tsx:262", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/snags/SnagList.tsx:262"}, "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-cbe8a4a45e65995f", "name": "Commented-code block (8 lines) in src/components/snags/SnagDialog.tsx:312", "shortDescription": {"text": "Commented-code block (8 lines) in src/components/snags/SnagDialog.tsx:312"}, "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-1106de1985c35864", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/snags/SnagDialog.tsx:387", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/snags/SnagDialog.tsx:387"}, "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-30dc120569bd2641", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/snags/SnagAgeingReport.tsx:69", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/snags/SnagAgeingReport.tsx:69"}, "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-c0876587576cd886", "name": "Commented-code block (5 lines) in src/components/contacts/ContactsClient.tsx:89", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/contacts/ContactsClient.tsx:89"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-43df83e70e52df4b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/contacts/ContactsClient.tsx:166", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/contacts/ContactsClient.tsx:166"}, "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-33a4a16cd05a9fd3", "name": "Commented-code block (5 lines) in src/components/reports/SiteCalendar.tsx:918", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/reports/SiteCalendar.tsx:918"}, "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-03f5503975e1ebfd", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/reports/SiteCalendar.tsx:255", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/reports/SiteCalendar.tsx:255"}, "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-2eb0144e1148d9a6", "name": "Commented-code block (5 lines) in src/components/reports/ContractorComms.tsx:530", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/reports/ContractorComms.tsx:530"}, "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-73d272149b0369f7", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/reports/ContractorComms.tsx:172", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/reports/ContractorComms.tsx:172"}, "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-7b489ee31a19cf65", "name": "Commented-code block (5 lines) in src/components/reports/GlobalDailyBriefClient.tsx:33", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/reports/GlobalDailyBriefClient.tsx:33"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4c048692b94a724c", "name": "Commented-code block (5 lines) in src/components/reports/DailySiteBrief.tsx:107", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/reports/DailySiteBrief.tsx:107"}, "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-9deb74a16602ac77", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/reports/DailySiteBrief.tsx:676", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/reports/DailySiteBrief.tsx:676"}, "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-59b39c71313aef44", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/reports/ContractorDaySheets.tsx:317", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/reports/ContractorDaySheets.tsx:317"}, "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-936a6a211a03956c", "name": "Commented-code block (9 lines) in src/components/reports/JobActionStrip.tsx:48", "shortDescription": {"text": "Commented-code block (9 lines) in src/components/reports/JobActionStrip.tsx:48"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fcaa890a404053fc", "name": "Commented-code block (7 lines) in src/components/reports/daily-brief/UpcomingDeliveriesSection.tsx:189", "shortDescription": {"text": "Commented-code block (7 lines) in src/components/reports/daily-brief/UpcomingDeliveriesSection.tsx:189"}, "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-fb32a6243cc64393", "name": "Commented-code block (5 lines) in src/components/programme/JobWeekPanel.tsx:306", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/programme/JobWeekPanel.tsx:306"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5e1836d11ed3bc87", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/programme/JobWeekPanel.tsx:384", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/programme/JobWeekPanel.tsx:384"}, "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-cad0d605a80a54da", "name": "Commented-code block (8 lines) in src/components/programme/SiteProgramme.tsx:42", "shortDescription": {"text": "Commented-code block (8 lines) in src/components/programme/SiteProgramme.tsx:42"}, "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-d8bfc3525818bc56", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/programme/SiteProgramme.tsx:132", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/programme/SiteProgramme.tsx:132"}, "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-63a2aa78c94622ed", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/programme/PhotoAnnotationsPanel.tsx:47", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/programme/PhotoAnnotationsPanel.tsx:47"}, "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-660bc05497bb03ad", "name": "Commented-code block (7 lines) in src/components/programme/programme-modules/helpers.ts:74", "shortDescription": {"text": "Commented-code block (7 lines) in src/components/programme/programme-modules/helpers.ts:74"}, "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-7317bc17df6ac77f", "name": "Commented-code block (5 lines) in src/components/programme/programme-modules/types.ts:57", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/programme/programme-modules/types.ts:57"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ceb2118aaca029eb", "name": "Commented-code block (5 lines) in src/components/documents/DocumentList.tsx:83", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/documents/DocumentList.tsx:83"}, "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-9e1ee4b84c1535ff", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/jobs/JobActionTimeline.tsx:97", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/jobs/JobActionTimeline.tsx:97"}, "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-6bb6583d713d1b2c", "name": "Commented-code block (6 lines) in src/components/jobs/JobDetailClient.tsx:279", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/jobs/JobDetailClient.tsx:279"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-866b440abfdae15e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/jobs/JobDetailClient.tsx:480", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/jobs/JobDetailClient.tsx:480"}, "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-86a087d3fcba4205", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/jobs/PhotoUpload.tsx:92", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/jobs/PhotoUpload.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-fec375cf0176092f", "name": "Commented-code block (7 lines) in src/components/sites/SitesClient.tsx:272", "shortDescription": {"text": "Commented-code block (7 lines) in src/components/sites/SitesClient.tsx:272"}, "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-3a1f5e1b9a337a84", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/sites/SitesClient.tsx:184", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/sites/SitesClient.tsx:184"}, "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-adb4596ef4350b1f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/sites/SiteHeatmap.tsx:44", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/sites/SiteHeatmap.tsx:44"}, "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-0bf2e77c7035912c", "name": "Commented-code block (5 lines) in src/components/sites/CreateSiteWizard.tsx:67", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/sites/CreateSiteWizard.tsx:67"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4f2ca76235d1862a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/sites/CreateSiteWizard.tsx:362", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/sites/CreateSiteWizard.tsx:362"}, "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-0a3fec5e149a2ad8", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/sites/SiteCustomerPagesPanel.tsx:57", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/sites/SiteCustomerPagesPanel.tsx:57"}, "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-3c8c64482487f4d9", "name": "Commented-code block (5 lines) in src/components/sites/SiteNCRs.tsx:63", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/sites/SiteNCRs.tsx:63"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-974a2aee8b677a8d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/sites/SiteNCRs.tsx:80", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/sites/SiteNCRs.tsx:80"}, "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-93c5db4083aa2e2f", "name": "Commented-code block (5 lines) in src/components/sites/SiteDetailClient.tsx:634", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/sites/SiteDetailClient.tsx:634"}, "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-24426c5cf28c01b7", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/sites/SiteDetailClient.tsx:366", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/sites/SiteDetailClient.tsx:366"}, "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-c140a5b062f705cb", "name": "Commented-code block (7 lines) in src/components/sites/BatchProgrammePreview.tsx:154", "shortDescription": {"text": "Commented-code block (7 lines) in src/components/sites/BatchProgrammePreview.tsx:154"}, "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-2ba1884ad5080806", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/sites/BatchProgrammePreview.tsx:111", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/sites/BatchProgrammePreview.tsx:111"}, "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-625efc95de063504", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/sites/SiteToolboxTalks.tsx:140", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/sites/SiteToolboxTalks.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-9713963b7c2a53e8", "name": "Commented-code block (6 lines) in src/components/sites/SiteClosurePanel.tsx:60", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/sites/SiteClosurePanel.tsx:60"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1b5eae595a75f5b9", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/sites/SiteLogClient.tsx:247", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/sites/SiteLogClient.tsx:247"}, "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-b6bee14f7b4bfbdf", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/sites/SitePhotoAlbum.tsx:76", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/sites/SitePhotoAlbum.tsx:76"}, "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-9be912b4f4d7fe4c", "name": "Commented-code block (5 lines) in src/components/sites/WatchToggle.tsx:39", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/sites/WatchToggle.tsx:39"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-24bd9834dd12d807", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/sites/SiteOnSiteToday.tsx:66", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/sites/SiteOnSiteToday.tsx:66"}, "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-d159b701d9ef3d59", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/sites/SiteCompliance.tsx:72", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/sites/SiteCompliance.tsx:72"}, "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-16f4405b7474ba49", "name": "Commented-code block (5 lines) in src/app/layout.tsx:15", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/layout.tsx:15"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a50cf14990a34508", "name": "Commented-code block (6 lines) in src/app/contractor/[token]/page.tsx:132", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/contractor/[token]/page.tsx:132"}, "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-bf6bd50ae858aacb", "name": "Commented-code block (5 lines) in src/app/live/[token]/page.tsx:56", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/live/[token]/page.tsx:56"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4d612f1ffe66de79", "name": "Commented-code block (6 lines) in src/app/live/[token]/LiveCabinScreen.tsx:121", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/live/[token]/LiveCabinScreen.tsx:121"}, "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-f11ec7f9de7f176b", "name": "Commented-code block (6 lines) in src/app/reset-password/[token]/page.tsx:41", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/reset-password/[token]/page.tsx:41"}, "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-2a2ed3f7b45ad026", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/login/page.tsx:36", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/login/page.tsx:36"}, "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-b1661b62f87ff952", "name": "Commented-code block (5 lines) in src/app/api/plots/apply-template/route.ts:58", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/plots/apply-template/route.ts:58"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d34da070fbaf98df", "name": "Commented-code block (6 lines) in src/app/api/plots/[id]/route.ts:206", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/api/plots/[id]/route.ts:206"}, "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-45902d81bbcc141f", "name": "Commented-code block (5 lines) in src/app/api/plots/[id]/predictive-completion/route.ts:52", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/plots/[id]/predictive-completion/route.ts:52"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-77215916c85af58d", "name": "Commented-code block (5 lines) in src/app/api/plots/[id]/handover/route.ts:251", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/plots/[id]/handover/route.ts:251"}, "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-9f070ab02d782723", "name": "Commented-code block (5 lines) in src/app/api/plots/[id]/customer-photos/route.ts:110", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/plots/[id]/customer-photos/route.ts:110"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b5881d0c7038edcb", "name": "Commented-code block (5 lines) in src/app/api/plots/[id]/variations/[varId]/route.ts:105", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/plots/[id]/variations/[varId]/route.ts:105"}, "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-3407111125684602", "name": "Commented-code block (6 lines) in src/app/api/plots/[id]/customer-link/route.ts:110", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/api/plots/[id]/customer-link/route.ts:110"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8bf86ba11236171d", "name": "Commented-code block (7 lines) in src/app/api/plots/[id]/restart-decision/route.ts:144", "shortDescription": {"text": "Commented-code block (7 lines) in src/app/api/plots/[id]/restart-decision/route.ts:144"}, "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-37e8e9f1bfd64ecc", "name": "Commented-code block (6 lines) in src/app/api/plots/apply-template-batch/route.ts:13", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/api/plots/apply-template-batch/route.ts:13"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8a9ac84b8613484a", "name": "Commented-code block (5 lines) in src/app/api/users/route.ts:17", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/users/route.ts:17"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3116b940361e1b7a", "name": "Commented-code block (8 lines) in src/app/api/users/[id]/route.ts:170", "shortDescription": {"text": "Commented-code block (8 lines) in src/app/api/users/[id]/route.ts:170"}, "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-1216d055f1b1c770", "name": "Commented-code block (10 lines) in src/app/api/email/send/route.ts:19", "shortDescription": {"text": "Commented-code block (10 lines) in src/app/api/email/send/route.ts:19"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-606de56f8d791123", "name": "Commented-code block (5 lines) in src/app/api/orders/route.ts:30", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/orders/route.ts:30"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4ca1b3d079aff901", "name": "Commented-code block (5 lines) in src/app/api/orders/[id]/route.ts:108", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/orders/[id]/route.ts:108"}, "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-c7b595e88ec0aee8", "name": "Commented-code block (5 lines) in src/app/api/orders/backfill-lead-time/route.ts:15", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/orders/backfill-lead-time/route.ts:15"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-45b718fa12808386", "name": "Commented-code block (5 lines) in src/app/api/plot-templates/route.ts:67", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/plot-templates/route.ts:67"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-bae894425b24ed75", "name": "Commented-code block (5 lines) in src/app/api/plot-templates/[id]/route.ts:219", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/plot-templates/[id]/route.ts:219"}, "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-5a8f97b1cb7aeeca", "name": "Commented-code block (5 lines) in src/app/api/plot-templates/[id]/clone/route.ts:87", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/plot-templates/[id]/clone/route.ts:87"}, "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-94bbf3b9b9e5d363", "name": "Commented-code block (5 lines) in src/app/api/plot-templates/[id]/variants/route.ts:32", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/plot-templates/[id]/variants/route.ts:32"}, "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-7ea80fefe5e2347b", "name": "Commented-code block (8 lines) in src/app/api/plot-templates/[id]/variants/[variantId]/route.ts:80", "shortDescription": {"text": "Commented-code block (8 lines) in src/app/api/plot-templates/[id]/variants/[variantId]/route.ts:80"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c95b8565c2e278aa", "name": "Commented-code block (11 lines) in src/app/api/plot-templates/[id]/variants/[variantId]/full/route.ts:64", "shortDescription": {"text": "Commented-code block (11 lines) in src/app/api/plot-templates/[id]/variants/[variantId]/full/route.ts:64"}, "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-1fed71e8ef9b8ca5", "name": "Commented-code block (7 lines) in src/app/api/plot-templates/[id]/variants/[variantId]/seed/route.ts:75", "shortDescription": {"text": "Commented-code block (7 lines) in src/app/api/plot-templates/[id]/variants/[variantId]/seed/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-8ebeb74620ea7e22", "name": "Commented-code block (6 lines) in src/app/api/plot-templates/[id]/jobs/route.ts:81", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/api/plot-templates/[id]/jobs/route.ts:81"}, "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-4744e7185c51cffa", "name": "Commented-code block (7 lines) in src/app/api/plot-templates/[id]/jobs/[jobId]/route.ts:55", "shortDescription": {"text": "Commented-code block (7 lines) in src/app/api/plot-templates/[id]/jobs/[jobId]/route.ts:55"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0335769ff9f3b0b0", "name": "Commented-code block (7 lines) in src/app/api/plot-templates/[id]/jobs/[jobId]/recalculate/route.ts:61", "shortDescription": {"text": "Commented-code block (7 lines) in src/app/api/plot-templates/[id]/jobs/[jobId]/recalculate/route.ts:61"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b5b17c5770255051", "name": "Commented-code block (6 lines) in src/app/api/auth/request-reset/route.ts:52", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/api/auth/request-reset/route.ts:52"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c525f0efe6ec2aa8", "name": "Commented-code block (6 lines) in src/app/api/analytics/route.ts:10", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/api/analytics/route.ts:10"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-17192630999a45b2", "name": "Commented-code block (5 lines) in src/app/api/analytics/stage-benchmark/route.ts:86", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/analytics/stage-benchmark/route.ts:86"}, "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-d9cb4f2dc9d99e8e", "name": "Commented-code block (5 lines) in src/app/api/lateness/route.ts:85", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/lateness/route.ts:85"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-123be652147427fe", "name": "Commented-code block (5 lines) in src/app/api/contractor-share/[token]/snag-action/route.ts:48", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/contractor-share/[token]/snag-action/route.ts:48"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f13ef2ee87129ce1", "name": "Commented-code block (11 lines) in src/app/api/progress/[token]/push-subscribe/route.ts:6", "shortDescription": {"text": "Commented-code block (11 lines) in src/app/api/progress/[token]/push-subscribe/route.ts:6"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-bb19258d15280de2", "name": "Commented-code block (6 lines) in src/app/api/inspections/route.ts:70", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/api/inspections/route.ts:70"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2dba2b1d18bed104", "name": "Commented-code block (7 lines) in src/app/api/inspections/[id]/route.ts:139", "shortDescription": {"text": "Commented-code block (7 lines) in src/app/api/inspections/[id]/route.ts:139"}, "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-aec1542791fe2b29", "name": "Commented-code block (5 lines) in src/app/api/inspections/[id]/actions/route.ts:63", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/inspections/[id]/actions/route.ts:63"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-836a69ff2816ab7e", "name": "Commented-code block (8 lines) in src/app/api/tasks/route.ts:25", "shortDescription": {"text": "Commented-code block (8 lines) in src/app/api/tasks/route.ts:25"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-74c0cf1b8a7ad942", "name": "Commented-code block (5 lines) in src/app/api/suppliers/[id]/route.ts:94", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/suppliers/[id]/route.ts: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-1fa94263c1ba8674", "name": "Commented-code block (5 lines) in src/app/api/suppliers/[id]/pricelist/upload/route.ts:75", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/suppliers/[id]/pricelist/upload/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-83721f0956088476", "name": "Commented-code block (9 lines) in src/app/api/cron/weekly-digest/route.ts:56", "shortDescription": {"text": "Commented-code block (9 lines) in src/app/api/cron/weekly-digest/route.ts:56"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5e954f2f092166b7", "name": "Commented-code block (5 lines) in src/app/api/cron/notifications/route.ts:28", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/cron/notifications/route.ts:28"}, "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-6ac14a5441ab6710", "name": "Commented-code block (5 lines) in src/app/api/cron/weather/route.ts:10", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/cron/weather/route.ts:10"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e858197f2fb4e72b", "name": "Commented-code block (7 lines) in src/app/api/cron/inspection-alerts/route.ts:77", "shortDescription": {"text": "Commented-code block (7 lines) in src/app/api/cron/inspection-alerts/route.ts:77"}, "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-bde9e6d8fefc62f1", "name": "Commented-code block (6 lines) in src/app/api/cron/lateness/route.ts:70", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/api/cron/lateness/route.ts:70"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1c62720b887e56a9", "name": "Commented-code block (5 lines) in src/app/api/cron/reconcile/route.ts:60", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/cron/reconcile/route.ts:60"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b39ad7eb2953e659", "name": "Commented-code block (5 lines) in src/app/api/cron/daily-wrap/route.ts:69", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/cron/daily-wrap/route.ts:69"}, "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-1ba128e4d85a746c", "name": "Commented-code block (5 lines) in src/app/api/cron/daily-email/route.ts:30", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/cron/daily-email/route.ts:30"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-70591d1dff2c750a", "name": "Commented-code block (6 lines) in src/app/api/snags/[id]/route.ts:112", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/api/snags/[id]/route.ts:112"}, "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-337f54bacb7ac316", "name": "Commented-code block (5 lines) in src/app/api/snags/[id]/request-signoff/route.ts:46", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/snags/[id]/request-signoff/route.ts:46"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7aacfc1973188a10", "name": "Commented-code block (6 lines) in src/app/api/snags/[id]/photos/route.ts:76", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/api/snags/[id]/photos/route.ts:76"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0b106f36077de0c3", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/snags/[id]/photos/route.ts:104", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/snags/[id]/photos/route.ts:104"}, "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-a592a6bac595ef30", "name": "Commented-code block (6 lines) in src/app/api/snags/[id]/pdf/route.ts:75", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/api/snags/[id]/pdf/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-294dc2afc0efa33f", "name": "Commented-code block (6 lines) in src/app/api/contacts/[id]/scorecard/route.ts:42", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/api/contacts/[id]/scorecard/route.ts:42"}, "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-21e64fb0daf88ec0", "name": "Commented-code block (5 lines) in src/app/api/documents/[id]/route.ts:29", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/documents/[id]/route.ts:29"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c23d6cab899d8d8f", "name": "Commented-code block (5 lines) in src/app/api/jobs/[id]/route.ts:217", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/jobs/[id]/route.ts:217"}, "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-7fae9f06ea8371b3", "name": "Commented-code block (5 lines) in src/app/api/jobs/[id]/delay/route.ts:169", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/jobs/[id]/delay/route.ts:169"}, "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-5531031391076f67", "name": "Commented-code block (6 lines) in src/app/api/jobs/[id]/actions/route.ts:102", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/api/jobs/[id]/actions/route.ts:102"}, "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-de5e5be330823ed5", "name": "Commented-code block (9 lines) in src/app/api/jobs/[id]/pull-forward/route.ts:76", "shortDescription": {"text": "Commented-code block (9 lines) in src/app/api/jobs/[id]/pull-forward/route.ts:76"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a97498bfaaee6131", "name": "Commented-code block (5 lines) in src/app/api/jobs/[id]/cascade/route.ts:37", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/jobs/[id]/cascade/route.ts:37"}, "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-e6d63a3df898ffc9", "name": "Commented-code block (5 lines) in src/app/api/sites/route.ts:45", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/sites/route.ts:45"}, "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-fc13d8885a8768b5", "name": "Commented-code block (7 lines) in src/app/api/sites/[id]/route.ts:81", "shortDescription": {"text": "Commented-code block (7 lines) in src/app/api/sites/[id]/route.ts:81"}, "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-55e12602bfea7c14", "name": "Commented-code block (6 lines) in src/app/api/sites/[id]/plots/route.ts:82", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/api/sites/[id]/plots/route.ts:82"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-34c01066892ad752", "name": "Commented-code block (5 lines) in src/app/api/sites/[id]/budget-report/route.ts:241", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/sites/[id]/budget-report/route.ts:241"}, "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-23c534bf287b83a7", "name": "Commented-code block (6 lines) in src/app/api/sites/[id]/critical-path/route.ts:15", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/api/sites/[id]/critical-path/route.ts:15"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2e6c032bcc0f3aca", "name": "Commented-code block (12 lines) in src/app/api/sites/[id]/material-burndown/route.ts:42", "shortDescription": {"text": "Commented-code block (12 lines) in src/app/api/sites/[id]/material-burndown/route.ts:42"}, "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-1a8204c536e4cfaf", "name": "Commented-code block (5 lines) in src/app/api/sites/[id]/heatmap/route.ts:107", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/sites/[id]/heatmap/route.ts:107"}, "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-1eb64a96b69bde87", "name": "Commented-code block (8 lines) in src/app/api/sites/[id]/daily-brief/route.ts:213", "shortDescription": {"text": "Commented-code block (8 lines) in src/app/api/sites/[id]/daily-brief/route.ts:213"}, "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-469b7a6d9e02a016", "name": "Commented-code block (6 lines) in src/app/api/sites/[id]/plot-schedules/route.ts:35", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/api/sites/[id]/plot-schedules/route.ts:35"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-870c3c359e08922b", "name": "Commented-code block (5 lines) in src/app/api/sites/[id]/bulk-delay/route.ts:13", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/sites/[id]/bulk-delay/route.ts:13"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f40aea029bbbaf17", "name": "Commented-code block (5 lines) in src/app/api/sites/[id]/rained-off/route.ts:76", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/sites/[id]/rained-off/route.ts:76"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1dc3fd94bd792e46", "name": "Commented-code block (6 lines) in src/app/api/sites/[id]/bulk-status/route.ts:13", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/api/sites/[id]/bulk-status/route.ts:13"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-418e1d32638b1ce6", "name": "Commented-code block (8 lines) in src/app/api/sites/[id]/contractor-comms/route.ts:198", "shortDescription": {"text": "Commented-code block (8 lines) in src/app/api/sites/[id]/contractor-comms/route.ts:198"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-acd501463aa5fa72", "name": "Commented-code block (6 lines) in src/app/api/sites/[id]/contractor-comms/share/route.ts:35", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/api/sites/[id]/contractor-comms/share/route.ts:35"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f78b64280b21bb9c", "name": "Commented-code block (6 lines) in src/app/api/sites/[id]/contractor-analysis/route.ts:46", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/api/sites/[id]/contractor-analysis/route.ts:46"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-78fd90a1e5b8c09e", "name": "Commented-code block (5 lines) in src/app/api/sites/[id]/handover-zip/route.ts:105", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/sites/[id]/handover-zip/route.ts:105"}, "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-39b5375447c6e895", "name": "Commented-code block (5 lines) in src/app/api/sites/[id]/delay-report/route.ts:8", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/sites/[id]/delay-report/route.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-b018b5021b6d96d9", "name": "Commented-code block (5 lines) in src/app/api/sites/[id]/documents/route.ts:101", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/sites/[id]/documents/route.ts:101"}, "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-30bd5da43424dbb5", "name": "Commented-code block (5 lines) in src/app/api/sites/[id]/calendar.ics/route.ts:78", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/sites/[id]/calendar.ics/route.ts:78"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9038fa896d133d02", "name": "Commented-code block (6 lines) in src/app/api/sites/[id]/snag-report/route.ts:8", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/api/sites/[id]/snag-report/route.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-ebca016ae4d71329", "name": "Commented-code block (5 lines) in src/app/api/sites/[id]/cash-flow/route.ts:71", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/sites/[id]/cash-flow/route.ts:71"}, "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-b4d9937ff05dbc23", "name": "Commented-code block (5 lines) in src/app/api/sites/[id]/story/route.ts:58", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/sites/[id]/story/route.ts:58"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1ac356d497e882cc", "name": "Commented-code block (5 lines) in src/app/api/sites/[id]/calendar/route.ts:39", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/sites/[id]/calendar/route.ts:39"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-bb024a2cc31a5a88", "name": "Commented-code block (11 lines) in src/app/(dashboard)/layout.tsx:22", "shortDescription": {"text": "Commented-code block (11 lines) in src/app/(dashboard)/layout.tsx:22"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8de1892839c77c5f", "name": "Commented-code block (7 lines) in src/app/(dashboard)/settings/page.tsx:15", "shortDescription": {"text": "Commented-code block (7 lines) in src/app/(dashboard)/settings/page.tsx:15"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ca81c53f36ef25dc", "name": "Commented-code block (5 lines) in src/app/(dashboard)/orders/page.tsx:21", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/(dashboard)/orders/page.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-ab1ce66af22d95d7", "name": "Commented-code block (7 lines) in src/app/(dashboard)/dashboard/page.tsx:24", "shortDescription": {"text": "Commented-code block (7 lines) in src/app/(dashboard)/dashboard/page.tsx:24"}, "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-a5a17948ae0ef24c", "name": "Commented-code block (6 lines) in src/app/(dashboard)/portfolio/page.tsx:74", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/(dashboard)/portfolio/page.tsx:74"}, "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-b86d7123882cbe2e", "name": "Commented-code block (5 lines) in src/app/(dashboard)/sites/[siteId]/page.tsx:147", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/(dashboard)/sites/[siteId]/page.tsx:147"}, "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-72e22fda4d9d5c4b", "name": "Commented-code block (6 lines) in src/app/forgot-password/page.tsx:21", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/forgot-password/page.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-ee93da2ec13a51c4", "name": "Commented-code block (6 lines) in src/app/progress/[token]/CustomerNotifyToggle.tsx:37", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/progress/[token]/CustomerNotifyToggle.tsx:37"}, "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-b09afee96183cf72", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/progress/[token]/CustomerNotifyToggle.tsx:114", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/progress/[token]/CustomerNotifyToggle.tsx:114"}, "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-58ceca719f4e0fd0", "name": "Commented-code block (10 lines) in src/app/progress/[token]/page.tsx:42", "shortDescription": {"text": "Commented-code block (10 lines) in src/app/progress/[token]/page.tsx:42"}, "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-6aa799d8090304b9", "name": "Commented-code block (6 lines) in src/app/share/[token]/page.tsx:98", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/share/[token]/page.tsx:98"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-757790cc8b9a3b2e", "name": "Commented-code block (5 lines) in src/app/q/[plotId]/page.tsx:40", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/q/[plotId]/page.tsx:40"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fa82975f0478b297", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/weather.ts:92", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/weather.ts: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-d9c84b6b59a6c328", "name": "Commented-code block (6 lines) in src/lib/auth.ts:61", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/auth.ts:61"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-816cc6aee5e729e7", "name": "Commented-code block (5 lines) in src/lib/email.ts:45", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/email.ts:45"}, "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-cd64e7117d9cd647", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/global-loading.ts:15", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/global-loading.ts:15"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-fd7532af6ce509a1", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/use-push.ts:97", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/use-push.ts:97"}, "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-75dd48812853699d", "name": "Commented-code block (6 lines) in src/lib/cascade.ts:177", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/cascade.ts:177"}, "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-80cc6291c221c90f", "name": "Commented-code block (5 lines) in src/lib/permissions.ts:138", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/permissions.ts:138"}, "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-c338335124f99167", "name": "Commented-code block (5 lines) in src/lib/inspection-dates.ts:127", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/inspection-dates.ts:127"}, "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-bccbd93b24ca0cc3", "name": "Commented-code block (6 lines) in src/lib/handover-pdf-renderers.ts:422", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/handover-pdf-renderers.ts:422"}, "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-cd2d40817e2329a0", "name": "Commented-code block (6 lines) in src/lib/lateness.ts:66", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/lateness.ts:66"}, "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-4393236801e43777", "name": "Commented-code block (6 lines) in src/lib/push.ts:116", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/push.ts:116"}, "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-7fd29f4a5d517171", "name": "Commented-code block (9 lines) in src/lib/parent-job.ts:92", "shortDescription": {"text": "Commented-code block (9 lines) in src/lib/parent-job.ts:92"}, "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-d6283baf43c7ac01", "name": "Commented-code block (5 lines) in src/lib/site-story.ts:422", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/site-story.ts:422"}, "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-c9f6fb6cb79083be", "name": "Commented-code block (8 lines) in src/lib/schedule.ts:3", "shortDescription": {"text": "Commented-code block (8 lines) in src/lib/schedule.ts:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ee80540a873597c4", "name": "Commented-code block (5 lines) in src/lib/template-validation.ts:182", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/template-validation.ts:182"}, "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-bc7d4f7c020acaa4", "name": "Commented-code block (7 lines) in src/lib/cron-auth.ts:23", "shortDescription": {"text": "Commented-code block (7 lines) in src/lib/cron-auth.ts:23"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e5849840c6c2d526", "name": "Commented-code block (7 lines) in src/lib/handover-zip.ts:147", "shortDescription": {"text": "Commented-code block (7 lines) in src/lib/handover-zip.ts:147"}, "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-f7c9a3819c3ae329", "name": "Commented-code block (7 lines) in src/lib/apply-template-helpers.ts:106", "shortDescription": {"text": "Commented-code block (7 lines) in src/lib/apply-template-helpers.ts:106"}, "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-bd72c31740d7374f", "name": "Commented-code block (7 lines) in src/lib/lateness-event.ts:22", "shortDescription": {"text": "Commented-code block (7 lines) in src/lib/lateness-event.ts:22"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-376092116b81dabf", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/patch-fetch.ts:13", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/patch-fetch.ts:13"}, "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-58f8b536be90c999", "name": "Commented-code block (8 lines) in src/lib/order-invariants.ts:76", "shortDescription": {"text": "Commented-code block (8 lines) in src/lib/order-invariants.ts:76"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-84af2976379a9b2d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/urgent-order-email.ts:28", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/urgent-order-email.ts:28"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e65380c804627254", "name": "Commented-code block (6 lines) in src/lib/template-preview.ts:49", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/template-preview.ts:49"}, "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-d2ad6599c1993335", "name": "Commented-code block (14 lines) in src/lib/share-token.ts:16", "shortDescription": {"text": "Commented-code block (14 lines) in src/lib/share-token.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-46db9ce452746c25", "name": "Commented-code block (5 lines) in src/hooks/useReviewSupplierMaterials.tsx:101", "shortDescription": {"text": "Commented-code block (5 lines) in src/hooks/useReviewSupplierMaterials.tsx:101"}, "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-79dc3caea4b8e571", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/hooks/useReviewSupplierMaterials.tsx:276", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/hooks/useReviewSupplierMaterials.tsx:276"}, "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-933681f603122ef1", "name": "Commented-code block (5 lines) in src/hooks/useJobAction.tsx:158", "shortDescription": {"text": "Commented-code block (5 lines) in src/hooks/useJobAction.tsx:158"}, "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-62323fa41cc61507", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/hooks/useJobAction.tsx:247", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/hooks/useJobAction.tsx:247"}, "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-eeab8666d3f93b8c", "name": "Commented-code block (5 lines) in src/hooks/useOrderEmail.tsx:148", "shortDescription": {"text": "Commented-code block (5 lines) in src/hooks/useOrderEmail.tsx:148"}, "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-23c16e52d1bff31c", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/hooks/useOrderEmail.tsx:314", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/hooks/useOrderEmail.tsx:314"}, "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-099e6c4234380b53", "name": "Commented-code block (6 lines) in src/hooks/useOrderStatus.ts:110", "shortDescription": {"text": "Commented-code block (6 lines) in src/hooks/useOrderStatus.ts:110"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8999981355831323", "name": "Commented-code block (10 lines) in src/hooks/usePlotCreation.ts:216", "shortDescription": {"text": "Commented-code block (10 lines) in src/hooks/usePlotCreation.ts:216"}, "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-d62ca24c2f0990cb", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/hooks/usePlotCreation.ts:393", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/hooks/usePlotCreation.ts:393"}, "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/19920"}, "properties": {"repository": "snapifyreports-art/sight-manager", "repoUrl": "https://github.com/snapifyreports-art/sight-manager", "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-893ef2f0f01fd289", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 seed-riverside.ts:8"}, "properties": {"repobilityId": "195ac6388894e9a9", "scanner": "scanner-primary", "fingerprint": "893ef2f0f01fd289", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a29612114c9fab2f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 seed-orders.ts:27"}, "properties": {"repobilityId": "a4385615f0c3fdd0", "scanner": "scanner-primary", "fingerprint": "a29612114c9fab2f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-586c7f9e9cb9ea25", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 simulate-build.ts:7"}, "properties": {"repobilityId": "967e4d59e20b0d07", "scanner": "scanner-primary", "fingerprint": "586c7f9e9cb9ea25", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-690f41f42d965497", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 docs/build-guide-docx.js:233"}, "properties": {"repobilityId": "019b38834607d5a7", "scanner": "scanner-primary", "fingerprint": "690f41f42d965497", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-cb24e6d34d7418bf", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 docs/build-pptx.js:282"}, "properties": {"repobilityId": "6a94e71daf39ca65", "scanner": "scanner-primary", "fingerprint": "cb24e6d34d7418bf", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f6b3163005d71cb3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 docs/build-flows-docx.js:294"}, "properties": {"repobilityId": "3c893aeba033b20d", "scanner": "scanner-primary", "fingerprint": "f6b3163005d71cb3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c1a40a661ff40400", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/diag-templates.ts:14"}, "properties": {"repobilityId": "6b3f74d582af69a5", "scanner": "scanner-primary", "fingerprint": "c1a40a661ff40400", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6a08c3ef2f4db98f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/preview-cleanup.ts:56"}, "properties": {"repobilityId": "56b1b7b97ef39a0b", "scanner": "scanner-primary", "fingerprint": "6a08c3ef2f4db98f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8032267254382c2c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/tighten-original-dates.ts:19"}, "properties": {"repobilityId": "375f80c84d518885", "scanner": "scanner-primary", "fingerprint": "8032267254382c2c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e08c0e1322d317ce", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/apply-order-lateness-reasons-schema.ts:50"}, "properties": {"repobilityId": "f8028366edb6774e", "scanner": "scanner-primary", "fingerprint": "e08c0e1322d317ce", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-56d98424f9af2753", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/inspect-contacts-suppliers.ts:14"}, "properties": {"repobilityId": "cb11622823990717", "scanner": "scanner-primary", "fingerprint": "56d98424f9af2753", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d9059fb4777a3cf6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/create-sites.js:91"}, "properties": {"repobilityId": "9be325225ef4a9d7", "scanner": "scanner-primary", "fingerprint": "d9059fb4777a3cf6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9d6cd36f54fcf641", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/apply-immutability-triggers.ts:91"}, "properties": {"repobilityId": "fce78e610af22d58", "scanner": "scanner-primary", "fingerprint": "9d6cd36f54fcf641", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-eb2b2aca7e814c23", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-2story-and-variants.ts:90"}, "properties": {"repobilityId": "d2e36c91ba6bcc8d", "scanner": "scanner-primary", "fingerprint": "eb2b2aca7e814c23", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-18d980a8754aef29", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/apply-compliance-toolbox-ncr-schema.ts:11"}, "properties": {"repobilityId": "dea5b90e0fb8c60c", "scanner": "scanner-primary", "fingerprint": "18d980a8754aef29", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-acf1f8e8e5b639e5", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/inspect-templates.ts:22"}, "properties": {"repobilityId": "58f24c19cee092f0", "scanner": "scanner-primary", "fingerprint": "acf1f8e8e5b639e5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-995057c5060fac0f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-cascade-e2e.ts:26"}, "properties": {"repobilityId": "83d9fdd7ea344d7b", "scanner": "scanner-primary", "fingerprint": "995057c5060fac0f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ca6fdca25cfb10d6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/smoke-test.ts:428"}, "properties": {"repobilityId": "5f2b372ac377e7d4", "scanner": "scanner-primary", "fingerprint": "ca6fdca25cfb10d6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4d41c2bfcd5c85bc", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/apply-order-split.ts:11"}, "properties": {"repobilityId": "acd1d0f062af2107", "scanner": "scanner-primary", "fingerprint": "4d41c2bfcd5c85bc", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b1c4cfd5e033a584", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/apply-toolbox-talk-doc.ts:12"}, "properties": {"repobilityId": "90b601bb6cbf9d2e", "scanner": "scanner-primary", "fingerprint": "b1c4cfd5e033a584", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d1526b8e53fb42ea", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-lateness-from-current-state.ts:70"}, "properties": {"repobilityId": "8940b0a1e2b99615", "scanner": "scanner-primary", "fingerprint": "d1526b8e53fb42ea", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3b68643b4b58b0ea", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/apply-watched-sites-schema.ts:15"}, "properties": {"repobilityId": "1b810e7ef6ad1a3d", "scanner": "scanner-primary", "fingerprint": "3b68643b4b58b0ea", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8da73b75c6739c4f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/diag-orphan-orders.ts:18"}, "properties": {"repobilityId": "952977f86230f0db", "scanner": "scanner-primary", "fingerprint": "8da73b75c6739c4f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8077867d46386ae9", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/apply-event-log-detail-schema.ts:25"}, "properties": {"repobilityId": "c26ce6e04fe15f16", "scanner": "scanner-primary", "fingerprint": "8077867d46386ae9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-78af5218281a127d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/cleanup-orphan-orders.ts:20"}, "properties": {"repobilityId": "ddd8ef7b0495771d", "scanner": "scanner-primary", "fingerprint": "78af5218281a127d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ca75acaf3cdc1937", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/repro-stage-gap.ts:16"}, "properties": {"repobilityId": "2685469090048d90", "scanner": "scanner-primary", "fingerprint": "ca75acaf3cdc1937", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4950f476ec9e4ac2", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/apply-toolbox-contractor-link.ts:17"}, "properties": {"repobilityId": "40f23c42339d0a56", "scanner": "scanner-primary", "fingerprint": "4950f476ec9e4ac2", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-49d42843632e1461", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/apply-site-completed-at.ts:15"}, "properties": {"repobilityId": "38ae28ffced7991f", "scanner": "scanner-primary", "fingerprint": "49d42843632e1461", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-35014609d6fd4be3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/nuke-site.ts:21"}, "properties": {"repobilityId": "9a5043d6ba925521", "scanner": "scanner-primary", "fingerprint": "35014609d6fd4be3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-001c13a647793429", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-users.ts:7"}, "properties": {"repobilityId": "9d95dff2693e9eed", "scanner": "scanner-primary", "fingerprint": "001c13a647793429", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-74df595d0264550b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-audit-fixes.ts:88"}, "properties": {"repobilityId": "4373002727198194", "scanner": "scanner-primary", "fingerprint": "74df595d0264550b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f2f3af0ffd24cff0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/populate-template-orders.js:231"}, "properties": {"repobilityId": "32eae0da7a5089ef", "scanner": "scanner-primary", "fingerprint": "f2f3af0ffd24cff0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-af637e82fbc04cc7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/apply-enum-check-constraints.ts:70"}, "properties": {"repobilityId": "ec5b3644fc03460b", "scanner": "scanner-primary", "fingerprint": "af637e82fbc04cc7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c27194dcb45d0018", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/audit-contact-dedup.ts:22"}, "properties": {"repobilityId": "839783d4253be138", "scanner": "scanner-primary", "fingerprint": "c27194dcb45d0018", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e00e6936d8d0197c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/backfill-skewed-ordered-deliveries.ts:43"}, "properties": {"repobilityId": "ca08d093915479f5", "scanner": "scanner-primary", "fingerprint": "e00e6936d8d0197c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3d07df97f4433948", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/e2e-full-test.ts:37"}, "properties": {"repobilityId": "47909d4ba14bd28a", "scanner": "scanner-primary", "fingerprint": "3d07df97f4433948", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a7a53c93dd570744", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/migrate-variants-to-fullfat.ts:41"}, "properties": {"repobilityId": "f742a6237fbb40aa", "scanner": "scanner-primary", "fingerprint": "a7a53c93dd570744", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-56767f55d942b656", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/apply-site-event-notification-types.ts:12"}, "properties": {"repobilityId": "cb7412ab3e550a15", "scanner": "scanner-primary", "fingerprint": "56767f55d942b656", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d7d91ce8f089f2d8", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/audit-analytics-vs-brief.ts:35"}, "properties": {"repobilityId": "773ac959f22894b3", "scanner": "scanner-primary", "fingerprint": "d7d91ce8f089f2d8", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1028c1a63d61712f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/restore-templates.ts:17"}, "properties": {"repobilityId": "9d79c809995df5bf", "scanner": "scanner-primary", "fingerprint": "1028c1a63d61712f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-102a1e9a2ceb54f1", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/apply-audit-indexes.ts:92"}, "properties": {"repobilityId": "5d3be361aa18fa0a", "scanner": "scanner-primary", "fingerprint": "102a1e9a2ceb54f1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-abf25a0191012ffa", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/apply-cascade-to-setnull.ts:92"}, "properties": {"repobilityId": "69be9027978c5039", "scanner": "scanner-primary", "fingerprint": "abf25a0191012ffa", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-435956e8a5fb3c2d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-stage-gap-now.ts:17"}, "properties": {"repobilityId": "1a25c5c1c410c0e7", "scanner": "scanner-primary", "fingerprint": "435956e8a5fb3c2d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-38979aea08f7a7ad", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/promote-drafts-to-live.ts:29"}, "properties": {"repobilityId": "7e5cef72dedda878", "scanner": "scanner-primary", "fingerprint": "38979aea08f7a7ad", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e747a07a9d83212d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/diag-2story-suppliers.ts:23"}, "properties": {"repobilityId": "8cb07dad5b3ccc87", "scanner": "scanner-primary", "fingerprint": "e747a07a9d83212d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b53a2227d4522183", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-quants-stress.ts:62"}, "properties": {"repobilityId": "460e808b4340728e", "scanner": "scanner-primary", "fingerprint": "b53a2227d4522183", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-758a6cd9a3b9e7ce", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-contact-split.ts:6"}, "properties": {"repobilityId": "3ff7c4d55c6e32fa", "scanner": "scanner-primary", "fingerprint": "758a6cd9a3b9e7ce", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-750a607078045d49", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/apply-customer-push-subscription.ts:11"}, "properties": {"repobilityId": "0c7bd2c55688d2b2", "scanner": "scanner-primary", "fingerprint": "750a607078045d49", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-972d1a2708e52d1b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/apply-delay-reasons-schema.ts:26"}, "properties": {"repobilityId": "6ded1ef9032cc4bd", "scanner": "scanner-primary", "fingerprint": "972d1a2708e52d1b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-05bb84211bfd687c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/rebaseline-originals.ts:27"}, "properties": {"repobilityId": "b2d26ddcdca71eeb", "scanner": "scanner-primary", "fingerprint": "05bb84211bfd687c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2c159e40fefda76f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/apply-user-archived-at.ts:25"}, "properties": {"repobilityId": "9fbf9af863355f8f", "scanner": "scanner-primary", "fingerprint": "2c159e40fefda76f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6d79358143ce04af", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/reconcile-late-completion-overlaps.ts:44"}, "properties": {"repobilityId": "b0591c375bcd4b69", "scanner": "scanner-primary", "fingerprint": "6d79358143ce04af", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c640869615e0d8f7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/audit-performance.ts:46"}, "properties": {"repobilityId": "878fc1f2ab00c0ec", "scanner": "scanner-primary", "fingerprint": "c640869615e0d8f7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-66beda0899aed8f7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/inspect-db.ts:34"}, "properties": {"repobilityId": "4cb92e78a5040d53", "scanner": "scanner-primary", "fingerprint": "66beda0899aed8f7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4308b9f3cd9cb3de", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/recompute-plot-dates.ts:52"}, "properties": {"repobilityId": "9f3d9f74027edf2a", "scanner": "scanner-primary", "fingerprint": "4308b9f3cd9cb3de", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-76405099468c34c6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/inspect-2story-full.ts:14"}, "properties": {"repobilityId": "ccc6006e21430c6b", "scanner": "scanner-primary", "fingerprint": "76405099468c34c6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9bc2ae5a871a6f38", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/ensure-test-account.ts:69"}, "properties": {"repobilityId": "e7a0220c703554ea", "scanner": "scanner-primary", "fingerprint": "9bc2ae5a871a6f38", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ad90f5f8c272b5b8", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/reset-old-hall-village.ts:41"}, "properties": {"repobilityId": "1266f1ec40fb2c34", "scanner": "scanner-primary", "fingerprint": "ad90f5f8c272b5b8", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-900559e4cb6de60f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/apply-prestart-variations-defects-schema.ts:12"}, "properties": {"repobilityId": "dc9d9c8b71f175d5", "scanner": "scanner-primary", "fingerprint": "900559e4cb6de60f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5c072a45f5ca5b29", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/apply-draw-voice-annotation-schema.ts:11"}, "properties": {"repobilityId": "8af6d8e5090ce915", "scanner": "scanner-primary", "fingerprint": "5c072a45f5ca5b29", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b9bfdd559b194166", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-cascade.ts:34"}, "properties": {"repobilityId": "40d08179c07531d6", "scanner": "scanner-primary", "fingerprint": "b9bfdd559b194166", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-aa0e35c1a83a73e8", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-consistency.ts:57"}, "properties": {"repobilityId": "ab1a6e3cba27cb46", "scanner": "scanner-primary", "fingerprint": "aa0e35c1a83a73e8", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7bbb59d86cfa941b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-scale.ts:66"}, "properties": {"repobilityId": "6748c8b3a1dbd201", "scanner": "scanner-primary", "fingerprint": "7bbb59d86cfa941b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-07d91f118153a369", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/apply-customer-share-schema.ts:23"}, "properties": {"repobilityId": "9b52fe4cab539e00", "scanner": "scanner-primary", "fingerprint": "07d91f118153a369", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ac78323d3a967623", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/migrate-subjob-duration-to-days.ts:22"}, "properties": {"repobilityId": "a19cb856a631fc78", "scanner": "scanner-primary", "fingerprint": "ac78323d3a967623", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-229e80b5aff13472", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/apply-archive-pattern.ts:30"}, "properties": {"repobilityId": "e5c2e69db688f813", "scanner": "scanner-primary", "fingerprint": "229e80b5aff13472", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-85a35f473be2130a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/apply-lateness-event.ts:14"}, "properties": {"repobilityId": "7e786c078c7d2721", "scanner": "scanner-primary", "fingerprint": "85a35f473be2130a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c2d854cddefcb03f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/apply-templates-schema.ts:207"}, "properties": {"repobilityId": "badf5caf7b4820fa", "scanner": "scanner-primary", "fingerprint": "c2d854cddefcb03f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1c88134548ce87e7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/verify-2story.ts:26"}, "properties": {"repobilityId": "3b1dea3879e7e200", "scanner": "scanner-primary", "fingerprint": "1c88134548ce87e7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-fb9ef405ba93c50f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-quants.ts:62"}, "properties": {"repobilityId": "c050ab857679a687", "scanner": "scanner-primary", "fingerprint": "fb9ef405ba93c50f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-82e21da41c230413", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/backfill-compliance-permissions.ts:32"}, "properties": {"repobilityId": "60aacfbd1ff7e914", "scanner": "scanner-primary", "fingerprint": "82e21da41c230413", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8e06f9b0ef1621c5", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-ui-test.ts:17"}, "properties": {"repobilityId": "175cf6a7c13b0fbb", "scanner": "scanner-primary", "fingerprint": "8e06f9b0ef1621c5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-473a83d15dade003", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/repair-plot-cascade.ts:210"}, "properties": {"repobilityId": "5b9259b8426d5b7e", "scanner": "scanner-primary", "fingerprint": "473a83d15dade003", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-067665f32d91cac8", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/apply-eventlog-cascade-fix.ts:95"}, "properties": {"repobilityId": "1564bd523b1d7d85", "scanner": "scanner-primary", "fingerprint": "067665f32d91cac8", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c318089f25ff516f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/apply-rained-off-date-index.ts:22"}, "properties": {"repobilityId": "038e82fd5d330b83", "scanner": "scanner-primary", "fingerprint": "c318089f25ff516f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-35421f01b2178b9b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/generate-icons.js:204"}, "properties": {"repobilityId": "50ac322bf6978bfe", "scanner": "scanner-primary", "fingerprint": "35421f01b2178b9b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-890f0a45fe95fc1a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/apply-lateness-supplier-attribution.ts:26"}, "properties": {"repobilityId": "2b6ac87dd98cd375", "scanner": "scanner-primary", "fingerprint": "890f0a45fe95fc1a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a1f00e4f6d46f16c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-launch-sites.ts:44"}, "properties": {"repobilityId": "5d9661d57c355d2e", "scanner": "scanner-primary", "fingerprint": "a1f00e4f6d46f16c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0a99688bf1e03685", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/wipe-fake-sites.ts:41"}, "properties": {"repobilityId": "9d1dff01bb530415", "scanner": "scanner-primary", "fingerprint": "0a99688bf1e03685", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-572ec76c8bba12ed", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/backfill-closed-snag-resolved-at.ts:38"}, "properties": {"repobilityId": "0bf56b2360a885df", "scanner": "scanner-primary", "fingerprint": "572ec76c8bba12ed", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1cf3b3a52d5667d5", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/add-2story-quants-drawings.ts:123"}, "properties": {"repobilityId": "a96ff32835a80463", "scanner": "scanner-primary", "fingerprint": "1cf3b3a52d5667d5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-23a07c3e4d4dce38", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/list-db-indexes.ts:21"}, "properties": {"repobilityId": "4e8de726891557f3", "scanner": "scanner-primary", "fingerprint": "23a07c3e4d4dce38", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-cf7a2bd7ebc157c7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/apply-customer-link-backfill.ts:20"}, "properties": {"repobilityId": "7ef688ac59c38ca9", "scanner": "scanner-primary", "fingerprint": "cf7a2bd7ebc157c7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5ae08ef1f8d752ef", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/apply-house-value-schema.ts:23"}, "properties": {"repobilityId": "bc419c30164e91df", "scanner": "scanner-primary", "fingerprint": "5ae08ef1f8d752ef", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0babd6c94866c385", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/diag-variants.ts:18"}, "properties": {"repobilityId": "6143fdaa58e6d344", "scanner": "scanner-primary", "fingerprint": "0babd6c94866c385", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-559348d78f446751", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/flip-watch-to-mute.ts:35"}, "properties": {"repobilityId": "15d9a14f588953be", "scanner": "scanner-primary", "fingerprint": "559348d78f446751", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-38224898f09596c1", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-permissions.ts:23"}, "properties": {"repobilityId": "747f7d910e6444a3", "scanner": "scanner-primary", "fingerprint": "38224898f09596c1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a12e75094e58c733", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/apply-app-settings.ts:11"}, "properties": {"repobilityId": "c45e75f5a2b9ea9c", "scanner": "scanner-primary", "fingerprint": "a12e75094e58c733", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-32f7d0a39172b758", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/verify-late-order-schema.ts:25"}, "properties": {"repobilityId": "ab2005f4c7cf9cdd", "scanner": "scanner-primary", "fingerprint": "32f7d0a39172b758", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a1ee9dfa634c5a02", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/apply-super-admin-role.ts:11"}, "properties": {"repobilityId": "fbf9533ee5c897db", "scanner": "scanner-primary", "fingerprint": "a1ee9dfa634c5a02", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4bf18cc2fe6824d4", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/run-reconcile.ts:19"}, "properties": {"repobilityId": "e7216db9cd2fc6d8", "scanner": "scanner-primary", "fingerprint": "4bf18cc2fe6824d4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-cce6ab0753f2a9f7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/verify-2story-extras.ts:35"}, "properties": {"repobilityId": "266d91c29add5a5d", "scanner": "scanner-primary", "fingerprint": "cce6ab0753f2a9f7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4865c7b531929ccf", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fill-2story-clone.ts:172"}, "properties": {"repobilityId": "ea936ef60d8c7d06", "scanner": "scanner-primary", "fingerprint": "4865c7b531929ccf", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7b1e4fd463ec8926", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-e2e-template.ts:80"}, "properties": {"repobilityId": "f73b4dfe23f755f9", "scanner": "scanner-primary", "fingerprint": "7b1e4fd463ec8926", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2643f5d8a7e380e4", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/run-cleanup.ts:32"}, "properties": {"repobilityId": "2fc23252473bb188", "scanner": "scanner-primary", "fingerprint": "2643f5d8a7e380e4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-fe7accbb4b977108", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-2story-template.ts:340"}, "properties": {"repobilityId": "223b315bc1205300", "scanner": "scanner-primary", "fingerprint": "fe7accbb4b977108", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-58a881ff8b38faec", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/audit-integrity.ts:30"}, "properties": {"repobilityId": "39d859bef5df24b1", "scanner": "scanner-primary", "fingerprint": "58a881ff8b38faec", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-33a1d6a8b2edd80b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-permissions.ts:33"}, "properties": {"repobilityId": "8cc32a9655339f57", "scanner": "scanner-primary", "fingerprint": "33a1d6a8b2edd80b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b20d7dac7691c49f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 prisma/seed.ts:8"}, "properties": {"repobilityId": "f77d7e0fb34b08e2", "scanner": "scanner-primary", "fingerprint": "b20d7dac7691c49f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f2d39bcdd7cfba46", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 prisma/seed-latest-site.ts:7"}, "properties": {"repobilityId": "f42ec2707a44258c", "scanner": "scanner-primary", "fingerprint": "f2d39bcdd7cfba46", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e4380510da6042cb", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/instrumentation.ts:45"}, "properties": {"repobilityId": "1791378cdc59d011", "scanner": "scanner-primary", "fingerprint": "e4380510da6042cb", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-789cbd6052061f23", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/PostCompletionDialog.tsx:236"}, "properties": {"repobilityId": "35e1941a7cc5ca87", "scanner": "scanner-primary", "fingerprint": "789cbd6052061f23", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c29a7734c57e8c36", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/TemplateMobileSummary.tsx:66"}, "properties": {"repobilityId": "e77347351b9c0f1b", "scanner": "scanner-primary", "fingerprint": "c29a7734c57e8c36", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-23c896c778d61ff9", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/TemplateEditor.tsx:1629"}, "properties": {"repobilityId": "b19a79ef1e036379", "scanner": "scanner-primary", "fingerprint": "23c896c778d61ff9", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-fd688e2d0b7b40d4", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/TemplateTimeline.tsx:437"}, "properties": {"repobilityId": "7c39eb4727a4dca5", "scanner": "scanner-primary", "fingerprint": "fd688e2d0b7b40d4", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-813d167b3d19c012", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/TemplateVariantsSection.tsx:271"}, "properties": {"repobilityId": "243483301e7679bb", "scanner": "scanner-primary", "fingerprint": "813d167b3d19c012", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-23f197a37565e460", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/TemplateExtras.tsx:706"}, "properties": {"repobilityId": "ca270b5df18faac5", "scanner": "scanner-primary", "fingerprint": "23f197a37565e460", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-eb1255b10c027661", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/PlotTemplatesSection.tsx:733"}, "properties": {"repobilityId": "57613cc9490c8496", "scanner": "scanner-primary", "fingerprint": "eb1255b10c027661", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-35b7f502c0a5c5b9", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/TemplateValidationPanel.tsx:210"}, "properties": {"repobilityId": "7e0a98ef3f8b8fd0", "scanner": "scanner-primary", "fingerprint": "35b7f502c0a5c5b9", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d95918182fb7bfb5", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/layout/SearchModal.tsx:328"}, "properties": {"repobilityId": "7239225c64d2bd63", "scanner": "scanner-primary", "fingerprint": "d95918182fb7bfb5", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-71d1ece9e990c512", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/layout/Sidebar.tsx:600"}, "properties": {"repobilityId": "be1152cdf47927a8", "scanner": "scanner-primary", "fingerprint": "71d1ece9e990c512", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4c02179a65af1b9f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/plots/PlotCustomerViewTab.tsx:442"}, "properties": {"repobilityId": "728d83bfdea1c4e5", "scanner": "scanner-primary", "fingerprint": "4c02179a65af1b9f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-26be420597399faf", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/plots/PlotTodoList.tsx:489"}, "properties": {"repobilityId": "b10e7326102ab7f9", "scanner": "scanner-primary", "fingerprint": "26be420597399faf", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-3bee181adb79f767", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/plots/PlotDrawingsSection.tsx:293"}, "properties": {"repobilityId": "47c35c1331e3ab45", "scanner": "scanner-primary", "fingerprint": "3bee181adb79f767", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-8af8e82d5d40aa45", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/plots/PlotDetailClient.tsx:890"}, "properties": {"repobilityId": "ba660103f6accfcd", "scanner": "scanner-primary", "fingerprint": "8af8e82d5d40aa45", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a14be3d6805b52d7", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/users/UsersClient.tsx:648"}, "properties": {"repobilityId": "39b21a10ced5ff26", "scanner": "scanner-primary", "fingerprint": "a14be3d6805b52d7", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0d2c89906a8ea60b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/orders/OrdersClient.tsx:277"}, "properties": {"repobilityId": "ee266e0a03c0e857", "scanner": "scanner-primary", "fingerprint": "0d2c89906a8ea60b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e82da7c3e6afc86e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/orders/LateSendPromptProvider.tsx:357"}, "properties": {"repobilityId": "3056391317460a7a", "scanner": "scanner-primary", "fingerprint": "e82da7c3e6afc86e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e353df244be430b6", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/orders/SiteOrders.tsx:797"}, "properties": {"repobilityId": "41a11e31ed1e59a6", "scanner": "scanner-primary", "fingerprint": "e353df244be430b6", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-3dc0cc67dde68a92", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/gantt/GanttOrderFlag.tsx:127"}, "properties": {"repobilityId": "6f14d977f8b2f8bd", "scanner": "scanner-primary", "fingerprint": "3dc0cc67dde68a92", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-05d4a6a3bdb7ae3d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/gantt/GanttChart.tsx:511"}, "properties": {"repobilityId": "edfcf3778f426f8f", "scanner": "scanner-primary", "fingerprint": "05d4a6a3bdb7ae3d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-9656e88ee77e2059", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/gantt/GanttBar.tsx:106"}, "properties": {"repobilityId": "0b503481a4ad588c", "scanner": "scanner-primary", "fingerprint": "9656e88ee77e2059", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-73e2a32d1cfb1420", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/walkthrough/SiteWalkthrough.tsx:699"}, "properties": {"repobilityId": "f7e5ed023378cefa", "scanner": "scanner-primary", "fingerprint": "73e2a32d1cfb1420", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e1498fc6758202ce", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/handover/HandoverChecklist.tsx:292"}, "properties": {"repobilityId": "7e535118ad1175a2", "scanner": "scanner-primary", "fingerprint": "e1498fc6758202ce", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-5814c4447ccfc2ee", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/shared/MiniGantt.tsx:207"}, "properties": {"repobilityId": "7c5c7dee407e4faf", "scanner": "scanner-primary", "fingerprint": "5814c4447ccfc2ee", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f64276e1153987ae", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/components/ui/toast.tsx:177"}, "properties": {"repobilityId": "94b21f1d7281f5f4", "scanner": "scanner-primary", "fingerprint": "f64276e1153987ae", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5c44131f2c629969", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/DashboardClient.tsx:488"}, "properties": {"repobilityId": "b06baf76d5afd1d0", "scanner": "scanner-primary", "fingerprint": "5c44131f2c629969", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-17342895ea9f0e39", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/lateness/LatenessSummary.tsx:568"}, "properties": {"repobilityId": "718ea2982bbf7577", "scanner": "scanner-primary", "fingerprint": "17342895ea9f0e39", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ffe82a78e152e955", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/components/providers/ServiceWorkerProvider.tsx:18"}, "properties": {"repobilityId": "fba5551c19a28724", "scanner": "scanner-primary", "fingerprint": "ffe82a78e152e955", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9c60df64ce9cbead", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/tasks/TasksClient.tsx:608"}, "properties": {"repobilityId": "41503f49eacf350c", "scanner": "scanner-primary", "fingerprint": "9c60df64ce9cbead", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-9efe59743ba9ebb8", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/SiteDocumentsClient.tsx:413"}, "properties": {"repobilityId": "7e4181d3c933e823", "scanner": "scanner-primary", "fingerprint": "9efe59743ba9ebb8", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a3cdda0fbb8158e3", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/suppliers/SuppliersListClient.tsx:185"}, "properties": {"repobilityId": "7cba4eba14561c23", "scanner": "scanner-primary", "fingerprint": "a3cdda0fbb8158e3", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-508fed467a088c65", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/snags/SnagAgeingReport.tsx:223"}, "properties": {"repobilityId": "39c66ebb4fe20c93", "scanner": "scanner-primary", "fingerprint": "508fed467a088c65", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a432c6a5666ad110", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/contacts/ContractorDetailSheet.tsx:178"}, "properties": {"repobilityId": "e72d72a342158c5f", "scanner": "scanner-primary", "fingerprint": "a432c6a5666ad110", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-920fd5780bb84d85", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/contacts/ContactsClient.tsx:333"}, "properties": {"repobilityId": "8d0186deb93682f4", "scanner": "scanner-primary", "fingerprint": "920fd5780bb84d85", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-98b7f2d1d52d6bff", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/contacts/ContactDetailClient.tsx:500"}, "properties": {"repobilityId": "ee5788f5a94beb11", "scanner": "scanner-primary", "fingerprint": "98b7f2d1d52d6bff", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-86c1f6b2c91e111a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/reports/SiteCalendar.tsx:441"}, "properties": {"repobilityId": "7bdc10a3803c9e95", "scanner": "scanner-primary", "fingerprint": "86c1f6b2c91e111a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d92e6b751ccc4b76", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/reports/ContractorComms.tsx:221"}, "properties": {"repobilityId": "9e9211ca0af7b1ad", "scanner": "scanner-primary", "fingerprint": "d92e6b751ccc4b76", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-32857844f200f570", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/reports/DailySiteBrief.tsx:1221"}, "properties": {"repobilityId": "a9ddf35199648036", "scanner": "scanner-primary", "fingerprint": "32857844f200f570", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0f4e17e49292c517", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/reports/CriticalPath.tsx:363"}, "properties": {"repobilityId": "b234b6816085f187", "scanner": "scanner-primary", "fingerprint": "0f4e17e49292c517", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b2db9c4affe9bf39", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/reports/daily-brief/UpcomingOrdersSection.tsx:101"}, "properties": {"repobilityId": "7c1ffa88f32439d3", "scanner": "scanner-primary", "fingerprint": "b2db9c4affe9bf39", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e792f81f77699e6b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/programme/JobOrdersSection.tsx:65"}, "properties": {"repobilityId": "a5d01c7942974772", "scanner": "scanner-primary", "fingerprint": "e792f81f77699e6b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-28440d835da3a42b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/programme/JobPhotoLightbox.tsx:178"}, "properties": {"repobilityId": "7b6c81339a96106d", "scanner": "scanner-primary", "fingerprint": "28440d835da3a42b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-77acac5a8b5bff08", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/programme/JobWeekPanel.tsx:1205"}, "properties": {"repobilityId": "4cc2edb9040bcbf0", "scanner": "scanner-primary", "fingerprint": "77acac5a8b5bff08", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4bd4cd9d57b7a848", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/programme/JobPhotosSection.tsx:216"}, "properties": {"repobilityId": "9304f4ef2b5a673f", "scanner": "scanner-primary", "fingerprint": "4bd4cd9d57b7a848", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-25c1a603897f5456", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/programme/SiteProgramme.tsx:1625"}, "properties": {"repobilityId": "6e3817c87d5f4ab4", "scanner": "scanner-primary", "fingerprint": "25c1a603897f5456", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d3fb2e80d251c725", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/documents/DocumentList.tsx:182"}, "properties": {"repobilityId": "c5d07a06aa2452f0", "scanner": "scanner-primary", "fingerprint": "d3fb2e80d251c725", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0ff653cc62d88bf8", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/jobs/JobDetailClient.tsx:1111"}, "properties": {"repobilityId": "4f85c96125af21f2", "scanner": "scanner-primary", "fingerprint": "0ff653cc62d88bf8", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-cf4f7a8f4167ef2f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/sites/SitesClient.tsx:292"}, "properties": {"repobilityId": "a753b78be28dea9f", "scanner": "scanner-primary", "fingerprint": "cf4f7a8f4167ef2f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b3fa2b1804575733", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/sites/SiteHeatmap.tsx:131"}, "properties": {"repobilityId": "a6145935c5b74452", "scanner": "scanner-primary", "fingerprint": "b3fa2b1804575733", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b8373a9892568cef", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/sites/SiteStoryPanel.tsx:644"}, "properties": {"repobilityId": "5a003bbb3f532819", "scanner": "scanner-primary", "fingerprint": "b8373a9892568cef", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-6b56129615d25f15", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/sites/SiteCustomerPagesPanel.tsx:383"}, "properties": {"repobilityId": "b7eda31ff32a61d1", "scanner": "scanner-primary", "fingerprint": "6b56129615d25f15", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-5b6ef84473b6afd9", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/sites/SiteNCRs.tsx:212"}, "properties": {"repobilityId": "ed745bae3a417784", "scanner": "scanner-primary", "fingerprint": "5b6ef84473b6afd9", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c638ebc44cbe4707", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/sites/SiteDetailClient.tsx:2300"}, "properties": {"repobilityId": "9bb17a0698be4333", "scanner": "scanner-primary", "fingerprint": "c638ebc44cbe4707", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d462c3a29574925a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/sites/BatchProgrammePreview.tsx:322"}, "properties": {"repobilityId": "34245bd568a31458", "scanner": "scanner-primary", "fingerprint": "d462c3a29574925a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-aa7c67e65aa1ecfd", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/sites/SiteToolboxTalks.tsx:549"}, "properties": {"repobilityId": "edd17f9f22898b16", "scanner": "scanner-primary", "fingerprint": "aa7c67e65aa1ecfd", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0b8fda89e9e1baf2", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/sites/SitePhotoAlbum.tsx:175"}, "properties": {"repobilityId": "133d3725cfbb479e", "scanner": "scanner-primary", "fingerprint": "0b8fda89e9e1baf2", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f8d01bea907f396b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/sites/SiteOnSiteToday.tsx:192"}, "properties": {"repobilityId": "6f991ca571d024f4", "scanner": "scanner-primary", "fingerprint": "f8d01bea907f396b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ec75234eae744cb8", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/contractor/[token]/page.tsx:646"}, "properties": {"repobilityId": "6ee21ef871e167fc", "scanner": "scanner-primary", "fingerprint": "ec75234eae744cb8", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-7431d8b5a7f36acd", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/live/[token]/LiveCabinScreen.tsx:172"}, "properties": {"repobilityId": "137e8d212fd8f916", "scanner": "scanner-primary", "fingerprint": "7431d8b5a7f36acd", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a45202b041dab520", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/api/contractor-share/[token]/snag-action/route.ts:51"}, "properties": {"repobilityId": "44e9594598552598", "scanner": "scanner-primary", "fingerprint": "a45202b041dab520", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-1edc68996f183daa", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/portfolio/page.tsx:162"}, "properties": {"repobilityId": "a14881a4095f8f58", "scanner": "scanner-primary", "fingerprint": "1edc68996f183daa", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-64529d53b55f16be", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/progress/[token]/page.tsx:523"}, "properties": {"repobilityId": "2e2d8b0db4af5cad", "scanner": "scanner-primary", "fingerprint": "64529d53b55f16be", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e185c63289f74b59", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/hooks/useReviewSupplierMaterials.tsx:345"}, "properties": {"repobilityId": "26a65543cc5d1cb9", "scanner": "scanner-primary", "fingerprint": "e185c63289f74b59", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-9b59c86f6fb159f9", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/hooks/useJobAction.tsx:2075"}, "properties": {"repobilityId": "acf0df782ad34862", "scanner": "scanner-primary", "fingerprint": "9b59c86f6fb159f9", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-010bf0b23c5ddfc2", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/hooks/useJobAction.tsx:462"}, "properties": {"repobilityId": "177c44248838b995", "scanner": "scanner-primary", "fingerprint": "010bf0b23c5ddfc2", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c8e9ed62f380b1af", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/hooks/useJobContractorPicker.tsx:226"}, "properties": {"repobilityId": "42f652aca372d153", "scanner": "scanner-primary", "fingerprint": "c8e9ed62f380b1af", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b726abf607496ed6", "level": "error", "message": {"text": "Possible secret in scripts/test-cascade-e2e.ts"}, "properties": {"repobilityId": "4c50e95e23763df8", "scanner": "scanner-primary", "fingerprint": "b726abf607496ed6", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/test-cascade-e2e.ts"}, "region": {"startLine": 18}}}]}, {"ruleId": "scanner-4e8d1d254d07f306", "level": "error", "message": {"text": "Possible secret in scripts/seed-users.ts"}, "properties": {"repobilityId": "3a477f4996beacd4", "scanner": "scanner-primary", "fingerprint": "4e8d1d254d07f306", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/seed-users.ts"}, "region": {"startLine": 11}}}]}, {"ruleId": "scanner-4e8d1d254d07f306", "level": "error", "message": {"text": "Possible secret in scripts/seed-users.ts"}, "properties": {"repobilityId": "3a477f4996beacd4", "scanner": "scanner-primary", "fingerprint": "4e8d1d254d07f306", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/seed-users.ts"}, "region": {"startLine": 12}}}]}, {"ruleId": "scanner-4e8d1d254d07f306", "level": "error", "message": {"text": "Possible secret in scripts/seed-users.ts"}, "properties": {"repobilityId": "3a477f4996beacd4", "scanner": "scanner-primary", "fingerprint": "4e8d1d254d07f306", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/seed-users.ts"}, "region": {"startLine": 13}}}]}, {"ruleId": "scanner-973e66130eb05fcb", "level": "error", "message": {"text": "Possible secret in scripts/test-audit-fixes.ts"}, "properties": {"repobilityId": "ee028eb2abdeeb59", "scanner": "scanner-primary", "fingerprint": "973e66130eb05fcb", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/test-audit-fixes.ts"}, "region": {"startLine": 19}}}]}, {"ruleId": "scanner-8e6e5c6ad963df89", "level": "error", "message": {"text": "Possible secret in scripts/test-quants-stress.ts"}, "properties": {"repobilityId": "89785898f89f0148", "scanner": "scanner-primary", "fingerprint": "8e6e5c6ad963df89", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/test-quants-stress.ts"}, "region": {"startLine": 23}}}]}, {"ruleId": "scanner-1f18a1f0e93d4f1e", "level": "error", "message": {"text": "Possible secret in scripts/test-consistency.ts"}, "properties": {"repobilityId": "ece787ce35c56982", "scanner": "scanner-primary", "fingerprint": "1f18a1f0e93d4f1e", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/test-consistency.ts"}, "region": {"startLine": 14}}}]}, {"ruleId": "scanner-fd60dae7c5233e6b", "level": "error", "message": {"text": "Possible secret in scripts/test-scale.ts"}, "properties": {"repobilityId": "3469329eacd89363", "scanner": "scanner-primary", "fingerprint": "fd60dae7c5233e6b", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/test-scale.ts"}, "region": {"startLine": 12}}}]}, {"ruleId": "scanner-7a5edacea3059361", "level": "error", "message": {"text": "Possible secret in scripts/test-quants.ts"}, "properties": {"repobilityId": "d512277727fcb427", "scanner": "scanner-primary", "fingerprint": "7a5edacea3059361", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/test-quants.ts"}, "region": {"startLine": 23}}}]}, {"ruleId": "scanner-cf88ee9c7b2465be", "level": "error", "message": {"text": "Possible secret in scripts/test-permissions.ts"}, "properties": {"repobilityId": "ef95a5b7b8b3879b", "scanner": "scanner-primary", "fingerprint": "cf88ee9c7b2465be", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/test-permissions.ts"}, "region": {"startLine": 26}}}]}, {"ruleId": "scanner-cf88ee9c7b2465be", "level": "error", "message": {"text": "Possible secret in scripts/test-permissions.ts"}, "properties": {"repobilityId": "ef95a5b7b8b3879b", "scanner": "scanner-primary", "fingerprint": "cf88ee9c7b2465be", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/test-permissions.ts"}, "region": {"startLine": 28}}}]}, {"ruleId": "scanner-abf3b008afdb61d7", "level": "note", "message": {"text": "Insecure pattern 'document_write' in src/components/plots/PlotQRCode.tsx:75"}, "properties": {"repobilityId": "a4740ce751f95f25", "scanner": "scanner-primary", "fingerprint": "abf3b008afdb61d7", "layer": "security", "severity": "low", "confidence": 1.0, "tags": ["owasp", "document_write"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/plots/PlotQRCode.tsx"}, "region": {"startLine": 75}}}]}, {"ruleId": "scanner-cb639d9a10a47b23", "level": "note", "message": {"text": "package.json defines install-time lifecycle scripts"}, "properties": {"repobilityId": "edeab51902066991", "scanner": "scanner-primary", "fingerprint": "cb639d9a10a47b23", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "npm", "install-scripts"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-4601e3ad3bb28677", "level": "warning", "message": {"text": "No CI/CD pipelines detected"}, "properties": {"repobilityId": "c3ee439bce2bc51e", "scanner": "scanner-primary", "fingerprint": "4601e3ad3bb28677", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["coverage"]}}, {"ruleId": "scanner-174863b49f430083", "level": "note", "message": {"text": "Very large file: src/components/settings/TemplateEditor.tsx (3860 lines)"}, "properties": {"repobilityId": "bf4b4c14e4697060", "scanner": "scanner-primary", "fingerprint": "174863b49f430083", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-d2f515a49b8a1141", "level": "note", "message": {"text": "Very large file: src/components/plots/PlotDetailClient.tsx (1973 lines)"}, "properties": {"repobilityId": "ced01fd0cad1df39", "scanner": "scanner-primary", "fingerprint": "d2f515a49b8a1141", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-e15940983030896f", "level": "note", "message": {"text": "Very large file: src/components/orders/OrdersClient.tsx (1645 lines)"}, "properties": {"repobilityId": "8ad3ceacb0113cb1", "scanner": "scanner-primary", "fingerprint": "e15940983030896f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-ab59744612e5fbfa", "level": "note", "message": {"text": "Very large file: src/components/orders/SiteOrders.tsx (1438 lines)"}, "properties": {"repobilityId": "5f6e2bf61bcb3940", "scanner": "scanner-primary", "fingerprint": "ab59744612e5fbfa", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-75fef110ff34a125", "level": "note", "message": {"text": "Very large file: src/components/walkthrough/SiteWalkthrough.tsx (1732 lines)"}, "properties": {"repobilityId": "10234072ebdf0cf9", "scanner": "scanner-primary", "fingerprint": "75fef110ff34a125", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-03b4ef10f9d61d61", "level": "note", "message": {"text": "Very large file: src/components/analytics/AnalyticsClient.tsx (1553 lines)"}, "properties": {"repobilityId": "d5716ca36abc3714", "scanner": "scanner-primary", "fingerprint": "03b4ef10f9d61d61", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-d752d3c037157a83", "level": "note", "message": {"text": "Very large file: src/components/tasks/TasksClient.tsx (1303 lines)"}, "properties": {"repobilityId": "4f3e7d810fac795f", "scanner": "scanner-primary", "fingerprint": "d752d3c037157a83", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-52439a70264b08b9", "level": "note", "message": {"text": "Very large file: src/components/snags/SnagDialog.tsx (1651 lines)"}, "properties": {"repobilityId": "257f979f683a0567", "scanner": "scanner-primary", "fingerprint": "52439a70264b08b9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-d9532ed3ca925d67", "level": "note", "message": {"text": "Very large file: src/components/reports/ContractorComms.tsx (1423 lines)"}, "properties": {"repobilityId": "f6eb331abd2d2f2a", "scanner": "scanner-primary", "fingerprint": "d9532ed3ca925d67", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-90adb02ae08e4736", "level": "note", "message": {"text": "Very large file: src/components/reports/DailySiteBrief.tsx (3457 lines)"}, "properties": {"repobilityId": "68ad7d0ec0c78e3a", "scanner": "scanner-primary", "fingerprint": "90adb02ae08e4736", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-c4b835ee83cb091d", "level": "note", "message": {"text": "Very large file: src/components/programme/JobWeekPanel.tsx (1911 lines)"}, "properties": {"repobilityId": "ab3f3ed1eaf23847", "scanner": "scanner-primary", "fingerprint": "c4b835ee83cb091d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-526957cbf035d25d", "level": "note", "message": {"text": "Very large file: src/components/programme/SiteProgramme.tsx (2690 lines)"}, "properties": {"repobilityId": "584760c999f8d62b", "scanner": "scanner-primary", "fingerprint": "526957cbf035d25d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-b74bbe54e092f1a7", "level": "note", "message": {"text": "Very large file: src/components/jobs/JobDetailClient.tsx (2146 lines)"}, "properties": {"repobilityId": "a648a0fb2bbea101", "scanner": "scanner-primary", "fingerprint": "b74bbe54e092f1a7", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-f60da8f1dccbef37", "level": "note", "message": {"text": "Very large file: src/components/sites/CreateSiteWizard.tsx (1561 lines)"}, "properties": {"repobilityId": "b0ef628201c2e0a7", "scanner": "scanner-primary", "fingerprint": "f60da8f1dccbef37", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-4c0f46e3f96a1504", "level": "note", "message": {"text": "Very large file: src/components/sites/SiteStoryPanel.tsx (1588 lines)"}, "properties": {"repobilityId": "0991ad323ea9fa81", "scanner": "scanner-primary", "fingerprint": "4c0f46e3f96a1504", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-c70d9ddd6a0596f8", "level": "note", "message": {"text": "Very large file: src/components/sites/SiteDetailClient.tsx (2840 lines)"}, "properties": {"repobilityId": "e6cbb60f03c144e0", "scanner": "scanner-primary", "fingerprint": "c70d9ddd6a0596f8", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-0e3ea5056d8ff15e", "level": "note", "message": {"text": "Very large file: src/app/contractor/[token]/page.tsx (1103 lines)"}, "properties": {"repobilityId": "7fbe75e54b4283ca", "scanner": "scanner-primary", "fingerprint": "0e3ea5056d8ff15e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-fad8a3338089db32", "level": "note", "message": {"text": "Very large file: src/lib/handover-pdf-renderers.ts (1548 lines)"}, "properties": {"repobilityId": "d7ff908bc36dfbbe", "scanner": "scanner-primary", "fingerprint": "fad8a3338089db32", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-2627e4107737be3c", "level": "note", "message": {"text": "Very large file: src/lib/site-story.ts (1828 lines)"}, "properties": {"repobilityId": "b5c1cac53c7b1d87", "scanner": "scanner-primary", "fingerprint": "2627e4107737be3c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-2537ab93f62b25c9", "level": "note", "message": {"text": "Very large file: src/lib/handover-zip.ts (1450 lines)"}, "properties": {"repobilityId": "26355ec50362ee34", "scanner": "scanner-primary", "fingerprint": "2537ab93f62b25c9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-22245b1c9fc4eee1", "level": "note", "message": {"text": "Very large file: src/hooks/useJobAction.tsx (2152 lines)"}, "properties": {"repobilityId": "1737e0e53dd16df8", "scanner": "scanner-primary", "fingerprint": "22245b1c9fc4eee1", "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": "38d12b2ba7dc5762", "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": "a0fe84350b711810", "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": "73e486a3be69a7ff", "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": "a6cd5ccf0f10d915", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-b9088664ace7f748", "level": "note", "message": {"text": "Composite production-readiness gap"}, "properties": {"repobilityId": "6fd22958f743189f", "scanner": "scanner-primary", "fingerprint": "b9088664ace7f748", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["production-readiness", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-749d4bc1bd66df5f", "level": "warning", "message": {"text": "Agent instructions exist but release-hardening basics are missing"}, "properties": {"repobilityId": "6d8a1c8fc21b0b32", "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": "30950978d32e4a4c", "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": "adb083df22104cd6", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-06bda7a587483e26", "level": "none", "message": {"text": "Commented-code block (6 lines) in eslint.config.mjs:26"}, "properties": {"repobilityId": "51d5905081f433ed", "scanner": "scanner-primary", "fingerprint": "06bda7a587483e26", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e5e897e645a5f516", "level": "none", "message": {"text": "Commented-code block (6 lines) in scripts/create-sites.js:14"}, "properties": {"repobilityId": "a88955137243127a", "scanner": "scanner-primary", "fingerprint": "e5e897e645a5f516", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-58a0f101b31381f7", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/create-sites.js:51"}, "properties": {"repobilityId": "fe45405a8e99fc4c", "scanner": "scanner-primary", "fingerprint": "58a0f101b31381f7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f08f8a71eb4e00e7", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/test-cascade-e2e.ts:43"}, "properties": {"repobilityId": "c6c0df8bb6340201", "scanner": "scanner-primary", "fingerprint": "f08f8a71eb4e00e7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-fd6c076414567287", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/test-audit-fixes.ts:48"}, "properties": {"repobilityId": "fa37e3009eb017c9", "scanner": "scanner-primary", "fingerprint": "fd6c076414567287", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c626286587c1f53f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/test-quants-stress.ts:43"}, "properties": {"repobilityId": "3f22edd2c099ec76", "scanner": "scanner-primary", "fingerprint": "c626286587c1f53f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f8c6022b4feb2a88", "level": "none", "message": {"text": "Commented-code block (6 lines) in scripts/reconcile-late-completion-overlaps.ts:57"}, "properties": {"repobilityId": "9dec42ebaf242de2", "scanner": "scanner-primary", "fingerprint": "f8c6022b4feb2a88", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9a9b1818352483d9", "level": "none", "message": {"text": "Commented-code block (5 lines) in scripts/test-cascade.ts:126"}, "properties": {"repobilityId": "3061a5e985017cef", "scanner": "scanner-primary", "fingerprint": "9a9b1818352483d9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0bf02082cc6ce119", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/test-consistency.ts:34"}, "properties": {"repobilityId": "90fcec9f142624f4", "scanner": "scanner-primary", "fingerprint": "0bf02082cc6ce119", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-1f9d8f661f853699", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/test-scale.ts:34"}, "properties": {"repobilityId": "e5e1f69c960d870c", "scanner": "scanner-primary", "fingerprint": "1f9d8f661f853699", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-1c01a29fcaef4b82", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/test-quants.ts:43"}, "properties": {"repobilityId": "ee263b6b6535869c", "scanner": "scanner-primary", "fingerprint": "1c01a29fcaef4b82", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c604bfce4c72cefd", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/test-e2e-template.ts:51"}, "properties": {"repobilityId": "56796c6423d2796e", "scanner": "scanner-primary", "fingerprint": "c604bfce4c72cefd", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9aebe22a75066736", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/test-permissions.ts:53"}, "properties": {"repobilityId": "b07bd983b1bab3ff", "scanner": "scanner-primary", "fingerprint": "9aebe22a75066736", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-42ee25206b6d22ea", "level": "none", "message": {"text": "Commented-code block (6 lines) in public/sw.js:75"}, "properties": {"repobilityId": "e5b099f6154ee5f1", "scanner": "scanner-primary", "fingerprint": "42ee25206b6d22ea", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-38390faee5109e62", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 public/sw.js:92"}, "properties": {"repobilityId": "6874d9974b908fb5", "scanner": "scanner-primary", "fingerprint": "38390faee5109e62", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-683e95dbcfb04a28", "level": "none", "message": {"text": "Commented-code block (11 lines) in src/components/settings/SettingsClient.tsx:69"}, "properties": {"repobilityId": "38175247fc3ce21e", "scanner": "scanner-primary", "fingerprint": "683e95dbcfb04a28", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-90067f4c062184a0", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/settings/TemplateEditor.tsx:99"}, "properties": {"repobilityId": "4d890f8258901898", "scanner": "scanner-primary", "fingerprint": "90067f4c062184a0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fab5160c0f37002c", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/settings/TemplateEditor.tsx:417"}, "properties": {"repobilityId": "984ef5e6bb7bb8e2", "scanner": "scanner-primary", "fingerprint": "fab5160c0f37002c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-cda016b6edbd4e8b", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/components/settings/TemplateTimeline.tsx:50"}, "properties": {"repobilityId": "3aa9d91fbe87b6ad", "scanner": "scanner-primary", "fingerprint": "cda016b6edbd4e8b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a95258e77c80e3c8", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/settings/TemplateAuditLog.tsx:25"}, "properties": {"repobilityId": "083a177977454825", "scanner": "scanner-primary", "fingerprint": "a95258e77c80e3c8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ab5e5bfb77d9ec99", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/settings/TemplateCompareDialog.tsx:71"}, "properties": {"repobilityId": "75d2db162d8f922d", "scanner": "scanner-primary", "fingerprint": "ab5e5bfb77d9ec99", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-49828facec1158b2", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/settings/TemplateContractorsTableDialog.tsx:134"}, "properties": {"repobilityId": "585683bcbe0f53e8", "scanner": "scanner-primary", "fingerprint": "49828facec1158b2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-638a5f94a7f3c925", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/settings/TemplateVariantsSection.tsx:153"}, "properties": {"repobilityId": "43f8ac495d925909", "scanner": "scanner-primary", "fingerprint": "638a5f94a7f3c925", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-16c1932abd87d748", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/settings/TemplateOrdersTableDialog.tsx:159"}, "properties": {"repobilityId": "0e2d37744aca5684", "scanner": "scanner-primary", "fingerprint": "16c1932abd87d748", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-728f53eb2c75222a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/settings/TemplateExtras.tsx:157"}, "properties": {"repobilityId": "6111cabc68cff31b", "scanner": "scanner-primary", "fingerprint": "728f53eb2c75222a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9507bf7c8f668708", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/components/settings/PlotTemplatesSection.tsx:153"}, "properties": {"repobilityId": "f992f61910f950ae", "scanner": "scanner-primary", "fingerprint": "9507bf7c8f668708", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cfdf82079c0269a6", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/settings/PlotTemplatesSection.tsx:198"}, "properties": {"repobilityId": "081e8a046375df1c", "scanner": "scanner-primary", "fingerprint": "cfdf82079c0269a6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-36e52d64c01175a1", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/settings/BrandingSection.tsx:49"}, "properties": {"repobilityId": "2f9feb415edcc517", "scanner": "scanner-primary", "fingerprint": "36e52d64c01175a1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-8fbaa6483280cf6f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/settings/TemplateValidationPanel.tsx:46"}, "properties": {"repobilityId": "af25f0438eca25fe", "scanner": "scanner-primary", "fingerprint": "8fbaa6483280cf6f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-32cdb202b797db40", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/settings/NotificationsSection.tsx:182"}, "properties": {"repobilityId": "d23f4acbdb525c69", "scanner": "scanner-primary", "fingerprint": "32cdb202b797db40", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c3b8b97d5734dab3", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/layout/SearchModal.tsx:134"}, "properties": {"repobilityId": "5f31bdbe35eada80", "scanner": "scanner-primary", "fingerprint": "c3b8b97d5734dab3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7dff7dcc9384c5a5", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/layout/Sidebar.tsx:97"}, "properties": {"repobilityId": "96fa48be7fecc148", "scanner": "scanner-primary", "fingerprint": "7dff7dcc9384c5a5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1a25701687b6c321", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/layout/Sidebar.tsx:230"}, "properties": {"repobilityId": "0f5e8c6af8ddb7c2", "scanner": "scanner-primary", "fingerprint": "1a25701687b6c321", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-8295c1a1b0a5402a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/plots/PlotCustomerViewTab.tsx:79"}, "properties": {"repobilityId": "99f1399256d84dfa", "scanner": "scanner-primary", "fingerprint": "8295c1a1b0a5402a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-33f3a830566cab6c", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/plots/PlotDrawingsSection.tsx:33"}, "properties": {"repobilityId": "477ba0a0298e26b2", "scanner": "scanner-primary", "fingerprint": "33f3a830566cab6c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-80826d0cc948fedc", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/plots/PlotDrawingsSection.tsx:41"}, "properties": {"repobilityId": "5fd31368baf777e0", "scanner": "scanner-primary", "fingerprint": "80826d0cc948fedc", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-06c4554b11980a9a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/plots/PlotQualityPanel.tsx:157"}, "properties": {"repobilityId": "47c01e2562fa1a44", "scanner": "scanner-primary", "fingerprint": "06c4554b11980a9a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b2421a0501de10dc", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/components/plots/PlotDetailClient.tsx:520"}, "properties": {"repobilityId": "51e7136e989b8c91", "scanner": "scanner-primary", "fingerprint": "b2421a0501de10dc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-daa544dd653eb031", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/plots/PlotMaterialsSection.tsx:46"}, "properties": {"repobilityId": "c80dde674102e843", "scanner": "scanner-primary", "fingerprint": "daa544dd653eb031", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-02d125bcdc0c3f0c", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/users/UsersClient.tsx:128"}, "properties": {"repobilityId": "39124ae82f323db1", "scanner": "scanner-primary", "fingerprint": "02d125bcdc0c3f0c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e997bc8e4934f8cd", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/users/UsersClient.tsx:477"}, "properties": {"repobilityId": "b484fdc5b506e932", "scanner": "scanner-primary", "fingerprint": "e997bc8e4934f8cd", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f1236300a6359190", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/components/orders/OrdersClient.tsx:529"}, "properties": {"repobilityId": "d271af83e4fc308a", "scanner": "scanner-primary", "fingerprint": "f1236300a6359190", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-47d9ca6fb8ab7b7f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/orders/OrdersClient.tsx:667"}, "properties": {"repobilityId": "11a35de46a6c20fa", "scanner": "scanner-primary", "fingerprint": "47d9ca6fb8ab7b7f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-7eec94cb62c59f0e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/orders/OrderDeliveryFollowUpDialog.tsx:75"}, "properties": {"repobilityId": "6f2c7164a3f15d59", "scanner": "scanner-primary", "fingerprint": "7eec94cb62c59f0e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ad979f025327ebf4", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/orders/OrderDetailSheet.tsx:235"}, "properties": {"repobilityId": "e1992f2566564197", "scanner": "scanner-primary", "fingerprint": "ad979f025327ebf4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3dd78f79bf18b534", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/orders/SiteOrders.tsx:87"}, "properties": {"repobilityId": "36014845012cdbf2", "scanner": "scanner-primary", "fingerprint": "3dd78f79bf18b534", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cd708fd660477a32", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/orders/SiteOrders.tsx:308"}, "properties": {"repobilityId": "fdcaa5c6936a5bef", "scanner": "scanner-primary", "fingerprint": "cd708fd660477a32", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4887fe22694fc571", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/gantt/GanttChart.tsx:91"}, "properties": {"repobilityId": "3e94cb404994ecd9", "scanner": "scanner-primary", "fingerprint": "4887fe22694fc571", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b62c901e402e3e49", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/walkthrough/SiteWalkthrough.tsx:130"}, "properties": {"repobilityId": "b54a601b5dadfa94", "scanner": "scanner-primary", "fingerprint": "b62c901e402e3e49", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4300306f33c102a3", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/walkthrough/SiteWalkthrough.tsx:449"}, "properties": {"repobilityId": "81a058e3f9905475", "scanner": "scanner-primary", "fingerprint": "4300306f33c102a3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4a9343e6cc46288d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/analytics/AnalyticsClient.tsx:975"}, "properties": {"repobilityId": "83bfbf14883668f3", "scanner": "scanner-primary", "fingerprint": "4a9343e6cc46288d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b13a63036f2b935c", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/analytics/sections/TextThemesWidget.tsx:22"}, "properties": {"repobilityId": "5eae2467a1c8e109", "scanner": "scanner-primary", "fingerprint": "b13a63036f2b935c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-164132d90fbebc73", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/analytics/sections/MaterialsWidget.tsx:42"}, "properties": {"repobilityId": "e1194c7e36813850", "scanner": "scanner-primary", "fingerprint": "164132d90fbebc73", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3440232f7f08e09a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/analytics/sections/EventTypesWidget.tsx:39"}, "properties": {"repobilityId": "3f59769fc8595b6a", "scanner": "scanner-primary", "fingerprint": "3440232f7f08e09a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-7f0ebcaa53582477", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/analytics/sections/VariationsWidget.tsx:37"}, "properties": {"repobilityId": "57aaa8a1d0860d21", "scanner": "scanner-primary", "fingerprint": "7f0ebcaa53582477", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9db1eecb0e7af2b0", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/analytics/sections/SupplierScorecardWidget.tsx:30"}, "properties": {"repobilityId": "ee3966f01d999024", "scanner": "scanner-primary", "fingerprint": "9db1eecb0e7af2b0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-02ec96b5ff016316", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/analytics/sections/QualityWidget.tsx:59"}, "properties": {"repobilityId": "226480eb71ccfbad", "scanner": "scanner-primary", "fingerprint": "02ec96b5ff016316", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-231e4ac48a88968a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/handover/HandoverChecklist.tsx:120"}, "properties": {"repobilityId": "e534e0cccc982df9", "scanner": "scanner-primary", "fingerprint": "231e4ac48a88968a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-7bf1d257d144a642", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/events/EventsClient.tsx:484"}, "properties": {"repobilityId": "912bbd4bf1df5d89", "scanner": "scanner-primary", "fingerprint": "7bf1d257d144a642", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ebbddc7b7f2c5bdc", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/shared/ReportExportButtons.tsx:29"}, "properties": {"repobilityId": "ffc1c318a44deca7", "scanner": "scanner-primary", "fingerprint": "ebbddc7b7f2c5bdc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-41e0cb7f9bf8139c", "level": "none", "message": {"text": "Commented-code block (14 lines) in src/components/shared/MiniGantt.tsx:59"}, "properties": {"repobilityId": "7d49f36945bf50d5", "scanner": "scanner-primary", "fingerprint": "41e0cb7f9bf8139c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d38dae6755ac8c36", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/shared/HelpTip.tsx:80"}, "properties": {"repobilityId": "2dedab74f64f4e6d", "scanner": "scanner-primary", "fingerprint": "d38dae6755ac8c36", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-48e9ac9d7f18b811", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/components/ui/dialog.tsx:56"}, "properties": {"repobilityId": "2feb0417f70887f6", "scanner": "scanner-primary", "fingerprint": "48e9ac9d7f18b811", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b5b5a9ecdb643ca1", "level": "none", "message": {"text": "Commented-code block (10 lines) in src/components/ui/button.tsx:12"}, "properties": {"repobilityId": "ed3f9661b5358128", "scanner": "scanner-primary", "fingerprint": "b5b5a9ecdb643ca1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5d86b8ac7bb2e7d2", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/ui/tabs.tsx:47"}, "properties": {"repobilityId": "08aec461f8aed141", "scanner": "scanner-primary", "fingerprint": "5d86b8ac7bb2e7d2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b943b54371f394bb", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/components/dashboard/DashboardClient.tsx:284"}, "properties": {"repobilityId": "b38b088df31deeeb", "scanner": "scanner-primary", "fingerprint": "b943b54371f394bb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-609d5530f2c06ecc", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/lateness/LatenessSummary.tsx:37"}, "properties": {"repobilityId": "67c7e05a0708fe01", "scanner": "scanner-primary", "fingerprint": "609d5530f2c06ecc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-58fc719dcd0ffea8", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/lateness/LatenessSummary.tsx:184"}, "properties": {"repobilityId": "17f08da2abdd5ddc", "scanner": "scanner-primary", "fingerprint": "58fc719dcd0ffea8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-5c47a955e34365b3", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/inspections/InspectionsClient.tsx:739"}, "properties": {"repobilityId": "c9323d55d8295c55", "scanner": "scanner-primary", "fingerprint": "5c47a955e34365b3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b307e6a75c2f3176", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/inspections/InspectionsClient.tsx:522"}, "properties": {"repobilityId": "9da4c6e148aa6d29", "scanner": "scanner-primary", "fingerprint": "b307e6a75c2f3176", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-7a3cb49029751977", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/tasks/TasksClient.tsx:102"}, "properties": {"repobilityId": "b2becbab7a2e86da", "scanner": "scanner-primary", "fingerprint": "7a3cb49029751977", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b4699997ceebe8d5", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/admin/SiteDocumentsClient.tsx:3"}, "properties": {"repobilityId": "81ac41b1daa1dab8", "scanner": "scanner-primary", "fingerprint": "b4699997ceebe8d5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-57ac24eeef35e5ab", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/admin/SiteDocumentsClient.tsx:257"}, "properties": {"repobilityId": "9bcf34faa3a1fbe2", "scanner": "scanner-primary", "fingerprint": "57ac24eeef35e5ab", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-941f70416c1a560e", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/suppliers/SupplierDetailClient.tsx:139"}, "properties": {"repobilityId": "292dedc260e507bf", "scanner": "scanner-primary", "fingerprint": "941f70416c1a560e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6f8559de377b3999", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/suppliers/SupplierDetailClient.tsx:287"}, "properties": {"repobilityId": "e4e978ca00a50794", "scanner": "scanner-primary", "fingerprint": "6f8559de377b3999", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-753645837d666b1e", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/components/suppliers/SuppliersAndContractorsPage.tsx:54"}, "properties": {"repobilityId": "4f664ab0d2af1dda", "scanner": "scanner-primary", "fingerprint": "753645837d666b1e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bb68dd2719ac78c8", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/snags/SnagList.tsx:139"}, "properties": {"repobilityId": "69a179e2af4eb2e7", "scanner": "scanner-primary", "fingerprint": "bb68dd2719ac78c8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bd014dc974566308", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/snags/SnagList.tsx:262"}, "properties": {"repobilityId": "68e1cb3cdd3c8d9b", "scanner": "scanner-primary", "fingerprint": "bd014dc974566308", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-cbe8a4a45e65995f", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/components/snags/SnagDialog.tsx:312"}, "properties": {"repobilityId": "fe611434224cdbc4", "scanner": "scanner-primary", "fingerprint": "cbe8a4a45e65995f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1106de1985c35864", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/snags/SnagDialog.tsx:387"}, "properties": {"repobilityId": "e828fd60e2a899b6", "scanner": "scanner-primary", "fingerprint": "1106de1985c35864", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-30dc120569bd2641", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/snags/SnagAgeingReport.tsx:69"}, "properties": {"repobilityId": "7242f2ffa9b1b796", "scanner": "scanner-primary", "fingerprint": "30dc120569bd2641", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c0876587576cd886", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/contacts/ContactsClient.tsx:89"}, "properties": {"repobilityId": "7304f4b057e29390", "scanner": "scanner-primary", "fingerprint": "c0876587576cd886", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-43df83e70e52df4b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/contacts/ContactsClient.tsx:166"}, "properties": {"repobilityId": "64412da0afc40974", "scanner": "scanner-primary", "fingerprint": "43df83e70e52df4b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-33a4a16cd05a9fd3", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/reports/SiteCalendar.tsx:918"}, "properties": {"repobilityId": "010b1c018c46fe64", "scanner": "scanner-primary", "fingerprint": "33a4a16cd05a9fd3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-03f5503975e1ebfd", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/reports/SiteCalendar.tsx:255"}, "properties": {"repobilityId": "b792000908974c7a", "scanner": "scanner-primary", "fingerprint": "03f5503975e1ebfd", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2eb0144e1148d9a6", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/reports/ContractorComms.tsx:530"}, "properties": {"repobilityId": "a9f6ed345a414410", "scanner": "scanner-primary", "fingerprint": "2eb0144e1148d9a6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-73d272149b0369f7", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/reports/ContractorComms.tsx:172"}, "properties": {"repobilityId": "af7ceec63ca51f98", "scanner": "scanner-primary", "fingerprint": "73d272149b0369f7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-7b489ee31a19cf65", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/reports/GlobalDailyBriefClient.tsx:33"}, "properties": {"repobilityId": "6431408115c6f206", "scanner": "scanner-primary", "fingerprint": "7b489ee31a19cf65", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4c048692b94a724c", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/reports/DailySiteBrief.tsx:107"}, "properties": {"repobilityId": "0d33c1056680e724", "scanner": "scanner-primary", "fingerprint": "4c048692b94a724c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9deb74a16602ac77", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/reports/DailySiteBrief.tsx:676"}, "properties": {"repobilityId": "98f2c47d139c4e67", "scanner": "scanner-primary", "fingerprint": "9deb74a16602ac77", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-59b39c71313aef44", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/reports/ContractorDaySheets.tsx:317"}, "properties": {"repobilityId": "2779a2fdefde44ad", "scanner": "scanner-primary", "fingerprint": "59b39c71313aef44", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-936a6a211a03956c", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/components/reports/JobActionStrip.tsx:48"}, "properties": {"repobilityId": "2a11465d532720a4", "scanner": "scanner-primary", "fingerprint": "936a6a211a03956c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fcaa890a404053fc", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/components/reports/daily-brief/UpcomingDeliveriesSection.tsx:189"}, "properties": {"repobilityId": "d77ad5b0cac49112", "scanner": "scanner-primary", "fingerprint": "fcaa890a404053fc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fb32a6243cc64393", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/programme/JobWeekPanel.tsx:306"}, "properties": {"repobilityId": "2792502c6a955791", "scanner": "scanner-primary", "fingerprint": "fb32a6243cc64393", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5e1836d11ed3bc87", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/programme/JobWeekPanel.tsx:384"}, "properties": {"repobilityId": "68485990c6772118", "scanner": "scanner-primary", "fingerprint": "5e1836d11ed3bc87", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-cad0d605a80a54da", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/components/programme/SiteProgramme.tsx:42"}, "properties": {"repobilityId": "c7d49e917be38ab2", "scanner": "scanner-primary", "fingerprint": "cad0d605a80a54da", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d8bfc3525818bc56", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/programme/SiteProgramme.tsx:132"}, "properties": {"repobilityId": "dd3c6f23ff921ebe", "scanner": "scanner-primary", "fingerprint": "d8bfc3525818bc56", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-63a2aa78c94622ed", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/programme/PhotoAnnotationsPanel.tsx:47"}, "properties": {"repobilityId": "9324568032374e0f", "scanner": "scanner-primary", "fingerprint": "63a2aa78c94622ed", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-660bc05497bb03ad", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/components/programme/programme-modules/helpers.ts:74"}, "properties": {"repobilityId": "cb0ff037e75bb78b", "scanner": "scanner-primary", "fingerprint": "660bc05497bb03ad", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7317bc17df6ac77f", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/programme/programme-modules/types.ts:57"}, "properties": {"repobilityId": "5778cf49407bf8bb", "scanner": "scanner-primary", "fingerprint": "7317bc17df6ac77f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ceb2118aaca029eb", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/documents/DocumentList.tsx:83"}, "properties": {"repobilityId": "6dc1e5a028fca366", "scanner": "scanner-primary", "fingerprint": "ceb2118aaca029eb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9e1ee4b84c1535ff", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/jobs/JobActionTimeline.tsx:97"}, "properties": {"repobilityId": "ffa358b3714a32c5", "scanner": "scanner-primary", "fingerprint": "9e1ee4b84c1535ff", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-6bb6583d713d1b2c", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/jobs/JobDetailClient.tsx:279"}, "properties": {"repobilityId": "72bae7acdfe40aba", "scanner": "scanner-primary", "fingerprint": "6bb6583d713d1b2c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-866b440abfdae15e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/jobs/JobDetailClient.tsx:480"}, "properties": {"repobilityId": "de28c9d1eaf3e60e", "scanner": "scanner-primary", "fingerprint": "866b440abfdae15e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-86a087d3fcba4205", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/jobs/PhotoUpload.tsx:92"}, "properties": {"repobilityId": "3eaf2fa1d647d762", "scanner": "scanner-primary", "fingerprint": "86a087d3fcba4205", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-fec375cf0176092f", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/components/sites/SitesClient.tsx:272"}, "properties": {"repobilityId": "dc593cf4b93784e1", "scanner": "scanner-primary", "fingerprint": "fec375cf0176092f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3a1f5e1b9a337a84", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/sites/SitesClient.tsx:184"}, "properties": {"repobilityId": "250bec8dfd0871c2", "scanner": "scanner-primary", "fingerprint": "3a1f5e1b9a337a84", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-adb4596ef4350b1f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/sites/SiteHeatmap.tsx:44"}, "properties": {"repobilityId": "b1e39b2b448aaba4", "scanner": "scanner-primary", "fingerprint": "adb4596ef4350b1f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-0bf2e77c7035912c", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/sites/CreateSiteWizard.tsx:67"}, "properties": {"repobilityId": "6b8ae5d8b4fc4338", "scanner": "scanner-primary", "fingerprint": "0bf2e77c7035912c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4f2ca76235d1862a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/sites/CreateSiteWizard.tsx:362"}, "properties": {"repobilityId": "9b16416bc8d00c80", "scanner": "scanner-primary", "fingerprint": "4f2ca76235d1862a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-0a3fec5e149a2ad8", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/sites/SiteCustomerPagesPanel.tsx:57"}, "properties": {"repobilityId": "57d816174ad60ddd", "scanner": "scanner-primary", "fingerprint": "0a3fec5e149a2ad8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3c8c64482487f4d9", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/sites/SiteNCRs.tsx:63"}, "properties": {"repobilityId": "f4d5865720f19797", "scanner": "scanner-primary", "fingerprint": "3c8c64482487f4d9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-974a2aee8b677a8d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/sites/SiteNCRs.tsx:80"}, "properties": {"repobilityId": "ed10af5ff727a9f9", "scanner": "scanner-primary", "fingerprint": "974a2aee8b677a8d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-93c5db4083aa2e2f", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/sites/SiteDetailClient.tsx:634"}, "properties": {"repobilityId": "bdac07527ae6ce85", "scanner": "scanner-primary", "fingerprint": "93c5db4083aa2e2f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-24426c5cf28c01b7", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/sites/SiteDetailClient.tsx:366"}, "properties": {"repobilityId": "cd1226bf93c12534", "scanner": "scanner-primary", "fingerprint": "24426c5cf28c01b7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c140a5b062f705cb", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/components/sites/BatchProgrammePreview.tsx:154"}, "properties": {"repobilityId": "bffa6a5bc1c5e1b0", "scanner": "scanner-primary", "fingerprint": "c140a5b062f705cb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2ba1884ad5080806", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/sites/BatchProgrammePreview.tsx:111"}, "properties": {"repobilityId": "4040b30e88bfa6f0", "scanner": "scanner-primary", "fingerprint": "2ba1884ad5080806", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-625efc95de063504", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/sites/SiteToolboxTalks.tsx:140"}, "properties": {"repobilityId": "a68dc2169d814a9b", "scanner": "scanner-primary", "fingerprint": "625efc95de063504", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9713963b7c2a53e8", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/sites/SiteClosurePanel.tsx:60"}, "properties": {"repobilityId": "5d752d584cfca290", "scanner": "scanner-primary", "fingerprint": "9713963b7c2a53e8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1b5eae595a75f5b9", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/sites/SiteLogClient.tsx:247"}, "properties": {"repobilityId": "57aaab7a94fc8e22", "scanner": "scanner-primary", "fingerprint": "1b5eae595a75f5b9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b6bee14f7b4bfbdf", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/sites/SitePhotoAlbum.tsx:76"}, "properties": {"repobilityId": "e69e86f00edacb84", "scanner": "scanner-primary", "fingerprint": "b6bee14f7b4bfbdf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9be912b4f4d7fe4c", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/sites/WatchToggle.tsx:39"}, "properties": {"repobilityId": "0accf6934ced1767", "scanner": "scanner-primary", "fingerprint": "9be912b4f4d7fe4c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-24bd9834dd12d807", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/sites/SiteOnSiteToday.tsx:66"}, "properties": {"repobilityId": "08c594923a3f5015", "scanner": "scanner-primary", "fingerprint": "24bd9834dd12d807", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d159b701d9ef3d59", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/sites/SiteCompliance.tsx:72"}, "properties": {"repobilityId": "bbdcd1558fc89a83", "scanner": "scanner-primary", "fingerprint": "d159b701d9ef3d59", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-16f4405b7474ba49", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/layout.tsx:15"}, "properties": {"repobilityId": "3cbb75d26451a921", "scanner": "scanner-primary", "fingerprint": "16f4405b7474ba49", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a50cf14990a34508", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/contractor/[token]/page.tsx:132"}, "properties": {"repobilityId": "fd21cf7150d4ce41", "scanner": "scanner-primary", "fingerprint": "a50cf14990a34508", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bf6bd50ae858aacb", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/live/[token]/page.tsx:56"}, "properties": {"repobilityId": "751fc63417a239db", "scanner": "scanner-primary", "fingerprint": "bf6bd50ae858aacb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4d612f1ffe66de79", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/live/[token]/LiveCabinScreen.tsx:121"}, "properties": {"repobilityId": "dfd3159488b7094d", "scanner": "scanner-primary", "fingerprint": "4d612f1ffe66de79", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f11ec7f9de7f176b", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/reset-password/[token]/page.tsx:41"}, "properties": {"repobilityId": "2ca888335d61f074", "scanner": "scanner-primary", "fingerprint": "f11ec7f9de7f176b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2a2ed3f7b45ad026", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/login/page.tsx:36"}, "properties": {"repobilityId": "5906d2636298fb54", "scanner": "scanner-primary", "fingerprint": "2a2ed3f7b45ad026", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b1661b62f87ff952", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/plots/apply-template/route.ts:58"}, "properties": {"repobilityId": "b5641b0a45d9b716", "scanner": "scanner-primary", "fingerprint": "b1661b62f87ff952", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d34da070fbaf98df", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/api/plots/[id]/route.ts:206"}, "properties": {"repobilityId": "899bd2d738bd0437", "scanner": "scanner-primary", "fingerprint": "d34da070fbaf98df", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-45902d81bbcc141f", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/plots/[id]/predictive-completion/route.ts:52"}, "properties": {"repobilityId": "d64fca087c0e76b3", "scanner": "scanner-primary", "fingerprint": "45902d81bbcc141f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-77215916c85af58d", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/plots/[id]/handover/route.ts:251"}, "properties": {"repobilityId": "c3ff85d232b84680", "scanner": "scanner-primary", "fingerprint": "77215916c85af58d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9f070ab02d782723", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/plots/[id]/customer-photos/route.ts:110"}, "properties": {"repobilityId": "0ef67a9d7394bda5", "scanner": "scanner-primary", "fingerprint": "9f070ab02d782723", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b5881d0c7038edcb", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/plots/[id]/variations/[varId]/route.ts:105"}, "properties": {"repobilityId": "2d9745d4bb353819", "scanner": "scanner-primary", "fingerprint": "b5881d0c7038edcb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3407111125684602", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/api/plots/[id]/customer-link/route.ts:110"}, "properties": {"repobilityId": "a5cf731c84775a16", "scanner": "scanner-primary", "fingerprint": "3407111125684602", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8bf86ba11236171d", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/app/api/plots/[id]/restart-decision/route.ts:144"}, "properties": {"repobilityId": "e6e9612c6eb577e2", "scanner": "scanner-primary", "fingerprint": "8bf86ba11236171d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-37e8e9f1bfd64ecc", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/api/plots/apply-template-batch/route.ts:13"}, "properties": {"repobilityId": "97333bf173ac7652", "scanner": "scanner-primary", "fingerprint": "37e8e9f1bfd64ecc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8a9ac84b8613484a", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/users/route.ts:17"}, "properties": {"repobilityId": "da945a29da23e6d7", "scanner": "scanner-primary", "fingerprint": "8a9ac84b8613484a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3116b940361e1b7a", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/app/api/users/[id]/route.ts:170"}, "properties": {"repobilityId": "700c94d1a49c29df", "scanner": "scanner-primary", "fingerprint": "3116b940361e1b7a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1216d055f1b1c770", "level": "none", "message": {"text": "Commented-code block (10 lines) in src/app/api/email/send/route.ts:19"}, "properties": {"repobilityId": "f2528ae35606c395", "scanner": "scanner-primary", "fingerprint": "1216d055f1b1c770", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-606de56f8d791123", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/orders/route.ts:30"}, "properties": {"repobilityId": "b01ebf9d5ea86de4", "scanner": "scanner-primary", "fingerprint": "606de56f8d791123", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4ca1b3d079aff901", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/orders/[id]/route.ts:108"}, "properties": {"repobilityId": "88f095923b164dc1", "scanner": "scanner-primary", "fingerprint": "4ca1b3d079aff901", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c7b595e88ec0aee8", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/orders/backfill-lead-time/route.ts:15"}, "properties": {"repobilityId": "c5caa2b81bae0a45", "scanner": "scanner-primary", "fingerprint": "c7b595e88ec0aee8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-45b718fa12808386", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/plot-templates/route.ts:67"}, "properties": {"repobilityId": "8c760f0f022dc03f", "scanner": "scanner-primary", "fingerprint": "45b718fa12808386", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bae894425b24ed75", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/plot-templates/[id]/route.ts:219"}, "properties": {"repobilityId": "62703d538a95b54f", "scanner": "scanner-primary", "fingerprint": "bae894425b24ed75", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5a8f97b1cb7aeeca", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/plot-templates/[id]/clone/route.ts:87"}, "properties": {"repobilityId": "27c48fdf57eb99fa", "scanner": "scanner-primary", "fingerprint": "5a8f97b1cb7aeeca", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-94bbf3b9b9e5d363", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/plot-templates/[id]/variants/route.ts:32"}, "properties": {"repobilityId": "6d5c494ac001241f", "scanner": "scanner-primary", "fingerprint": "94bbf3b9b9e5d363", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7ea80fefe5e2347b", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/app/api/plot-templates/[id]/variants/[variantId]/route.ts:80"}, "properties": {"repobilityId": "29dedf96284de5bb", "scanner": "scanner-primary", "fingerprint": "7ea80fefe5e2347b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c95b8565c2e278aa", "level": "none", "message": {"text": "Commented-code block (11 lines) in src/app/api/plot-templates/[id]/variants/[variantId]/full/route.ts:64"}, "properties": {"repobilityId": "1ea774c28d3958d8", "scanner": "scanner-primary", "fingerprint": "c95b8565c2e278aa", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1fed71e8ef9b8ca5", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/app/api/plot-templates/[id]/variants/[variantId]/seed/route.ts:75"}, "properties": {"repobilityId": "c67d998662366560", "scanner": "scanner-primary", "fingerprint": "1fed71e8ef9b8ca5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8ebeb74620ea7e22", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/api/plot-templates/[id]/jobs/route.ts:81"}, "properties": {"repobilityId": "9a0669d14d1b8078", "scanner": "scanner-primary", "fingerprint": "8ebeb74620ea7e22", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4744e7185c51cffa", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/app/api/plot-templates/[id]/jobs/[jobId]/route.ts:55"}, "properties": {"repobilityId": "9e4507b7dc482d62", "scanner": "scanner-primary", "fingerprint": "4744e7185c51cffa", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0335769ff9f3b0b0", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/app/api/plot-templates/[id]/jobs/[jobId]/recalculate/route.ts:61"}, "properties": {"repobilityId": "45afbe70d606c58d", "scanner": "scanner-primary", "fingerprint": "0335769ff9f3b0b0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b5b17c5770255051", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/api/auth/request-reset/route.ts:52"}, "properties": {"repobilityId": "55408956803c2b50", "scanner": "scanner-primary", "fingerprint": "b5b17c5770255051", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c525f0efe6ec2aa8", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/api/analytics/route.ts:10"}, "properties": {"repobilityId": "de7c6739b0524ac9", "scanner": "scanner-primary", "fingerprint": "c525f0efe6ec2aa8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-17192630999a45b2", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/analytics/stage-benchmark/route.ts:86"}, "properties": {"repobilityId": "45a335c4413bfcdf", "scanner": "scanner-primary", "fingerprint": "17192630999a45b2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d9cb4f2dc9d99e8e", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/lateness/route.ts:85"}, "properties": {"repobilityId": "dbaeddf1331b5dd3", "scanner": "scanner-primary", "fingerprint": "d9cb4f2dc9d99e8e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-123be652147427fe", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/contractor-share/[token]/snag-action/route.ts:48"}, "properties": {"repobilityId": "c8f9d6ca36507cc6", "scanner": "scanner-primary", "fingerprint": "123be652147427fe", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f13ef2ee87129ce1", "level": "none", "message": {"text": "Commented-code block (11 lines) in src/app/api/progress/[token]/push-subscribe/route.ts:6"}, "properties": {"repobilityId": "ddad92d1e246c423", "scanner": "scanner-primary", "fingerprint": "f13ef2ee87129ce1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bb19258d15280de2", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/api/inspections/route.ts:70"}, "properties": {"repobilityId": "79a0eebd2fc85015", "scanner": "scanner-primary", "fingerprint": "bb19258d15280de2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2dba2b1d18bed104", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/app/api/inspections/[id]/route.ts:139"}, "properties": {"repobilityId": "78ffc82628140339", "scanner": "scanner-primary", "fingerprint": "2dba2b1d18bed104", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-aec1542791fe2b29", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/inspections/[id]/actions/route.ts:63"}, "properties": {"repobilityId": "a66d1ac407e1be53", "scanner": "scanner-primary", "fingerprint": "aec1542791fe2b29", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-836a69ff2816ab7e", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/app/api/tasks/route.ts:25"}, "properties": {"repobilityId": "27238259a48ce91a", "scanner": "scanner-primary", "fingerprint": "836a69ff2816ab7e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-74c0cf1b8a7ad942", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/suppliers/[id]/route.ts:94"}, "properties": {"repobilityId": "ff4e5448d5f632cc", "scanner": "scanner-primary", "fingerprint": "74c0cf1b8a7ad942", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1fa94263c1ba8674", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/suppliers/[id]/pricelist/upload/route.ts:75"}, "properties": {"repobilityId": "3ac3220babfd07fa", "scanner": "scanner-primary", "fingerprint": "1fa94263c1ba8674", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-83721f0956088476", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/app/api/cron/weekly-digest/route.ts:56"}, "properties": {"repobilityId": "32aedba3abbf81af", "scanner": "scanner-primary", "fingerprint": "83721f0956088476", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5e954f2f092166b7", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/cron/notifications/route.ts:28"}, "properties": {"repobilityId": "67c8a1123f58e9ff", "scanner": "scanner-primary", "fingerprint": "5e954f2f092166b7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6ac14a5441ab6710", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/cron/weather/route.ts:10"}, "properties": {"repobilityId": "48913dc0bb2c611e", "scanner": "scanner-primary", "fingerprint": "6ac14a5441ab6710", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e858197f2fb4e72b", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/app/api/cron/inspection-alerts/route.ts:77"}, "properties": {"repobilityId": "72682a76697c2e3b", "scanner": "scanner-primary", "fingerprint": "e858197f2fb4e72b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bde9e6d8fefc62f1", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/api/cron/lateness/route.ts:70"}, "properties": {"repobilityId": "f812589753a83de9", "scanner": "scanner-primary", "fingerprint": "bde9e6d8fefc62f1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1c62720b887e56a9", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/cron/reconcile/route.ts:60"}, "properties": {"repobilityId": "61eef9941422b66a", "scanner": "scanner-primary", "fingerprint": "1c62720b887e56a9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b39ad7eb2953e659", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/cron/daily-wrap/route.ts:69"}, "properties": {"repobilityId": "b0998f57656f36ae", "scanner": "scanner-primary", "fingerprint": "b39ad7eb2953e659", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1ba128e4d85a746c", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/cron/daily-email/route.ts:30"}, "properties": {"repobilityId": "8055b9d193730874", "scanner": "scanner-primary", "fingerprint": "1ba128e4d85a746c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-70591d1dff2c750a", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/api/snags/[id]/route.ts:112"}, "properties": {"repobilityId": "75c9560546a4858b", "scanner": "scanner-primary", "fingerprint": "70591d1dff2c750a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-337f54bacb7ac316", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/snags/[id]/request-signoff/route.ts:46"}, "properties": {"repobilityId": "ff28e74d04d44785", "scanner": "scanner-primary", "fingerprint": "337f54bacb7ac316", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7aacfc1973188a10", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/api/snags/[id]/photos/route.ts:76"}, "properties": {"repobilityId": "f75d56a32ffad090", "scanner": "scanner-primary", "fingerprint": "7aacfc1973188a10", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0b106f36077de0c3", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/snags/[id]/photos/route.ts:104"}, "properties": {"repobilityId": "0af1718dd3799855", "scanner": "scanner-primary", "fingerprint": "0b106f36077de0c3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a592a6bac595ef30", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/api/snags/[id]/pdf/route.ts:75"}, "properties": {"repobilityId": "7fae94816991ef90", "scanner": "scanner-primary", "fingerprint": "a592a6bac595ef30", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-294dc2afc0efa33f", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/api/contacts/[id]/scorecard/route.ts:42"}, "properties": {"repobilityId": "b804aca4bb3166e0", "scanner": "scanner-primary", "fingerprint": "294dc2afc0efa33f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-21e64fb0daf88ec0", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/documents/[id]/route.ts:29"}, "properties": {"repobilityId": "6e7500674b36562f", "scanner": "scanner-primary", "fingerprint": "21e64fb0daf88ec0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c23d6cab899d8d8f", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/jobs/[id]/route.ts:217"}, "properties": {"repobilityId": "6e8252381d5225cf", "scanner": "scanner-primary", "fingerprint": "c23d6cab899d8d8f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7fae9f06ea8371b3", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/jobs/[id]/delay/route.ts:169"}, "properties": {"repobilityId": "8ecccf76cc70c9ce", "scanner": "scanner-primary", "fingerprint": "7fae9f06ea8371b3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5531031391076f67", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/api/jobs/[id]/actions/route.ts:102"}, "properties": {"repobilityId": "00e7f812aae5ad22", "scanner": "scanner-primary", "fingerprint": "5531031391076f67", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-de5e5be330823ed5", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/app/api/jobs/[id]/pull-forward/route.ts:76"}, "properties": {"repobilityId": "7a8597c6a8558285", "scanner": "scanner-primary", "fingerprint": "de5e5be330823ed5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a97498bfaaee6131", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/jobs/[id]/cascade/route.ts:37"}, "properties": {"repobilityId": "b979bb7ae03f40a2", "scanner": "scanner-primary", "fingerprint": "a97498bfaaee6131", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e6d63a3df898ffc9", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/sites/route.ts:45"}, "properties": {"repobilityId": "39605d4f251cf647", "scanner": "scanner-primary", "fingerprint": "e6d63a3df898ffc9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fc13d8885a8768b5", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/app/api/sites/[id]/route.ts:81"}, "properties": {"repobilityId": "3158b38d4deee578", "scanner": "scanner-primary", "fingerprint": "fc13d8885a8768b5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-55e12602bfea7c14", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/api/sites/[id]/plots/route.ts:82"}, "properties": {"repobilityId": "fc430f434ba47b38", "scanner": "scanner-primary", "fingerprint": "55e12602bfea7c14", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-34c01066892ad752", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/sites/[id]/budget-report/route.ts:241"}, "properties": {"repobilityId": "d35225011766d745", "scanner": "scanner-primary", "fingerprint": "34c01066892ad752", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-23c534bf287b83a7", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/api/sites/[id]/critical-path/route.ts:15"}, "properties": {"repobilityId": "3c8891d092bbedcd", "scanner": "scanner-primary", "fingerprint": "23c534bf287b83a7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2e6c032bcc0f3aca", "level": "none", "message": {"text": "Commented-code block (12 lines) in src/app/api/sites/[id]/material-burndown/route.ts:42"}, "properties": {"repobilityId": "052139e7bdb6fdec", "scanner": "scanner-primary", "fingerprint": "2e6c032bcc0f3aca", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1a8204c536e4cfaf", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/sites/[id]/heatmap/route.ts:107"}, "properties": {"repobilityId": "eed100fe7e923d5f", "scanner": "scanner-primary", "fingerprint": "1a8204c536e4cfaf", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1eb64a96b69bde87", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/app/api/sites/[id]/daily-brief/route.ts:213"}, "properties": {"repobilityId": "5a739f0b9389f9c4", "scanner": "scanner-primary", "fingerprint": "1eb64a96b69bde87", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-469b7a6d9e02a016", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/api/sites/[id]/plot-schedules/route.ts:35"}, "properties": {"repobilityId": "c643772d3cc47024", "scanner": "scanner-primary", "fingerprint": "469b7a6d9e02a016", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-870c3c359e08922b", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/sites/[id]/bulk-delay/route.ts:13"}, "properties": {"repobilityId": "58a031f2cbbc5dc2", "scanner": "scanner-primary", "fingerprint": "870c3c359e08922b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f40aea029bbbaf17", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/sites/[id]/rained-off/route.ts:76"}, "properties": {"repobilityId": "b5287afa21ed0e76", "scanner": "scanner-primary", "fingerprint": "f40aea029bbbaf17", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1dc3fd94bd792e46", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/api/sites/[id]/bulk-status/route.ts:13"}, "properties": {"repobilityId": "74ecbe3202e3125f", "scanner": "scanner-primary", "fingerprint": "1dc3fd94bd792e46", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-418e1d32638b1ce6", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/app/api/sites/[id]/contractor-comms/route.ts:198"}, "properties": {"repobilityId": "6f1c73395675a90f", "scanner": "scanner-primary", "fingerprint": "418e1d32638b1ce6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-acd501463aa5fa72", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/api/sites/[id]/contractor-comms/share/route.ts:35"}, "properties": {"repobilityId": "0cd32b96aa005e12", "scanner": "scanner-primary", "fingerprint": "acd501463aa5fa72", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f78b64280b21bb9c", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/api/sites/[id]/contractor-analysis/route.ts:46"}, "properties": {"repobilityId": "dc57e263fc983322", "scanner": "scanner-primary", "fingerprint": "f78b64280b21bb9c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-78fd90a1e5b8c09e", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/sites/[id]/handover-zip/route.ts:105"}, "properties": {"repobilityId": "acc6215a146fbee9", "scanner": "scanner-primary", "fingerprint": "78fd90a1e5b8c09e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-39b5375447c6e895", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/sites/[id]/delay-report/route.ts:8"}, "properties": {"repobilityId": "8f7a845b188ae0ee", "scanner": "scanner-primary", "fingerprint": "39b5375447c6e895", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b018b5021b6d96d9", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/sites/[id]/documents/route.ts:101"}, "properties": {"repobilityId": "b7f56c4a51eac231", "scanner": "scanner-primary", "fingerprint": "b018b5021b6d96d9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-30bd5da43424dbb5", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/sites/[id]/calendar.ics/route.ts:78"}, "properties": {"repobilityId": "8531ebeff3dde9ed", "scanner": "scanner-primary", "fingerprint": "30bd5da43424dbb5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9038fa896d133d02", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/api/sites/[id]/snag-report/route.ts:8"}, "properties": {"repobilityId": "af214c5c0990364e", "scanner": "scanner-primary", "fingerprint": "9038fa896d133d02", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ebca016ae4d71329", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/sites/[id]/cash-flow/route.ts:71"}, "properties": {"repobilityId": "3e1c387b6f3410b4", "scanner": "scanner-primary", "fingerprint": "ebca016ae4d71329", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b4d9937ff05dbc23", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/sites/[id]/story/route.ts:58"}, "properties": {"repobilityId": "fdb4aa5f58fb5961", "scanner": "scanner-primary", "fingerprint": "b4d9937ff05dbc23", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1ac356d497e882cc", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/sites/[id]/calendar/route.ts:39"}, "properties": {"repobilityId": "86860f54b0c26daf", "scanner": "scanner-primary", "fingerprint": "1ac356d497e882cc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bb024a2cc31a5a88", "level": "none", "message": {"text": "Commented-code block (11 lines) in src/app/(dashboard)/layout.tsx:22"}, "properties": {"repobilityId": "b777896afe911144", "scanner": "scanner-primary", "fingerprint": "bb024a2cc31a5a88", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8de1892839c77c5f", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/app/(dashboard)/settings/page.tsx:15"}, "properties": {"repobilityId": "46f3c99069aa940f", "scanner": "scanner-primary", "fingerprint": "8de1892839c77c5f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ca81c53f36ef25dc", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/(dashboard)/orders/page.tsx:21"}, "properties": {"repobilityId": "dc0097a4e309ad04", "scanner": "scanner-primary", "fingerprint": "ca81c53f36ef25dc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ab1ce66af22d95d7", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/app/(dashboard)/dashboard/page.tsx:24"}, "properties": {"repobilityId": "13f122ab6629fa10", "scanner": "scanner-primary", "fingerprint": "ab1ce66af22d95d7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a5a17948ae0ef24c", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/(dashboard)/portfolio/page.tsx:74"}, "properties": {"repobilityId": "9be640f92c08521a", "scanner": "scanner-primary", "fingerprint": "a5a17948ae0ef24c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b86d7123882cbe2e", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/(dashboard)/sites/[siteId]/page.tsx:147"}, "properties": {"repobilityId": "77133fabeebd46e6", "scanner": "scanner-primary", "fingerprint": "b86d7123882cbe2e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-72e22fda4d9d5c4b", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/forgot-password/page.tsx:21"}, "properties": {"repobilityId": "ed6d9fafcad74a69", "scanner": "scanner-primary", "fingerprint": "72e22fda4d9d5c4b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ee93da2ec13a51c4", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/progress/[token]/CustomerNotifyToggle.tsx:37"}, "properties": {"repobilityId": "c77dc853cd3ea4e8", "scanner": "scanner-primary", "fingerprint": "ee93da2ec13a51c4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b09afee96183cf72", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/progress/[token]/CustomerNotifyToggle.tsx:114"}, "properties": {"repobilityId": "511c006bbee3b0d9", "scanner": "scanner-primary", "fingerprint": "b09afee96183cf72", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-58ceca719f4e0fd0", "level": "none", "message": {"text": "Commented-code block (10 lines) in src/app/progress/[token]/page.tsx:42"}, "properties": {"repobilityId": "eaf16824c3a8a77b", "scanner": "scanner-primary", "fingerprint": "58ceca719f4e0fd0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6aa799d8090304b9", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/share/[token]/page.tsx:98"}, "properties": {"repobilityId": "9487f51ad29f5281", "scanner": "scanner-primary", "fingerprint": "6aa799d8090304b9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-757790cc8b9a3b2e", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/q/[plotId]/page.tsx:40"}, "properties": {"repobilityId": "31bb7431cd00411a", "scanner": "scanner-primary", "fingerprint": "757790cc8b9a3b2e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fa82975f0478b297", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/weather.ts:92"}, "properties": {"repobilityId": "660e2817ee0a1c4d", "scanner": "scanner-primary", "fingerprint": "fa82975f0478b297", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d9c84b6b59a6c328", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/auth.ts:61"}, "properties": {"repobilityId": "70e19f3e13699549", "scanner": "scanner-primary", "fingerprint": "d9c84b6b59a6c328", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-816cc6aee5e729e7", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/email.ts:45"}, "properties": {"repobilityId": "1b5260dacb4eb7ad", "scanner": "scanner-primary", "fingerprint": "816cc6aee5e729e7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cd64e7117d9cd647", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/global-loading.ts:15"}, "properties": {"repobilityId": "ee54d21e560be12a", "scanner": "scanner-primary", "fingerprint": "cd64e7117d9cd647", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-fd7532af6ce509a1", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/use-push.ts:97"}, "properties": {"repobilityId": "cde202f74faad4d6", "scanner": "scanner-primary", "fingerprint": "fd7532af6ce509a1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-75dd48812853699d", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/cascade.ts:177"}, "properties": {"repobilityId": "eb7cc3cfcb16e325", "scanner": "scanner-primary", "fingerprint": "75dd48812853699d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-80cc6291c221c90f", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/permissions.ts:138"}, "properties": {"repobilityId": "e60296c44958e551", "scanner": "scanner-primary", "fingerprint": "80cc6291c221c90f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c338335124f99167", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/inspection-dates.ts:127"}, "properties": {"repobilityId": "2e745a57a7b5258d", "scanner": "scanner-primary", "fingerprint": "c338335124f99167", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bccbd93b24ca0cc3", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/handover-pdf-renderers.ts:422"}, "properties": {"repobilityId": "19633c366c453ce7", "scanner": "scanner-primary", "fingerprint": "bccbd93b24ca0cc3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cd2d40817e2329a0", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/lateness.ts:66"}, "properties": {"repobilityId": "be908a9e9e56f309", "scanner": "scanner-primary", "fingerprint": "cd2d40817e2329a0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4393236801e43777", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/push.ts:116"}, "properties": {"repobilityId": "089b21d42eea6ee1", "scanner": "scanner-primary", "fingerprint": "4393236801e43777", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7fd29f4a5d517171", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/lib/parent-job.ts:92"}, "properties": {"repobilityId": "feef65f1bf20ae09", "scanner": "scanner-primary", "fingerprint": "7fd29f4a5d517171", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d6283baf43c7ac01", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/site-story.ts:422"}, "properties": {"repobilityId": "072106db0c39c8ae", "scanner": "scanner-primary", "fingerprint": "d6283baf43c7ac01", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c9f6fb6cb79083be", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/lib/schedule.ts:3"}, "properties": {"repobilityId": "ad280473e6910cf9", "scanner": "scanner-primary", "fingerprint": "c9f6fb6cb79083be", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ee80540a873597c4", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/template-validation.ts:182"}, "properties": {"repobilityId": "be7dd0dbdb4bf7b4", "scanner": "scanner-primary", "fingerprint": "ee80540a873597c4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bc7d4f7c020acaa4", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/lib/cron-auth.ts:23"}, "properties": {"repobilityId": "0735f442fae9c0ae", "scanner": "scanner-primary", "fingerprint": "bc7d4f7c020acaa4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e5849840c6c2d526", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/lib/handover-zip.ts:147"}, "properties": {"repobilityId": "29d2cbbad6f2f3b1", "scanner": "scanner-primary", "fingerprint": "e5849840c6c2d526", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f7c9a3819c3ae329", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/lib/apply-template-helpers.ts:106"}, "properties": {"repobilityId": "3aabedd150afe8d9", "scanner": "scanner-primary", "fingerprint": "f7c9a3819c3ae329", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bd72c31740d7374f", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/lib/lateness-event.ts:22"}, "properties": {"repobilityId": "e65e6ffcf2fe103d", "scanner": "scanner-primary", "fingerprint": "bd72c31740d7374f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-376092116b81dabf", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/patch-fetch.ts:13"}, "properties": {"repobilityId": "ff218696696a8bc9", "scanner": "scanner-primary", "fingerprint": "376092116b81dabf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-58f8b536be90c999", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/lib/order-invariants.ts:76"}, "properties": {"repobilityId": "3a30c305e90f948f", "scanner": "scanner-primary", "fingerprint": "58f8b536be90c999", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-84af2976379a9b2d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/urgent-order-email.ts:28"}, "properties": {"repobilityId": "676e739327f6bab1", "scanner": "scanner-primary", "fingerprint": "84af2976379a9b2d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e65380c804627254", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/template-preview.ts:49"}, "properties": {"repobilityId": "f0f5eef6b8b8987f", "scanner": "scanner-primary", "fingerprint": "e65380c804627254", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d2ad6599c1993335", "level": "none", "message": {"text": "Commented-code block (14 lines) in src/lib/share-token.ts:16"}, "properties": {"repobilityId": "36e4f8a8fd357f65", "scanner": "scanner-primary", "fingerprint": "d2ad6599c1993335", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-46db9ce452746c25", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/hooks/useReviewSupplierMaterials.tsx:101"}, "properties": {"repobilityId": "540cd5fd25c7548f", "scanner": "scanner-primary", "fingerprint": "46db9ce452746c25", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-79dc3caea4b8e571", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/hooks/useReviewSupplierMaterials.tsx:276"}, "properties": {"repobilityId": "55bd08f993a59609", "scanner": "scanner-primary", "fingerprint": "79dc3caea4b8e571", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-933681f603122ef1", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/hooks/useJobAction.tsx:158"}, "properties": {"repobilityId": "d7ba9d99ee339e65", "scanner": "scanner-primary", "fingerprint": "933681f603122ef1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-62323fa41cc61507", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/hooks/useJobAction.tsx:247"}, "properties": {"repobilityId": "7103025ecd1c7475", "scanner": "scanner-primary", "fingerprint": "62323fa41cc61507", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-eeab8666d3f93b8c", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/hooks/useOrderEmail.tsx:148"}, "properties": {"repobilityId": "301aad3979975cef", "scanner": "scanner-primary", "fingerprint": "eeab8666d3f93b8c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-23c16e52d1bff31c", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/hooks/useOrderEmail.tsx:314"}, "properties": {"repobilityId": "4fe1df023629b661", "scanner": "scanner-primary", "fingerprint": "23c16e52d1bff31c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-099e6c4234380b53", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/hooks/useOrderStatus.ts:110"}, "properties": {"repobilityId": "d96d2d55c6580cbd", "scanner": "scanner-primary", "fingerprint": "099e6c4234380b53", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8999981355831323", "level": "none", "message": {"text": "Commented-code block (10 lines) in src/hooks/usePlotCreation.ts:216"}, "properties": {"repobilityId": "986a8e54f3cac691", "scanner": "scanner-primary", "fingerprint": "8999981355831323", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d62ca24c2f0990cb", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/hooks/usePlotCreation.ts:393"}, "properties": {"repobilityId": "3b4366f2c90818ef", "scanner": "scanner-primary", "fingerprint": "d62ca24c2f0990cb", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}]}]}